media: Switch i2c drivers back to use .probe()
[linux-2.6-microblaze.git] / drivers / media / i2c / ov13b10.c
1 // SPDX-License-Identifier: GPL-2.0
2 // Copyright (c) 2021 Intel Corporation.
3
4 #include <linux/acpi.h>
5 #include <linux/i2c.h>
6 #include <linux/module.h>
7 #include <linux/pm_runtime.h>
8 #include <media/v4l2-ctrls.h>
9 #include <media/v4l2-device.h>
10 #include <media/v4l2-fwnode.h>
11
12 #define OV13B10_REG_VALUE_08BIT         1
13 #define OV13B10_REG_VALUE_16BIT         2
14 #define OV13B10_REG_VALUE_24BIT         3
15
16 #define OV13B10_REG_MODE_SELECT         0x0100
17 #define OV13B10_MODE_STANDBY            0x00
18 #define OV13B10_MODE_STREAMING          0x01
19
20 #define OV13B10_REG_SOFTWARE_RST        0x0103
21 #define OV13B10_SOFTWARE_RST            0x01
22
23 /* Chip ID */
24 #define OV13B10_REG_CHIP_ID             0x300a
25 #define OV13B10_CHIP_ID                 0x560d42
26
27 /* V_TIMING internal */
28 #define OV13B10_REG_VTS                 0x380e
29 #define OV13B10_VTS_30FPS               0x0c7c
30 #define OV13B10_VTS_60FPS               0x063e
31 #define OV13B10_VTS_MAX                 0x7fff
32
33 /* HBLANK control - read only */
34 #define OV13B10_PPL_560MHZ              4704
35
36 /* Exposure control */
37 #define OV13B10_REG_EXPOSURE            0x3500
38 #define OV13B10_EXPOSURE_MIN            4
39 #define OV13B10_EXPOSURE_STEP           1
40 #define OV13B10_EXPOSURE_DEFAULT        0x40
41
42 /* Analog gain control */
43 #define OV13B10_REG_ANALOG_GAIN         0x3508
44 #define OV13B10_ANA_GAIN_MIN            0x80
45 #define OV13B10_ANA_GAIN_MAX            0x07c0
46 #define OV13B10_ANA_GAIN_STEP           1
47 #define OV13B10_ANA_GAIN_DEFAULT        0x80
48
49 /* Digital gain control */
50 #define OV13B10_REG_DGTL_GAIN_H         0x350a
51 #define OV13B10_REG_DGTL_GAIN_M         0x350b
52 #define OV13B10_REG_DGTL_GAIN_L         0x350c
53
54 #define OV13B10_DGTL_GAIN_MIN           1024         /* Min = 1 X */
55 #define OV13B10_DGTL_GAIN_MAX           (4096 - 1)   /* Max = 4 X */
56 #define OV13B10_DGTL_GAIN_DEFAULT       2560         /* Default gain = 2.5 X */
57 #define OV13B10_DGTL_GAIN_STEP          1            /* Each step = 1/1024 */
58
59 #define OV13B10_DGTL_GAIN_L_SHIFT       6
60 #define OV13B10_DGTL_GAIN_L_MASK        0x3
61 #define OV13B10_DGTL_GAIN_M_SHIFT       2
62 #define OV13B10_DGTL_GAIN_M_MASK        0xff
63 #define OV13B10_DGTL_GAIN_H_SHIFT       10
64 #define OV13B10_DGTL_GAIN_H_MASK        0x3
65
66 /* Test Pattern Control */
67 #define OV13B10_REG_TEST_PATTERN        0x5080
68 #define OV13B10_TEST_PATTERN_ENABLE     BIT(7)
69 #define OV13B10_TEST_PATTERN_MASK       0xf3
70 #define OV13B10_TEST_PATTERN_BAR_SHIFT  2
71
72 /* Flip Control */
73 #define OV13B10_REG_FORMAT1             0x3820
74 #define OV13B10_REG_FORMAT2             0x3821
75
76 /* Horizontal Window Offset */
77 #define OV13B10_REG_H_WIN_OFFSET        0x3811
78
79 /* Vertical Window Offset */
80 #define OV13B10_REG_V_WIN_OFFSET        0x3813
81
82 struct ov13b10_reg {
83         u16 address;
84         u8 val;
85 };
86
87 struct ov13b10_reg_list {
88         u32 num_of_regs;
89         const struct ov13b10_reg *regs;
90 };
91
92 /* Link frequency config */
93 struct ov13b10_link_freq_config {
94         u32 pixels_per_line;
95
96         /* registers for this link frequency */
97         struct ov13b10_reg_list reg_list;
98 };
99
100 /* Mode : resolution and related config&values */
101 struct ov13b10_mode {
102         /* Frame width */
103         u32 width;
104         /* Frame height */
105         u32 height;
106
107         /* V-timing */
108         u32 vts_def;
109         u32 vts_min;
110
111         /* Index of Link frequency config to be used */
112         u32 link_freq_index;
113         /* Default register values */
114         struct ov13b10_reg_list reg_list;
115 };
116
117 /* 4208x3120 needs 1120Mbps/lane, 4 lanes */
118 static const struct ov13b10_reg mipi_data_rate_1120mbps[] = {
119         {0x0103, 0x01},
120         {0x0303, 0x04},
121         {0x0305, 0xaf},
122         {0x0321, 0x00},
123         {0x0323, 0x04},
124         {0x0324, 0x01},
125         {0x0325, 0xa4},
126         {0x0326, 0x81},
127         {0x0327, 0x04},
128         {0x3012, 0x07},
129         {0x3013, 0x32},
130         {0x3107, 0x23},
131         {0x3501, 0x0c},
132         {0x3502, 0x10},
133         {0x3504, 0x08},
134         {0x3508, 0x07},
135         {0x3509, 0xc0},
136         {0x3600, 0x16},
137         {0x3601, 0x54},
138         {0x3612, 0x4e},
139         {0x3620, 0x00},
140         {0x3621, 0x68},
141         {0x3622, 0x66},
142         {0x3623, 0x03},
143         {0x3662, 0x92},
144         {0x3666, 0xbb},
145         {0x3667, 0x44},
146         {0x366e, 0xff},
147         {0x366f, 0xf3},
148         {0x3675, 0x44},
149         {0x3676, 0x00},
150         {0x367f, 0xe9},
151         {0x3681, 0x32},
152         {0x3682, 0x1f},
153         {0x3683, 0x0b},
154         {0x3684, 0x0b},
155         {0x3704, 0x0f},
156         {0x3706, 0x40},
157         {0x3708, 0x3b},
158         {0x3709, 0x72},
159         {0x370b, 0xa2},
160         {0x3714, 0x24},
161         {0x371a, 0x3e},
162         {0x3725, 0x42},
163         {0x3739, 0x12},
164         {0x3767, 0x00},
165         {0x377a, 0x0d},
166         {0x3789, 0x18},
167         {0x3790, 0x40},
168         {0x3791, 0xa2},
169         {0x37c2, 0x04},
170         {0x37c3, 0xf1},
171         {0x37d9, 0x0c},
172         {0x37da, 0x02},
173         {0x37dc, 0x02},
174         {0x37e1, 0x04},
175         {0x37e2, 0x0a},
176         {0x3800, 0x00},
177         {0x3801, 0x00},
178         {0x3802, 0x00},
179         {0x3803, 0x08},
180         {0x3804, 0x10},
181         {0x3805, 0x8f},
182         {0x3806, 0x0c},
183         {0x3807, 0x47},
184         {0x3808, 0x10},
185         {0x3809, 0x70},
186         {0x380a, 0x0c},
187         {0x380b, 0x30},
188         {0x380c, 0x04},
189         {0x380d, 0x98},
190         {0x380e, 0x0c},
191         {0x380f, 0x7c},
192         {0x3811, 0x0f},
193         {0x3813, 0x09},
194         {0x3814, 0x01},
195         {0x3815, 0x01},
196         {0x3816, 0x01},
197         {0x3817, 0x01},
198         {0x381f, 0x08},
199         {0x3820, 0x88},
200         {0x3821, 0x00},
201         {0x3822, 0x14},
202         {0x382e, 0xe6},
203         {0x3c80, 0x00},
204         {0x3c87, 0x01},
205         {0x3c8c, 0x19},
206         {0x3c8d, 0x1c},
207         {0x3ca0, 0x00},
208         {0x3ca1, 0x00},
209         {0x3ca2, 0x00},
210         {0x3ca3, 0x00},
211         {0x3ca4, 0x50},
212         {0x3ca5, 0x11},
213         {0x3ca6, 0x01},
214         {0x3ca7, 0x00},
215         {0x3ca8, 0x00},
216         {0x4008, 0x02},
217         {0x4009, 0x0f},
218         {0x400a, 0x01},
219         {0x400b, 0x19},
220         {0x4011, 0x21},
221         {0x4017, 0x08},
222         {0x4019, 0x04},
223         {0x401a, 0x58},
224         {0x4032, 0x1e},
225         {0x4050, 0x02},
226         {0x4051, 0x09},
227         {0x405e, 0x00},
228         {0x4066, 0x02},
229         {0x4501, 0x00},
230         {0x4502, 0x10},
231         {0x4505, 0x00},
232         {0x4800, 0x64},
233         {0x481b, 0x3e},
234         {0x481f, 0x30},
235         {0x4825, 0x34},
236         {0x4837, 0x0e},
237         {0x484b, 0x01},
238         {0x4883, 0x02},
239         {0x5000, 0xff},
240         {0x5001, 0x0f},
241         {0x5045, 0x20},
242         {0x5046, 0x20},
243         {0x5047, 0xa4},
244         {0x5048, 0x20},
245         {0x5049, 0xa4},
246 };
247
248 static const struct ov13b10_reg mode_4208x3120_regs[] = {
249         {0x0305, 0xaf},
250         {0x3501, 0x0c},
251         {0x3662, 0x92},
252         {0x3714, 0x24},
253         {0x3739, 0x12},
254         {0x37c2, 0x04},
255         {0x37d9, 0x0c},
256         {0x37e2, 0x0a},
257         {0x3800, 0x00},
258         {0x3801, 0x00},
259         {0x3802, 0x00},
260         {0x3803, 0x08},
261         {0x3804, 0x10},
262         {0x3805, 0x8f},
263         {0x3806, 0x0c},
264         {0x3807, 0x47},
265         {0x3808, 0x10},
266         {0x3809, 0x70},
267         {0x380a, 0x0c},
268         {0x380b, 0x30},
269         {0x380c, 0x04},
270         {0x380d, 0x98},
271         {0x380e, 0x0c},
272         {0x380f, 0x7c},
273         {0x3810, 0x00},
274         {0x3811, 0x0f},
275         {0x3812, 0x00},
276         {0x3813, 0x09},
277         {0x3814, 0x01},
278         {0x3816, 0x01},
279         {0x3820, 0x88},
280         {0x3c8c, 0x19},
281         {0x4008, 0x02},
282         {0x4009, 0x0f},
283         {0x4050, 0x02},
284         {0x4051, 0x09},
285         {0x4501, 0x00},
286         {0x4505, 0x00},
287         {0x4837, 0x0e},
288         {0x5000, 0xff},
289         {0x5001, 0x0f},
290 };
291
292 static const struct ov13b10_reg mode_4160x3120_regs[] = {
293         {0x0305, 0xaf},
294         {0x3501, 0x0c},
295         {0x3662, 0x92},
296         {0x3714, 0x24},
297         {0x3739, 0x12},
298         {0x37c2, 0x04},
299         {0x37d9, 0x0c},
300         {0x37e2, 0x0a},
301         {0x3800, 0x00},
302         {0x3801, 0x00},
303         {0x3802, 0x00},
304         {0x3803, 0x08},
305         {0x3804, 0x10},
306         {0x3805, 0x8f},
307         {0x3806, 0x0c},
308         {0x3807, 0x47},
309         {0x3808, 0x10},
310         {0x3809, 0x40},
311         {0x380a, 0x0c},
312         {0x380b, 0x30},
313         {0x380c, 0x04},
314         {0x380d, 0x98},
315         {0x380e, 0x0c},
316         {0x380f, 0x7c},
317         {0x3810, 0x00},
318         {0x3811, 0x27},
319         {0x3812, 0x00},
320         {0x3813, 0x09},
321         {0x3814, 0x01},
322         {0x3816, 0x01},
323         {0x3820, 0x88},
324         {0x3c8c, 0x19},
325         {0x4008, 0x02},
326         {0x4009, 0x0f},
327         {0x4050, 0x02},
328         {0x4051, 0x09},
329         {0x4501, 0x00},
330         {0x4505, 0x00},
331         {0x4837, 0x0e},
332         {0x5000, 0xff},
333         {0x5001, 0x0f},
334 };
335
336 static const struct ov13b10_reg mode_4160x2340_regs[] = {
337         {0x0305, 0xaf},
338         {0x3501, 0x0c},
339         {0x3662, 0x92},
340         {0x3714, 0x24},
341         {0x3739, 0x12},
342         {0x37c2, 0x04},
343         {0x37d9, 0x0c},
344         {0x37e2, 0x0a},
345         {0x3800, 0x00},
346         {0x3801, 0x00},
347         {0x3802, 0x00},
348         {0x3803, 0x08},
349         {0x3804, 0x10},
350         {0x3805, 0x8f},
351         {0x3806, 0x0c},
352         {0x3807, 0x47},
353         {0x3808, 0x10},
354         {0x3809, 0x40},
355         {0x380a, 0x09},
356         {0x380b, 0x24},
357         {0x380c, 0x04},
358         {0x380d, 0x98},
359         {0x380e, 0x0c},
360         {0x380f, 0x7c},
361         {0x3810, 0x00},
362         {0x3811, 0x27},
363         {0x3812, 0x01},
364         {0x3813, 0x8f},
365         {0x3814, 0x01},
366         {0x3816, 0x01},
367         {0x3820, 0x88},
368         {0x3c8c, 0x19},
369         {0x4008, 0x02},
370         {0x4009, 0x0f},
371         {0x4050, 0x02},
372         {0x4051, 0x09},
373         {0x4501, 0x00},
374         {0x4505, 0x00},
375         {0x4837, 0x0e},
376         {0x5000, 0xff},
377         {0x5001, 0x0f},
378 };
379
380 static const struct ov13b10_reg mode_2104x1560_regs[] = {
381         {0x0305, 0xaf},
382         {0x3501, 0x06},
383         {0x3662, 0x88},
384         {0x3714, 0x28},
385         {0x3739, 0x10},
386         {0x37c2, 0x14},
387         {0x37d9, 0x06},
388         {0x37e2, 0x0c},
389         {0x3800, 0x00},
390         {0x3801, 0x00},
391         {0x3802, 0x00},
392         {0x3803, 0x08},
393         {0x3804, 0x10},
394         {0x3805, 0x8f},
395         {0x3806, 0x0c},
396         {0x3807, 0x47},
397         {0x3808, 0x08},
398         {0x3809, 0x38},
399         {0x380a, 0x06},
400         {0x380b, 0x18},
401         {0x380c, 0x04},
402         {0x380d, 0x98},
403         {0x380e, 0x06},
404         {0x380f, 0x3e},
405         {0x3810, 0x00},
406         {0x3811, 0x07},
407         {0x3812, 0x00},
408         {0x3813, 0x05},
409         {0x3814, 0x03},
410         {0x3816, 0x03},
411         {0x3820, 0x8b},
412         {0x3c8c, 0x18},
413         {0x4008, 0x00},
414         {0x4009, 0x05},
415         {0x4050, 0x00},
416         {0x4051, 0x05},
417         {0x4501, 0x08},
418         {0x4505, 0x00},
419         {0x4837, 0x0e},
420         {0x5000, 0xfd},
421         {0x5001, 0x0d},
422 };
423
424 static const struct ov13b10_reg mode_2080x1170_regs[] = {
425         {0x0305, 0xaf},
426         {0x3501, 0x06},
427         {0x3662, 0x88},
428         {0x3714, 0x28},
429         {0x3739, 0x10},
430         {0x37c2, 0x14},
431         {0x37d9, 0x06},
432         {0x37e2, 0x0c},
433         {0x3800, 0x00},
434         {0x3801, 0x00},
435         {0x3802, 0x00},
436         {0x3803, 0x08},
437         {0x3804, 0x10},
438         {0x3805, 0x8f},
439         {0x3806, 0x0c},
440         {0x3807, 0x47},
441         {0x3808, 0x08},
442         {0x3809, 0x20},
443         {0x380a, 0x04},
444         {0x380b, 0x92},
445         {0x380c, 0x04},
446         {0x380d, 0x98},
447         {0x380e, 0x06},
448         {0x380f, 0x3e},
449         {0x3810, 0x00},
450         {0x3811, 0x13},
451         {0x3812, 0x00},
452         {0x3813, 0xc9},
453         {0x3814, 0x03},
454         {0x3816, 0x03},
455         {0x3820, 0x8b},
456         {0x3c8c, 0x18},
457         {0x4008, 0x00},
458         {0x4009, 0x05},
459         {0x4050, 0x00},
460         {0x4051, 0x05},
461         {0x4501, 0x08},
462         {0x4505, 0x00},
463         {0x4837, 0x0e},
464         {0x5000, 0xfd},
465         {0x5001, 0x0d},
466 };
467
468 static const char * const ov13b10_test_pattern_menu[] = {
469         "Disabled",
470         "Vertical Color Bar Type 1",
471         "Vertical Color Bar Type 2",
472         "Vertical Color Bar Type 3",
473         "Vertical Color Bar Type 4"
474 };
475
476 /* Configurations for supported link frequencies */
477 #define OV13B10_LINK_FREQ_560MHZ        560000000ULL
478 #define OV13B10_LINK_FREQ_INDEX_0       0
479
480 #define OV13B10_EXT_CLK                 19200000
481 #define OV13B10_DATA_LANES              4
482
483 /*
484  * pixel_rate = link_freq * data-rate * nr_of_lanes / bits_per_sample
485  * data rate => double data rate; number of lanes => 4; bits per pixel => 10
486  */
487 static u64 link_freq_to_pixel_rate(u64 f)
488 {
489         f *= 2 * OV13B10_DATA_LANES;
490         do_div(f, 10);
491
492         return f;
493 }
494
495 /* Menu items for LINK_FREQ V4L2 control */
496 static const s64 link_freq_menu_items[] = {
497         OV13B10_LINK_FREQ_560MHZ
498 };
499
500 /* Link frequency configs */
501 static const struct ov13b10_link_freq_config
502                         link_freq_configs[] = {
503         {
504                 .pixels_per_line = OV13B10_PPL_560MHZ,
505                 .reg_list = {
506                         .num_of_regs = ARRAY_SIZE(mipi_data_rate_1120mbps),
507                         .regs = mipi_data_rate_1120mbps,
508                 }
509         }
510 };
511
512 /* Mode configs */
513 static const struct ov13b10_mode supported_modes[] = {
514         {
515                 .width = 4208,
516                 .height = 3120,
517                 .vts_def = OV13B10_VTS_30FPS,
518                 .vts_min = OV13B10_VTS_30FPS,
519                 .reg_list = {
520                         .num_of_regs = ARRAY_SIZE(mode_4208x3120_regs),
521                         .regs = mode_4208x3120_regs,
522                 },
523                 .link_freq_index = OV13B10_LINK_FREQ_INDEX_0,
524         },
525         {
526                 .width = 4160,
527                 .height = 3120,
528                 .vts_def = OV13B10_VTS_30FPS,
529                 .vts_min = OV13B10_VTS_30FPS,
530                 .reg_list = {
531                         .num_of_regs = ARRAY_SIZE(mode_4160x3120_regs),
532                         .regs = mode_4160x3120_regs,
533                 },
534                 .link_freq_index = OV13B10_LINK_FREQ_INDEX_0,
535         },
536         {
537                 .width = 4160,
538                 .height = 2340,
539                 .vts_def = OV13B10_VTS_30FPS,
540                 .vts_min = OV13B10_VTS_30FPS,
541                 .reg_list = {
542                         .num_of_regs = ARRAY_SIZE(mode_4160x2340_regs),
543                         .regs = mode_4160x2340_regs,
544                 },
545                 .link_freq_index = OV13B10_LINK_FREQ_INDEX_0,
546         },
547         {
548                 .width = 2104,
549                 .height = 1560,
550                 .vts_def = OV13B10_VTS_60FPS,
551                 .vts_min = OV13B10_VTS_60FPS,
552                 .reg_list = {
553                         .num_of_regs = ARRAY_SIZE(mode_2104x1560_regs),
554                         .regs = mode_2104x1560_regs,
555                 },
556                 .link_freq_index = OV13B10_LINK_FREQ_INDEX_0,
557         },
558         {
559                 .width = 2080,
560                 .height = 1170,
561                 .vts_def = OV13B10_VTS_60FPS,
562                 .vts_min = OV13B10_VTS_60FPS,
563                 .reg_list = {
564                         .num_of_regs = ARRAY_SIZE(mode_2080x1170_regs),
565                         .regs = mode_2080x1170_regs,
566                 },
567                 .link_freq_index = OV13B10_LINK_FREQ_INDEX_0,
568         }
569 };
570
571 struct ov13b10 {
572         struct v4l2_subdev sd;
573         struct media_pad pad;
574
575         struct v4l2_ctrl_handler ctrl_handler;
576         /* V4L2 Controls */
577         struct v4l2_ctrl *link_freq;
578         struct v4l2_ctrl *pixel_rate;
579         struct v4l2_ctrl *vblank;
580         struct v4l2_ctrl *hblank;
581         struct v4l2_ctrl *exposure;
582
583         /* Current mode */
584         const struct ov13b10_mode *cur_mode;
585
586         /* Mutex for serialized access */
587         struct mutex mutex;
588
589         /* Streaming on/off */
590         bool streaming;
591
592         /* True if the device has been identified */
593         bool identified;
594 };
595
596 #define to_ov13b10(_sd) container_of(_sd, struct ov13b10, sd)
597
598 /* Read registers up to 4 at a time */
599 static int ov13b10_read_reg(struct ov13b10 *ov13b,
600                             u16 reg, u32 len, u32 *val)
601 {
602         struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
603         struct i2c_msg msgs[2];
604         u8 *data_be_p;
605         int ret;
606         __be32 data_be = 0;
607         __be16 reg_addr_be = cpu_to_be16(reg);
608
609         if (len > 4)
610                 return -EINVAL;
611
612         data_be_p = (u8 *)&data_be;
613         /* Write register address */
614         msgs[0].addr = client->addr;
615         msgs[0].flags = 0;
616         msgs[0].len = 2;
617         msgs[0].buf = (u8 *)&reg_addr_be;
618
619         /* Read data from register */
620         msgs[1].addr = client->addr;
621         msgs[1].flags = I2C_M_RD;
622         msgs[1].len = len;
623         msgs[1].buf = &data_be_p[4 - len];
624
625         ret = i2c_transfer(client->adapter, msgs, ARRAY_SIZE(msgs));
626         if (ret != ARRAY_SIZE(msgs))
627                 return -EIO;
628
629         *val = be32_to_cpu(data_be);
630
631         return 0;
632 }
633
634 /* Write registers up to 4 at a time */
635 static int ov13b10_write_reg(struct ov13b10 *ov13b,
636                              u16 reg, u32 len, u32 __val)
637 {
638         struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
639         int buf_i, val_i;
640         u8 buf[6], *val_p;
641         __be32 val;
642
643         if (len > 4)
644                 return -EINVAL;
645
646         buf[0] = reg >> 8;
647         buf[1] = reg & 0xff;
648
649         val = cpu_to_be32(__val);
650         val_p = (u8 *)&val;
651         buf_i = 2;
652         val_i = 4 - len;
653
654         while (val_i < 4)
655                 buf[buf_i++] = val_p[val_i++];
656
657         if (i2c_master_send(client, buf, len + 2) != len + 2)
658                 return -EIO;
659
660         return 0;
661 }
662
663 /* Write a list of registers */
664 static int ov13b10_write_regs(struct ov13b10 *ov13b,
665                               const struct ov13b10_reg *regs, u32 len)
666 {
667         struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
668         int ret;
669         u32 i;
670
671         for (i = 0; i < len; i++) {
672                 ret = ov13b10_write_reg(ov13b, regs[i].address, 1,
673                                         regs[i].val);
674                 if (ret) {
675                         dev_err_ratelimited(&client->dev,
676                                             "Failed to write reg 0x%4.4x. error = %d\n",
677                                             regs[i].address, ret);
678
679                         return ret;
680                 }
681         }
682
683         return 0;
684 }
685
686 static int ov13b10_write_reg_list(struct ov13b10 *ov13b,
687                                   const struct ov13b10_reg_list *r_list)
688 {
689         return ov13b10_write_regs(ov13b, r_list->regs, r_list->num_of_regs);
690 }
691
692 /* Open sub-device */
693 static int ov13b10_open(struct v4l2_subdev *sd, struct v4l2_subdev_fh *fh)
694 {
695         const struct ov13b10_mode *default_mode = &supported_modes[0];
696         struct ov13b10 *ov13b = to_ov13b10(sd);
697         struct v4l2_mbus_framefmt *try_fmt = v4l2_subdev_get_try_format(sd,
698                                                                         fh->state,
699                                                                         0);
700
701         mutex_lock(&ov13b->mutex);
702
703         /* Initialize try_fmt */
704         try_fmt->width = default_mode->width;
705         try_fmt->height = default_mode->height;
706         try_fmt->code = MEDIA_BUS_FMT_SGRBG10_1X10;
707         try_fmt->field = V4L2_FIELD_NONE;
708
709         /* No crop or compose */
710         mutex_unlock(&ov13b->mutex);
711
712         return 0;
713 }
714
715 static int ov13b10_update_digital_gain(struct ov13b10 *ov13b, u32 d_gain)
716 {
717         int ret;
718         u32 val;
719
720         /*
721          * 0x350C[7:6], 0x350B[7:0], 0x350A[1:0]
722          */
723
724         val = (d_gain & OV13B10_DGTL_GAIN_L_MASK) << OV13B10_DGTL_GAIN_L_SHIFT;
725         ret = ov13b10_write_reg(ov13b, OV13B10_REG_DGTL_GAIN_L,
726                                 OV13B10_REG_VALUE_08BIT, val);
727         if (ret)
728                 return ret;
729
730         val = (d_gain >> OV13B10_DGTL_GAIN_M_SHIFT) & OV13B10_DGTL_GAIN_M_MASK;
731         ret = ov13b10_write_reg(ov13b, OV13B10_REG_DGTL_GAIN_M,
732                                 OV13B10_REG_VALUE_08BIT, val);
733         if (ret)
734                 return ret;
735
736         val = (d_gain >> OV13B10_DGTL_GAIN_H_SHIFT) & OV13B10_DGTL_GAIN_H_MASK;
737         ret = ov13b10_write_reg(ov13b, OV13B10_REG_DGTL_GAIN_H,
738                                 OV13B10_REG_VALUE_08BIT, val);
739
740         return ret;
741 }
742
743 static int ov13b10_enable_test_pattern(struct ov13b10 *ov13b, u32 pattern)
744 {
745         int ret;
746         u32 val;
747
748         ret = ov13b10_read_reg(ov13b, OV13B10_REG_TEST_PATTERN,
749                                OV13B10_REG_VALUE_08BIT, &val);
750         if (ret)
751                 return ret;
752
753         if (pattern) {
754                 val &= OV13B10_TEST_PATTERN_MASK;
755                 val |= ((pattern - 1) << OV13B10_TEST_PATTERN_BAR_SHIFT) |
756                      OV13B10_TEST_PATTERN_ENABLE;
757         } else {
758                 val &= ~OV13B10_TEST_PATTERN_ENABLE;
759         }
760
761         return ov13b10_write_reg(ov13b, OV13B10_REG_TEST_PATTERN,
762                                  OV13B10_REG_VALUE_08BIT, val);
763 }
764
765 static int ov13b10_set_ctrl_hflip(struct ov13b10 *ov13b, u32 ctrl_val)
766 {
767         int ret;
768         u32 val;
769
770         ret = ov13b10_read_reg(ov13b, OV13B10_REG_FORMAT1,
771                                OV13B10_REG_VALUE_08BIT, &val);
772         if (ret)
773                 return ret;
774
775         ret = ov13b10_write_reg(ov13b, OV13B10_REG_FORMAT1,
776                                 OV13B10_REG_VALUE_08BIT,
777                                 ctrl_val ? val & ~BIT(3) : val);
778
779         if (ret)
780                 return ret;
781
782         ret = ov13b10_read_reg(ov13b, OV13B10_REG_H_WIN_OFFSET,
783                                OV13B10_REG_VALUE_08BIT, &val);
784         if (ret)
785                 return ret;
786
787         /*
788          * Applying cropping offset to reverse the change of Bayer order
789          * after mirroring image
790          */
791         return ov13b10_write_reg(ov13b, OV13B10_REG_H_WIN_OFFSET,
792                                  OV13B10_REG_VALUE_08BIT,
793                                  ctrl_val ? ++val : val);
794 }
795
796 static int ov13b10_set_ctrl_vflip(struct ov13b10 *ov13b, u32 ctrl_val)
797 {
798         int ret;
799         u32 val;
800
801         ret = ov13b10_read_reg(ov13b, OV13B10_REG_FORMAT1,
802                                OV13B10_REG_VALUE_08BIT, &val);
803         if (ret)
804                 return ret;
805
806         ret = ov13b10_write_reg(ov13b, OV13B10_REG_FORMAT1,
807                                 OV13B10_REG_VALUE_08BIT,
808                                 ctrl_val ? val | BIT(4) | BIT(5)  : val);
809
810         if (ret)
811                 return ret;
812
813         ret = ov13b10_read_reg(ov13b, OV13B10_REG_V_WIN_OFFSET,
814                                OV13B10_REG_VALUE_08BIT, &val);
815         if (ret)
816                 return ret;
817
818         /*
819          * Applying cropping offset to reverse the change of Bayer order
820          * after flipping image
821          */
822         return ov13b10_write_reg(ov13b, OV13B10_REG_V_WIN_OFFSET,
823                                  OV13B10_REG_VALUE_08BIT,
824                                  ctrl_val ? --val : val);
825 }
826
827 static int ov13b10_set_ctrl(struct v4l2_ctrl *ctrl)
828 {
829         struct ov13b10 *ov13b = container_of(ctrl->handler,
830                                              struct ov13b10, ctrl_handler);
831         struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
832         s64 max;
833         int ret;
834
835         /* Propagate change of current control to all related controls */
836         switch (ctrl->id) {
837         case V4L2_CID_VBLANK:
838                 /* Update max exposure while meeting expected vblanking */
839                 max = ov13b->cur_mode->height + ctrl->val - 8;
840                 __v4l2_ctrl_modify_range(ov13b->exposure,
841                                          ov13b->exposure->minimum,
842                                          max, ov13b->exposure->step, max);
843                 break;
844         }
845
846         /*
847          * Applying V4L2 control value only happens
848          * when power is up for streaming
849          */
850         if (!pm_runtime_get_if_in_use(&client->dev))
851                 return 0;
852
853         ret = 0;
854         switch (ctrl->id) {
855         case V4L2_CID_ANALOGUE_GAIN:
856                 ret = ov13b10_write_reg(ov13b, OV13B10_REG_ANALOG_GAIN,
857                                         OV13B10_REG_VALUE_16BIT,
858                                         ctrl->val << 1);
859                 break;
860         case V4L2_CID_DIGITAL_GAIN:
861                 ret = ov13b10_update_digital_gain(ov13b, ctrl->val);
862                 break;
863         case V4L2_CID_EXPOSURE:
864                 ret = ov13b10_write_reg(ov13b, OV13B10_REG_EXPOSURE,
865                                         OV13B10_REG_VALUE_24BIT,
866                                         ctrl->val);
867                 break;
868         case V4L2_CID_VBLANK:
869                 ret = ov13b10_write_reg(ov13b, OV13B10_REG_VTS,
870                                         OV13B10_REG_VALUE_16BIT,
871                                         ov13b->cur_mode->height
872                                         + ctrl->val);
873                 break;
874         case V4L2_CID_TEST_PATTERN:
875                 ret = ov13b10_enable_test_pattern(ov13b, ctrl->val);
876                 break;
877         case V4L2_CID_HFLIP:
878                 ov13b10_set_ctrl_hflip(ov13b, ctrl->val);
879                 break;
880         case V4L2_CID_VFLIP:
881                 ov13b10_set_ctrl_vflip(ov13b, ctrl->val);
882                 break;
883         default:
884                 dev_info(&client->dev,
885                          "ctrl(id:0x%x,val:0x%x) is not handled\n",
886                          ctrl->id, ctrl->val);
887                 break;
888         }
889
890         pm_runtime_put(&client->dev);
891
892         return ret;
893 }
894
895 static const struct v4l2_ctrl_ops ov13b10_ctrl_ops = {
896         .s_ctrl = ov13b10_set_ctrl,
897 };
898
899 static int ov13b10_enum_mbus_code(struct v4l2_subdev *sd,
900                                   struct v4l2_subdev_state *sd_state,
901                                   struct v4l2_subdev_mbus_code_enum *code)
902 {
903         /* Only one bayer order(GRBG) is supported */
904         if (code->index > 0)
905                 return -EINVAL;
906
907         code->code = MEDIA_BUS_FMT_SGRBG10_1X10;
908
909         return 0;
910 }
911
912 static int ov13b10_enum_frame_size(struct v4l2_subdev *sd,
913                                    struct v4l2_subdev_state *sd_state,
914                                    struct v4l2_subdev_frame_size_enum *fse)
915 {
916         if (fse->index >= ARRAY_SIZE(supported_modes))
917                 return -EINVAL;
918
919         if (fse->code != MEDIA_BUS_FMT_SGRBG10_1X10)
920                 return -EINVAL;
921
922         fse->min_width = supported_modes[fse->index].width;
923         fse->max_width = fse->min_width;
924         fse->min_height = supported_modes[fse->index].height;
925         fse->max_height = fse->min_height;
926
927         return 0;
928 }
929
930 static void ov13b10_update_pad_format(const struct ov13b10_mode *mode,
931                                       struct v4l2_subdev_format *fmt)
932 {
933         fmt->format.width = mode->width;
934         fmt->format.height = mode->height;
935         fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
936         fmt->format.field = V4L2_FIELD_NONE;
937 }
938
939 static int ov13b10_do_get_pad_format(struct ov13b10 *ov13b,
940                                      struct v4l2_subdev_state *sd_state,
941                                      struct v4l2_subdev_format *fmt)
942 {
943         struct v4l2_mbus_framefmt *framefmt;
944         struct v4l2_subdev *sd = &ov13b->sd;
945
946         if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
947                 framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
948                 fmt->format = *framefmt;
949         } else {
950                 ov13b10_update_pad_format(ov13b->cur_mode, fmt);
951         }
952
953         return 0;
954 }
955
956 static int ov13b10_get_pad_format(struct v4l2_subdev *sd,
957                                   struct v4l2_subdev_state *sd_state,
958                                   struct v4l2_subdev_format *fmt)
959 {
960         struct ov13b10 *ov13b = to_ov13b10(sd);
961         int ret;
962
963         mutex_lock(&ov13b->mutex);
964         ret = ov13b10_do_get_pad_format(ov13b, sd_state, fmt);
965         mutex_unlock(&ov13b->mutex);
966
967         return ret;
968 }
969
970 static int
971 ov13b10_set_pad_format(struct v4l2_subdev *sd,
972                        struct v4l2_subdev_state *sd_state,
973                        struct v4l2_subdev_format *fmt)
974 {
975         struct ov13b10 *ov13b = to_ov13b10(sd);
976         const struct ov13b10_mode *mode;
977         struct v4l2_mbus_framefmt *framefmt;
978         s32 vblank_def;
979         s32 vblank_min;
980         s64 h_blank;
981         s64 pixel_rate;
982         s64 link_freq;
983
984         mutex_lock(&ov13b->mutex);
985
986         /* Only one raw bayer(GRBG) order is supported */
987         if (fmt->format.code != MEDIA_BUS_FMT_SGRBG10_1X10)
988                 fmt->format.code = MEDIA_BUS_FMT_SGRBG10_1X10;
989
990         mode = v4l2_find_nearest_size(supported_modes,
991                                       ARRAY_SIZE(supported_modes),
992                                       width, height,
993                                       fmt->format.width, fmt->format.height);
994         ov13b10_update_pad_format(mode, fmt);
995         if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
996                 framefmt = v4l2_subdev_get_try_format(sd, sd_state, fmt->pad);
997                 *framefmt = fmt->format;
998         } else {
999                 ov13b->cur_mode = mode;
1000                 __v4l2_ctrl_s_ctrl(ov13b->link_freq, mode->link_freq_index);
1001                 link_freq = link_freq_menu_items[mode->link_freq_index];
1002                 pixel_rate = link_freq_to_pixel_rate(link_freq);
1003                 __v4l2_ctrl_s_ctrl_int64(ov13b->pixel_rate, pixel_rate);
1004
1005                 /* Update limits and set FPS to default */
1006                 vblank_def = ov13b->cur_mode->vts_def -
1007                              ov13b->cur_mode->height;
1008                 vblank_min = ov13b->cur_mode->vts_min -
1009                              ov13b->cur_mode->height;
1010                 __v4l2_ctrl_modify_range(ov13b->vblank, vblank_min,
1011                                          OV13B10_VTS_MAX
1012                                          - ov13b->cur_mode->height,
1013                                          1,
1014                                          vblank_def);
1015                 __v4l2_ctrl_s_ctrl(ov13b->vblank, vblank_def);
1016                 h_blank =
1017                         link_freq_configs[mode->link_freq_index].pixels_per_line
1018                          - ov13b->cur_mode->width;
1019                 __v4l2_ctrl_modify_range(ov13b->hblank, h_blank,
1020                                          h_blank, 1, h_blank);
1021         }
1022
1023         mutex_unlock(&ov13b->mutex);
1024
1025         return 0;
1026 }
1027
1028 /* Verify chip ID */
1029 static int ov13b10_identify_module(struct ov13b10 *ov13b)
1030 {
1031         struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
1032         int ret;
1033         u32 val;
1034
1035         if (ov13b->identified)
1036                 return 0;
1037
1038         ret = ov13b10_read_reg(ov13b, OV13B10_REG_CHIP_ID,
1039                                OV13B10_REG_VALUE_24BIT, &val);
1040         if (ret)
1041                 return ret;
1042
1043         if (val != OV13B10_CHIP_ID) {
1044                 dev_err(&client->dev, "chip id mismatch: %x!=%x\n",
1045                         OV13B10_CHIP_ID, val);
1046                 return -EIO;
1047         }
1048
1049         ov13b->identified = true;
1050
1051         return 0;
1052 }
1053
1054 static int ov13b10_start_streaming(struct ov13b10 *ov13b)
1055 {
1056         struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
1057         const struct ov13b10_reg_list *reg_list;
1058         int ret, link_freq_index;
1059
1060         ret = ov13b10_identify_module(ov13b);
1061         if (ret)
1062                 return ret;
1063
1064         /* Get out of from software reset */
1065         ret = ov13b10_write_reg(ov13b, OV13B10_REG_SOFTWARE_RST,
1066                                 OV13B10_REG_VALUE_08BIT, OV13B10_SOFTWARE_RST);
1067         if (ret) {
1068                 dev_err(&client->dev, "%s failed to set powerup registers\n",
1069                         __func__);
1070                 return ret;
1071         }
1072
1073         link_freq_index = ov13b->cur_mode->link_freq_index;
1074         reg_list = &link_freq_configs[link_freq_index].reg_list;
1075         ret = ov13b10_write_reg_list(ov13b, reg_list);
1076         if (ret) {
1077                 dev_err(&client->dev, "%s failed to set plls\n", __func__);
1078                 return ret;
1079         }
1080
1081         /* Apply default values of current mode */
1082         reg_list = &ov13b->cur_mode->reg_list;
1083         ret = ov13b10_write_reg_list(ov13b, reg_list);
1084         if (ret) {
1085                 dev_err(&client->dev, "%s failed to set mode\n", __func__);
1086                 return ret;
1087         }
1088
1089         /* Apply customized values from user */
1090         ret =  __v4l2_ctrl_handler_setup(ov13b->sd.ctrl_handler);
1091         if (ret)
1092                 return ret;
1093
1094         return ov13b10_write_reg(ov13b, OV13B10_REG_MODE_SELECT,
1095                                  OV13B10_REG_VALUE_08BIT,
1096                                  OV13B10_MODE_STREAMING);
1097 }
1098
1099 /* Stop streaming */
1100 static int ov13b10_stop_streaming(struct ov13b10 *ov13b)
1101 {
1102         return ov13b10_write_reg(ov13b, OV13B10_REG_MODE_SELECT,
1103                                  OV13B10_REG_VALUE_08BIT, OV13B10_MODE_STANDBY);
1104 }
1105
1106 static int ov13b10_set_stream(struct v4l2_subdev *sd, int enable)
1107 {
1108         struct ov13b10 *ov13b = to_ov13b10(sd);
1109         struct i2c_client *client = v4l2_get_subdevdata(sd);
1110         int ret = 0;
1111
1112         mutex_lock(&ov13b->mutex);
1113         if (ov13b->streaming == enable) {
1114                 mutex_unlock(&ov13b->mutex);
1115                 return 0;
1116         }
1117
1118         if (enable) {
1119                 ret = pm_runtime_resume_and_get(&client->dev);
1120                 if (ret < 0)
1121                         goto err_unlock;
1122
1123                 /*
1124                  * Apply default & customized values
1125                  * and then start streaming.
1126                  */
1127                 ret = ov13b10_start_streaming(ov13b);
1128                 if (ret)
1129                         goto err_rpm_put;
1130         } else {
1131                 ov13b10_stop_streaming(ov13b);
1132                 pm_runtime_put(&client->dev);
1133         }
1134
1135         ov13b->streaming = enable;
1136         mutex_unlock(&ov13b->mutex);
1137
1138         return ret;
1139
1140 err_rpm_put:
1141         pm_runtime_put(&client->dev);
1142 err_unlock:
1143         mutex_unlock(&ov13b->mutex);
1144
1145         return ret;
1146 }
1147
1148 static int __maybe_unused ov13b10_suspend(struct device *dev)
1149 {
1150         struct v4l2_subdev *sd = dev_get_drvdata(dev);
1151         struct ov13b10 *ov13b = to_ov13b10(sd);
1152
1153         if (ov13b->streaming)
1154                 ov13b10_stop_streaming(ov13b);
1155
1156         return 0;
1157 }
1158
1159 static int __maybe_unused ov13b10_resume(struct device *dev)
1160 {
1161         struct v4l2_subdev *sd = dev_get_drvdata(dev);
1162         struct ov13b10 *ov13b = to_ov13b10(sd);
1163         int ret;
1164
1165         if (ov13b->streaming) {
1166                 ret = ov13b10_start_streaming(ov13b);
1167                 if (ret)
1168                         goto error;
1169         }
1170
1171         return 0;
1172
1173 error:
1174         ov13b10_stop_streaming(ov13b);
1175         ov13b->streaming = false;
1176         return ret;
1177 }
1178
1179 static const struct v4l2_subdev_video_ops ov13b10_video_ops = {
1180         .s_stream = ov13b10_set_stream,
1181 };
1182
1183 static const struct v4l2_subdev_pad_ops ov13b10_pad_ops = {
1184         .enum_mbus_code = ov13b10_enum_mbus_code,
1185         .get_fmt = ov13b10_get_pad_format,
1186         .set_fmt = ov13b10_set_pad_format,
1187         .enum_frame_size = ov13b10_enum_frame_size,
1188 };
1189
1190 static const struct v4l2_subdev_ops ov13b10_subdev_ops = {
1191         .video = &ov13b10_video_ops,
1192         .pad = &ov13b10_pad_ops,
1193 };
1194
1195 static const struct media_entity_operations ov13b10_subdev_entity_ops = {
1196         .link_validate = v4l2_subdev_link_validate,
1197 };
1198
1199 static const struct v4l2_subdev_internal_ops ov13b10_internal_ops = {
1200         .open = ov13b10_open,
1201 };
1202
1203 /* Initialize control handlers */
1204 static int ov13b10_init_controls(struct ov13b10 *ov13b)
1205 {
1206         struct i2c_client *client = v4l2_get_subdevdata(&ov13b->sd);
1207         struct v4l2_fwnode_device_properties props;
1208         struct v4l2_ctrl_handler *ctrl_hdlr;
1209         s64 exposure_max;
1210         s64 vblank_def;
1211         s64 vblank_min;
1212         s64 hblank;
1213         s64 pixel_rate_min;
1214         s64 pixel_rate_max;
1215         const struct ov13b10_mode *mode;
1216         u32 max;
1217         int ret;
1218
1219         ctrl_hdlr = &ov13b->ctrl_handler;
1220         ret = v4l2_ctrl_handler_init(ctrl_hdlr, 10);
1221         if (ret)
1222                 return ret;
1223
1224         mutex_init(&ov13b->mutex);
1225         ctrl_hdlr->lock = &ov13b->mutex;
1226         max = ARRAY_SIZE(link_freq_menu_items) - 1;
1227         ov13b->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr,
1228                                                   &ov13b10_ctrl_ops,
1229                                                   V4L2_CID_LINK_FREQ,
1230                                                   max,
1231                                                   0,
1232                                                   link_freq_menu_items);
1233         if (ov13b->link_freq)
1234                 ov13b->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1235
1236         pixel_rate_max = link_freq_to_pixel_rate(link_freq_menu_items[0]);
1237         pixel_rate_min = 0;
1238         /* By default, PIXEL_RATE is read only */
1239         ov13b->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1240                                               V4L2_CID_PIXEL_RATE,
1241                                               pixel_rate_min, pixel_rate_max,
1242                                               1, pixel_rate_max);
1243
1244         mode = ov13b->cur_mode;
1245         vblank_def = mode->vts_def - mode->height;
1246         vblank_min = mode->vts_min - mode->height;
1247         ov13b->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1248                                           V4L2_CID_VBLANK,
1249                                           vblank_min,
1250                                           OV13B10_VTS_MAX - mode->height, 1,
1251                                           vblank_def);
1252
1253         hblank = link_freq_configs[mode->link_freq_index].pixels_per_line -
1254                  mode->width;
1255         ov13b->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1256                                           V4L2_CID_HBLANK,
1257                                           hblank, hblank, 1, hblank);
1258         if (ov13b->hblank)
1259                 ov13b->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
1260
1261         exposure_max = mode->vts_def - 8;
1262         ov13b->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1263                                             V4L2_CID_EXPOSURE,
1264                                             OV13B10_EXPOSURE_MIN,
1265                                             exposure_max, OV13B10_EXPOSURE_STEP,
1266                                             exposure_max);
1267
1268         v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops, V4L2_CID_ANALOGUE_GAIN,
1269                           OV13B10_ANA_GAIN_MIN, OV13B10_ANA_GAIN_MAX,
1270                           OV13B10_ANA_GAIN_STEP, OV13B10_ANA_GAIN_DEFAULT);
1271
1272         /* Digital gain */
1273         v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops, V4L2_CID_DIGITAL_GAIN,
1274                           OV13B10_DGTL_GAIN_MIN, OV13B10_DGTL_GAIN_MAX,
1275                           OV13B10_DGTL_GAIN_STEP, OV13B10_DGTL_GAIN_DEFAULT);
1276
1277         v4l2_ctrl_new_std_menu_items(ctrl_hdlr, &ov13b10_ctrl_ops,
1278                                      V4L2_CID_TEST_PATTERN,
1279                                      ARRAY_SIZE(ov13b10_test_pattern_menu) - 1,
1280                                      0, 0, ov13b10_test_pattern_menu);
1281
1282         v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1283                           V4L2_CID_HFLIP, 0, 1, 1, 0);
1284         v4l2_ctrl_new_std(ctrl_hdlr, &ov13b10_ctrl_ops,
1285                           V4L2_CID_VFLIP, 0, 1, 1, 0);
1286
1287         if (ctrl_hdlr->error) {
1288                 ret = ctrl_hdlr->error;
1289                 dev_err(&client->dev, "%s control init failed (%d)\n",
1290                         __func__, ret);
1291                 goto error;
1292         }
1293
1294         ret = v4l2_fwnode_device_parse(&client->dev, &props);
1295         if (ret)
1296                 goto error;
1297
1298         ret = v4l2_ctrl_new_fwnode_properties(ctrl_hdlr, &ov13b10_ctrl_ops,
1299                                               &props);
1300         if (ret)
1301                 goto error;
1302
1303         ov13b->sd.ctrl_handler = ctrl_hdlr;
1304
1305         return 0;
1306
1307 error:
1308         v4l2_ctrl_handler_free(ctrl_hdlr);
1309         mutex_destroy(&ov13b->mutex);
1310
1311         return ret;
1312 }
1313
1314 static void ov13b10_free_controls(struct ov13b10 *ov13b)
1315 {
1316         v4l2_ctrl_handler_free(ov13b->sd.ctrl_handler);
1317         mutex_destroy(&ov13b->mutex);
1318 }
1319
1320 static int ov13b10_check_hwcfg(struct device *dev)
1321 {
1322         struct v4l2_fwnode_endpoint bus_cfg = {
1323                 .bus_type = V4L2_MBUS_CSI2_DPHY
1324         };
1325         struct fwnode_handle *ep;
1326         struct fwnode_handle *fwnode = dev_fwnode(dev);
1327         unsigned int i, j;
1328         int ret;
1329         u32 ext_clk;
1330
1331         if (!fwnode)
1332                 return -ENXIO;
1333
1334         ret = fwnode_property_read_u32(dev_fwnode(dev), "clock-frequency",
1335                                        &ext_clk);
1336         if (ret) {
1337                 dev_err(dev, "can't get clock frequency");
1338                 return ret;
1339         }
1340
1341         if (ext_clk != OV13B10_EXT_CLK) {
1342                 dev_err(dev, "external clock %d is not supported",
1343                         ext_clk);
1344                 return -EINVAL;
1345         }
1346
1347         ep = fwnode_graph_get_next_endpoint(fwnode, NULL);
1348         if (!ep)
1349                 return -ENXIO;
1350
1351         ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
1352         fwnode_handle_put(ep);
1353         if (ret)
1354                 return ret;
1355
1356         if (bus_cfg.bus.mipi_csi2.num_data_lanes != OV13B10_DATA_LANES) {
1357                 dev_err(dev, "number of CSI2 data lanes %d is not supported",
1358                         bus_cfg.bus.mipi_csi2.num_data_lanes);
1359                 ret = -EINVAL;
1360                 goto out_err;
1361         }
1362
1363         if (!bus_cfg.nr_of_link_frequencies) {
1364                 dev_err(dev, "no link frequencies defined");
1365                 ret = -EINVAL;
1366                 goto out_err;
1367         }
1368
1369         for (i = 0; i < ARRAY_SIZE(link_freq_menu_items); i++) {
1370                 for (j = 0; j < bus_cfg.nr_of_link_frequencies; j++) {
1371                         if (link_freq_menu_items[i] ==
1372                                 bus_cfg.link_frequencies[j])
1373                                 break;
1374                 }
1375
1376                 if (j == bus_cfg.nr_of_link_frequencies) {
1377                         dev_err(dev, "no link frequency %lld supported",
1378                                 link_freq_menu_items[i]);
1379                         ret = -EINVAL;
1380                         goto out_err;
1381                 }
1382         }
1383
1384 out_err:
1385         v4l2_fwnode_endpoint_free(&bus_cfg);
1386
1387         return ret;
1388 }
1389
1390 static int ov13b10_probe(struct i2c_client *client)
1391 {
1392         struct ov13b10 *ov13b;
1393         bool full_power;
1394         int ret;
1395
1396         /* Check HW config */
1397         ret = ov13b10_check_hwcfg(&client->dev);
1398         if (ret) {
1399                 dev_err(&client->dev, "failed to check hwcfg: %d", ret);
1400                 return ret;
1401         }
1402
1403         ov13b = devm_kzalloc(&client->dev, sizeof(*ov13b), GFP_KERNEL);
1404         if (!ov13b)
1405                 return -ENOMEM;
1406
1407         /* Initialize subdev */
1408         v4l2_i2c_subdev_init(&ov13b->sd, client, &ov13b10_subdev_ops);
1409
1410         full_power = acpi_dev_state_d0(&client->dev);
1411         if (full_power) {
1412                 /* Check module identity */
1413                 ret = ov13b10_identify_module(ov13b);
1414                 if (ret) {
1415                         dev_err(&client->dev, "failed to find sensor: %d\n", ret);
1416                         return ret;
1417                 }
1418         }
1419
1420         /* Set default mode to max resolution */
1421         ov13b->cur_mode = &supported_modes[0];
1422
1423         ret = ov13b10_init_controls(ov13b);
1424         if (ret)
1425                 return ret;
1426
1427         /* Initialize subdev */
1428         ov13b->sd.internal_ops = &ov13b10_internal_ops;
1429         ov13b->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
1430         ov13b->sd.entity.ops = &ov13b10_subdev_entity_ops;
1431         ov13b->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
1432
1433         /* Initialize source pad */
1434         ov13b->pad.flags = MEDIA_PAD_FL_SOURCE;
1435         ret = media_entity_pads_init(&ov13b->sd.entity, 1, &ov13b->pad);
1436         if (ret) {
1437                 dev_err(&client->dev, "%s failed:%d\n", __func__, ret);
1438                 goto error_handler_free;
1439         }
1440
1441         ret = v4l2_async_register_subdev_sensor(&ov13b->sd);
1442         if (ret < 0)
1443                 goto error_media_entity;
1444
1445         /*
1446          * Device is already turned on by i2c-core with ACPI domain PM.
1447          * Enable runtime PM and turn off the device.
1448          */
1449
1450         /* Set the device's state to active if it's in D0 state. */
1451         if (full_power)
1452                 pm_runtime_set_active(&client->dev);
1453         pm_runtime_enable(&client->dev);
1454         pm_runtime_idle(&client->dev);
1455
1456         return 0;
1457
1458 error_media_entity:
1459         media_entity_cleanup(&ov13b->sd.entity);
1460
1461 error_handler_free:
1462         ov13b10_free_controls(ov13b);
1463         dev_err(&client->dev, "%s failed:%d\n", __func__, ret);
1464
1465         return ret;
1466 }
1467
1468 static void ov13b10_remove(struct i2c_client *client)
1469 {
1470         struct v4l2_subdev *sd = i2c_get_clientdata(client);
1471         struct ov13b10 *ov13b = to_ov13b10(sd);
1472
1473         v4l2_async_unregister_subdev(sd);
1474         media_entity_cleanup(&sd->entity);
1475         ov13b10_free_controls(ov13b);
1476
1477         pm_runtime_disable(&client->dev);
1478 }
1479
1480 static const struct dev_pm_ops ov13b10_pm_ops = {
1481         SET_SYSTEM_SLEEP_PM_OPS(ov13b10_suspend, ov13b10_resume)
1482 };
1483
1484 #ifdef CONFIG_ACPI
1485 static const struct acpi_device_id ov13b10_acpi_ids[] = {
1486         {"OVTIDB10"},
1487         { /* sentinel */ }
1488 };
1489
1490 MODULE_DEVICE_TABLE(acpi, ov13b10_acpi_ids);
1491 #endif
1492
1493 static struct i2c_driver ov13b10_i2c_driver = {
1494         .driver = {
1495                 .name = "ov13b10",
1496                 .pm = &ov13b10_pm_ops,
1497                 .acpi_match_table = ACPI_PTR(ov13b10_acpi_ids),
1498         },
1499         .probe = ov13b10_probe,
1500         .remove = ov13b10_remove,
1501         .flags = I2C_DRV_ACPI_WAIVE_D0_PROBE,
1502 };
1503
1504 module_i2c_driver(ov13b10_i2c_driver);
1505
1506 MODULE_AUTHOR("Kao, Arec <arec.kao@intel.com>");
1507 MODULE_DESCRIPTION("Omnivision ov13b10 sensor driver");
1508 MODULE_LICENSE("GPL v2");