Merge remote-tracking branches 'regulator/fix/resume' and 'regulator/fix/stm32-vfrefb...
[linux-2.6-microblaze.git] / drivers / media / i2c / imx274.c
1 /*
2  * imx274.c - IMX274 CMOS Image Sensor driver
3  *
4  * Copyright (C) 2017, Leopard Imaging, Inc.
5  *
6  * Leon Luo <leonl@leopardimaging.com>
7  * Edwin Zou <edwinz@leopardimaging.com>
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms and conditions of the GNU General Public License,
11  * version 2, as published by the Free Software Foundation.
12  *
13  * This program is distributed in the hope it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
16  * more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20  */
21
22 #include <linux/clk.h>
23 #include <linux/delay.h>
24 #include <linux/gpio.h>
25 #include <linux/gpio/consumer.h>
26 #include <linux/i2c.h>
27 #include <linux/init.h>
28 #include <linux/module.h>
29 #include <linux/of_gpio.h>
30 #include <linux/regmap.h>
31 #include <linux/slab.h>
32 #include <linux/v4l2-mediabus.h>
33 #include <linux/videodev2.h>
34
35 #include <media/v4l2-ctrls.h>
36 #include <media/v4l2-device.h>
37 #include <media/v4l2-subdev.h>
38
39 /*
40  * See "SHR, SVR Setting" in datasheet
41  */
42 #define IMX274_DEFAULT_FRAME_LENGTH             (4550)
43 #define IMX274_MAX_FRAME_LENGTH                 (0x000fffff)
44
45 /*
46  * See "Frame Rate Adjustment" in datasheet
47  */
48 #define IMX274_PIXCLK_CONST1                    (72000000)
49 #define IMX274_PIXCLK_CONST2                    (1000000)
50
51 /*
52  * The input gain is shifted by IMX274_GAIN_SHIFT to get
53  * decimal number. The real gain is
54  * (float)input_gain_value / (1 << IMX274_GAIN_SHIFT)
55  */
56 #define IMX274_GAIN_SHIFT                       (8)
57 #define IMX274_GAIN_SHIFT_MASK                  ((1 << IMX274_GAIN_SHIFT) - 1)
58
59 /*
60  * See "Analog Gain" and "Digital Gain" in datasheet
61  * min gain is 1X
62  * max gain is calculated based on IMX274_GAIN_REG_MAX
63  */
64 #define IMX274_GAIN_REG_MAX                     (1957)
65 #define IMX274_MIN_GAIN                         (0x01 << IMX274_GAIN_SHIFT)
66 #define IMX274_MAX_ANALOG_GAIN                  ((2048 << IMX274_GAIN_SHIFT)\
67                                         / (2048 - IMX274_GAIN_REG_MAX))
68 #define IMX274_MAX_DIGITAL_GAIN                 (8)
69 #define IMX274_DEF_GAIN                         (20 << IMX274_GAIN_SHIFT)
70 #define IMX274_GAIN_CONST                       (2048) /* for gain formula */
71
72 /*
73  * 1 line time in us = (HMAX / 72), minimal is 4 lines
74  */
75 #define IMX274_MIN_EXPOSURE_TIME                (4 * 260 / 72)
76
77 #define IMX274_DEFAULT_MODE                     IMX274_MODE_3840X2160
78 #define IMX274_MAX_WIDTH                        (3840)
79 #define IMX274_MAX_HEIGHT                       (2160)
80 #define IMX274_MAX_FRAME_RATE                   (120)
81 #define IMX274_MIN_FRAME_RATE                   (5)
82 #define IMX274_DEF_FRAME_RATE                   (60)
83
84 /*
85  * register SHR is limited to (SVR value + 1) x VMAX value - 4
86  */
87 #define IMX274_SHR_LIMIT_CONST                  (4)
88
89 /*
90  * Constants for sensor reset delay
91  */
92 #define IMX274_RESET_DELAY1                     (2000)
93 #define IMX274_RESET_DELAY2                     (2200)
94
95 /*
96  * shift and mask constants
97  */
98 #define IMX274_SHIFT_8_BITS                     (8)
99 #define IMX274_SHIFT_16_BITS                    (16)
100 #define IMX274_MASK_LSB_2_BITS                  (0x03)
101 #define IMX274_MASK_LSB_3_BITS                  (0x07)
102 #define IMX274_MASK_LSB_4_BITS                  (0x0f)
103 #define IMX274_MASK_LSB_8_BITS                  (0x00ff)
104
105 #define DRIVER_NAME "IMX274"
106
107 /*
108  * IMX274 register definitions
109  */
110 #define IMX274_FRAME_LENGTH_ADDR_1              0x30FA /* VMAX, MSB */
111 #define IMX274_FRAME_LENGTH_ADDR_2              0x30F9 /* VMAX */
112 #define IMX274_FRAME_LENGTH_ADDR_3              0x30F8 /* VMAX, LSB */
113 #define IMX274_SVR_REG_MSB                      0x300F /* SVR */
114 #define IMX274_SVR_REG_LSB                      0x300E /* SVR */
115 #define IMX274_HMAX_REG_MSB                     0x30F7 /* HMAX */
116 #define IMX274_HMAX_REG_LSB                     0x30F6 /* HMAX */
117 #define IMX274_COARSE_TIME_ADDR_MSB             0x300D /* SHR */
118 #define IMX274_COARSE_TIME_ADDR_LSB             0x300C /* SHR */
119 #define IMX274_ANALOG_GAIN_ADDR_LSB             0x300A /* ANALOG GAIN LSB */
120 #define IMX274_ANALOG_GAIN_ADDR_MSB             0x300B /* ANALOG GAIN MSB */
121 #define IMX274_DIGITAL_GAIN_REG                 0x3012 /* Digital Gain */
122 #define IMX274_VFLIP_REG                        0x301A /* VERTICAL FLIP */
123 #define IMX274_TEST_PATTERN_REG                 0x303D /* TEST PATTERN */
124 #define IMX274_STANDBY_REG                      0x3000 /* STANDBY */
125
126 #define IMX274_TABLE_WAIT_MS                    0
127 #define IMX274_TABLE_END                        1
128
129 /*
130  * imx274 I2C operation related structure
131  */
132 struct reg_8 {
133         u16 addr;
134         u8 val;
135 };
136
137 static const struct regmap_config imx274_regmap_config = {
138         .reg_bits = 16,
139         .val_bits = 8,
140         .cache_type = REGCACHE_RBTREE,
141 };
142
143 enum imx274_mode {
144         IMX274_MODE_3840X2160,
145         IMX274_MODE_1920X1080,
146         IMX274_MODE_1280X720,
147
148         IMX274_MODE_START_STREAM_1,
149         IMX274_MODE_START_STREAM_2,
150         IMX274_MODE_START_STREAM_3,
151         IMX274_MODE_START_STREAM_4,
152         IMX274_MODE_STOP_STREAM
153 };
154
155 /*
156  * imx274 format related structure
157  */
158 struct imx274_frmfmt {
159         u32 mbus_code;
160         enum v4l2_colorspace colorspace;
161         struct v4l2_frmsize_discrete size;
162         enum imx274_mode mode;
163 };
164
165 /*
166  * imx274 test pattern related structure
167  */
168 enum {
169         TEST_PATTERN_DISABLED = 0,
170         TEST_PATTERN_ALL_000H,
171         TEST_PATTERN_ALL_FFFH,
172         TEST_PATTERN_ALL_555H,
173         TEST_PATTERN_ALL_AAAH,
174         TEST_PATTERN_VSP_5AH, /* VERTICAL STRIPE PATTERN 555H/AAAH */
175         TEST_PATTERN_VSP_A5H, /* VERTICAL STRIPE PATTERN AAAH/555H */
176         TEST_PATTERN_VSP_05H, /* VERTICAL STRIPE PATTERN 000H/555H */
177         TEST_PATTERN_VSP_50H, /* VERTICAL STRIPE PATTERN 555H/000H */
178         TEST_PATTERN_VSP_0FH, /* VERTICAL STRIPE PATTERN 000H/FFFH */
179         TEST_PATTERN_VSP_F0H, /* VERTICAL STRIPE PATTERN FFFH/000H */
180         TEST_PATTERN_H_COLOR_BARS,
181         TEST_PATTERN_V_COLOR_BARS,
182 };
183
184 static const char * const tp_qmenu[] = {
185         "Disabled",
186         "All 000h Pattern",
187         "All FFFh Pattern",
188         "All 555h Pattern",
189         "All AAAh Pattern",
190         "Vertical Stripe (555h / AAAh)",
191         "Vertical Stripe (AAAh / 555h)",
192         "Vertical Stripe (000h / 555h)",
193         "Vertical Stripe (555h / 000h)",
194         "Vertical Stripe (000h / FFFh)",
195         "Vertical Stripe (FFFh / 000h)",
196         "Horizontal Color Bars",
197         "Vertical Color Bars",
198 };
199
200 /*
201  * All-pixel scan mode (10-bit)
202  * imx274 mode1(refer to datasheet) register configuration with
203  * 3840x2160 resolution, raw10 data and mipi four lane output
204  */
205 static const struct reg_8 imx274_mode1_3840x2160_raw10[] = {
206         {0x3004, 0x01},
207         {0x3005, 0x01},
208         {0x3006, 0x00},
209         {0x3007, 0x02},
210
211         {0x3018, 0xA2}, /* output XVS, HVS */
212
213         {0x306B, 0x05},
214         {0x30E2, 0x01},
215         {0x30F6, 0x07}, /* HMAX, 263 */
216         {0x30F7, 0x01}, /* HMAX */
217
218         {0x30dd, 0x01}, /* crop to 2160 */
219         {0x30de, 0x06},
220         {0x30df, 0x00},
221         {0x30e0, 0x12},
222         {0x30e1, 0x00},
223         {0x3037, 0x01}, /* to crop to 3840 */
224         {0x3038, 0x0c},
225         {0x3039, 0x00},
226         {0x303a, 0x0c},
227         {0x303b, 0x0f},
228
229         {0x30EE, 0x01},
230         {0x3130, 0x86},
231         {0x3131, 0x08},
232         {0x3132, 0x7E},
233         {0x3133, 0x08},
234         {0x3342, 0x0A},
235         {0x3343, 0x00},
236         {0x3344, 0x16},
237         {0x3345, 0x00},
238         {0x33A6, 0x01},
239         {0x3528, 0x0E},
240         {0x3554, 0x1F},
241         {0x3555, 0x01},
242         {0x3556, 0x01},
243         {0x3557, 0x01},
244         {0x3558, 0x01},
245         {0x3559, 0x00},
246         {0x355A, 0x00},
247         {0x35BA, 0x0E},
248         {0x366A, 0x1B},
249         {0x366B, 0x1A},
250         {0x366C, 0x19},
251         {0x366D, 0x17},
252         {0x3A41, 0x08},
253
254         {IMX274_TABLE_END, 0x00}
255 };
256
257 /*
258  * Horizontal/vertical 2/2-line binning
259  * (Horizontal and vertical weightedbinning, 10-bit)
260  * imx274 mode3(refer to datasheet) register configuration with
261  * 1920x1080 resolution, raw10 data and mipi four lane output
262  */
263 static const struct reg_8 imx274_mode3_1920x1080_raw10[] = {
264         {0x3004, 0x02},
265         {0x3005, 0x21},
266         {0x3006, 0x00},
267         {0x3007, 0x11},
268
269         {0x3018, 0xA2}, /* output XVS, HVS */
270
271         {0x306B, 0x05},
272         {0x30E2, 0x02},
273
274         {0x30F6, 0x04}, /* HMAX, 260 */
275         {0x30F7, 0x01}, /* HMAX */
276
277         {0x30dd, 0x01}, /* to crop to 1920x1080 */
278         {0x30de, 0x05},
279         {0x30df, 0x00},
280         {0x30e0, 0x04},
281         {0x30e1, 0x00},
282         {0x3037, 0x01},
283         {0x3038, 0x0c},
284         {0x3039, 0x00},
285         {0x303a, 0x0c},
286         {0x303b, 0x0f},
287
288         {0x30EE, 0x01},
289         {0x3130, 0x4E},
290         {0x3131, 0x04},
291         {0x3132, 0x46},
292         {0x3133, 0x04},
293         {0x3342, 0x0A},
294         {0x3343, 0x00},
295         {0x3344, 0x1A},
296         {0x3345, 0x00},
297         {0x33A6, 0x01},
298         {0x3528, 0x0E},
299         {0x3554, 0x00},
300         {0x3555, 0x01},
301         {0x3556, 0x01},
302         {0x3557, 0x01},
303         {0x3558, 0x01},
304         {0x3559, 0x00},
305         {0x355A, 0x00},
306         {0x35BA, 0x0E},
307         {0x366A, 0x1B},
308         {0x366B, 0x1A},
309         {0x366C, 0x19},
310         {0x366D, 0x17},
311         {0x3A41, 0x08},
312
313         {IMX274_TABLE_END, 0x00}
314 };
315
316 /*
317  * Vertical 2/3 subsampling binning horizontal 3 binning
318  * imx274 mode5(refer to datasheet) register configuration with
319  * 1280x720 resolution, raw10 data and mipi four lane output
320  */
321 static const struct reg_8 imx274_mode5_1280x720_raw10[] = {
322         {0x3004, 0x03},
323         {0x3005, 0x31},
324         {0x3006, 0x00},
325         {0x3007, 0x09},
326
327         {0x3018, 0xA2}, /* output XVS, HVS */
328
329         {0x306B, 0x05},
330         {0x30E2, 0x03},
331
332         {0x30F6, 0x04}, /* HMAX, 260 */
333         {0x30F7, 0x01}, /* HMAX */
334
335         {0x30DD, 0x01},
336         {0x30DE, 0x07},
337         {0x30DF, 0x00},
338         {0x40E0, 0x04},
339         {0x30E1, 0x00},
340         {0x3030, 0xD4},
341         {0x3031, 0x02},
342         {0x3032, 0xD0},
343         {0x3033, 0x02},
344
345         {0x30EE, 0x01},
346         {0x3130, 0xE2},
347         {0x3131, 0x02},
348         {0x3132, 0xDE},
349         {0x3133, 0x02},
350         {0x3342, 0x0A},
351         {0x3343, 0x00},
352         {0x3344, 0x1B},
353         {0x3345, 0x00},
354         {0x33A6, 0x01},
355         {0x3528, 0x0E},
356         {0x3554, 0x00},
357         {0x3555, 0x01},
358         {0x3556, 0x01},
359         {0x3557, 0x01},
360         {0x3558, 0x01},
361         {0x3559, 0x00},
362         {0x355A, 0x00},
363         {0x35BA, 0x0E},
364         {0x366A, 0x1B},
365         {0x366B, 0x19},
366         {0x366C, 0x17},
367         {0x366D, 0x17},
368         {0x3A41, 0x04},
369
370         {IMX274_TABLE_END, 0x00}
371 };
372
373 /*
374  * imx274 first step register configuration for
375  * starting stream
376  */
377 static const struct reg_8 imx274_start_1[] = {
378         {IMX274_STANDBY_REG, 0x12},
379         {IMX274_TABLE_END, 0x00}
380 };
381
382 /*
383  * imx274 second step register configuration for
384  * starting stream
385  */
386 static const struct reg_8 imx274_start_2[] = {
387         {0x3120, 0xF0}, /* clock settings */
388         {0x3121, 0x00}, /* clock settings */
389         {0x3122, 0x02}, /* clock settings */
390         {0x3129, 0x9C}, /* clock settings */
391         {0x312A, 0x02}, /* clock settings */
392         {0x312D, 0x02}, /* clock settings */
393
394         {0x310B, 0x00},
395
396         /* PLSTMG */
397         {0x304C, 0x00}, /* PLSTMG01 */
398         {0x304D, 0x03},
399         {0x331C, 0x1A},
400         {0x331D, 0x00},
401         {0x3502, 0x02},
402         {0x3529, 0x0E},
403         {0x352A, 0x0E},
404         {0x352B, 0x0E},
405         {0x3538, 0x0E},
406         {0x3539, 0x0E},
407         {0x3553, 0x00},
408         {0x357D, 0x05},
409         {0x357F, 0x05},
410         {0x3581, 0x04},
411         {0x3583, 0x76},
412         {0x3587, 0x01},
413         {0x35BB, 0x0E},
414         {0x35BC, 0x0E},
415         {0x35BD, 0x0E},
416         {0x35BE, 0x0E},
417         {0x35BF, 0x0E},
418         {0x366E, 0x00},
419         {0x366F, 0x00},
420         {0x3670, 0x00},
421         {0x3671, 0x00},
422
423         /* PSMIPI */
424         {0x3304, 0x32}, /* PSMIPI1 */
425         {0x3305, 0x00},
426         {0x3306, 0x32},
427         {0x3307, 0x00},
428         {0x3590, 0x32},
429         {0x3591, 0x00},
430         {0x3686, 0x32},
431         {0x3687, 0x00},
432
433         {IMX274_TABLE_END, 0x00}
434 };
435
436 /*
437  * imx274 third step register configuration for
438  * starting stream
439  */
440 static const struct reg_8 imx274_start_3[] = {
441         {IMX274_STANDBY_REG, 0x00},
442         {0x303E, 0x02}, /* SYS_MODE = 2 */
443         {IMX274_TABLE_END, 0x00}
444 };
445
446 /*
447  * imx274 forth step register configuration for
448  * starting stream
449  */
450 static const struct reg_8 imx274_start_4[] = {
451         {0x30F4, 0x00},
452         {0x3018, 0xA2}, /* XHS VHS OUTUPT */
453         {IMX274_TABLE_END, 0x00}
454 };
455
456 /*
457  * imx274 register configuration for stoping stream
458  */
459 static const struct reg_8 imx274_stop[] = {
460         {IMX274_STANDBY_REG, 0x01},
461         {IMX274_TABLE_END, 0x00}
462 };
463
464 /*
465  * imx274 disable test pattern register configuration
466  */
467 static const struct reg_8 imx274_tp_disabled[] = {
468         {0x303C, 0x00},
469         {0x377F, 0x00},
470         {0x3781, 0x00},
471         {0x370B, 0x00},
472         {IMX274_TABLE_END, 0x00}
473 };
474
475 /*
476  * imx274 test pattern register configuration
477  * reg 0x303D defines the test pattern modes
478  */
479 static const struct reg_8 imx274_tp_regs[] = {
480         {0x303C, 0x11},
481         {0x370E, 0x01},
482         {0x377F, 0x01},
483         {0x3781, 0x01},
484         {0x370B, 0x11},
485         {IMX274_TABLE_END, 0x00}
486 };
487
488 static const struct reg_8 *mode_table[] = {
489         [IMX274_MODE_3840X2160]         = imx274_mode1_3840x2160_raw10,
490         [IMX274_MODE_1920X1080]         = imx274_mode3_1920x1080_raw10,
491         [IMX274_MODE_1280X720]          = imx274_mode5_1280x720_raw10,
492
493         [IMX274_MODE_START_STREAM_1]    = imx274_start_1,
494         [IMX274_MODE_START_STREAM_2]    = imx274_start_2,
495         [IMX274_MODE_START_STREAM_3]    = imx274_start_3,
496         [IMX274_MODE_START_STREAM_4]    = imx274_start_4,
497         [IMX274_MODE_STOP_STREAM]       = imx274_stop,
498 };
499
500 /*
501  * imx274 format related structure
502  */
503 static const struct imx274_frmfmt imx274_formats[] = {
504         {MEDIA_BUS_FMT_SRGGB10_1X10, V4L2_COLORSPACE_SRGB, {3840, 2160},
505                 IMX274_MODE_3840X2160},
506         {MEDIA_BUS_FMT_SRGGB10_1X10, V4L2_COLORSPACE_SRGB, {1920, 1080},
507                 IMX274_MODE_1920X1080},
508         {MEDIA_BUS_FMT_SRGGB10_1X10, V4L2_COLORSPACE_SRGB, {1280, 720},
509                 IMX274_MODE_1280X720},
510 };
511
512 /*
513  * minimal frame length for each mode
514  * refer to datasheet section "Frame Rate Adjustment (CSI-2)"
515  */
516 static const int min_frame_len[] = {
517         4550, /* mode 1, 4K */
518         2310, /* mode 3, 1080p */
519         2310 /* mode 5, 720p */
520 };
521
522 /*
523  * minimal numbers of SHR register
524  * refer to datasheet table "Shutter Setting (CSI-2)"
525  */
526 static const int min_SHR[] = {
527         12, /* mode 1, 4K */
528         8, /* mode 3, 1080p */
529         8 /* mode 5, 720p */
530 };
531
532 static const int max_frame_rate[] = {
533         60, /* mode 1 , 4K */
534         120, /* mode 3, 1080p */
535         120 /* mode 5, 720p */
536 };
537
538 /*
539  * Number of clocks per internal offset period
540  * a constant based on mode
541  * refer to section "Integration Time in Each Readout Drive Mode (CSI-2)"
542  * in the datasheet
543  * for the implemented 3 modes, it happens to be the same number
544  */
545 static const int nocpiop[] = {
546         112, /* mode 1 , 4K */
547         112, /* mode 3, 1080p */
548         112 /* mode 5, 720p */
549 };
550
551 /*
552  * struct imx274_ctrls - imx274 ctrl structure
553  * @handler: V4L2 ctrl handler structure
554  * @exposure: Pointer to expsure ctrl structure
555  * @gain: Pointer to gain ctrl structure
556  * @vflip: Pointer to vflip ctrl structure
557  * @test_pattern: Pointer to test pattern ctrl structure
558  */
559 struct imx274_ctrls {
560         struct v4l2_ctrl_handler handler;
561         struct v4l2_ctrl *exposure;
562         struct v4l2_ctrl *gain;
563         struct v4l2_ctrl *vflip;
564         struct v4l2_ctrl *test_pattern;
565 };
566
567 /*
568  * struct stim274 - imx274 device structure
569  * @sd: V4L2 subdevice structure
570  * @pd: Media pad structure
571  * @client: Pointer to I2C client
572  * @ctrls: imx274 control structure
573  * @format: V4L2 media bus frame format structure
574  * @frame_rate: V4L2 frame rate structure
575  * @regmap: Pointer to regmap structure
576  * @reset_gpio: Pointer to reset gpio
577  * @lock: Mutex structure
578  * @mode_index: Resolution mode index
579  */
580 struct stimx274 {
581         struct v4l2_subdev sd;
582         struct media_pad pad;
583         struct i2c_client *client;
584         struct imx274_ctrls ctrls;
585         struct v4l2_mbus_framefmt format;
586         struct v4l2_fract frame_interval;
587         struct regmap *regmap;
588         struct gpio_desc *reset_gpio;
589         struct mutex lock; /* mutex lock for operations */
590         u32 mode_index;
591 };
592
593 /*
594  * Function declaration
595  */
596 static int imx274_set_gain(struct stimx274 *priv, struct v4l2_ctrl *ctrl);
597 static int imx274_set_exposure(struct stimx274 *priv, int val);
598 static int imx274_set_vflip(struct stimx274 *priv, int val);
599 static int imx274_set_test_pattern(struct stimx274 *priv, int val);
600 static int imx274_set_frame_interval(struct stimx274 *priv,
601                                      struct v4l2_fract frame_interval);
602
603 static inline void msleep_range(unsigned int delay_base)
604 {
605         usleep_range(delay_base * 1000, delay_base * 1000 + 500);
606 }
607
608 /*
609  * v4l2_ctrl and v4l2_subdev related operations
610  */
611 static inline struct v4l2_subdev *ctrl_to_sd(struct v4l2_ctrl *ctrl)
612 {
613         return &container_of(ctrl->handler,
614                              struct stimx274, ctrls.handler)->sd;
615 }
616
617 static inline struct stimx274 *to_imx274(struct v4l2_subdev *sd)
618 {
619         return container_of(sd, struct stimx274, sd);
620 }
621
622 /*
623  * imx274_regmap_util_write_table_8 - Function for writing register table
624  * @regmap: Pointer to device reg map structure
625  * @table: Table containing register values
626  * @wait_ms_addr: Flag for performing delay
627  * @end_addr: Flag for incating end of table
628  *
629  * This is used to write register table into sensor's reg map.
630  *
631  * Return: 0 on success, errors otherwise
632  */
633 static int imx274_regmap_util_write_table_8(struct regmap *regmap,
634                                             const struct reg_8 table[],
635                                             u16 wait_ms_addr, u16 end_addr)
636 {
637         int err = 0;
638         const struct reg_8 *next;
639         u8 val;
640
641         int range_start = -1;
642         int range_count = 0;
643         u8 range_vals[16];
644         int max_range_vals = ARRAY_SIZE(range_vals);
645
646         for (next = table;; next++) {
647                 if ((next->addr != range_start + range_count) ||
648                     (next->addr == end_addr) ||
649                     (next->addr == wait_ms_addr) ||
650                     (range_count == max_range_vals)) {
651                         if (range_count == 1)
652                                 err = regmap_write(regmap,
653                                                    range_start, range_vals[0]);
654                         else if (range_count > 1)
655                                 err = regmap_bulk_write(regmap, range_start,
656                                                         &range_vals[0],
657                                                         range_count);
658                         else
659                                 err = 0;
660
661                         if (err)
662                                 return err;
663
664                         range_start = -1;
665                         range_count = 0;
666
667                         /* Handle special address values */
668                         if (next->addr == end_addr)
669                                 break;
670
671                         if (next->addr == wait_ms_addr) {
672                                 msleep_range(next->val);
673                                 continue;
674                         }
675                 }
676
677                 val = next->val;
678
679                 if (range_start == -1)
680                         range_start = next->addr;
681
682                 range_vals[range_count++] = val;
683         }
684         return 0;
685 }
686
687 static inline int imx274_read_reg(struct stimx274 *priv, u16 addr, u8 *val)
688 {
689         int err;
690
691         err = regmap_read(priv->regmap, addr, (unsigned int *)val);
692         if (err)
693                 dev_err(&priv->client->dev,
694                         "%s : i2c read failed, addr = %x\n", __func__, addr);
695         else
696                 dev_dbg(&priv->client->dev,
697                         "%s : addr 0x%x, val=0x%x\n", __func__,
698                         addr, *val);
699         return err;
700 }
701
702 static inline int imx274_write_reg(struct stimx274 *priv, u16 addr, u8 val)
703 {
704         int err;
705
706         err = regmap_write(priv->regmap, addr, val);
707         if (err)
708                 dev_err(&priv->client->dev,
709                         "%s : i2c write failed, %x = %x\n", __func__,
710                         addr, val);
711         else
712                 dev_dbg(&priv->client->dev,
713                         "%s : addr 0x%x, val=0x%x\n", __func__,
714                         addr, val);
715         return err;
716 }
717
718 static int imx274_write_table(struct stimx274 *priv, const struct reg_8 table[])
719 {
720         return imx274_regmap_util_write_table_8(priv->regmap,
721                 table, IMX274_TABLE_WAIT_MS, IMX274_TABLE_END);
722 }
723
724 /*
725  * imx274_mode_regs - Function for set mode registers per mode index
726  * @priv: Pointer to device structure
727  * @mode: Mode index value
728  *
729  * This is used to start steam per mode index.
730  * mode = 0, start stream for sensor Mode 1: 4K/raw10
731  * mode = 1, start stream for sensor Mode 3: 1080p/raw10
732  * mode = 2, start stream for sensor Mode 5: 720p/raw10
733  *
734  * Return: 0 on success, errors otherwise
735  */
736 static int imx274_mode_regs(struct stimx274 *priv, int mode)
737 {
738         int err = 0;
739
740         err = imx274_write_table(priv, mode_table[IMX274_MODE_START_STREAM_1]);
741         if (err)
742                 return err;
743
744         err = imx274_write_table(priv, mode_table[IMX274_MODE_START_STREAM_2]);
745         if (err)
746                 return err;
747
748         err = imx274_write_table(priv, mode_table[mode]);
749
750         return err;
751 }
752
753 /*
754  * imx274_start_stream - Function for starting stream per mode index
755  * @priv: Pointer to device structure
756  *
757  * Return: 0 on success, errors otherwise
758  */
759 static int imx274_start_stream(struct stimx274 *priv)
760 {
761         int err = 0;
762
763         /*
764          * Refer to "Standby Cancel Sequence when using CSI-2" in
765          * imx274 datasheet, it should wait 10ms or more here.
766          * give it 1 extra ms for margin
767          */
768         msleep_range(11);
769         err = imx274_write_table(priv, mode_table[IMX274_MODE_START_STREAM_3]);
770         if (err)
771                 return err;
772
773         /*
774          * Refer to "Standby Cancel Sequence when using CSI-2" in
775          * imx274 datasheet, it should wait 7ms or more here.
776          * give it 1 extra ms for margin
777          */
778         msleep_range(8);
779         err = imx274_write_table(priv, mode_table[IMX274_MODE_START_STREAM_4]);
780         if (err)
781                 return err;
782
783         return 0;
784 }
785
786 /*
787  * imx274_reset - Function called to reset the sensor
788  * @priv: Pointer to device structure
789  * @rst: Input value for determining the sensor's end state after reset
790  *
791  * Set the senor in reset and then
792  * if rst = 0, keep it in reset;
793  * if rst = 1, bring it out of reset.
794  *
795  */
796 static void imx274_reset(struct stimx274 *priv, int rst)
797 {
798         gpiod_set_value_cansleep(priv->reset_gpio, 0);
799         usleep_range(IMX274_RESET_DELAY1, IMX274_RESET_DELAY2);
800         gpiod_set_value_cansleep(priv->reset_gpio, !!rst);
801         usleep_range(IMX274_RESET_DELAY1, IMX274_RESET_DELAY2);
802 }
803
804 /**
805  * imx274_s_ctrl - This is used to set the imx274 V4L2 controls
806  * @ctrl: V4L2 control to be set
807  *
808  * This function is used to set the V4L2 controls for the imx274 sensor.
809  *
810  * Return: 0 on success, errors otherwise
811  */
812 static int imx274_s_ctrl(struct v4l2_ctrl *ctrl)
813 {
814         struct v4l2_subdev *sd = ctrl_to_sd(ctrl);
815         struct stimx274 *imx274 = to_imx274(sd);
816         int ret = -EINVAL;
817
818         dev_dbg(&imx274->client->dev,
819                 "%s : s_ctrl: %s, value: %d\n", __func__,
820                 ctrl->name, ctrl->val);
821
822         switch (ctrl->id) {
823         case V4L2_CID_EXPOSURE:
824                 dev_dbg(&imx274->client->dev,
825                         "%s : set V4L2_CID_EXPOSURE\n", __func__);
826                 ret = imx274_set_exposure(imx274, ctrl->val);
827                 break;
828
829         case V4L2_CID_GAIN:
830                 dev_dbg(&imx274->client->dev,
831                         "%s : set V4L2_CID_GAIN\n", __func__);
832                 ret = imx274_set_gain(imx274, ctrl);
833                 break;
834
835         case V4L2_CID_VFLIP:
836                 dev_dbg(&imx274->client->dev,
837                         "%s : set V4L2_CID_VFLIP\n", __func__);
838                 ret = imx274_set_vflip(imx274, ctrl->val);
839                 break;
840
841         case V4L2_CID_TEST_PATTERN:
842                 dev_dbg(&imx274->client->dev,
843                         "%s : set V4L2_CID_TEST_PATTERN\n", __func__);
844                 ret = imx274_set_test_pattern(imx274, ctrl->val);
845                 break;
846         }
847
848         return ret;
849 }
850
851 /**
852  * imx274_get_fmt - Get the pad format
853  * @sd: Pointer to V4L2 Sub device structure
854  * @cfg: Pointer to sub device pad information structure
855  * @fmt: Pointer to pad level media bus format
856  *
857  * This function is used to get the pad format information.
858  *
859  * Return: 0 on success
860  */
861 static int imx274_get_fmt(struct v4l2_subdev *sd,
862                           struct v4l2_subdev_pad_config *cfg,
863                           struct v4l2_subdev_format *fmt)
864 {
865         struct stimx274 *imx274 = to_imx274(sd);
866
867         mutex_lock(&imx274->lock);
868         fmt->format = imx274->format;
869         mutex_unlock(&imx274->lock);
870         return 0;
871 }
872
873 /**
874  * imx274_set_fmt - This is used to set the pad format
875  * @sd: Pointer to V4L2 Sub device structure
876  * @cfg: Pointer to sub device pad information structure
877  * @format: Pointer to pad level media bus format
878  *
879  * This function is used to set the pad format.
880  *
881  * Return: 0 on success
882  */
883 static int imx274_set_fmt(struct v4l2_subdev *sd,
884                           struct v4l2_subdev_pad_config *cfg,
885                           struct v4l2_subdev_format *format)
886 {
887         struct v4l2_mbus_framefmt *fmt = &format->format;
888         struct stimx274 *imx274 = to_imx274(sd);
889         struct i2c_client *client = imx274->client;
890         int index;
891
892         dev_dbg(&client->dev,
893                 "%s: width = %d height = %d code = %d mbus_code = %d\n",
894                 __func__, fmt->width, fmt->height, fmt->code,
895                 imx274_formats[imx274->mode_index].mbus_code);
896
897         mutex_lock(&imx274->lock);
898
899         for (index = 0; index < ARRAY_SIZE(imx274_formats); index++) {
900                 if (imx274_formats[index].size.width == fmt->width &&
901                     imx274_formats[index].size.height == fmt->height)
902                         break;
903         }
904
905         if (index >= ARRAY_SIZE(imx274_formats)) {
906                 /* default to first format */
907                 index = 0;
908         }
909
910         imx274->mode_index = index;
911
912         if (fmt->width > IMX274_MAX_WIDTH)
913                 fmt->width = IMX274_MAX_WIDTH;
914         if (fmt->height > IMX274_MAX_HEIGHT)
915                 fmt->height = IMX274_MAX_HEIGHT;
916         fmt->width = fmt->width & (~IMX274_MASK_LSB_2_BITS);
917         fmt->height = fmt->height & (~IMX274_MASK_LSB_2_BITS);
918         fmt->field = V4L2_FIELD_NONE;
919
920         if (format->which == V4L2_SUBDEV_FORMAT_TRY)
921                 cfg->try_fmt = *fmt;
922         else
923                 imx274->format = *fmt;
924
925         mutex_unlock(&imx274->lock);
926         return 0;
927 }
928
929 /**
930  * imx274_g_frame_interval - Get the frame interval
931  * @sd: Pointer to V4L2 Sub device structure
932  * @fi: Pointer to V4l2 Sub device frame interval structure
933  *
934  * This function is used to get the frame interval.
935  *
936  * Return: 0 on success
937  */
938 static int imx274_g_frame_interval(struct v4l2_subdev *sd,
939                                    struct v4l2_subdev_frame_interval *fi)
940 {
941         struct stimx274 *imx274 = to_imx274(sd);
942
943         fi->interval = imx274->frame_interval;
944         dev_dbg(&imx274->client->dev, "%s frame rate = %d / %d\n",
945                 __func__, imx274->frame_interval.numerator,
946                 imx274->frame_interval.denominator);
947
948         return 0;
949 }
950
951 /**
952  * imx274_s_frame_interval - Set the frame interval
953  * @sd: Pointer to V4L2 Sub device structure
954  * @fi: Pointer to V4l2 Sub device frame interval structure
955  *
956  * This function is used to set the frame intervavl.
957  *
958  * Return: 0 on success
959  */
960 static int imx274_s_frame_interval(struct v4l2_subdev *sd,
961                                    struct v4l2_subdev_frame_interval *fi)
962 {
963         struct stimx274 *imx274 = to_imx274(sd);
964         struct v4l2_ctrl *ctrl = imx274->ctrls.exposure;
965         int min, max, def;
966         int ret;
967
968         mutex_lock(&imx274->lock);
969         ret = imx274_set_frame_interval(imx274, fi->interval);
970
971         if (!ret) {
972                 /*
973                  * exposure time range is decided by frame interval
974                  * need to update it after frame interal changes
975                  */
976                 min = IMX274_MIN_EXPOSURE_TIME;
977                 max = fi->interval.numerator * 1000000
978                         / fi->interval.denominator;
979                 def = max;
980                 if (__v4l2_ctrl_modify_range(ctrl, min, max, 1, def)) {
981                         dev_err(&imx274->client->dev,
982                                 "Exposure ctrl range update failed\n");
983                         goto unlock;
984                 }
985
986                 /* update exposure time accordingly */
987                 imx274_set_exposure(imx274, imx274->ctrls.exposure->val);
988
989                 dev_dbg(&imx274->client->dev, "set frame interval to %uus\n",
990                         fi->interval.numerator * 1000000
991                         / fi->interval.denominator);
992         }
993
994 unlock:
995         mutex_unlock(&imx274->lock);
996
997         return ret;
998 }
999
1000 /**
1001  * imx274_load_default - load default control values
1002  * @priv: Pointer to device structure
1003  *
1004  * Return: 0 on success, errors otherwise
1005  */
1006 static int imx274_load_default(struct stimx274 *priv)
1007 {
1008         int ret;
1009
1010         /* load default control values */
1011         priv->frame_interval.numerator = 1;
1012         priv->frame_interval.denominator = IMX274_DEF_FRAME_RATE;
1013         priv->ctrls.exposure->val = 1000000 / IMX274_DEF_FRAME_RATE;
1014         priv->ctrls.gain->val = IMX274_DEF_GAIN;
1015         priv->ctrls.vflip->val = 0;
1016         priv->ctrls.test_pattern->val = TEST_PATTERN_DISABLED;
1017
1018         /* update frame rate */
1019         ret = imx274_set_frame_interval(priv,
1020                                         priv->frame_interval);
1021         if (ret)
1022                 return ret;
1023
1024         /* update exposure time */
1025         ret = v4l2_ctrl_s_ctrl(priv->ctrls.exposure, priv->ctrls.exposure->val);
1026         if (ret)
1027                 return ret;
1028
1029         /* update gain */
1030         ret = v4l2_ctrl_s_ctrl(priv->ctrls.gain, priv->ctrls.gain->val);
1031         if (ret)
1032                 return ret;
1033
1034         /* update vflip */
1035         ret = v4l2_ctrl_s_ctrl(priv->ctrls.vflip, priv->ctrls.vflip->val);
1036         if (ret)
1037                 return ret;
1038
1039         return 0;
1040 }
1041
1042 /**
1043  * imx274_s_stream - It is used to start/stop the streaming.
1044  * @sd: V4L2 Sub device
1045  * @on: Flag (True / False)
1046  *
1047  * This function controls the start or stop of streaming for the
1048  * imx274 sensor.
1049  *
1050  * Return: 0 on success, errors otherwise
1051  */
1052 static int imx274_s_stream(struct v4l2_subdev *sd, int on)
1053 {
1054         struct stimx274 *imx274 = to_imx274(sd);
1055         int ret = 0;
1056
1057         dev_dbg(&imx274->client->dev, "%s : %s, mode index = %d\n", __func__,
1058                 on ? "Stream Start" : "Stream Stop", imx274->mode_index);
1059
1060         mutex_lock(&imx274->lock);
1061
1062         if (on) {
1063                 /* load mode registers */
1064                 ret = imx274_mode_regs(imx274, imx274->mode_index);
1065                 if (ret)
1066                         goto fail;
1067
1068                 /*
1069                  * update frame rate & expsoure. if the last mode is different,
1070                  * HMAX could be changed. As the result, frame rate & exposure
1071                  * are changed.
1072                  * gain is not affected.
1073                  */
1074                 ret = imx274_set_frame_interval(imx274,
1075                                                 imx274->frame_interval);
1076                 if (ret)
1077                         goto fail;
1078
1079                 /* update exposure time */
1080                 ret = __v4l2_ctrl_s_ctrl(imx274->ctrls.exposure,
1081                                          imx274->ctrls.exposure->val);
1082                 if (ret)
1083                         goto fail;
1084
1085                 /* start stream */
1086                 ret = imx274_start_stream(imx274);
1087                 if (ret)
1088                         goto fail;
1089         } else {
1090                 /* stop stream */
1091                 ret = imx274_write_table(imx274,
1092                                          mode_table[IMX274_MODE_STOP_STREAM]);
1093                 if (ret)
1094                         goto fail;
1095         }
1096
1097         mutex_unlock(&imx274->lock);
1098         dev_dbg(&imx274->client->dev,
1099                 "%s : Done: mode = %d\n", __func__, imx274->mode_index);
1100         return 0;
1101
1102 fail:
1103         mutex_unlock(&imx274->lock);
1104         dev_err(&imx274->client->dev, "s_stream failed\n");
1105         return ret;
1106 }
1107
1108 /*
1109  * imx274_get_frame_length - Function for obtaining current frame length
1110  * @priv: Pointer to device structure
1111  * @val: Pointer to obainted value
1112  *
1113  * frame_length = vmax x (svr + 1), in unit of hmax.
1114  *
1115  * Return: 0 on success
1116  */
1117 static int imx274_get_frame_length(struct stimx274 *priv, u32 *val)
1118 {
1119         int err;
1120         u16 svr;
1121         u32 vmax;
1122         u8 reg_val[3];
1123
1124         /* svr */
1125         err = imx274_read_reg(priv, IMX274_SVR_REG_LSB, &reg_val[0]);
1126         if (err)
1127                 goto fail;
1128
1129         err = imx274_read_reg(priv, IMX274_SVR_REG_MSB, &reg_val[1]);
1130         if (err)
1131                 goto fail;
1132
1133         svr = (reg_val[1] << IMX274_SHIFT_8_BITS) + reg_val[0];
1134
1135         /* vmax */
1136         err = imx274_read_reg(priv, IMX274_FRAME_LENGTH_ADDR_3, &reg_val[0]);
1137         if (err)
1138                 goto fail;
1139
1140         err = imx274_read_reg(priv, IMX274_FRAME_LENGTH_ADDR_2, &reg_val[1]);
1141         if (err)
1142                 goto fail;
1143
1144         err = imx274_read_reg(priv, IMX274_FRAME_LENGTH_ADDR_1, &reg_val[2]);
1145         if (err)
1146                 goto fail;
1147
1148         vmax = ((reg_val[2] & IMX274_MASK_LSB_3_BITS) << IMX274_SHIFT_16_BITS)
1149                 + (reg_val[1] << IMX274_SHIFT_8_BITS) + reg_val[0];
1150
1151         *val = vmax * (svr + 1);
1152
1153         return 0;
1154
1155 fail:
1156         dev_err(&priv->client->dev, "%s error = %d\n", __func__, err);
1157         return err;
1158 }
1159
1160 static int imx274_clamp_coarse_time(struct stimx274 *priv, u32 *val,
1161                                     u32 *frame_length)
1162 {
1163         int err;
1164
1165         err = imx274_get_frame_length(priv, frame_length);
1166         if (err)
1167                 return err;
1168
1169         if (*frame_length < min_frame_len[priv->mode_index])
1170                 *frame_length = min_frame_len[priv->mode_index];
1171
1172         *val = *frame_length - *val; /* convert to raw shr */
1173         if (*val > *frame_length - IMX274_SHR_LIMIT_CONST)
1174                 *val = *frame_length - IMX274_SHR_LIMIT_CONST;
1175         else if (*val < min_SHR[priv->mode_index])
1176                 *val = min_SHR[priv->mode_index];
1177
1178         return 0;
1179 }
1180
1181 /*
1182  * imx274_set_digital gain - Function called when setting digital gain
1183  * @priv: Pointer to device structure
1184  * @dgain: Value of digital gain.
1185  *
1186  * Digital gain has only 4 steps: 1x, 2x, 4x, and 8x
1187  *
1188  * Return: 0 on success
1189  */
1190 static int imx274_set_digital_gain(struct stimx274 *priv, u32 dgain)
1191 {
1192         u8 reg_val;
1193
1194         reg_val = ffs(dgain);
1195
1196         if (reg_val)
1197                 reg_val--;
1198
1199         reg_val = clamp(reg_val, (u8)0, (u8)3);
1200
1201         return imx274_write_reg(priv, IMX274_DIGITAL_GAIN_REG,
1202                                 reg_val & IMX274_MASK_LSB_4_BITS);
1203 }
1204
1205 static inline void imx274_calculate_gain_regs(struct reg_8 regs[2], u16 gain)
1206 {
1207         regs->addr = IMX274_ANALOG_GAIN_ADDR_MSB;
1208         regs->val = (gain >> IMX274_SHIFT_8_BITS) & IMX274_MASK_LSB_3_BITS;
1209
1210         (regs + 1)->addr = IMX274_ANALOG_GAIN_ADDR_LSB;
1211         (regs + 1)->val = (gain) & IMX274_MASK_LSB_8_BITS;
1212 }
1213
1214 /*
1215  * imx274_set_gain - Function called when setting gain
1216  * @priv: Pointer to device structure
1217  * @val: Value of gain. the real value = val << IMX274_GAIN_SHIFT;
1218  * @ctrl: v4l2 control pointer
1219  *
1220  * Set the gain based on input value.
1221  * The caller should hold the mutex lock imx274->lock if necessary
1222  *
1223  * Return: 0 on success
1224  */
1225 static int imx274_set_gain(struct stimx274 *priv, struct v4l2_ctrl *ctrl)
1226 {
1227         struct reg_8 reg_list[2];
1228         int err;
1229         u32 gain, analog_gain, digital_gain, gain_reg;
1230         int i;
1231
1232         gain = (u32)(ctrl->val);
1233
1234         dev_dbg(&priv->client->dev,
1235                 "%s : input gain = %d.%d\n", __func__,
1236                 gain >> IMX274_GAIN_SHIFT,
1237                 ((gain & IMX274_GAIN_SHIFT_MASK) * 100) >> IMX274_GAIN_SHIFT);
1238
1239         if (gain > IMX274_MAX_DIGITAL_GAIN * IMX274_MAX_ANALOG_GAIN)
1240                 gain = IMX274_MAX_DIGITAL_GAIN * IMX274_MAX_ANALOG_GAIN;
1241         else if (gain < IMX274_MIN_GAIN)
1242                 gain = IMX274_MIN_GAIN;
1243
1244         if (gain <= IMX274_MAX_ANALOG_GAIN)
1245                 digital_gain = 1;
1246         else if (gain <= IMX274_MAX_ANALOG_GAIN * 2)
1247                 digital_gain = 2;
1248         else if (gain <= IMX274_MAX_ANALOG_GAIN * 4)
1249                 digital_gain = 4;
1250         else
1251                 digital_gain = IMX274_MAX_DIGITAL_GAIN;
1252
1253         analog_gain = gain / digital_gain;
1254
1255         dev_dbg(&priv->client->dev,
1256                 "%s : digital gain = %d, analog gain = %d.%d\n",
1257                 __func__, digital_gain, analog_gain >> IMX274_GAIN_SHIFT,
1258                 ((analog_gain & IMX274_GAIN_SHIFT_MASK) * 100)
1259                 >> IMX274_GAIN_SHIFT);
1260
1261         err = imx274_set_digital_gain(priv, digital_gain);
1262         if (err)
1263                 goto fail;
1264
1265         /* convert to register value, refer to imx274 datasheet */
1266         gain_reg = (u32)IMX274_GAIN_CONST -
1267                 (IMX274_GAIN_CONST << IMX274_GAIN_SHIFT) / analog_gain;
1268         if (gain_reg > IMX274_GAIN_REG_MAX)
1269                 gain_reg = IMX274_GAIN_REG_MAX;
1270
1271         imx274_calculate_gain_regs(reg_list, (u16)gain_reg);
1272
1273         for (i = 0; i < ARRAY_SIZE(reg_list); i++) {
1274                 err = imx274_write_reg(priv, reg_list[i].addr,
1275                                        reg_list[i].val);
1276                 if (err)
1277                         goto fail;
1278         }
1279
1280         if (IMX274_GAIN_CONST - gain_reg == 0) {
1281                 err = -EINVAL;
1282                 goto fail;
1283         }
1284
1285         /* convert register value back to gain value */
1286         ctrl->val = (IMX274_GAIN_CONST << IMX274_GAIN_SHIFT)
1287                         / (IMX274_GAIN_CONST - gain_reg) * digital_gain;
1288
1289         dev_dbg(&priv->client->dev,
1290                 "%s : GAIN control success, gain_reg = %d, new gain = %d\n",
1291                 __func__, gain_reg, ctrl->val);
1292
1293         return 0;
1294
1295 fail:
1296         dev_err(&priv->client->dev, "%s error = %d\n", __func__, err);
1297         return err;
1298 }
1299
1300 static inline void imx274_calculate_coarse_time_regs(struct reg_8 regs[2],
1301                                                      u32 coarse_time)
1302 {
1303         regs->addr = IMX274_COARSE_TIME_ADDR_MSB;
1304         regs->val = (coarse_time >> IMX274_SHIFT_8_BITS)
1305                         & IMX274_MASK_LSB_8_BITS;
1306         (regs + 1)->addr = IMX274_COARSE_TIME_ADDR_LSB;
1307         (regs + 1)->val = (coarse_time) & IMX274_MASK_LSB_8_BITS;
1308 }
1309
1310 /*
1311  * imx274_set_coarse_time - Function called when setting SHR value
1312  * @priv: Pointer to device structure
1313  * @val: Value for exposure time in number of line_length, or [HMAX]
1314  *
1315  * Set SHR value based on input value.
1316  *
1317  * Return: 0 on success
1318  */
1319 static int imx274_set_coarse_time(struct stimx274 *priv, u32 *val)
1320 {
1321         struct reg_8 reg_list[2];
1322         int err;
1323         u32 coarse_time, frame_length;
1324         int i;
1325
1326         coarse_time = *val;
1327
1328         /* convert exposure_time to appropriate SHR value */
1329         err = imx274_clamp_coarse_time(priv, &coarse_time, &frame_length);
1330         if (err)
1331                 goto fail;
1332
1333         /* prepare SHR registers */
1334         imx274_calculate_coarse_time_regs(reg_list, coarse_time);
1335
1336         /* write to SHR registers */
1337         for (i = 0; i < ARRAY_SIZE(reg_list); i++) {
1338                 err = imx274_write_reg(priv, reg_list[i].addr,
1339                                        reg_list[i].val);
1340                 if (err)
1341                         goto fail;
1342         }
1343
1344         *val = frame_length - coarse_time;
1345         return 0;
1346
1347 fail:
1348         dev_err(&priv->client->dev, "%s error = %d\n", __func__, err);
1349         return err;
1350 }
1351
1352 /*
1353  * imx274_set_exposure - Function called when setting exposure time
1354  * @priv: Pointer to device structure
1355  * @val: Variable for exposure time, in the unit of micro-second
1356  *
1357  * Set exposure time based on input value.
1358  * The caller should hold the mutex lock imx274->lock if necessary
1359  *
1360  * Return: 0 on success
1361  */
1362 static int imx274_set_exposure(struct stimx274 *priv, int val)
1363 {
1364         int err;
1365         u16 hmax;
1366         u8 reg_val[2];
1367         u32 coarse_time; /* exposure time in unit of line (HMAX)*/
1368
1369         dev_dbg(&priv->client->dev,
1370                 "%s : EXPOSURE control input = %d\n", __func__, val);
1371
1372         /* step 1: convert input exposure_time (val) into number of 1[HMAX] */
1373
1374         /* obtain HMAX value */
1375         err = imx274_read_reg(priv, IMX274_HMAX_REG_LSB, &reg_val[0]);
1376         if (err)
1377                 goto fail;
1378         err = imx274_read_reg(priv, IMX274_HMAX_REG_MSB, &reg_val[1]);
1379         if (err)
1380                 goto fail;
1381         hmax = (reg_val[1] << IMX274_SHIFT_8_BITS) + reg_val[0];
1382         if (hmax == 0) {
1383                 err = -EINVAL;
1384                 goto fail;
1385         }
1386
1387         coarse_time = (IMX274_PIXCLK_CONST1 / IMX274_PIXCLK_CONST2 * val
1388                         - nocpiop[priv->mode_index]) / hmax;
1389
1390         /* step 2: convert exposure_time into SHR value */
1391
1392         /* set SHR */
1393         err = imx274_set_coarse_time(priv, &coarse_time);
1394         if (err)
1395                 goto fail;
1396
1397         priv->ctrls.exposure->val =
1398                         (coarse_time * hmax + nocpiop[priv->mode_index])
1399                         / (IMX274_PIXCLK_CONST1 / IMX274_PIXCLK_CONST2);
1400
1401         dev_dbg(&priv->client->dev,
1402                 "%s : EXPOSURE control success\n", __func__);
1403         return 0;
1404
1405 fail:
1406         dev_err(&priv->client->dev, "%s error = %d\n", __func__, err);
1407
1408         return err;
1409 }
1410
1411 /*
1412  * imx274_set_vflip - Function called when setting vertical flip
1413  * @priv: Pointer to device structure
1414  * @val: Value for vflip setting
1415  *
1416  * Set vertical flip based on input value.
1417  * val = 0: normal, no vertical flip
1418  * val = 1: vertical flip enabled
1419  * The caller should hold the mutex lock imx274->lock if necessary
1420  *
1421  * Return: 0 on success
1422  */
1423 static int imx274_set_vflip(struct stimx274 *priv, int val)
1424 {
1425         int err;
1426
1427         err = imx274_write_reg(priv, IMX274_VFLIP_REG, val);
1428         if (err) {
1429                 dev_err(&priv->client->dev, "VFILP control error\n");
1430                 return err;
1431         }
1432
1433         dev_dbg(&priv->client->dev,
1434                 "%s : VFLIP control success\n", __func__);
1435
1436         return 0;
1437 }
1438
1439 /*
1440  * imx274_set_test_pattern - Function called when setting test pattern
1441  * @priv: Pointer to device structure
1442  * @val: Variable for test pattern
1443  *
1444  * Set to different test patterns based on input value.
1445  *
1446  * Return: 0 on success
1447  */
1448 static int imx274_set_test_pattern(struct stimx274 *priv, int val)
1449 {
1450         int err = 0;
1451
1452         if (val == TEST_PATTERN_DISABLED) {
1453                 err = imx274_write_table(priv, imx274_tp_disabled);
1454         } else if (val <= TEST_PATTERN_V_COLOR_BARS) {
1455                 err = imx274_write_reg(priv, IMX274_TEST_PATTERN_REG, val - 1);
1456                 if (!err)
1457                         err = imx274_write_table(priv, imx274_tp_regs);
1458         } else {
1459                 err = -EINVAL;
1460         }
1461
1462         if (!err)
1463                 dev_dbg(&priv->client->dev,
1464                         "%s : TEST PATTERN control success\n", __func__);
1465         else
1466                 dev_err(&priv->client->dev, "%s error = %d\n", __func__, err);
1467
1468         return err;
1469 }
1470
1471 static inline void imx274_calculate_frame_length_regs(struct reg_8 regs[3],
1472                                                       u32 frame_length)
1473 {
1474         regs->addr = IMX274_FRAME_LENGTH_ADDR_1;
1475         regs->val = (frame_length >> IMX274_SHIFT_16_BITS)
1476                         & IMX274_MASK_LSB_4_BITS;
1477         (regs + 1)->addr = IMX274_FRAME_LENGTH_ADDR_2;
1478         (regs + 1)->val = (frame_length >> IMX274_SHIFT_8_BITS)
1479                         & IMX274_MASK_LSB_8_BITS;
1480         (regs + 2)->addr = IMX274_FRAME_LENGTH_ADDR_3;
1481         (regs + 2)->val = (frame_length) & IMX274_MASK_LSB_8_BITS;
1482 }
1483
1484 /*
1485  * imx274_set_frame_length - Function called when setting frame length
1486  * @priv: Pointer to device structure
1487  * @val: Variable for frame length (= VMAX, i.e. vertical drive period length)
1488  *
1489  * Set frame length based on input value.
1490  *
1491  * Return: 0 on success
1492  */
1493 static int imx274_set_frame_length(struct stimx274 *priv, u32 val)
1494 {
1495         struct reg_8 reg_list[3];
1496         int err;
1497         u32 frame_length;
1498         int i;
1499
1500         dev_dbg(&priv->client->dev, "%s : input length = %d\n",
1501                 __func__, val);
1502
1503         frame_length = (u32)val;
1504
1505         imx274_calculate_frame_length_regs(reg_list, frame_length);
1506         for (i = 0; i < ARRAY_SIZE(reg_list); i++) {
1507                 err = imx274_write_reg(priv, reg_list[i].addr,
1508                                        reg_list[i].val);
1509                 if (err)
1510                         goto fail;
1511         }
1512
1513         return 0;
1514
1515 fail:
1516         dev_err(&priv->client->dev, "%s error = %d\n", __func__, err);
1517         return err;
1518 }
1519
1520 /*
1521  * imx274_set_frame_interval - Function called when setting frame interval
1522  * @priv: Pointer to device structure
1523  * @frame_interval: Variable for frame interval
1524  *
1525  * Change frame interval by updating VMAX value
1526  * The caller should hold the mutex lock imx274->lock if necessary
1527  *
1528  * Return: 0 on success
1529  */
1530 static int imx274_set_frame_interval(struct stimx274 *priv,
1531                                      struct v4l2_fract frame_interval)
1532 {
1533         int err;
1534         u32 frame_length, req_frame_rate;
1535         u16 svr;
1536         u16 hmax;
1537         u8 reg_val[2];
1538
1539         dev_dbg(&priv->client->dev, "%s: input frame interval = %d / %d",
1540                 __func__, frame_interval.numerator,
1541                 frame_interval.denominator);
1542
1543         if (frame_interval.numerator == 0) {
1544                 err = -EINVAL;
1545                 goto fail;
1546         }
1547
1548         req_frame_rate = (u32)(frame_interval.denominator
1549                                 / frame_interval.numerator);
1550
1551         /* boundary check */
1552         if (req_frame_rate > max_frame_rate[priv->mode_index]) {
1553                 frame_interval.numerator = 1;
1554                 frame_interval.denominator =
1555                                         max_frame_rate[priv->mode_index];
1556         } else if (req_frame_rate < IMX274_MIN_FRAME_RATE) {
1557                 frame_interval.numerator = 1;
1558                 frame_interval.denominator = IMX274_MIN_FRAME_RATE;
1559         }
1560
1561         /*
1562          * VMAX = 1/frame_rate x 72M / (SVR+1) / HMAX
1563          * frame_length (i.e. VMAX) = (frame_interval) x 72M /(SVR+1) / HMAX
1564          */
1565
1566         /* SVR */
1567         err = imx274_read_reg(priv, IMX274_SVR_REG_LSB, &reg_val[0]);
1568         if (err)
1569                 goto fail;
1570         err = imx274_read_reg(priv, IMX274_SVR_REG_MSB, &reg_val[1]);
1571         if (err)
1572                 goto fail;
1573         svr = (reg_val[1] << IMX274_SHIFT_8_BITS) + reg_val[0];
1574         dev_dbg(&priv->client->dev,
1575                 "%s : register SVR = %d\n", __func__, svr);
1576
1577         /* HMAX */
1578         err = imx274_read_reg(priv, IMX274_HMAX_REG_LSB, &reg_val[0]);
1579         if (err)
1580                 goto fail;
1581         err = imx274_read_reg(priv, IMX274_HMAX_REG_MSB, &reg_val[1]);
1582         if (err)
1583                 goto fail;
1584         hmax = (reg_val[1] << IMX274_SHIFT_8_BITS) + reg_val[0];
1585         dev_dbg(&priv->client->dev,
1586                 "%s : register HMAX = %d\n", __func__, hmax);
1587
1588         if (hmax == 0 || frame_interval.denominator == 0) {
1589                 err = -EINVAL;
1590                 goto fail;
1591         }
1592
1593         frame_length = IMX274_PIXCLK_CONST1 / (svr + 1) / hmax
1594                                         * frame_interval.numerator
1595                                         / frame_interval.denominator;
1596
1597         err = imx274_set_frame_length(priv, frame_length);
1598         if (err)
1599                 goto fail;
1600
1601         priv->frame_interval = frame_interval;
1602         return 0;
1603
1604 fail:
1605         dev_err(&priv->client->dev, "%s error = %d\n", __func__, err);
1606         return err;
1607 }
1608
1609 static const struct v4l2_subdev_pad_ops imx274_pad_ops = {
1610         .get_fmt = imx274_get_fmt,
1611         .set_fmt = imx274_set_fmt,
1612 };
1613
1614 static const struct v4l2_subdev_video_ops imx274_video_ops = {
1615         .g_frame_interval = imx274_g_frame_interval,
1616         .s_frame_interval = imx274_s_frame_interval,
1617         .s_stream = imx274_s_stream,
1618 };
1619
1620 static const struct v4l2_subdev_ops imx274_subdev_ops = {
1621         .pad = &imx274_pad_ops,
1622         .video = &imx274_video_ops,
1623 };
1624
1625 static const struct v4l2_ctrl_ops imx274_ctrl_ops = {
1626         .s_ctrl = imx274_s_ctrl,
1627 };
1628
1629 static const struct of_device_id imx274_of_id_table[] = {
1630         { .compatible = "sony,imx274" },
1631         { }
1632 };
1633 MODULE_DEVICE_TABLE(of, imx274_of_id_table);
1634
1635 static const struct i2c_device_id imx274_id[] = {
1636         { "IMX274", 0 },
1637         { }
1638 };
1639 MODULE_DEVICE_TABLE(i2c, imx274_id);
1640
1641 static int imx274_probe(struct i2c_client *client,
1642                         const struct i2c_device_id *id)
1643 {
1644         struct v4l2_subdev *sd;
1645         struct stimx274 *imx274;
1646         int ret;
1647
1648         /* initialize imx274 */
1649         imx274 = devm_kzalloc(&client->dev, sizeof(*imx274), GFP_KERNEL);
1650         if (!imx274)
1651                 return -ENOMEM;
1652
1653         mutex_init(&imx274->lock);
1654
1655         /* initialize regmap */
1656         imx274->regmap = devm_regmap_init_i2c(client, &imx274_regmap_config);
1657         if (IS_ERR(imx274->regmap)) {
1658                 dev_err(&client->dev,
1659                         "regmap init failed: %ld\n", PTR_ERR(imx274->regmap));
1660                 ret = -ENODEV;
1661                 goto err_regmap;
1662         }
1663
1664         /* initialize subdevice */
1665         imx274->client = client;
1666         sd = &imx274->sd;
1667         v4l2_i2c_subdev_init(sd, client, &imx274_subdev_ops);
1668         strlcpy(sd->name, DRIVER_NAME, sizeof(sd->name));
1669         sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS;
1670
1671         /* initialize subdev media pad */
1672         imx274->pad.flags = MEDIA_PAD_FL_SOURCE;
1673         sd->entity.function = MEDIA_ENT_F_CAM_SENSOR;
1674         ret = media_entity_pads_init(&sd->entity, 1, &imx274->pad);
1675         if (ret < 0) {
1676                 dev_err(&client->dev,
1677                         "%s : media entity init Failed %d\n", __func__, ret);
1678                 goto err_regmap;
1679         }
1680
1681         /* initialize sensor reset gpio */
1682         imx274->reset_gpio = devm_gpiod_get_optional(&client->dev, "reset",
1683                                                      GPIOD_OUT_HIGH);
1684         if (IS_ERR(imx274->reset_gpio)) {
1685                 if (PTR_ERR(imx274->reset_gpio) != -EPROBE_DEFER)
1686                         dev_err(&client->dev, "Reset GPIO not setup in DT");
1687                 ret = PTR_ERR(imx274->reset_gpio);
1688                 goto err_me;
1689         }
1690
1691         /* pull sensor out of reset */
1692         imx274_reset(imx274, 1);
1693
1694         /* initialize controls */
1695         ret = v4l2_ctrl_handler_init(&imx274->ctrls.handler, 2);
1696         if (ret < 0) {
1697                 dev_err(&client->dev,
1698                         "%s : ctrl handler init Failed\n", __func__);
1699                 goto err_me;
1700         }
1701
1702         imx274->ctrls.handler.lock = &imx274->lock;
1703
1704         /* add new controls */
1705         imx274->ctrls.test_pattern = v4l2_ctrl_new_std_menu_items(
1706                 &imx274->ctrls.handler, &imx274_ctrl_ops,
1707                 V4L2_CID_TEST_PATTERN,
1708                 ARRAY_SIZE(tp_qmenu) - 1, 0, 0, tp_qmenu);
1709
1710         imx274->ctrls.gain = v4l2_ctrl_new_std(
1711                 &imx274->ctrls.handler,
1712                 &imx274_ctrl_ops,
1713                 V4L2_CID_GAIN, IMX274_MIN_GAIN,
1714                 IMX274_MAX_DIGITAL_GAIN * IMX274_MAX_ANALOG_GAIN, 1,
1715                 IMX274_DEF_GAIN);
1716
1717         imx274->ctrls.exposure = v4l2_ctrl_new_std(
1718                 &imx274->ctrls.handler,
1719                 &imx274_ctrl_ops,
1720                 V4L2_CID_EXPOSURE, IMX274_MIN_EXPOSURE_TIME,
1721                 1000000 / IMX274_DEF_FRAME_RATE, 1,
1722                 IMX274_MIN_EXPOSURE_TIME);
1723
1724         imx274->ctrls.vflip = v4l2_ctrl_new_std(
1725                 &imx274->ctrls.handler,
1726                 &imx274_ctrl_ops,
1727                 V4L2_CID_VFLIP, 0, 1, 1, 0);
1728
1729         imx274->sd.ctrl_handler = &imx274->ctrls.handler;
1730         if (imx274->ctrls.handler.error) {
1731                 ret = imx274->ctrls.handler.error;
1732                 goto err_ctrls;
1733         }
1734
1735         /* setup default controls */
1736         ret = v4l2_ctrl_handler_setup(&imx274->ctrls.handler);
1737         if (ret) {
1738                 dev_err(&client->dev,
1739                         "Error %d setup default controls\n", ret);
1740                 goto err_ctrls;
1741         }
1742
1743         /* initialize format */
1744         imx274->mode_index = IMX274_MODE_3840X2160;
1745         imx274->format.width = imx274_formats[0].size.width;
1746         imx274->format.height = imx274_formats[0].size.height;
1747         imx274->format.field = V4L2_FIELD_NONE;
1748         imx274->format.code = MEDIA_BUS_FMT_SRGGB10_1X10;
1749         imx274->format.colorspace = V4L2_COLORSPACE_SRGB;
1750         imx274->frame_interval.numerator = 1;
1751         imx274->frame_interval.denominator = IMX274_DEF_FRAME_RATE;
1752
1753         /* load default control values */
1754         ret = imx274_load_default(imx274);
1755         if (ret) {
1756                 dev_err(&client->dev,
1757                         "%s : imx274_load_default failed %d\n",
1758                         __func__, ret);
1759                 goto err_ctrls;
1760         }
1761
1762         /* register subdevice */
1763         ret = v4l2_async_register_subdev(sd);
1764         if (ret < 0) {
1765                 dev_err(&client->dev,
1766                         "%s : v4l2_async_register_subdev failed %d\n",
1767                         __func__, ret);
1768                 goto err_ctrls;
1769         }
1770
1771         dev_info(&client->dev, "imx274 : imx274 probe success !\n");
1772         return 0;
1773
1774 err_ctrls:
1775         v4l2_ctrl_handler_free(&imx274->ctrls.handler);
1776 err_me:
1777         media_entity_cleanup(&sd->entity);
1778 err_regmap:
1779         mutex_destroy(&imx274->lock);
1780         return ret;
1781 }
1782
1783 static int imx274_remove(struct i2c_client *client)
1784 {
1785         struct v4l2_subdev *sd = i2c_get_clientdata(client);
1786         struct stimx274 *imx274 = to_imx274(sd);
1787
1788         /* stop stream */
1789         imx274_write_table(imx274, mode_table[IMX274_MODE_STOP_STREAM]);
1790
1791         v4l2_async_unregister_subdev(sd);
1792         v4l2_ctrl_handler_free(&imx274->ctrls.handler);
1793         media_entity_cleanup(&sd->entity);
1794         mutex_destroy(&imx274->lock);
1795         return 0;
1796 }
1797
1798 static struct i2c_driver imx274_i2c_driver = {
1799         .driver = {
1800                 .name   = DRIVER_NAME,
1801                 .of_match_table = imx274_of_id_table,
1802         },
1803         .probe          = imx274_probe,
1804         .remove         = imx274_remove,
1805         .id_table       = imx274_id,
1806 };
1807
1808 module_i2c_driver(imx274_i2c_driver);
1809
1810 MODULE_AUTHOR("Leon Luo <leonl@leopardimaging.com>");
1811 MODULE_DESCRIPTION("IMX274 CMOS Image Sensor driver");
1812 MODULE_LICENSE("GPL v2");