1 #ifndef __RKCAMSYS_HEAR_H__
2 #define __RKCAMSYS_HEAR_H__
4 #include <linux/ioctl.h>
7 * C A M S Y S H E A D F I L E V E R S I O N
12 * 1) modify camsys_irqcnnt_t;
14 * 1) add support cif phy for marvin;
16 * 1) add clock information in struct camsys_devio_name_s;
18 * 1) add pwren control
20 * 1) add support mipi phy configuration;
21 * 2) add support io domain and mclk driver strength configuration;
23 1) add flash_trigger_out control
27 1) add dev_name in struct camsys_devio_name_s;
29 1) support external flash IC
31 1) add CamSys_SensorBit0_CifBit4 in enum camsys_cifio_e.
33 1) support sensor powerup sequence configurable.
35 1) powerup sequence type moved to common_head.h.
37 #define CAMSYS_HEAD_VERSION KERNEL_VERSION(0,0xd,0)
39 #define CAMSYS_MARVIN_DEVNAME "camsys_marvin"
40 #define CAMSYS_CIF0_DEVNAME "camsys_cif0"
41 #define CAMSYS_CIF1_DEVNAME "camsys_cif1"
43 #define CAMSYS_NAME_LEN 32
45 #define CAMSYS_DEVID_MARVIN 0x00000001
46 #define CAMSYS_DEVID_CIF_0 0x00000002
47 #define CAMSYS_DEVID_CIF_1 0x00000004
48 #define CAMSYS_DEVID_INTERNAL 0x000000FF
50 #define CAMSYS_DEVID_SENSOR_1A 0x01000000
51 #define CAMSYS_DEVID_SENSOR_1B 0x02000000
52 #define CAMSYS_DEVID_SENSOR_2 0x04000000
53 #define CAMSYS_DEVID_EXTERNAL 0xFF000000
54 #define CAMSYS_DEVID_EXTERNAL_NUM 8
56 #define CAMSYS_DEVCFG_FLASHLIGHT 0x00000001
57 #define CAMSYS_DEVCFG_PREFLASHLIGHT 0x00000002
58 #define CAMSYS_DEVCFG_SHUTTER 0x00000004
60 typedef struct camsys_irqsta_s {
61 unsigned int ris; //Raw interrupt status
62 unsigned int mis; //Masked interrupt status
65 typedef struct camsys_irqcnnt_s {
67 unsigned int timeout; //us
73 typedef enum camsys_mmap_type_e { //this type can be filled in mmap offset argument
74 CamSys_Mmap_RegisterMem,
80 typedef struct camsys_querymem_s {
81 camsys_mmap_type_t mem_type;
82 unsigned long mem_offset;
84 unsigned int mem_size;
87 typedef struct camsys_i2c_info_s {
88 unsigned char bus_num;
89 unsigned short slave_addr;
90 unsigned int reg_addr; //i2c device register address
91 unsigned int reg_size; //register address size
93 unsigned int val_size; //register value size
94 unsigned int i2cbuf_directly;
95 unsigned int i2cbuf_bytes;
96 unsigned int speed; //100000 == 100KHz
99 typedef struct camsys_reginfo_s {
100 unsigned int dev_mask;
101 unsigned int reg_offset;
105 typedef enum camsys_sysctrl_ops_e {
107 CamSys_Vdd_Start_Tag,
114 CamSys_Gpio_Start_Tag,
122 CamSys_Clk_Start_Tag,
126 CamSys_Phy_Start_Tag,
129 CamSys_Flash_Trigger_Start_Tag,
130 CamSys_Flash_Trigger,
131 CamSys_Flash_Trigger_End_Tag,
134 } camsys_sysctrl_ops_t;
136 typedef struct camsys_regulator_info_s {
137 unsigned char name[CAMSYS_NAME_LEN];
140 } camsys_regulator_info_t;
142 typedef struct camsys_gpio_info_s {
143 unsigned char name[CAMSYS_NAME_LEN];
145 } camsys_gpio_info_t;
147 typedef struct camsys_iommu_s{
150 unsigned long linear_addr;
154 typedef struct camsys_sysctrl_s {
155 unsigned int dev_mask;
156 camsys_sysctrl_ops_t ops;
159 unsigned int rev[20];
162 typedef struct camsys_flash_info_s {
163 unsigned char fl_drv_name[CAMSYS_NAME_LEN];
164 camsys_gpio_info_t fl; //fl_trig
165 camsys_gpio_info_t fl_en;
166 } camsys_flash_info_t;
168 typedef struct camsys_mipiphy_s {
169 unsigned int data_en_bit; // data lane enable bit;
170 unsigned int bit_rate; // Mbps/lane
171 unsigned int phy_index; // phy0,phy1
174 typedef enum camsys_fmt_e {
175 CamSys_Fmt_Yuv420_8b = 0x18,
176 CamSys_Fmt_Yuv420_10b = 0x19,
177 CamSys_Fmt_LegacyYuv420_8b = 0x19,
179 CamSys_Fmt_Yuv422_8b = 0x1e,
180 CamSys_Fmt_Yuv422_10b = 0x1f,
182 CamSys_Fmt_Raw_6b = 0x28,
183 CamSys_Fmt_Raw_7b = 0x29,
184 CamSys_Fmt_Raw_8b = 0x2a,
185 CamSys_Fmt_Raw_10b = 0x2b,
186 CamSys_Fmt_Raw_12b = 0x2c,
187 CamSys_Fmt_Raw_14b = 0x2d,
190 typedef enum camsys_cifio_e {
191 CamSys_SensorBit0_CifBit0 = 0x00,
192 CamSys_SensorBit0_CifBit2 = 0x01,
193 CamSys_SensorBit0_CifBit4 = 0x02,
196 typedef struct camsys_cifphy_s {
197 unsigned int cif_num;
199 camsys_cifio_t cifio;
203 typedef enum camsys_phy_type_e {
210 typedef struct camsys_extdev_phy_s {
211 camsys_phy_type_t type;
213 camsys_mipiphy_t mipi;
217 } camsys_extdev_phy_t;
219 typedef struct camsys_extdev_clk_s {
220 unsigned int in_rate;
221 unsigned int driver_strength; //0 - 3
222 } camsys_extdev_clk_t;
224 typedef struct camsys_devio_name_s {
225 unsigned char dev_name[CAMSYS_NAME_LEN];
228 camsys_regulator_info_t avdd; // sensor avdd power regulator name
229 camsys_regulator_info_t dovdd; // sensor dovdd power regulator name
230 camsys_regulator_info_t dvdd; // sensor dvdd power regulator name "NC" describe no regulator
231 camsys_regulator_info_t afvdd;
233 camsys_gpio_info_t pwrdn; // standby gpio name
234 camsys_gpio_info_t rst; // hard reset gpio name
235 camsys_gpio_info_t afpwr; // auto focus vcm driver ic power gpio name
236 camsys_gpio_info_t afpwrdn; // auto focus vcm driver ic standby gpio
237 camsys_gpio_info_t pwren; // power enable gpio name
240 camsys_flash_info_t fl;
242 camsys_extdev_phy_t phy;
243 camsys_extdev_clk_t clk;
245 unsigned int dev_cfg; // function bit mask configuration
246 } camsys_devio_name_t;
248 typedef struct camsys_version_s {
249 unsigned int drv_ver;
250 unsigned int head_ver;
254 * I O C T L C O D E S F O R R O C K C H I P S C A M S Y S D E V I C E S
257 #define CAMSYS_IOC_MAGIC 'M'
258 #define CAMSYS_IOC_MAXNR 14
260 #define CAMSYS_VERCHK _IOR(CAMSYS_IOC_MAGIC, 0, camsys_version_t)
262 #define CAMSYS_I2CRD _IOWR(CAMSYS_IOC_MAGIC, 1, camsys_i2c_info_t)
263 #define CAMSYS_I2CWR _IOW(CAMSYS_IOC_MAGIC, 2, camsys_i2c_info_t)
265 #define CAMSYS_SYSCTRL _IOW(CAMSYS_IOC_MAGIC, 3, camsys_sysctrl_t)
266 #define CAMSYS_REGRD _IOWR(CAMSYS_IOC_MAGIC, 4, camsys_reginfo_t)
267 #define CAMSYS_REGWR _IOW(CAMSYS_IOC_MAGIC, 5, camsys_reginfo_t)
268 #define CAMSYS_REGISTER_DEVIO _IOW(CAMSYS_IOC_MAGIC, 6, camsys_devio_name_t)
269 #define CAMSYS_DEREGISTER_DEVIO _IOW(CAMSYS_IOC_MAGIC, 7, unsigned int)
270 #define CAMSYS_IRQCONNECT _IOW(CAMSYS_IOC_MAGIC, 8, camsys_irqcnnt_t)
271 #define CAMSYS_IRQWAIT _IOR(CAMSYS_IOC_MAGIC, 9, camsys_irqsta_t)
272 #define CAMSYS_IRQDISCONNECT _IOW(CAMSYS_IOC_MAGIC, 10, camsys_irqcnnt_t)
274 #define CAMSYS_QUREYMEM _IOR(CAMSYS_IOC_MAGIC, 11, camsys_querymem_t)
275 #define CAMSYS_QUREYIOMMU _IOW(CAMSYS_IOC_MAGIC, 12, int)