summaryrefslogtreecommitdiff
path: root/drivers/media/platform/exynos5-is/fimc-is-interface.h
diff options
context:
space:
mode:
authorBeata Michalska <b.michalska@samsung.com>2014-07-14 19:32:39 +0200
committerSylwester Nawrocki <s.nawrocki@samsung.com>2014-11-27 03:41:31 -0800
commit6e00228239f29b965b72b0de228a2e576d45df6a (patch)
treebb80796f7676f55da1b83c28e30730c76db2f7da /drivers/media/platform/exynos5-is/fimc-is-interface.h
parent39f5c1f8e85d0d2348494745905f2b550107b04f (diff)
downloadlinux-3.10-6e00228239f29b965b72b0de228a2e576d45df6a.tar.gz
linux-3.10-6e00228239f29b965b72b0de228a2e576d45df6a.tar.bz2
linux-3.10-6e00228239f29b965b72b0de228a2e576d45df6a.zip
exynos3: fimc-is: Add support for FIMC IS on Exynos3250
The changes introduced provide support for FIMC-IS subsystem avalilable on Exynos3250. They cover the differences in both: the hardware itself as well as the subtle discrepancies between the firmwares controlling the FIMC IS on both SoCs. Regarding the above mentioned firmware variations: the initial driver has been extended with a simplified interface handling those variations thus living the core driver independent of the actual firmware version. Missing code paths have been added to cover handling some of the most probable failures/errors. Signed-off-by: Beata Michalska <b.michalska@samsung.com> Change-Id: Ie07312013a6a0ee14b88803360f0832d0ad4038d
Diffstat (limited to 'drivers/media/platform/exynos5-is/fimc-is-interface.h')
-rw-r--r--drivers/media/platform/exynos5-is/fimc-is-interface.h47
1 files changed, 29 insertions, 18 deletions
diff --git a/drivers/media/platform/exynos5-is/fimc-is-interface.h b/drivers/media/platform/exynos5-is/fimc-is-interface.h
index 44b641b26d3..20f0592878f 100644
--- a/drivers/media/platform/exynos5-is/fimc-is-interface.h
+++ b/drivers/media/platform/exynos5-is/fimc-is-interface.h
@@ -12,22 +12,12 @@
#define FIMC_IS_INTERFACE_H_
#include "fimc-is-core.h"
+#include "fimc-is-backend.h"
#define TRY_RECV_AWARE_COUNT 100
-#define ISDRV_VERSION 111
-
-enum interrupt_map {
- INTR_GENERAL = 0,
- INTR_ISP_FDONE = 1,
- INTR_SCC_FDONE = 2,
- INTR_DNR_FDONE = 3,
- INTR_SCP_FDONE = 4,
- INTR_ISP_YUV_DONE = 5,
- INTR_META_DONE = 6,
- INTR_SHOT_DONE = 7,
- INTR_MAX_MAP
-};
+#define EXYNOS5_ISDRV_VERSION 111
+#define EXYNOS3_ISDRV_VERSION 244
enum fimc_is_interface_state {
IS_IF_STATE_INIT,
@@ -64,20 +54,22 @@ struct fimc_is_interface {
unsigned long state;
void __iomem *regs;
- struct is_common_reg __iomem *com_regs;
+ void __iomem *shared_regs;
+ struct fimc_is_fw_data *fw_data;
/* Lock for writing into MCUCTL registers */
spinlock_t slock;
/* Lock for context state variable */
spinlock_t slock_state;
wait_queue_head_t irq_queue;
struct device *dev;
+ unsigned int drv_version;
/* Held while sending commands to FW */
struct mutex request_barrier;
-
+ struct work_struct shot_done_work;
enum streaming_state streaming;
enum processing_state processing;
enum pdown_ready_state pdown_ready;
-
+ struct shared_reg_map_entry *shared_regs_map;
struct fimc_is_msg reply;
int debug_cnt;
@@ -93,6 +85,15 @@ int fimc_is_itf_open_sensor(struct fimc_is_interface *itf,
unsigned int sensor_id,
unsigned int i2c_channel,
unsigned int sensor_ext);
+int fimc_is_itf_open_sensor_ext(struct fimc_is_interface *itf,
+ unsigned int instance,
+ unsigned int sensor_id,
+ unsigned int sensor_ext);
+int fimc_is_itf_sensor_close(struct fimc_is_interface *itf,
+ unsigned int instance);
+int fimc_is_itf_sensor_mode(struct fimc_is_interface *itf,
+ unsigned int instance,
+ unsigned int mode);
int fimc_is_itf_get_setfile_addr(struct fimc_is_interface *this,
unsigned int instance, unsigned int *setfile_addr);
int fimc_is_itf_load_setfile(struct fimc_is_interface *itf,
@@ -107,18 +108,28 @@ int fimc_is_itf_process_off(struct fimc_is_interface *itf,
unsigned int instance);
int fimc_is_itf_set_param(struct fimc_is_interface *this,
unsigned int instance,
+ unsigned int scenario,
unsigned int lindex,
unsigned int hindex);
int fimc_is_itf_preview_still(struct fimc_is_interface *itf,
unsigned int instance);
+int fimc_is_itf_capture_still(struct fimc_is_interface *itf,
+ unsigned int instance);
int fimc_is_itf_get_capability(struct fimc_is_interface *itf,
- unsigned int instance, unsigned int address);
-int fimc_is_itf_cfg_mem(struct fimc_is_interface *itf,
+ unsigned int instance, unsigned int address);
+int fimc_is_itf_change_sensor_mode(struct fimc_is_interface *itf,
+ unsigned int instance,
+ unsigned int mode);
+int fimc_is_itf_map_mem(struct fimc_is_interface *itf,
unsigned int instance, unsigned int address,
unsigned int size);
+int fimc_is_itf_unmap_mem(struct fimc_is_interface *itf,
+ unsigned int instance);
int fimc_is_itf_shot_nblk(struct fimc_is_interface *itf,
unsigned int instance, unsigned int bayer,
unsigned int shot, unsigned int fcount, unsigned int rcount);
int fimc_is_itf_power_down(struct fimc_is_interface *itf,
unsigned int instance);
+int fimc_is_itf_hw_running(struct fimc_is_interface *itf);
+void fimc_is_itf_notify_frame_done(struct fimc_is_interface *itf);
#endif