Linux-libre 5.7.6-gnu
[librecmc/linux-libre.git] / drivers / media / i2c / imx290.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Sony IMX290 CMOS Image Sensor Driver
4  *
5  * Copyright (C) 2019 FRAMOS GmbH.
6  *
7  * Copyright (C) 2019 Linaro Ltd.
8  * Author: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
9  */
10
11 #include <linux/clk.h>
12 #include <linux/delay.h>
13 #include <linux/gpio/consumer.h>
14 #include <linux/i2c.h>
15 #include <linux/module.h>
16 #include <linux/pm_runtime.h>
17 #include <linux/regmap.h>
18 #include <linux/regulator/consumer.h>
19 #include <media/media-entity.h>
20 #include <media/v4l2-ctrls.h>
21 #include <media/v4l2-device.h>
22 #include <media/v4l2-fwnode.h>
23 #include <media/v4l2-subdev.h>
24
25 #define IMX290_STANDBY 0x3000
26 #define IMX290_REGHOLD 0x3001
27 #define IMX290_XMSTA 0x3002
28 #define IMX290_GAIN 0x3014
29
30 #define IMX290_DEFAULT_LINK_FREQ 445500000
31
32 static const char * const imx290_supply_name[] = {
33         "vdda",
34         "vddd",
35         "vdddo",
36 };
37
38 #define IMX290_NUM_SUPPLIES ARRAY_SIZE(imx290_supply_name)
39
40 struct imx290_regval {
41         u16 reg;
42         u8 val;
43 };
44
45 struct imx290_mode {
46         u32 width;
47         u32 height;
48         u32 pixel_rate;
49         u32 link_freq_index;
50
51         const struct imx290_regval *data;
52         u32 data_size;
53 };
54
55 struct imx290 {
56         struct device *dev;
57         struct clk *xclk;
58         struct regmap *regmap;
59
60         struct v4l2_subdev sd;
61         struct v4l2_fwnode_endpoint ep;
62         struct media_pad pad;
63         struct v4l2_mbus_framefmt current_format;
64         const struct imx290_mode *current_mode;
65
66         struct regulator_bulk_data supplies[IMX290_NUM_SUPPLIES];
67         struct gpio_desc *rst_gpio;
68
69         struct v4l2_ctrl_handler ctrls;
70         struct v4l2_ctrl *link_freq;
71         struct v4l2_ctrl *pixel_rate;
72
73         struct mutex lock;
74 };
75
76 struct imx290_pixfmt {
77         u32 code;
78 };
79
80 static const struct imx290_pixfmt imx290_formats[] = {
81         { MEDIA_BUS_FMT_SRGGB10_1X10 },
82 };
83
84 static const struct regmap_config imx290_regmap_config = {
85         .reg_bits = 16,
86         .val_bits = 8,
87         .cache_type = REGCACHE_RBTREE,
88 };
89
90 static const struct imx290_regval imx290_global_init_settings[] = {
91         { 0x3007, 0x00 },
92         { 0x3009, 0x00 },
93         { 0x3018, 0x65 },
94         { 0x3019, 0x04 },
95         { 0x301a, 0x00 },
96         { 0x3443, 0x03 },
97         { 0x3444, 0x20 },
98         { 0x3445, 0x25 },
99         { 0x3407, 0x03 },
100         { 0x303a, 0x0c },
101         { 0x3040, 0x00 },
102         { 0x3041, 0x00 },
103         { 0x303c, 0x00 },
104         { 0x303d, 0x00 },
105         { 0x3042, 0x9c },
106         { 0x3043, 0x07 },
107         { 0x303e, 0x49 },
108         { 0x303f, 0x04 },
109         { 0x304b, 0x0a },
110         { 0x300f, 0x00 },
111         { 0x3010, 0x21 },
112         { 0x3012, 0x64 },
113         { 0x3016, 0x09 },
114         { 0x3070, 0x02 },
115         { 0x3071, 0x11 },
116         { 0x309b, 0x10 },
117         { 0x309c, 0x22 },
118         { 0x30a2, 0x02 },
119         { 0x30a6, 0x20 },
120         { 0x30a8, 0x20 },
121         { 0x30aa, 0x20 },
122         { 0x30ac, 0x20 },
123         { 0x30b0, 0x43 },
124         { 0x3119, 0x9e },
125         { 0x311c, 0x1e },
126         { 0x311e, 0x08 },
127         { 0x3128, 0x05 },
128         { 0x313d, 0x83 },
129         { 0x3150, 0x03 },
130         { 0x317e, 0x00 },
131         { 0x32b8, 0x50 },
132         { 0x32b9, 0x10 },
133         { 0x32ba, 0x00 },
134         { 0x32bb, 0x04 },
135         { 0x32c8, 0x50 },
136         { 0x32c9, 0x10 },
137         { 0x32ca, 0x00 },
138         { 0x32cb, 0x04 },
139         { 0x332c, 0xd3 },
140         { 0x332d, 0x10 },
141         { 0x332e, 0x0d },
142         { 0x3358, 0x06 },
143         { 0x3359, 0xe1 },
144         { 0x335a, 0x11 },
145         { 0x3360, 0x1e },
146         { 0x3361, 0x61 },
147         { 0x3362, 0x10 },
148         { 0x33b0, 0x50 },
149         { 0x33b2, 0x1a },
150         { 0x33b3, 0x04 },
151 };
152
153 static const struct imx290_regval imx290_1080p_settings[] = {
154         /* mode settings */
155         { 0x3007, 0x00 },
156         { 0x303a, 0x0c },
157         { 0x3414, 0x0a },
158         { 0x3472, 0x80 },
159         { 0x3473, 0x07 },
160         { 0x3418, 0x38 },
161         { 0x3419, 0x04 },
162         { 0x3012, 0x64 },
163         { 0x3013, 0x00 },
164         { 0x305c, 0x18 },
165         { 0x305d, 0x03 },
166         { 0x305e, 0x20 },
167         { 0x305f, 0x01 },
168         { 0x315e, 0x1a },
169         { 0x3164, 0x1a },
170         { 0x3480, 0x49 },
171         /* data rate settings */
172         { 0x3009, 0x01 },
173         { 0x3405, 0x10 },
174         { 0x3446, 0x57 },
175         { 0x3447, 0x00 },
176         { 0x3448, 0x37 },
177         { 0x3449, 0x00 },
178         { 0x344a, 0x1f },
179         { 0x344b, 0x00 },
180         { 0x344c, 0x1f },
181         { 0x344d, 0x00 },
182         { 0x344e, 0x1f },
183         { 0x344f, 0x00 },
184         { 0x3450, 0x77 },
185         { 0x3451, 0x00 },
186         { 0x3452, 0x1f },
187         { 0x3453, 0x00 },
188         { 0x3454, 0x17 },
189         { 0x3455, 0x00 },
190         { 0x301c, 0x98 },
191         { 0x301d, 0x08 },
192 };
193
194 static const struct imx290_regval imx290_720p_settings[] = {
195         /* mode settings */
196         { 0x3007, 0x10 },
197         { 0x303a, 0x06 },
198         { 0x3414, 0x04 },
199         { 0x3472, 0x00 },
200         { 0x3473, 0x05 },
201         { 0x3418, 0xd0 },
202         { 0x3419, 0x02 },
203         { 0x3012, 0x64 },
204         { 0x3013, 0x00 },
205         { 0x305c, 0x20 },
206         { 0x305d, 0x00 },
207         { 0x305e, 0x20 },
208         { 0x305f, 0x01 },
209         { 0x315e, 0x1a },
210         { 0x3164, 0x1a },
211         { 0x3480, 0x49 },
212         /* data rate settings */
213         { 0x3009, 0x01 },
214         { 0x3405, 0x10 },
215         { 0x3446, 0x4f },
216         { 0x3447, 0x00 },
217         { 0x3448, 0x2f },
218         { 0x3449, 0x00 },
219         { 0x344a, 0x17 },
220         { 0x344b, 0x00 },
221         { 0x344c, 0x17 },
222         { 0x344d, 0x00 },
223         { 0x344e, 0x17 },
224         { 0x344f, 0x00 },
225         { 0x3450, 0x57 },
226         { 0x3451, 0x00 },
227         { 0x3452, 0x17 },
228         { 0x3453, 0x00 },
229         { 0x3454, 0x17 },
230         { 0x3455, 0x00 },
231         { 0x301c, 0xe4 },
232         { 0x301d, 0x0c },
233 };
234
235 static const struct imx290_regval imx290_10bit_settings[] = {
236         { 0x3005, 0x00},
237         { 0x3046, 0x00},
238         { 0x3129, 0x1d},
239         { 0x317c, 0x12},
240         { 0x31ec, 0x37},
241         { 0x3441, 0x0a},
242         { 0x3442, 0x0a},
243         { 0x300a, 0x3c},
244         { 0x300b, 0x00},
245 };
246
247 /* supported link frequencies */
248 static const s64 imx290_link_freq[] = {
249         IMX290_DEFAULT_LINK_FREQ,
250 };
251
252 /* Mode configs */
253 static const struct imx290_mode imx290_modes[] = {
254         {
255                 .width = 1920,
256                 .height = 1080,
257                 .data = imx290_1080p_settings,
258                 .data_size = ARRAY_SIZE(imx290_1080p_settings),
259                 .pixel_rate = 178200000,
260                 .link_freq_index = 0,
261         },
262         {
263                 .width = 1280,
264                 .height = 720,
265                 .data = imx290_720p_settings,
266                 .data_size = ARRAY_SIZE(imx290_720p_settings),
267                 .pixel_rate = 178200000,
268                 .link_freq_index = 0,
269         },
270 };
271
272 static inline struct imx290 *to_imx290(struct v4l2_subdev *_sd)
273 {
274         return container_of(_sd, struct imx290, sd);
275 }
276
277 static inline int imx290_read_reg(struct imx290 *imx290, u16 addr, u8 *value)
278 {
279         unsigned int regval;
280         int ret;
281
282         ret = regmap_read(imx290->regmap, addr, &regval);
283         if (ret) {
284                 dev_err(imx290->dev, "I2C read failed for addr: %x\n", addr);
285                 return ret;
286         }
287
288         *value = regval & 0xff;
289
290         return 0;
291 }
292
293 static int imx290_write_reg(struct imx290 *imx290, u16 addr, u8 value)
294 {
295         int ret;
296
297         ret = regmap_write(imx290->regmap, addr, value);
298         if (ret) {
299                 dev_err(imx290->dev, "I2C write failed for addr: %x\n", addr);
300                 return ret;
301         }
302
303         return ret;
304 }
305
306 static int imx290_set_register_array(struct imx290 *imx290,
307                                      const struct imx290_regval *settings,
308                                      unsigned int num_settings)
309 {
310         unsigned int i;
311         int ret;
312
313         for (i = 0; i < num_settings; ++i, ++settings) {
314                 ret = imx290_write_reg(imx290, settings->reg, settings->val);
315                 if (ret < 0)
316                         return ret;
317
318                 /* Settle time is 10ms for all registers */
319                 msleep(10);
320         }
321
322         return 0;
323 }
324
325 static int imx290_write_buffered_reg(struct imx290 *imx290, u16 address_low,
326                                      u8 nr_regs, u32 value)
327 {
328         unsigned int i;
329         int ret;
330
331         ret = imx290_write_reg(imx290, IMX290_REGHOLD, 0x01);
332         if (ret) {
333                 dev_err(imx290->dev, "Error setting hold register\n");
334                 return ret;
335         }
336
337         for (i = 0; i < nr_regs; i++) {
338                 ret = imx290_write_reg(imx290, address_low + i,
339                                        (u8)(value >> (i * 8)));
340                 if (ret) {
341                         dev_err(imx290->dev, "Error writing buffered registers\n");
342                         return ret;
343                 }
344         }
345
346         ret = imx290_write_reg(imx290, IMX290_REGHOLD, 0x00);
347         if (ret) {
348                 dev_err(imx290->dev, "Error setting hold register\n");
349                 return ret;
350         }
351
352         return ret;
353 }
354
355 static int imx290_set_gain(struct imx290 *imx290, u32 value)
356 {
357         int ret;
358
359         ret = imx290_write_buffered_reg(imx290, IMX290_GAIN, 1, value);
360         if (ret)
361                 dev_err(imx290->dev, "Unable to write gain\n");
362
363         return ret;
364 }
365
366 /* Stop streaming */
367 static int imx290_stop_streaming(struct imx290 *imx290)
368 {
369         int ret;
370
371         ret = imx290_write_reg(imx290, IMX290_STANDBY, 0x01);
372         if (ret < 0)
373                 return ret;
374
375         msleep(30);
376
377         return imx290_write_reg(imx290, IMX290_XMSTA, 0x01);
378 }
379
380 static int imx290_set_ctrl(struct v4l2_ctrl *ctrl)
381 {
382         struct imx290 *imx290 = container_of(ctrl->handler,
383                                              struct imx290, ctrls);
384         int ret = 0;
385
386         /* V4L2 controls values will be applied only when power is already up */
387         if (!pm_runtime_get_if_in_use(imx290->dev))
388                 return 0;
389
390         switch (ctrl->id) {
391         case V4L2_CID_GAIN:
392                 ret = imx290_set_gain(imx290, ctrl->val);
393                 break;
394         default:
395                 ret = -EINVAL;
396                 break;
397         }
398
399         pm_runtime_put(imx290->dev);
400
401         return ret;
402 }
403
404 static const struct v4l2_ctrl_ops imx290_ctrl_ops = {
405         .s_ctrl = imx290_set_ctrl,
406 };
407
408 static int imx290_enum_mbus_code(struct v4l2_subdev *sd,
409                                  struct v4l2_subdev_pad_config *cfg,
410                                  struct v4l2_subdev_mbus_code_enum *code)
411 {
412         if (code->index >= ARRAY_SIZE(imx290_formats))
413                 return -EINVAL;
414
415         code->code = imx290_formats[code->index].code;
416
417         return 0;
418 }
419
420 static int imx290_get_fmt(struct v4l2_subdev *sd,
421                           struct v4l2_subdev_pad_config *cfg,
422                           struct v4l2_subdev_format *fmt)
423 {
424         struct imx290 *imx290 = to_imx290(sd);
425         struct v4l2_mbus_framefmt *framefmt;
426
427         mutex_lock(&imx290->lock);
428
429         if (fmt->which == V4L2_SUBDEV_FORMAT_TRY)
430                 framefmt = v4l2_subdev_get_try_format(&imx290->sd, cfg,
431                                                       fmt->pad);
432         else
433                 framefmt = &imx290->current_format;
434
435         fmt->format = *framefmt;
436
437         mutex_unlock(&imx290->lock);
438
439         return 0;
440 }
441
442 static int imx290_set_fmt(struct v4l2_subdev *sd,
443                           struct v4l2_subdev_pad_config *cfg,
444                       struct v4l2_subdev_format *fmt)
445 {
446         struct imx290 *imx290 = to_imx290(sd);
447         const struct imx290_mode *mode;
448         struct v4l2_mbus_framefmt *format;
449         unsigned int i;
450
451         mutex_lock(&imx290->lock);
452
453         mode = v4l2_find_nearest_size(imx290_modes,
454                                       ARRAY_SIZE(imx290_modes),
455                                       width, height,
456                                       fmt->format.width, fmt->format.height);
457
458         fmt->format.width = mode->width;
459         fmt->format.height = mode->height;
460
461         for (i = 0; i < ARRAY_SIZE(imx290_formats); i++)
462                 if (imx290_formats[i].code == fmt->format.code)
463                         break;
464
465         if (i >= ARRAY_SIZE(imx290_formats))
466                 i = 0;
467
468         fmt->format.code = imx290_formats[i].code;
469         fmt->format.field = V4L2_FIELD_NONE;
470
471         if (fmt->which == V4L2_SUBDEV_FORMAT_TRY) {
472                 format = v4l2_subdev_get_try_format(sd, cfg, fmt->pad);
473         } else {
474                 format = &imx290->current_format;
475                 __v4l2_ctrl_s_ctrl(imx290->link_freq, mode->link_freq_index);
476                 __v4l2_ctrl_s_ctrl_int64(imx290->pixel_rate, mode->pixel_rate);
477
478                 imx290->current_mode = mode;
479         }
480
481         *format = fmt->format;
482
483         mutex_unlock(&imx290->lock);
484
485         return 0;
486 }
487
488 static int imx290_entity_init_cfg(struct v4l2_subdev *subdev,
489                                   struct v4l2_subdev_pad_config *cfg)
490 {
491         struct v4l2_subdev_format fmt = { 0 };
492
493         fmt.which = cfg ? V4L2_SUBDEV_FORMAT_TRY : V4L2_SUBDEV_FORMAT_ACTIVE;
494         fmt.format.width = 1920;
495         fmt.format.height = 1080;
496
497         imx290_set_fmt(subdev, cfg, &fmt);
498
499         return 0;
500 }
501
502 static int imx290_write_current_format(struct imx290 *imx290,
503                                        struct v4l2_mbus_framefmt *format)
504 {
505         int ret;
506
507         switch (format->code) {
508         case MEDIA_BUS_FMT_SRGGB10_1X10:
509                 ret = imx290_set_register_array(imx290, imx290_10bit_settings,
510                                                 ARRAY_SIZE(
511                                                         imx290_10bit_settings));
512                 if (ret < 0) {
513                         dev_err(imx290->dev, "Could not set format registers\n");
514                         return ret;
515                 }
516                 break;
517         default:
518                 dev_err(imx290->dev, "Unknown pixel format\n");
519                 return -EINVAL;
520         }
521
522         return 0;
523 }
524
525 /* Start streaming */
526 static int imx290_start_streaming(struct imx290 *imx290)
527 {
528         int ret;
529
530         /* Set init register settings */
531         ret = imx290_set_register_array(imx290, imx290_global_init_settings,
532                                         ARRAY_SIZE(
533                                                 imx290_global_init_settings));
534         if (ret < 0) {
535                 dev_err(imx290->dev, "Could not set init registers\n");
536                 return ret;
537         }
538
539         /* Set current frame format */
540         ret = imx290_write_current_format(imx290, &imx290->current_format);
541         if (ret < 0) {
542                 dev_err(imx290->dev, "Could not set frame format\n");
543                 return ret;
544         }
545
546         /* Apply default values of current mode */
547         ret = imx290_set_register_array(imx290, imx290->current_mode->data,
548                                         imx290->current_mode->data_size);
549         if (ret < 0) {
550                 dev_err(imx290->dev, "Could not set current mode\n");
551                 return ret;
552         }
553
554         /* Apply customized values from user */
555         ret = v4l2_ctrl_handler_setup(imx290->sd.ctrl_handler);
556         if (ret) {
557                 dev_err(imx290->dev, "Could not sync v4l2 controls\n");
558                 return ret;
559         }
560
561         ret = imx290_write_reg(imx290, IMX290_STANDBY, 0x00);
562         if (ret < 0)
563                 return ret;
564
565         msleep(30);
566
567         /* Start streaming */
568         return imx290_write_reg(imx290, IMX290_XMSTA, 0x00);
569 }
570
571 static int imx290_set_stream(struct v4l2_subdev *sd, int enable)
572 {
573         struct imx290 *imx290 = to_imx290(sd);
574         int ret = 0;
575
576         if (enable) {
577                 ret = pm_runtime_get_sync(imx290->dev);
578                 if (ret < 0) {
579                         pm_runtime_put_noidle(imx290->dev);
580                         goto unlock_and_return;
581                 }
582
583                 ret = imx290_start_streaming(imx290);
584                 if (ret) {
585                         dev_err(imx290->dev, "Start stream failed\n");
586                         pm_runtime_put(imx290->dev);
587                         goto unlock_and_return;
588                 }
589         } else {
590                 imx290_stop_streaming(imx290);
591                 pm_runtime_put(imx290->dev);
592         }
593
594 unlock_and_return:
595
596         return ret;
597 }
598
599 static int imx290_get_regulators(struct device *dev, struct imx290 *imx290)
600 {
601         unsigned int i;
602
603         for (i = 0; i < IMX290_NUM_SUPPLIES; i++)
604                 imx290->supplies[i].supply = imx290_supply_name[i];
605
606         return devm_regulator_bulk_get(dev, IMX290_NUM_SUPPLIES,
607                                        imx290->supplies);
608 }
609
610 static int imx290_power_on(struct device *dev)
611 {
612         struct i2c_client *client = to_i2c_client(dev);
613         struct v4l2_subdev *sd = i2c_get_clientdata(client);
614         struct imx290 *imx290 = to_imx290(sd);
615         int ret;
616
617         ret = clk_prepare_enable(imx290->xclk);
618         if (ret) {
619                 dev_err(imx290->dev, "Failed to enable clock\n");
620                 return ret;
621         }
622
623         ret = regulator_bulk_enable(IMX290_NUM_SUPPLIES, imx290->supplies);
624         if (ret) {
625                 dev_err(imx290->dev, "Failed to enable regulators\n");
626                 clk_disable_unprepare(imx290->xclk);
627                 return ret;
628         }
629
630         usleep_range(1, 2);
631         gpiod_set_value_cansleep(imx290->rst_gpio, 1);
632         usleep_range(30000, 31000);
633
634         return 0;
635 }
636
637 static int imx290_power_off(struct device *dev)
638 {
639         struct i2c_client *client = to_i2c_client(dev);
640         struct v4l2_subdev *sd = i2c_get_clientdata(client);
641         struct imx290 *imx290 = to_imx290(sd);
642
643         clk_disable_unprepare(imx290->xclk);
644         gpiod_set_value_cansleep(imx290->rst_gpio, 0);
645         regulator_bulk_disable(IMX290_NUM_SUPPLIES, imx290->supplies);
646
647         return 0;
648 }
649
650 static const struct dev_pm_ops imx290_pm_ops = {
651         SET_RUNTIME_PM_OPS(imx290_power_on, imx290_power_off, NULL)
652 };
653
654 static const struct v4l2_subdev_video_ops imx290_video_ops = {
655         .s_stream = imx290_set_stream,
656 };
657
658 static const struct v4l2_subdev_pad_ops imx290_pad_ops = {
659         .init_cfg = imx290_entity_init_cfg,
660         .enum_mbus_code = imx290_enum_mbus_code,
661         .get_fmt = imx290_get_fmt,
662         .set_fmt = imx290_set_fmt,
663 };
664
665 static const struct v4l2_subdev_ops imx290_subdev_ops = {
666         .video = &imx290_video_ops,
667         .pad = &imx290_pad_ops,
668 };
669
670 static const struct media_entity_operations imx290_subdev_entity_ops = {
671         .link_validate = v4l2_subdev_link_validate,
672 };
673
674 static int imx290_probe(struct i2c_client *client)
675 {
676         struct device *dev = &client->dev;
677         struct fwnode_handle *endpoint;
678         struct imx290 *imx290;
679         u32 xclk_freq;
680         int ret;
681
682         imx290 = devm_kzalloc(dev, sizeof(*imx290), GFP_KERNEL);
683         if (!imx290)
684                 return -ENOMEM;
685
686         imx290->dev = dev;
687         imx290->regmap = devm_regmap_init_i2c(client, &imx290_regmap_config);
688         if (IS_ERR(imx290->regmap)) {
689                 dev_err(dev, "Unable to initialize I2C\n");
690                 return -ENODEV;
691         }
692
693         endpoint = fwnode_graph_get_next_endpoint(dev_fwnode(dev), NULL);
694         if (!endpoint) {
695                 dev_err(dev, "Endpoint node not found\n");
696                 return -EINVAL;
697         }
698
699         ret = v4l2_fwnode_endpoint_alloc_parse(endpoint, &imx290->ep);
700         fwnode_handle_put(endpoint);
701         if (ret) {
702                 dev_err(dev, "Parsing endpoint node failed\n");
703                 goto free_err;
704         }
705
706         if (!imx290->ep.nr_of_link_frequencies) {
707                 dev_err(dev, "link-frequency property not found in DT\n");
708                 ret = -EINVAL;
709                 goto free_err;
710         }
711
712         if (imx290->ep.link_frequencies[0] != IMX290_DEFAULT_LINK_FREQ) {
713                 dev_err(dev, "Unsupported link frequency\n");
714                 ret = -EINVAL;
715                 goto free_err;
716         }
717
718         /* Only CSI2 is supported for now */
719         if (imx290->ep.bus_type != V4L2_MBUS_CSI2_DPHY) {
720                 dev_err(dev, "Unsupported bus type, should be CSI2\n");
721                 ret = -EINVAL;
722                 goto free_err;
723         }
724
725         /* Set default mode to max resolution */
726         imx290->current_mode = &imx290_modes[0];
727
728         /* get system clock (xclk) */
729         imx290->xclk = devm_clk_get(dev, "xclk");
730         if (IS_ERR(imx290->xclk)) {
731                 dev_err(dev, "Could not get xclk");
732                 ret = PTR_ERR(imx290->xclk);
733                 goto free_err;
734         }
735
736         ret = fwnode_property_read_u32(dev_fwnode(dev), "clock-frequency",
737                                        &xclk_freq);
738         if (ret) {
739                 dev_err(dev, "Could not get xclk frequency\n");
740                 goto free_err;
741         }
742
743         /* external clock must be 37.125 MHz */
744         if (xclk_freq != 37125000) {
745                 dev_err(dev, "External clock frequency %u is not supported\n",
746                         xclk_freq);
747                 ret = -EINVAL;
748                 goto free_err;
749         }
750
751         ret = clk_set_rate(imx290->xclk, xclk_freq);
752         if (ret) {
753                 dev_err(dev, "Could not set xclk frequency\n");
754                 goto free_err;
755         }
756
757         ret = imx290_get_regulators(dev, imx290);
758         if (ret < 0) {
759                 dev_err(dev, "Cannot get regulators\n");
760                 goto free_err;
761         }
762
763         imx290->rst_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_ASIS);
764         if (IS_ERR(imx290->rst_gpio)) {
765                 dev_err(dev, "Cannot get reset gpio\n");
766                 ret = PTR_ERR(imx290->rst_gpio);
767                 goto free_err;
768         }
769
770         mutex_init(&imx290->lock);
771
772         v4l2_ctrl_handler_init(&imx290->ctrls, 3);
773
774         v4l2_ctrl_new_std(&imx290->ctrls, &imx290_ctrl_ops,
775                           V4L2_CID_GAIN, 0, 72, 1, 0);
776         imx290->link_freq =
777                 v4l2_ctrl_new_int_menu(&imx290->ctrls,
778                                        &imx290_ctrl_ops,
779                                        V4L2_CID_LINK_FREQ,
780                                        ARRAY_SIZE(imx290_link_freq) - 1,
781                                        0, imx290_link_freq);
782         if (imx290->link_freq)
783                 imx290->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
784
785         imx290->pixel_rate = v4l2_ctrl_new_std(&imx290->ctrls, &imx290_ctrl_ops,
786                                                V4L2_CID_PIXEL_RATE, 1,
787                                                INT_MAX, 1,
788                                                imx290_modes[0].pixel_rate);
789
790         imx290->sd.ctrl_handler = &imx290->ctrls;
791
792         if (imx290->ctrls.error) {
793                 dev_err(dev, "Control initialization error %d\n",
794                         imx290->ctrls.error);
795                 ret = imx290->ctrls.error;
796                 goto free_ctrl;
797         }
798
799         v4l2_i2c_subdev_init(&imx290->sd, client, &imx290_subdev_ops);
800         imx290->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
801         imx290->sd.dev = &client->dev;
802         imx290->sd.entity.ops = &imx290_subdev_entity_ops;
803         imx290->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
804
805         imx290->pad.flags = MEDIA_PAD_FL_SOURCE;
806         ret = media_entity_pads_init(&imx290->sd.entity, 1, &imx290->pad);
807         if (ret < 0) {
808                 dev_err(dev, "Could not register media entity\n");
809                 goto free_ctrl;
810         }
811
812         ret = v4l2_async_register_subdev(&imx290->sd);
813         if (ret < 0) {
814                 dev_err(dev, "Could not register v4l2 device\n");
815                 goto free_entity;
816         }
817
818         /* Power on the device to match runtime PM state below */
819         ret = imx290_power_on(dev);
820         if (ret < 0) {
821                 dev_err(dev, "Could not power on the device\n");
822                 goto free_entity;
823         }
824
825         pm_runtime_set_active(dev);
826         pm_runtime_enable(dev);
827         pm_runtime_idle(dev);
828
829         v4l2_fwnode_endpoint_free(&imx290->ep);
830
831         return 0;
832
833 free_entity:
834         media_entity_cleanup(&imx290->sd.entity);
835 free_ctrl:
836         v4l2_ctrl_handler_free(&imx290->ctrls);
837         mutex_destroy(&imx290->lock);
838 free_err:
839         v4l2_fwnode_endpoint_free(&imx290->ep);
840
841         return ret;
842 }
843
844 static int imx290_remove(struct i2c_client *client)
845 {
846         struct v4l2_subdev *sd = i2c_get_clientdata(client);
847         struct imx290 *imx290 = to_imx290(sd);
848
849         v4l2_async_unregister_subdev(sd);
850         media_entity_cleanup(&sd->entity);
851         v4l2_ctrl_handler_free(sd->ctrl_handler);
852
853         mutex_destroy(&imx290->lock);
854
855         pm_runtime_disable(imx290->dev);
856         if (!pm_runtime_status_suspended(imx290->dev))
857                 imx290_power_off(imx290->dev);
858         pm_runtime_set_suspended(imx290->dev);
859
860         return 0;
861 }
862
863 static const struct of_device_id imx290_of_match[] = {
864         { .compatible = "sony,imx290" },
865         { /* sentinel */ }
866 };
867 MODULE_DEVICE_TABLE(of, imx290_of_match);
868
869 static struct i2c_driver imx290_i2c_driver = {
870         .probe_new  = imx290_probe,
871         .remove = imx290_remove,
872         .driver = {
873                 .name  = "imx290",
874                 .pm = &imx290_pm_ops,
875                 .of_match_table = of_match_ptr(imx290_of_match),
876         },
877 };
878
879 module_i2c_driver(imx290_i2c_driver);
880
881 MODULE_DESCRIPTION("Sony IMX290 CMOS Image Sensor Driver");
882 MODULE_AUTHOR("FRAMOS GmbH");
883 MODULE_AUTHOR("Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>");
884 MODULE_LICENSE("GPL v2");