2 * Support for Sony IMX camera sensor.
4 * Copyright (c) 2014 Intel Corporation. All Rights Reserved.
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License version
8 * 2 as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26 /********************** settings for imx from vendor*********************/
27 static struct imx_reg imx208_1080p_30fps
[] = {
28 GROUPED_PARAMETER_HOLD_ENABLE
,
29 {IMX_8BIT
, 0x0305, 0x02}, /* PREPLLCK DIV */
30 {IMX_8BIT
, 0x0307, 0x54}, /* PLL MPY */
31 {IMX_8BIT
, 0x303C, 0x3C}, /* PLL oscillation stable wait time */
32 {IMX_8BIT
, 0x30A4, 0x02}, /* Default */
33 {IMX_8BIT
, 0x0112, 0x0A}, /* CCP_data_format : RAW 10bit */
34 {IMX_8BIT
, 0x0113, 0x0A}, /* CCP_data_format : RAW 10bit */
35 {IMX_8BIT
, 0x0340, 0x04}, /* frame length line [15:8] */
36 {IMX_8BIT
, 0x0341, 0xAA}, /* frame length line [7:0] */
37 {IMX_8BIT
, 0x0342, 0x08}, /* line length pck [15:8] */
38 {IMX_8BIT
, 0x0343, 0xC8}, /* line length pck [7:0] */
39 {IMX_8BIT
, 0x0344, 0x00}, /* x_addr_start[12:8] */
40 {IMX_8BIT
, 0x0345, 0x00}, /* x_addr_start[7:0] */
41 {IMX_8BIT
, 0x0346, 0x00}, /* y_addr_start[12:8] */
42 {IMX_8BIT
, 0x0347, 0x00}, /* y_addr_start[7:0] */
43 {IMX_8BIT
, 0x0348, 0x07}, /* x_addr_end [12:8] */
44 {IMX_8BIT
, 0x0349, 0x8F}, /* x_addr_end [7:0] */
45 {IMX_8BIT
, 0x034A, 0x04}, /* y_addr_end [12:8] */
46 {IMX_8BIT
, 0x034B, 0x47}, /* y_addr_end [7:0] */
47 {IMX_8BIT
, 0x034C, 0x07}, /* x_output_size [ 12:8] */
48 {IMX_8BIT
, 0x034D, 0x90}, /* x_output_size [7:0] */
49 {IMX_8BIT
, 0x034E, 0x04}, /* y_output_size [11:8] */
50 {IMX_8BIT
, 0x034F, 0x48}, /* y_output_size [7:0] */
51 {IMX_8BIT
, 0x0381, 0x01}, /* x_even_inc */
52 {IMX_8BIT
, 0x0383, 0x01}, /* x_odd_inc */
53 {IMX_8BIT
, 0x0385, 0x01}, /* y_even_inc */
54 {IMX_8BIT
, 0x0387, 0x01}, /* y_odd_inc */
55 {IMX_8BIT
, 0x3048, 0x00}, /* VMODEFDS binning operation */
56 {IMX_8BIT
, 0x304E, 0x0A}, /* VTPXCK_DIV */
57 {IMX_8BIT
, 0x3050, 0x02}, /* OPSYCK_DIV */
58 {IMX_8BIT
, 0x309B, 0x00}, /* RGDAFDSUMEN */
59 {IMX_8BIT
, 0x30D5, 0x00}, /* HADDEN ( binning ) */
60 {IMX_8BIT
, 0x3301, 0x01}, /* RGLANESEL */
61 {IMX_8BIT
, 0x3318, 0x61}, /* MIPI Global Timing */
62 {IMX_8BIT
, 0x0202, 0x01}, /* coarse integration time */
63 {IMX_8BIT
, 0x0203, 0x90}, /* coarse integration time */
64 {IMX_8BIT
, 0x0205, 0x00}, /* ana global gain */
69 static struct imx_reg imx208_1296x736_30fps
[] = {
70 GROUPED_PARAMETER_HOLD_ENABLE
,
71 {IMX_8BIT
, 0x0305, 0x02}, /* PREPLLCK DIV */
72 {IMX_8BIT
, 0x0307, 0x54}, /* PLL MPY */
73 {IMX_8BIT
, 0x303C, 0x3C}, /* PLL oscillation stable wait time */
74 {IMX_8BIT
, 0x30A4, 0x02}, /* Default */
75 {IMX_8BIT
, 0x0112, 0x0A}, /* CCP_data_format : RAW 10bit */
76 {IMX_8BIT
, 0x0113, 0x0A}, /* CCP_data_format : RAW 10bit */
77 {IMX_8BIT
, 0x0340, 0x04}, /* frame length line [15:8] */
78 {IMX_8BIT
, 0x0341, 0xAA}, /* frame length line [7:0] */
79 {IMX_8BIT
, 0x0342, 0x08}, /* line length pck [15:8] */
80 {IMX_8BIT
, 0x0343, 0xC8}, /* line length pck [7:0] */
81 {IMX_8BIT
, 0x0344, 0x01}, /* x_addr_start[12:8] */
82 {IMX_8BIT
, 0x0345, 0x40}, /* x_addr_start[7:0] */
83 {IMX_8BIT
, 0x0346, 0x00}, /* y_addr_start[12:8] */
84 {IMX_8BIT
, 0x0347, 0xB4}, /* y_addr_start[7:0] */
85 {IMX_8BIT
, 0x0348, 0x06}, /* x_addr_end [12:8] */
86 {IMX_8BIT
, 0x0349, 0x4F}, /* x_addr_end [7:0] */
87 {IMX_8BIT
, 0x034A, 0x03}, /* y_addr_end [12:8] */
88 {IMX_8BIT
, 0x034B, 0x93}, /* y_addr_end [7:0] */
89 {IMX_8BIT
, 0x034C, 0x05}, /* x_output_size [ 12:8] */
90 {IMX_8BIT
, 0x034D, 0x10}, /* x_output_size [7:0] */
91 {IMX_8BIT
, 0x034E, 0x02}, /* y_output_size [11:8] */
92 {IMX_8BIT
, 0x034F, 0xE0}, /* y_output_size [7:0] */
93 {IMX_8BIT
, 0x0381, 0x01}, /* x_even_inc */
94 {IMX_8BIT
, 0x0383, 0x01}, /* x_odd_inc */
95 {IMX_8BIT
, 0x0385, 0x01}, /* y_even_inc */
96 {IMX_8BIT
, 0x0387, 0x01}, /* y_odd_inc */
97 {IMX_8BIT
, 0x3048, 0x00}, /* VMODEFDS binning operation */
98 {IMX_8BIT
, 0x304E, 0x0A}, /* VTPXCK_DIV */
99 {IMX_8BIT
, 0x3050, 0x02}, /* OPSYCK_DIV */
100 {IMX_8BIT
, 0x309B, 0x00}, /* RGDAFDSUMEN */
101 {IMX_8BIT
, 0x30D5, 0x00}, /* HADDEN ( binning ) */
102 {IMX_8BIT
, 0x3301, 0x01}, /* RGLANESEL */
103 {IMX_8BIT
, 0x3318, 0x61}, /* MIPI Global Timing */
104 {IMX_8BIT
, 0x0202, 0x01}, /* coarse integration time */
105 {IMX_8BIT
, 0x0203, 0x90}, /* coarse integration time */
106 {IMX_8BIT
, 0x0205, 0x00}, /* ana global gain */
108 {IMX_TOK_TERM
, 0, 0},
111 static struct imx_reg imx208_1296x976_30fps
[] = {
112 GROUPED_PARAMETER_HOLD_ENABLE
,
113 {IMX_8BIT
, 0x0305, 0x02}, /* PREPLLCK DIV */
114 {IMX_8BIT
, 0x0307, 0x54}, /* PLL MPY */
115 {IMX_8BIT
, 0x303C, 0x3C}, /* PLL oscillation stable wait time */
116 {IMX_8BIT
, 0x30A4, 0x02}, /* Default */
117 {IMX_8BIT
, 0x0112, 0x0A}, /* CCP_data_format : RAW 10bit */
118 {IMX_8BIT
, 0x0113, 0x0A}, /* CCP_data_format : RAW 10bit */
119 {IMX_8BIT
, 0x0340, 0x04}, /* frame length line [15:8] */
120 {IMX_8BIT
, 0x0341, 0xAA}, /* frame length line [7:0] */
121 {IMX_8BIT
, 0x0342, 0x08}, /* line length pck [15:8] */
122 {IMX_8BIT
, 0x0343, 0xC8}, /* line length pck [7:0] */
123 {IMX_8BIT
, 0x0344, 0x01}, /* x_addr_start[12:8] */
124 {IMX_8BIT
, 0x0345, 0x40}, /* x_addr_start[7:0] */
125 {IMX_8BIT
, 0x0346, 0x00}, /* y_addr_start[12:8] */
126 {IMX_8BIT
, 0x0347, 0x3C}, /* y_addr_start[7:0] */
127 {IMX_8BIT
, 0x0348, 0x06}, /* x_addr_end [12:8] */
128 {IMX_8BIT
, 0x0349, 0x4F}, /* x_addr_end [7:0] */
129 {IMX_8BIT
, 0x034A, 0x04}, /* y_addr_end [12:8] */
130 {IMX_8BIT
, 0x034B, 0x0B}, /* y_addr_end [7:0] */
131 {IMX_8BIT
, 0x034C, 0x05}, /* x_output_size [ 12:8] */
132 {IMX_8BIT
, 0x034D, 0x10}, /* x_output_size [7:0] */
133 {IMX_8BIT
, 0x034E, 0x03}, /* y_output_size [11:8] */
134 {IMX_8BIT
, 0x034F, 0xD0}, /* y_output_size [7:0] */
135 {IMX_8BIT
, 0x0381, 0x01}, /* x_even_inc */
136 {IMX_8BIT
, 0x0383, 0x01}, /* x_odd_inc */
137 {IMX_8BIT
, 0x0385, 0x01}, /* y_even_inc */
138 {IMX_8BIT
, 0x0387, 0x01}, /* y_odd_inc */
139 {IMX_8BIT
, 0x3048, 0x00}, /* VMODEFDS binning operation */
140 {IMX_8BIT
, 0x304E, 0x0A}, /* VTPXCK_DIV */
141 {IMX_8BIT
, 0x3050, 0x02}, /* OPSYCK_DIV */
142 {IMX_8BIT
, 0x309B, 0x00}, /* RGDAFDSUMEN */
143 {IMX_8BIT
, 0x30D5, 0x00}, /* HADDEN ( binning ) */
144 {IMX_8BIT
, 0x3301, 0x01}, /* RGLANESEL */
145 {IMX_8BIT
, 0x3318, 0x61}, /* MIPI Global Timing */
146 {IMX_8BIT
, 0x0202, 0x01}, /* coarse integration time */
147 {IMX_8BIT
, 0x0203, 0x90}, /* coarse integration time */
148 {IMX_8BIT
, 0x0205, 0x00}, /* ana global gain */
150 {IMX_TOK_TERM
, 0, 0},
153 static struct imx_reg imx208_336x256_30fps
[] = {
154 GROUPED_PARAMETER_HOLD_ENABLE
,
155 {IMX_8BIT
, 0x0305, 0x02}, /* PREPLLCK DIV */
156 {IMX_8BIT
, 0x0307, 0x54}, /* PLL MPY */
157 {IMX_8BIT
, 0x303C, 0x3C}, /* PLL oscillation stable wait time */
158 {IMX_8BIT
, 0x30A4, 0x02}, /* Default */
159 {IMX_8BIT
, 0x0112, 0x0A}, /* CCP_data_format : RAW 10bit */
160 {IMX_8BIT
, 0x0113, 0x0A}, /* CCP_data_format : RAW 10bit */
161 {IMX_8BIT
, 0x0340, 0x04}, /* frame length line [15:8] */
162 {IMX_8BIT
, 0x0341, 0xAA}, /* frame length line [7:0] */
163 {IMX_8BIT
, 0x0342, 0x08}, /* line length pck [15:8] */
164 {IMX_8BIT
, 0x0343, 0xC8}, /* line length pck [7:0] */
165 {IMX_8BIT
, 0x0344, 0x02}, /* x_addr_start[12:8] */
166 {IMX_8BIT
, 0x0345, 0x78}, /* x_addr_start[7:0] */
167 {IMX_8BIT
, 0x0346, 0x01}, /* y_addr_start[12:8] */
168 {IMX_8BIT
, 0x0347, 0x24}, /* y_addr_start[7:0] */
169 {IMX_8BIT
, 0x0348, 0x05}, /* x_addr_end [12:8] */
170 {IMX_8BIT
, 0x0349, 0x17}, /* x_addr_end [7:0] */
171 {IMX_8BIT
, 0x034A, 0x03}, /* y_addr_end [12:8] */
172 {IMX_8BIT
, 0x034B, 0x23}, /* y_addr_end [7:0] */
173 {IMX_8BIT
, 0x034C, 0x01}, /* x_output_size [ 12:8] */
174 {IMX_8BIT
, 0x034D, 0x50}, /* x_output_size [7:0] */
175 {IMX_8BIT
, 0x034E, 0x01}, /* y_output_size [11:8] */
176 {IMX_8BIT
, 0x034F, 0x00}, /* y_output_size [7:0] */
177 {IMX_8BIT
, 0x0381, 0x01}, /* x_even_inc */
178 {IMX_8BIT
, 0x0383, 0x03}, /* x_odd_inc */
179 {IMX_8BIT
, 0x0385, 0x01}, /* y_even_inc */
180 {IMX_8BIT
, 0x0387, 0x03}, /* y_odd_inc */
181 {IMX_8BIT
, 0x3048, 0x01}, /* VMODEFDS binning operation */
182 {IMX_8BIT
, 0x304E, 0x0A}, /* VTPXCK_DIV */
183 {IMX_8BIT
, 0x3050, 0x02}, /* OPSYCK_DIV */
184 {IMX_8BIT
, 0x309B, 0x00}, /* RGDAFDSUMEN */
185 {IMX_8BIT
, 0x30D5, 0x03}, /* HADDEN ( binning ) */
186 {IMX_8BIT
, 0x3301, 0x01}, /* RGLANESEL */
187 {IMX_8BIT
, 0x3318, 0x66}, /* MIPI Global Timing */
188 {IMX_8BIT
, 0x0202, 0x01}, /* coarse integration time */
189 {IMX_8BIT
, 0x0203, 0x90}, /* coarse integration time */
190 {IMX_8BIT
, 0x0205, 0x00}, /* ana global gain */
192 {IMX_TOK_TERM
, 0, 0},
195 static struct imx_reg imx208_192x160_30fps
[] = {
196 GROUPED_PARAMETER_HOLD_ENABLE
,
197 {IMX_8BIT
, 0x0305, 0x02}, /* PREPLLCK DIV */
198 {IMX_8BIT
, 0x0307, 0x54}, /* PLL MPY */
199 {IMX_8BIT
, 0x303C, 0x3C}, /* PLL oscillation stable wait time */
200 {IMX_8BIT
, 0x30A4, 0x02}, /* Default */
201 {IMX_8BIT
, 0x0112, 0x0A}, /* CCP_data_format : RAW 10bit */
202 {IMX_8BIT
, 0x0113, 0x0A}, /* CCP_data_format : RAW 10bit */
203 {IMX_8BIT
, 0x0340, 0x04}, /* frame length line [15:8] */
204 {IMX_8BIT
, 0x0341, 0xAA}, /* frame length line [7:0] */
205 {IMX_8BIT
, 0x0342, 0x08}, /* line length pck [15:8] */
206 {IMX_8BIT
, 0x0343, 0xC8}, /* line length pck [7:0] */
207 {IMX_8BIT
, 0x0344, 0x02}, /* x_addr_start[12:8] */
208 {IMX_8BIT
, 0x0345, 0x48}, /* x_addr_start[7:0] */
209 {IMX_8BIT
, 0x0346, 0x00}, /* y_addr_start[12:8] */
210 {IMX_8BIT
, 0x0347, 0xE4}, /* y_addr_start[7:0] */
211 {IMX_8BIT
, 0x0348, 0x05}, /* x_addr_end [12:8] */
212 {IMX_8BIT
, 0x0349, 0x47}, /* x_addr_end [7:0] */
213 {IMX_8BIT
, 0x034A, 0x03}, /* y_addr_end [12:8] */
214 {IMX_8BIT
, 0x034B, 0x63}, /* y_addr_end [7:0] */
215 {IMX_8BIT
, 0x034C, 0x00}, /* x_output_size [ 12:8] */
216 {IMX_8BIT
, 0x034D, 0xC0}, /* x_output_size [7:0] */
217 {IMX_8BIT
, 0x034E, 0x00}, /* y_output_size [11:8] */
218 {IMX_8BIT
, 0x034F, 0xA0}, /* y_output_size [7:0] */
219 {IMX_8BIT
, 0x0381, 0x03}, /* x_even_inc */
220 {IMX_8BIT
, 0x0383, 0x05}, /* x_odd_inc */
221 {IMX_8BIT
, 0x0385, 0x03}, /* y_even_inc */
222 {IMX_8BIT
, 0x0387, 0x05}, /* y_odd_inc */
223 {IMX_8BIT
, 0x3048, 0x01}, /* VMODEFDS binning operation */
224 {IMX_8BIT
, 0x304E, 0x0A}, /* VTPXCK_DIV */
225 {IMX_8BIT
, 0x3050, 0x02}, /* OPSYCK_DIV */
226 {IMX_8BIT
, 0x309B, 0x00}, /* RGDAFDSUMEN */
227 {IMX_8BIT
, 0x30D5, 0x03}, /* HADDEN ( binning ) */
228 {IMX_8BIT
, 0x3301, 0x11}, /* RGLANESEL */
229 {IMX_8BIT
, 0x3318, 0x74}, /* MIPI Global Timing */
230 {IMX_8BIT
, 0x0202, 0x01}, /* coarse integration time */
231 {IMX_8BIT
, 0x0203, 0x90}, /* coarse integration time */
232 {IMX_8BIT
, 0x0205, 0x00}, /* ana global gain */
234 {IMX_TOK_TERM
, 0, 0},
236 /********************** settings for imx - reference *********************/
237 static struct imx_reg
const imx208_init_settings
[] = {
238 { IMX_TOK_TERM
, 0, 0}
241 struct imx_resolution imx208_res_preview
[] = {
243 .desc
= "imx208_1080p_30fps",
244 .regs
= imx208_1080p_30fps
,
250 .pixels_per_line
= 0x08C8,
251 .lines_per_frame
= 0x04AA,
263 .desc
= "imx208_1296x976_30fps",
264 .regs
= imx208_1296x976_30fps
,
270 .pixels_per_line
= 0x08C8,
271 .lines_per_frame
= 0x04AA,
283 .desc
= "imx208_1296x736_30fps",
284 .regs
= imx208_1296x736_30fps
,
290 .pixels_per_line
= 0x08C8,
291 .lines_per_frame
= 0x04AA,
303 .desc
= "imx208_336x256_30fps",
304 .regs
= imx208_336x256_30fps
,
310 .pixels_per_line
= 0x08C8,
311 .lines_per_frame
= 0x04AA,
323 .desc
= "imx208_192x160_30fps",
324 .regs
= imx208_192x160_30fps
,
330 .pixels_per_line
= 0x08C8,
331 .lines_per_frame
= 0x04AA,
344 struct imx_resolution imx208_res_still
[] = {
346 .desc
= "imx208_1080p_30fps",
347 .regs
= imx208_1080p_30fps
,
353 .pixels_per_line
= 0x08C8,
354 .lines_per_frame
= 0x04AA,
366 .desc
= "imx208_1296x976_30fps",
367 .regs
= imx208_1296x976_30fps
,
373 .pixels_per_line
= 0x08C8,
374 .lines_per_frame
= 0x04AA,
386 .desc
= "imx208_1296x736_30fps",
387 .regs
= imx208_1296x736_30fps
,
393 .pixels_per_line
= 0x08C8,
394 .lines_per_frame
= 0x04AA,
406 .desc
= "imx208_336x256_30fps",
407 .regs
= imx208_336x256_30fps
,
413 .pixels_per_line
= 0x08C8,
414 .lines_per_frame
= 0x04AA,
426 .desc
= "imx208_192x160_30fps",
427 .regs
= imx208_192x160_30fps
,
433 .pixels_per_line
= 0x08C8,
434 .lines_per_frame
= 0x04AA,
447 struct imx_resolution imx208_res_video
[] = {
449 .desc
= "imx208_1080p_30fps",
450 .regs
= imx208_1080p_30fps
,
456 .pixels_per_line
= 0x08C8,
457 .lines_per_frame
= 0x04AA,
469 .desc
= "imx208_1296x976_30fps",
470 .regs
= imx208_1296x976_30fps
,
476 .pixels_per_line
= 0x08C8,
477 .lines_per_frame
= 0x04AA,
489 .desc
= "imx208_1296x736_30fps",
490 .regs
= imx208_1296x736_30fps
,
496 .pixels_per_line
= 0x08C8,
497 .lines_per_frame
= 0x04AA,
509 .desc
= "imx208_336x256_30fps",
510 .regs
= imx208_336x256_30fps
,
516 .pixels_per_line
= 0x08C8,
517 .lines_per_frame
= 0x04AA,
529 .desc
= "imx208_192x160_30fps",
530 .regs
= imx208_192x160_30fps
,
536 .pixels_per_line
= 0x08C8,
537 .lines_per_frame
= 0x04AA,