camsys_drv: v0.7.0 camsys_head: v0.6.0
[firefly-linux-kernel-4.4.55.git] / include / media / camsys_head.h
1 #ifndef __RKCAMSYS_HEAR_H__
2 #define __RKCAMSYS_HEAR_H__
3
4 #include <linux/ioctl.h>
5
6 /*
7 *               C A M S Y S   H E A D   F I L E   V E R S I O N 
8 *
9 *v0.0.1:
10 *        1) test version;
11 *v0.0.2:
12 *        1) modify camsys_irqcnnt_t;
13 *v0.0.3:
14 *        1) add support cif phy for marvin;
15 *v0.0.4:
16 *        1) add clock information in struct camsys_devio_name_s;
17 *v0.0.5:
18 *        1) add pwren control
19 *v0.6.0:
20 *        1) add support mipi phy configuration;
21 *        2) add support io domain and mclk driver strength configuration;
22 */
23 #define CAMSYS_HEAD_VERSION           KERNEL_VERSION(0,6,0)
24
25 #define CAMSYS_MARVIN_DEVNAME         "camsys_marvin"           
26 #define CAMSYS_CIF0_DEVNAME           "camsys_cif0"
27 #define CAMSYS_CIF1_DEVNAME           "camsys_cif1"
28
29 #define CAMSYS_NAME_LEN               32
30   
31 #define CAMSYS_DEVID_MARVIN           0x00000001
32 #define CAMSYS_DEVID_CIF_0            0x00000002
33 #define CAMSYS_DEVID_CIF_1            0x00000004
34 #define CAMSYS_DEVID_INTERNAL         0x000000FF
35
36 #define CAMSYS_DEVID_SENSOR_1A        0x01000000
37 #define CAMSYS_DEVID_SENSOR_1B        0x02000000
38 #define CAMSYS_DEVID_SENSOR_2         0x04000000
39 #define CAMSYS_DEVID_EXTERNAL         0xFF000000
40 #define CAMSYS_DEVID_EXTERNAL_NUM     8
41
42 #define CAMSYS_DEVCFG_FLASHLIGHT          0x00000001
43 #define CAMSYS_DEVCFG_PREFLASHLIGHT       0x00000002
44 #define CAMSYS_DEVCFG_SHUTTER             0x00000004
45
46 typedef struct camsys_irqsta_s {
47     unsigned int ris;                 //Raw interrupt status
48     unsigned int mis;                 //Masked interrupt status
49 } camsys_irqsta_t;
50
51 typedef struct camsys_irqcnnt_s {
52     int          pid;
53     unsigned int timeout;             //us
54
55     unsigned int mis;
56     unsigned int icr;                 
57 } camsys_irqcnnt_t;
58
59 typedef enum camsys_mmap_type_e {     //this type can be filled in mmap offset argument      
60     CamSys_Mmap_RegisterMem,
61     CamSys_Mmap_I2cMem,
62
63     CamSys_Mmap_End
64 } camsys_mmap_type_t;
65
66 typedef struct camsys_querymem_s {
67     camsys_mmap_type_t      mem_type;
68     unsigned long           mem_offset;
69
70     unsigned int            mem_size;
71 } camsys_querymem_t;
72
73 typedef struct camsys_i2c_info_s {
74     unsigned char     bus_num;
75     unsigned short    slave_addr;
76     unsigned int      reg_addr;       //i2c device register address
77     unsigned int      reg_size;       //register address size
78     unsigned int      val;
79     unsigned int      val_size;       //register value size
80     unsigned int      i2cbuf_directly;
81     unsigned int      i2cbuf_bytes;   
82     unsigned int      speed;          //100000 == 100KHz
83 } camsys_i2c_info_t;
84
85 typedef struct camsys_reginfo_s {
86     unsigned int      dev_mask;
87     unsigned int      reg_offset;
88     unsigned int      val;
89 } camsys_reginfo_t;
90
91 typedef enum camsys_sysctrl_ops_e {
92
93     CamSys_Vdd_Start_Tag,
94     CamSys_Avdd,
95     CamSys_Dovdd,
96     CamSys_Dvdd,
97     CamSys_Afvdd,
98     CamSys_Vdd_End_Tag,
99
100     CamSys_Gpio_Start_Tag,    
101     CamSys_PwrDn,
102     CamSys_Rst,
103     CamSys_AfPwr,
104     CamSys_AfPwrDn,
105     CamSys_PwrEn,    
106     CamSys_Gpio_End_Tag,
107
108     CamSys_Clk_Start_Tag,    
109     CamSys_ClkIn,
110     CamSys_Clk_End_Tag,
111
112     CamSys_Phy_Start_Tag,    
113     CamSys_Phy,
114     CamSys_Phy_End_Tag
115     
116 } camsys_sysctrl_ops_t;
117
118 typedef struct camsys_regulator_info_s {
119     unsigned char     name[CAMSYS_NAME_LEN];
120     int               min_uv;
121     int               max_uv;
122 } camsys_regulator_info_t;
123
124 typedef struct camsys_gpio_info_s {
125     unsigned char     name[CAMSYS_NAME_LEN];
126     unsigned int      active;
127 } camsys_gpio_info_t;
128
129 typedef struct camsys_sysctrl_s {
130     unsigned int              dev_mask;
131     camsys_sysctrl_ops_t      ops;
132     unsigned int              on;
133
134     unsigned int              rev[20];
135 } camsys_sysctrl_t;
136
137 typedef struct camsys_flash_info_s {
138     camsys_gpio_info_t        fl;
139 } camsys_flash_info_t;
140
141 typedef struct camsys_mipiphy_s {
142     unsigned int                data_en_bit;        // data lane enable bit;
143     unsigned int                bit_rate;           // Mbps/lane
144     unsigned int                phy_index;          // phy0,phy1
145 } camsys_mipiphy_t;
146
147 typedef enum camsys_fmt_e {
148     CamSys_Fmt_Yuv420_8b = 0x18,
149     CamSys_Fmt_Yuv420_10b = 0x19,
150     CamSys_Fmt_LegacyYuv420_8b = 0x19,
151
152     CamSys_Fmt_Yuv422_8b = 0x1e,
153     CamSys_Fmt_Yuv422_10b = 0x1f,
154
155     CamSys_Fmt_Raw_6b = 0x28,
156     CamSys_Fmt_Raw_7b = 0x29,
157     CamSys_Fmt_Raw_8b = 0x2a,
158     CamSys_Fmt_Raw_10b = 0x2b,
159     CamSys_Fmt_Raw_12b = 0x2c,
160     CamSys_Fmt_Raw_14b = 0x2d,
161 } camsys_fmt_t;
162
163 typedef enum camsys_cifio_e {
164     CamSys_SensorBit0_CifBit0 = 0x00,
165     CamSys_SensorBit0_CifBit2 = 0x01,
166 } camsys_cifio_t;
167
168 typedef struct camsys_cifphy_s {
169     unsigned int                cif_num; 
170     camsys_fmt_t                fmt;
171     camsys_cifio_t              cifio;
172     
173 } camsys_cifphy_t;
174
175 typedef enum camsys_phy_type_e {
176     CamSys_Phy_Mipi,
177     CamSys_Phy_Cif,
178
179     CamSys_Phy_end
180 } camsys_phy_type_t;
181
182 typedef struct camsys_extdev_phy_s {
183     camsys_phy_type_t           type;
184     union {
185         camsys_mipiphy_t            mipi;
186         camsys_cifphy_t             cif;
187     } info;
188     
189 } camsys_extdev_phy_t;
190
191 typedef struct camsys_extdev_clk_s {
192     unsigned int in_rate;
193     unsigned int driver_strength;             //0 - 3
194 } camsys_extdev_clk_t;
195
196 typedef struct camsys_devio_name_s {
197     unsigned int                dev_id;
198     
199     camsys_regulator_info_t     avdd;         // sensor avdd power regulator name
200     camsys_regulator_info_t     dovdd;        // sensor dovdd power regulator name
201     camsys_regulator_info_t     dvdd;         // sensor dvdd power regulator name    "NC" describe no regulator
202     camsys_regulator_info_t     afvdd; 
203
204     camsys_gpio_info_t          pwrdn;        // standby gpio name
205     camsys_gpio_info_t          rst;          // hard reset gpio name 
206     camsys_gpio_info_t          afpwr;        // auto focus vcm driver ic power gpio name
207     camsys_gpio_info_t          afpwrdn;      // auto focus vcm driver ic standby gpio 
208     camsys_gpio_info_t          pwren;        // power enable gpio name  
209
210
211     camsys_flash_info_t         fl;
212
213     camsys_extdev_phy_t         phy;
214     camsys_extdev_clk_t         clk;
215     
216     unsigned int                dev_cfg;     // function bit mask configuration 
217 } camsys_devio_name_t;
218
219 typedef struct camsys_version_s {
220     unsigned int drv_ver;
221     unsigned int head_ver;
222 } camsys_version_t;
223
224 /*
225  *      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
226  *
227  */
228 #define CAMSYS_IOC_MAGIC  'M'
229 #define CAMSYS_IOC_MAXNR  14
230
231 #define CAMSYS_VERCHK            _IOR(CAMSYS_IOC_MAGIC,  0, camsys_version_t)
232
233 #define CAMSYS_I2CRD             _IOWR(CAMSYS_IOC_MAGIC,  1, camsys_i2c_info_t)
234 #define CAMSYS_I2CWR             _IOW(CAMSYS_IOC_MAGIC,  2, camsys_i2c_info_t)
235
236 #define CAMSYS_SYSCTRL           _IOW(CAMSYS_IOC_MAGIC,  3, camsys_sysctrl_t) 
237 #define CAMSYS_REGRD             _IOWR(CAMSYS_IOC_MAGIC,  4, camsys_reginfo_t)
238 #define CAMSYS_REGWR             _IOW(CAMSYS_IOC_MAGIC,  5, camsys_reginfo_t)
239 #define CAMSYS_REGISTER_DEVIO    _IOW(CAMSYS_IOC_MAGIC,  6, camsys_devio_name_t)
240 #define CAMSYS_DEREGISTER_DEVIO  _IOW(CAMSYS_IOC_MAGIC,  7, unsigned int)
241 #define CAMSYS_IRQCONNECT        _IOW(CAMSYS_IOC_MAGIC,  8, camsys_irqcnnt_t)
242 #define CAMSYS_IRQWAIT           _IOR(CAMSYS_IOC_MAGIC,  9, camsys_irqsta_t)
243 #define CAMSYS_IRQDISCONNECT     _IOW(CAMSYS_IOC_MAGIC,   10, camsys_irqcnnt_t)
244
245 #define CAMSYS_QUREYMEM          _IOR(CAMSYS_IOC_MAGIC,  11, camsys_querymem_t)
246 #endif