1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#include <asm/intel-mid.h>
22#include "../../include/linux/atomisp_platform.h"
23#include <linux/bitops.h>
24#include <linux/device.h>
25#include <linux/delay.h>
26#include <linux/errno.h>
27#include <linux/fs.h>
28#include <linux/gpio.h>
29#include <linux/init.h>
30#include <linux/i2c.h>
31#include <linux/io.h>
32#include <linux/kernel.h>
33#include "../../include/linux/libmsrlisthelper.h"
34#include <linux/mm.h>
35#include <linux/kmod.h>
36#include <linux/module.h>
37#include <linux/moduleparam.h>
38#include <linux/string.h>
39#include <linux/slab.h>
40#include <linux/types.h>
41#include <media/v4l2-ctrls.h>
42#include <media/v4l2-device.h>
43#include "imx.h"
44
45
46
47
48
49
50
51static const uint32_t
52 imx135_embedded_effective_size[IMX135_EMBEDDED_DATA_LINE_NUM]
53 = {76, 113};
54
55static enum atomisp_bayer_order imx_bayer_order_mapping[] = {
56 atomisp_bayer_order_rggb,
57 atomisp_bayer_order_grbg,
58 atomisp_bayer_order_gbrg,
59 atomisp_bayer_order_bggr
60};
61
62static const unsigned int
63IMX227_BRACKETING_LUT_FRAME_ENTRY[IMX_MAX_AE_LUT_LENGTH] = {
64 0x0E10, 0x0E1E, 0x0E2C, 0x0E3A, 0x0E48};
65
66static int
67imx_read_reg(struct i2c_client *client, u16 len, u16 reg, u16 *val)
68{
69 struct i2c_msg msg[2];
70 u16 data[IMX_SHORT_MAX];
71 int ret, i;
72 int retry = 0;
73
74 if (len > IMX_BYTE_MAX) {
75 dev_err(&client->dev, "%s error, invalid data length\n",
76 __func__);
77 return -EINVAL;
78 }
79
80 do {
81 memset(msg, 0 , sizeof(msg));
82 memset(data, 0 , sizeof(data));
83
84 msg[0].addr = client->addr;
85 msg[0].flags = 0;
86 msg[0].len = I2C_MSG_LENGTH;
87 msg[0].buf = (u8 *)data;
88
89 data[0] = cpu_to_be16(reg);
90
91 msg[1].addr = client->addr;
92 msg[1].len = len;
93 msg[1].flags = I2C_M_RD;
94 msg[1].buf = (u8 *)data;
95
96 ret = i2c_transfer(client->adapter, msg, 2);
97 if (ret != 2) {
98 dev_err(&client->dev,
99 "retrying i2c read from offset 0x%x error %d... %d\n",
100 reg, ret, retry);
101 msleep(20);
102 }
103 } while (ret != 2 && retry++ < I2C_RETRY_COUNT);
104
105 if (ret != 2)
106 return -EIO;
107
108
109 if (len == IMX_8BIT) {
110 *val = (u8)data[0];
111 } else {
112
113 for (i = 0; i < (len >> 1); i++)
114 val[i] = be16_to_cpu(data[i]);
115 }
116
117 return 0;
118}
119
120static int imx_i2c_write(struct i2c_client *client, u16 len, u8 *data)
121{
122 struct i2c_msg msg;
123 int ret;
124 int retry = 0;
125
126 do {
127 msg.addr = client->addr;
128 msg.flags = 0;
129 msg.len = len;
130 msg.buf = data;
131
132 ret = i2c_transfer(client->adapter, &msg, 1);
133 if (ret != 1) {
134 dev_err(&client->dev,
135 "retrying i2c write transfer... %d\n", retry);
136 msleep(20);
137 }
138 } while (ret != 1 && retry++ < I2C_RETRY_COUNT);
139
140 return ret == 1 ? 0 : -EIO;
141}
142
143int
144imx_write_reg(struct i2c_client *client, u16 data_length, u16 reg, u16 val)
145{
146 int ret;
147 unsigned char data[4] = {0};
148 u16 *wreg = (u16 *)data;
149 const u16 len = data_length + sizeof(u16);
150
151 if (data_length != IMX_8BIT && data_length != IMX_16BIT) {
152 v4l2_err(client, "%s error, invalid data_length\n", __func__);
153 return -EINVAL;
154 }
155
156
157 *wreg = cpu_to_be16(reg);
158
159 if (data_length == IMX_8BIT)
160 data[2] = (u8)(val);
161 else {
162
163 u16 *wdata = (u16 *)&data[2];
164 *wdata = cpu_to_be16(val);
165 }
166
167 ret = imx_i2c_write(client, len, data);
168 if (ret)
169 dev_err(&client->dev,
170 "write error: wrote 0x%x to offset 0x%x error %d",
171 val, reg, ret);
172
173 return ret;
174}
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191static int __imx_flush_reg_array(struct i2c_client *client,
192 struct imx_write_ctrl *ctrl)
193{
194 u16 size;
195
196 if (ctrl->index == 0)
197 return 0;
198
199 size = sizeof(u16) + ctrl->index;
200 ctrl->buffer.addr = cpu_to_be16(ctrl->buffer.addr);
201 ctrl->index = 0;
202
203 return imx_i2c_write(client, size, (u8 *)&ctrl->buffer);
204}
205
206static int __imx_buf_reg_array(struct i2c_client *client,
207 struct imx_write_ctrl *ctrl,
208 const struct imx_reg *next)
209{
210 int size;
211 u16 *data16;
212
213 switch (next->type) {
214 case IMX_8BIT:
215 size = 1;
216 ctrl->buffer.data[ctrl->index] = (u8)next->val;
217 break;
218 case IMX_16BIT:
219 size = 2;
220 data16 = (u16 *)&ctrl->buffer.data[ctrl->index];
221 *data16 = cpu_to_be16((u16)next->val);
222 break;
223 default:
224 return -EINVAL;
225 }
226
227
228 if (ctrl->index == 0)
229 ctrl->buffer.addr = next->sreg;
230
231 ctrl->index += size;
232
233
234
235
236
237 if (ctrl->index + sizeof(u16) >= IMX_MAX_WRITE_BUF_SIZE)
238 return __imx_flush_reg_array(client, ctrl);
239
240 return 0;
241}
242
243static int
244__imx_write_reg_is_consecutive(struct i2c_client *client,
245 struct imx_write_ctrl *ctrl,
246 const struct imx_reg *next)
247{
248 if (ctrl->index == 0)
249 return 1;
250
251 return ctrl->buffer.addr + ctrl->index == next->sreg;
252}
253
254static int imx_write_reg_array(struct i2c_client *client,
255 const struct imx_reg *reglist)
256{
257 const struct imx_reg *next = reglist;
258 struct imx_write_ctrl ctrl;
259 int err;
260
261 ctrl.index = 0;
262 for (; next->type != IMX_TOK_TERM; next++) {
263 switch (next->type & IMX_TOK_MASK) {
264 case IMX_TOK_DELAY:
265 err = __imx_flush_reg_array(client, &ctrl);
266 if (err)
267 return err;
268 msleep(next->val);
269 break;
270
271 default:
272
273
274
275
276 if (!__imx_write_reg_is_consecutive(client, &ctrl,
277 next)) {
278 err = __imx_flush_reg_array(client, &ctrl);
279 if (err)
280 return err;
281 }
282 err = __imx_buf_reg_array(client, &ctrl, next);
283 if (err) {
284 v4l2_err(client, "%s: write error, aborted\n",
285 __func__);
286 return err;
287 }
288 break;
289 }
290 }
291
292 return __imx_flush_reg_array(client, &ctrl);
293}
294
295static int __imx_min_fps_diff(int fps, const struct imx_fps_setting *fps_list)
296{
297 int diff = INT_MAX;
298 int i;
299
300 if (fps == 0)
301 return 0;
302
303 for (i = 0; i < MAX_FPS_OPTIONS_SUPPORTED; i++) {
304 if (!fps_list[i].fps)
305 break;
306 if (abs(fps_list[i].fps - fps) < diff)
307 diff = abs(fps_list[i].fps - fps);
308 }
309
310 return diff;
311}
312
313static int __imx_nearest_fps_index(int fps,
314 const struct imx_fps_setting *fps_list)
315{
316 int fps_index = 0;
317 int i;
318
319 for (i = 0; i < MAX_FPS_OPTIONS_SUPPORTED; i++) {
320 if (!fps_list[i].fps)
321 break;
322 if (abs(fps_list[i].fps - fps)
323 < abs(fps_list[fps_index].fps - fps))
324 fps_index = i;
325 }
326 return fps_index;
327}
328
329
330
331
332
333static int __imx_above_nearest_fps_index(int fps,
334 const struct imx_fps_setting *fps_list)
335{
336 int fps_index = 0;
337 int i;
338
339 for (i = 0; i < MAX_FPS_OPTIONS_SUPPORTED; i++) {
340 if (!fps_list[i].fps)
341 break;
342 if (fps <= fps_list[i].fps) {
343 fps_index = i;
344 break;
345 }
346 }
347
348 return fps_index;
349}
350
351static int imx_get_lanes(struct v4l2_subdev *sd)
352{
353 struct camera_mipi_info *imx_info = v4l2_get_subdev_hostdata(sd);
354
355 if (!imx_info)
356 return -ENOSYS;
357 if (imx_info->num_lanes < 1 || imx_info->num_lanes > 4 ||
358 imx_info->num_lanes == 3)
359 return -EINVAL;
360
361 return imx_info->num_lanes;
362}
363
364static int __imx_update_exposure_timing(struct i2c_client *client, u16 exposure,
365 u16 llp, u16 fll)
366{
367 struct v4l2_subdev *sd = i2c_get_clientdata(client);
368 struct imx_device *dev = to_imx_sensor(sd);
369 int ret = 0;
370
371 if (dev->sensor_id != IMX227_ID) {
372
373 if (exposure > fll - IMX_INTEGRATION_TIME_MARGIN)
374 fll = exposure + IMX_INTEGRATION_TIME_MARGIN;
375 }
376
377 ret = imx_write_reg(client, IMX_16BIT,
378 dev->reg_addr->line_length_pixels, llp);
379 if (ret)
380 return ret;
381
382 ret = imx_write_reg(client, IMX_16BIT,
383 dev->reg_addr->frame_length_lines, fll);
384 if (ret)
385 return ret;
386
387 if (exposure)
388 ret = imx_write_reg(client, IMX_16BIT,
389 dev->reg_addr->coarse_integration_time, exposure);
390
391 return ret;
392}
393
394static int __imx_update_gain(struct v4l2_subdev *sd, u16 gain)
395{
396 struct imx_device *dev = to_imx_sensor(sd);
397 struct i2c_client *client = v4l2_get_subdevdata(sd);
398 int ret;
399
400
401 ret = imx_write_reg(client, IMX_8BIT, dev->reg_addr->global_gain, gain);
402 if (ret)
403 return ret;
404
405
406 if (dev->sensor_id == IMX135_ID)
407 ret = imx_write_reg(client, IMX_8BIT, IMX_SHORT_AGC_GAIN, gain);
408
409 return ret;
410}
411
412static int __imx_update_digital_gain(struct i2c_client *client, u16 digitgain)
413{
414 struct v4l2_subdev *sd = i2c_get_clientdata(client);
415 struct imx_device *dev = to_imx_sensor(sd);
416 struct imx_write_buffer digit_gain;
417
418 digit_gain.addr = cpu_to_be16(dev->reg_addr->dgc_adj);
419 digit_gain.data[0] = (digitgain >> 8) & 0xFF;
420 digit_gain.data[1] = digitgain & 0xFF;
421
422 if (dev->sensor_id == IMX219_ID) {
423 return imx_i2c_write(client, IMX219_DGC_LEN, (u8 *)&digit_gain);
424 } else if (dev->sensor_id == IMX227_ID) {
425 return imx_i2c_write(client, IMX227_DGC_LEN, (u8 *)&digit_gain);
426 } else {
427 digit_gain.data[2] = (digitgain >> 8) & 0xFF;
428 digit_gain.data[3] = digitgain & 0xFF;
429 digit_gain.data[4] = (digitgain >> 8) & 0xFF;
430 digit_gain.data[5] = digitgain & 0xFF;
431 digit_gain.data[6] = (digitgain >> 8) & 0xFF;
432 digit_gain.data[7] = digitgain & 0xFF;
433 return imx_i2c_write(client, IMX_DGC_LEN, (u8 *)&digit_gain);
434 }
435 return 0;
436}
437
438static int imx_set_exposure_gain(struct v4l2_subdev *sd, u16 coarse_itg,
439 u16 gain, u16 digitgain)
440{
441 struct imx_device *dev = to_imx_sensor(sd);
442 struct i2c_client *client = v4l2_get_subdevdata(sd);
443 int lanes = imx_get_lanes(sd);
444 unsigned int digitgain_scaled;
445 int ret = 0;
446
447
448 coarse_itg = clamp_t(u16, coarse_itg, 0, IMX_MAX_EXPOSURE_SUPPORTED);
449
450
451 gain = clamp_t(u16, gain, 0, IMX_MAX_GLOBAL_GAIN_SUPPORTED);
452
453 mutex_lock(&dev->input_lock);
454
455 if (dev->sensor_id == IMX227_ID) {
456 ret = imx_write_reg_array(client, imx_param_hold);
457 if (ret) {
458 mutex_unlock(&dev->input_lock);
459 return ret;
460 }
461 }
462
463
464 if ((dev->sensor_id == IMX175_ID) && dev->digital_gain)
465 digitgain_scaled = dev->digital_gain;
466 else
467 digitgain_scaled = digitgain;
468
469 if (dev->sensor_id == IMX132_ID && lanes > 1) {
470 digitgain_scaled *= IMX132_2LANES_GAINFACT;
471 digitgain_scaled >>= IMX132_2LANES_GAINFACT_SHIFT;
472 }
473
474 digitgain_scaled = clamp_t(unsigned int, digitgain_scaled,
475 0, IMX_MAX_DIGITAL_GAIN_SUPPORTED);
476
477 ret = __imx_update_exposure_timing(client, coarse_itg,
478 dev->pixels_per_line, dev->lines_per_frame);
479 if (ret)
480 goto out;
481 dev->coarse_itg = coarse_itg;
482
483 if (dev->sensor_id == IMX175_ID)
484 ret = __imx_update_gain(sd, dev->gain);
485 else
486 ret = __imx_update_gain(sd, gain);
487 if (ret)
488 goto out;
489 dev->gain = gain;
490
491 ret = __imx_update_digital_gain(client, digitgain_scaled);
492 if (ret)
493 goto out;
494 dev->digital_gain = digitgain;
495
496out:
497 if (dev->sensor_id == IMX227_ID)
498 ret = imx_write_reg_array(client, imx_param_update);
499 mutex_unlock(&dev->input_lock);
500 return ret;
501}
502
503static long imx_s_exposure(struct v4l2_subdev *sd,
504 struct atomisp_exposure *exposure)
505{
506 return imx_set_exposure_gain(sd, exposure->integration_time[0],
507 exposure->gain[0], exposure->gain[1]);
508}
509
510
511static int imx_g_priv_int_data(struct v4l2_subdev *sd,
512 struct v4l2_private_int_data *priv)
513{
514 struct i2c_client *client = v4l2_get_subdevdata(sd);
515 struct imx_device *dev = to_imx_sensor(sd);
516 u8 __user *to = priv->data;
517 u32 read_size = priv->size;
518 int ret;
519
520
521 if (!read_size)
522 goto out;
523
524 if (IS_ERR(dev->otp_data)) {
525 dev_err(&client->dev, "OTP data not available");
526 return PTR_ERR(dev->otp_data);
527 }
528
529 if (read_size > dev->otp_driver->size)
530 read_size = dev->otp_driver->size;
531
532 ret = copy_to_user(to, dev->otp_data, read_size);
533 if (ret) {
534 dev_err(&client->dev, "%s: failed to copy OTP data to user\n",
535 __func__);
536 return -EFAULT;
537 }
538out:
539
540 priv->size = dev->otp_driver->size;
541
542 return 0;
543}
544
545static int __imx_init(struct v4l2_subdev *sd, u32 val)
546{
547 struct i2c_client *client = v4l2_get_subdevdata(sd);
548 struct imx_device *dev = to_imx_sensor(sd);
549 int lanes = imx_get_lanes(sd);
550 int ret;
551
552 if (dev->sensor_id == IMX_ID_DEFAULT)
553 return 0;
554
555
556 dev->h_flip->cur.val = 0;
557 dev->v_flip->cur.val = 0;
558
559 dev->fps_index = 0;
560 dev->curr_res_table = dev->mode_tables->res_preview;
561 dev->entries_curr_table = dev->mode_tables->n_res_preview;
562
563 ret = imx_write_reg_array(client, dev->mode_tables->init_settings);
564 if (ret)
565 return ret;
566
567 if (dev->sensor_id == IMX132_ID && lanes > 0) {
568 static const u8 imx132_rglanesel[] = {
569 IMX132_RGLANESEL_1LANE,
570 IMX132_RGLANESEL_2LANES,
571 IMX132_RGLANESEL_1LANE,
572 IMX132_RGLANESEL_4LANES,
573 };
574 ret = imx_write_reg(client, IMX_8BIT,
575 IMX132_RGLANESEL, imx132_rglanesel[lanes - 1]);
576 }
577
578 return ret;
579}
580
581static int imx_init(struct v4l2_subdev *sd, u32 val)
582{
583 struct imx_device *dev = to_imx_sensor(sd);
584 int ret = 0;
585
586 mutex_lock(&dev->input_lock);
587 ret = __imx_init(sd, val);
588 mutex_unlock(&dev->input_lock);
589
590 return ret;
591}
592
593static long imx_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
594{
595
596 switch (cmd) {
597 case ATOMISP_IOC_S_EXPOSURE:
598 return imx_s_exposure(sd, arg);
599 case ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA:
600 return imx_g_priv_int_data(sd, arg);
601 default:
602 return -EINVAL;
603 }
604 return 0;
605}
606
607static int power_up(struct v4l2_subdev *sd)
608{
609 struct i2c_client *client = v4l2_get_subdevdata(sd);
610 struct imx_device *dev = to_imx_sensor(sd);
611 int ret;
612
613
614 ret = dev->platform_data->power_ctrl(sd, 1);
615 if (ret)
616 goto fail_power;
617
618
619 ret = dev->platform_data->flisclk_ctrl(sd, 1);
620 if (ret)
621 goto fail_clk;
622
623
624 ret = dev->platform_data->gpio_ctrl(sd, 1);
625 if (ret) {
626 dev_err(&client->dev, "gpio failed\n");
627 goto fail_gpio;
628 }
629
630 return 0;
631fail_gpio:
632 dev->platform_data->gpio_ctrl(sd, 0);
633fail_clk:
634 dev->platform_data->flisclk_ctrl(sd, 0);
635fail_power:
636 dev->platform_data->power_ctrl(sd, 0);
637 dev_err(&client->dev, "sensor power-up failed\n");
638
639 return ret;
640}
641
642static int power_down(struct v4l2_subdev *sd)
643{
644 struct imx_device *dev = to_imx_sensor(sd);
645 struct i2c_client *client = v4l2_get_subdevdata(sd);
646 int ret;
647
648 ret = dev->platform_data->flisclk_ctrl(sd, 0);
649 if (ret)
650 dev_err(&client->dev, "flisclk failed\n");
651
652
653 ret = dev->platform_data->gpio_ctrl(sd, 0);
654 if (ret)
655 dev_err(&client->dev, "gpio failed\n");
656
657
658 ret = dev->platform_data->power_ctrl(sd, 0);
659 if (ret)
660 dev_err(&client->dev, "vprog failed.\n");
661
662 return ret;
663}
664
665static int __imx_s_power(struct v4l2_subdev *sd, int on)
666{
667 struct imx_device *dev = to_imx_sensor(sd);
668 int ret = 0;
669 int r = 0;
670
671 if (on == 0) {
672 ret = power_down(sd);
673 if (dev->vcm_driver && dev->vcm_driver->power_down)
674 r = dev->vcm_driver->power_down(sd);
675 if (ret == 0)
676 ret = r;
677 dev->power = 0;
678 } else {
679 if (dev->vcm_driver && dev->vcm_driver->power_up)
680 ret = dev->vcm_driver->power_up(sd);
681 if (ret)
682 return ret;
683 ret = power_up(sd);
684 if (!ret) {
685 dev->power = 1;
686 return __imx_init(sd, 0);
687 }
688 }
689
690 return ret;
691}
692
693static int imx_s_power(struct v4l2_subdev *sd, int on)
694{
695 int ret;
696 struct imx_device *dev = to_imx_sensor(sd);
697
698 mutex_lock(&dev->input_lock);
699 ret = __imx_s_power(sd, on);
700 mutex_unlock(&dev->input_lock);
701
702 return ret;
703}
704
705static int imx_get_intg_factor(struct i2c_client *client,
706 struct camera_mipi_info *info,
707 const struct imx_reg *reglist)
708{
709 struct v4l2_subdev *sd = i2c_get_clientdata(client);
710 struct imx_device *dev = to_imx_sensor(sd);
711 int lanes = imx_get_lanes(sd);
712 u32 vt_pix_clk_div;
713 u32 vt_sys_clk_div;
714 u32 pre_pll_clk_div;
715 u32 pll_multiplier;
716
717 const int ext_clk_freq_hz = 19200000;
718 struct atomisp_sensor_mode_data *buf = &info->data;
719 int ret;
720 u16 data[IMX_INTG_BUF_COUNT];
721
722 u32 vt_pix_clk_freq_mhz;
723 u32 coarse_integration_time_min;
724 u32 coarse_integration_time_max_margin;
725 u32 read_mode;
726 u32 div;
727
728 if (info == NULL)
729 return -EINVAL;
730
731 memset(data, 0, IMX_INTG_BUF_COUNT * sizeof(u16));
732 ret = imx_read_reg(client, 1, IMX_VT_PIX_CLK_DIV, data);
733 if (ret)
734 return ret;
735 vt_pix_clk_div = data[0] & IMX_MASK_5BIT;
736
737 if (dev->sensor_id == IMX132_ID || dev->sensor_id == IMX208_ID) {
738 static const int rgpltd[] = { 2, 4, 1, 1 };
739 ret = imx_read_reg(client, 1, IMX132_208_VT_RGPLTD, data);
740 if (ret)
741 return ret;
742 vt_sys_clk_div = rgpltd[data[0] & IMX_MASK_2BIT];
743 } else {
744 ret = imx_read_reg(client, 1, IMX_VT_SYS_CLK_DIV, data);
745 if (ret)
746 return ret;
747 vt_sys_clk_div = data[0] & IMX_MASK_2BIT;
748 }
749 ret = imx_read_reg(client, 1, IMX_PRE_PLL_CLK_DIV, data);
750 if (ret)
751 return ret;
752 pre_pll_clk_div = data[0] & IMX_MASK_4BIT;
753
754 ret = imx_read_reg(client, 2,
755 (dev->sensor_id == IMX132_ID ||
756 dev->sensor_id == IMX219_ID ||
757 dev->sensor_id == IMX208_ID) ?
758 IMX132_208_219_PLL_MULTIPLIER : IMX_PLL_MULTIPLIER, data);
759 if (ret)
760 return ret;
761 pll_multiplier = data[0] & IMX_MASK_11BIT;
762
763 memset(data, 0, IMX_INTG_BUF_COUNT * sizeof(u16));
764 ret = imx_read_reg(client, 4, IMX_COARSE_INTG_TIME_MIN, data);
765 if (ret)
766 return ret;
767 coarse_integration_time_min = data[0];
768 coarse_integration_time_max_margin = data[1];
769
770
771 ret = imx_read_reg(client, 2, dev->reg_addr->horizontal_start_h, data);
772 if (ret)
773 return ret;
774 buf->crop_horizontal_start = data[0];
775
776 ret = imx_read_reg(client, 2, dev->reg_addr->vertical_start_h, data);
777 if (ret)
778 return ret;
779 buf->crop_vertical_start = data[0];
780
781 ret = imx_read_reg(client, 2, dev->reg_addr->horizontal_end_h, data);
782 if (ret)
783 return ret;
784 buf->crop_horizontal_end = data[0];
785
786 ret = imx_read_reg(client, 2, dev->reg_addr->vertical_end_h, data);
787 if (ret)
788 return ret;
789 buf->crop_vertical_end = data[0];
790
791 ret = imx_read_reg(client, 2,
792 dev->reg_addr->horizontal_output_size_h, data);
793 if (ret)
794 return ret;
795 buf->output_width = data[0];
796
797 ret = imx_read_reg(client, 2,
798 dev->reg_addr->vertical_output_size_h, data);
799 if (ret)
800 return ret;
801 buf->output_height = data[0];
802
803 memset(data, 0, IMX_INTG_BUF_COUNT * sizeof(u16));
804 if (dev->sensor_id == IMX132_ID || dev->sensor_id == IMX208_ID ||
805 dev->sensor_id == IMX219_ID)
806 read_mode = 0;
807 else {
808 if (dev->sensor_id == IMX227_ID)
809 ret = imx_read_reg(client, 1, IMX227_READ_MODE, data);
810 else
811 ret = imx_read_reg(client, 1, IMX_READ_MODE, data);
812
813 if (ret)
814 return ret;
815 read_mode = data[0] & IMX_MASK_2BIT;
816 }
817
818 div = pre_pll_clk_div*vt_sys_clk_div*vt_pix_clk_div;
819 if (div == 0)
820 return -EINVAL;
821
822 if (dev->sensor_id == IMX132_ID || dev->sensor_id == IMX208_ID)
823 vt_pix_clk_freq_mhz = ext_clk_freq_hz / div;
824 else if (dev->sensor_id == IMX227_ID) {
825
826
827
828 vt_pix_clk_freq_mhz =
829 (u64)4 * ext_clk_freq_hz * pll_multiplier;
830 do_div(vt_pix_clk_freq_mhz, div);
831 } else
832 vt_pix_clk_freq_mhz = 2 * ext_clk_freq_hz / div;
833
834 vt_pix_clk_freq_mhz *= pll_multiplier;
835 if (dev->sensor_id == IMX132_ID && lanes > 0)
836 vt_pix_clk_freq_mhz *= lanes;
837
838 dev->vt_pix_clk_freq_mhz = vt_pix_clk_freq_mhz;
839
840 buf->vt_pix_clk_freq_mhz = vt_pix_clk_freq_mhz;
841 buf->coarse_integration_time_min = coarse_integration_time_min;
842 buf->coarse_integration_time_max_margin =
843 coarse_integration_time_max_margin;
844
845 buf->fine_integration_time_min = IMX_FINE_INTG_TIME;
846 buf->fine_integration_time_max_margin = IMX_FINE_INTG_TIME;
847 buf->fine_integration_time_def = IMX_FINE_INTG_TIME;
848 buf->frame_length_lines = dev->lines_per_frame;
849 buf->line_length_pck = dev->pixels_per_line;
850 buf->read_mode = read_mode;
851
852 if (dev->sensor_id == IMX132_ID || dev->sensor_id == IMX208_ID ||
853 dev->sensor_id == IMX219_ID) {
854 buf->binning_factor_x = 1;
855 buf->binning_factor_y = 1;
856 } else {
857 if (dev->sensor_id == IMX227_ID)
858 ret = imx_read_reg(client, 1, IMX227_BINNING_ENABLE,
859 data);
860 else
861 ret = imx_read_reg(client, 1, IMX_BINNING_ENABLE, data);
862
863 if (ret)
864 return ret;
865
866 if (data[0] == 1) {
867 if (dev->sensor_id == IMX227_ID)
868 ret = imx_read_reg(client, 1,
869 IMX227_BINNING_TYPE, data);
870 else
871 ret = imx_read_reg(client, 1,
872 IMX_BINNING_TYPE, data);
873
874 if (ret)
875 return ret;
876 buf->binning_factor_x = data[0] >> 4 & 0x0f;
877 if (!buf->binning_factor_x)
878 buf->binning_factor_x = 1;
879 buf->binning_factor_y = data[0] & 0xf;
880 if (!buf->binning_factor_y)
881 buf->binning_factor_y = 1;
882
883
884
885
886
887 if (dev->sensor_id == IMX227_ID) {
888 if (dev->curr_res_table[dev->fmt_idx].width ==
889 376 &&
890 dev->curr_res_table[dev->fmt_idx].height ==
891 656) {
892 buf->binning_factor_x = 4;
893 buf->binning_factor_y = 4;
894 }
895 }
896 } else {
897 buf->binning_factor_x = 1;
898 buf->binning_factor_y = 1;
899 }
900 }
901
902 return 0;
903}
904
905
906
907static int imx_q_exposure(struct v4l2_subdev *sd, s32 *value)
908{
909 struct i2c_client *client = v4l2_get_subdevdata(sd);
910 struct imx_device *dev = to_imx_sensor(sd);
911 u16 coarse;
912 int ret;
913
914
915 ret = imx_read_reg(client, IMX_16BIT,
916 dev->reg_addr->coarse_integration_time, &coarse);
917 *value = coarse;
918
919 return ret;
920}
921
922static int imx_test_pattern(struct v4l2_subdev *sd)
923{
924 struct i2c_client *client = v4l2_get_subdevdata(sd);
925 struct imx_device *dev = to_imx_sensor(sd);
926 int ret;
927
928 if (dev->power == 0)
929 return 0;
930
931 ret = imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_COLOR_R,
932 (u16)(dev->tp_r->val >> 22));
933 if (ret)
934 return ret;
935
936 ret = imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_COLOR_GR,
937 (u16)(dev->tp_gr->val >> 22));
938 if (ret)
939 return ret;
940
941 ret = imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_COLOR_GB,
942 (u16)(dev->tp_gb->val >> 22));
943 if (ret)
944 return ret;
945
946 ret = imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_COLOR_B,
947 (u16)(dev->tp_b->val >> 22));
948 if (ret)
949 return ret;
950
951 return imx_write_reg(client, IMX_16BIT, IMX_TEST_PATTERN_MODE,
952 (u16)(dev->tp_mode->val));
953}
954
955static u32 imx_translate_bayer_order(enum atomisp_bayer_order code)
956{
957 switch (code) {
958 case atomisp_bayer_order_rggb:
959 return MEDIA_BUS_FMT_SRGGB10_1X10;
960 case atomisp_bayer_order_grbg:
961 return MEDIA_BUS_FMT_SGRBG10_1X10;
962 case atomisp_bayer_order_bggr:
963 return MEDIA_BUS_FMT_SBGGR10_1X10;
964 case atomisp_bayer_order_gbrg:
965 return MEDIA_BUS_FMT_SGBRG10_1X10;
966 }
967 return 0;
968}
969
970static int imx_v_flip(struct v4l2_subdev *sd, s32 value)
971{
972 struct imx_device *dev = to_imx_sensor(sd);
973 struct camera_mipi_info *imx_info = NULL;
974 struct i2c_client *client = v4l2_get_subdevdata(sd);
975 int ret;
976 u16 val;
977
978 if (dev->power == 0)
979 return -EIO;
980
981 ret = imx_write_reg_array(client, dev->param_hold);
982 if (ret)
983 return ret;
984
985 ret = imx_read_reg(client, IMX_8BIT,
986 dev->reg_addr->img_orientation, &val);
987 if (ret)
988 return ret;
989 if (value)
990 val |= IMX_VFLIP_BIT;
991 else
992 val &= ~IMX_VFLIP_BIT;
993
994 ret = imx_write_reg(client, IMX_8BIT,
995 dev->reg_addr->img_orientation, val);
996 if (ret)
997 return ret;
998
999 imx_info = v4l2_get_subdev_hostdata(sd);
1000 if (imx_info) {
1001 val &= (IMX_VFLIP_BIT|IMX_HFLIP_BIT);
1002 imx_info->raw_bayer_order = imx_bayer_order_mapping[val];
1003 dev->format.code = imx_translate_bayer_order(
1004 imx_info->raw_bayer_order);
1005 }
1006
1007 return imx_write_reg_array(client, dev->param_update);
1008}
1009
1010static int imx_h_flip(struct v4l2_subdev *sd, s32 value)
1011{
1012 struct imx_device *dev = to_imx_sensor(sd);
1013 struct camera_mipi_info *imx_info = NULL;
1014 struct i2c_client *client = v4l2_get_subdevdata(sd);
1015 int ret;
1016 u16 val;
1017
1018 if (dev->power == 0)
1019 return -EIO;
1020
1021 ret = imx_write_reg_array(client, dev->param_hold);
1022 if (ret)
1023 return ret;
1024 ret = imx_read_reg(client, IMX_8BIT,
1025 dev->reg_addr->img_orientation, &val);
1026 if (ret)
1027 return ret;
1028 if (value)
1029 val |= IMX_HFLIP_BIT;
1030 else
1031 val &= ~IMX_HFLIP_BIT;
1032 ret = imx_write_reg(client, IMX_8BIT,
1033 dev->reg_addr->img_orientation, val);
1034 if (ret)
1035 return ret;
1036
1037 imx_info = v4l2_get_subdev_hostdata(sd);
1038 if (imx_info) {
1039 val &= (IMX_VFLIP_BIT|IMX_HFLIP_BIT);
1040 imx_info->raw_bayer_order = imx_bayer_order_mapping[val];
1041 dev->format.code = imx_translate_bayer_order(
1042 imx_info->raw_bayer_order);
1043 }
1044
1045 return imx_write_reg_array(client, dev->param_update);
1046}
1047
1048static int imx_g_focal(struct v4l2_subdev *sd, s32 *val)
1049{
1050 *val = (IMX_FOCAL_LENGTH_NUM << 16) | IMX_FOCAL_LENGTH_DEM;
1051 return 0;
1052}
1053
1054static int imx_g_fnumber(struct v4l2_subdev *sd, s32 *val)
1055{
1056
1057 *val = (IMX_F_NUMBER_DEFAULT_NUM << 16) | IMX_F_NUMBER_DEM;
1058 return 0;
1059}
1060
1061static int imx_g_fnumber_range(struct v4l2_subdev *sd, s32 *val)
1062{
1063 *val = (IMX_F_NUMBER_DEFAULT_NUM << 24) |
1064 (IMX_F_NUMBER_DEM << 16) |
1065 (IMX_F_NUMBER_DEFAULT_NUM << 8) | IMX_F_NUMBER_DEM;
1066 return 0;
1067}
1068
1069static int imx_g_bin_factor_x(struct v4l2_subdev *sd, s32 *val)
1070{
1071 struct imx_device *dev = to_imx_sensor(sd);
1072
1073 *val = dev->curr_res_table[dev->fmt_idx].bin_factor_x;
1074
1075 return 0;
1076}
1077
1078static int imx_g_bin_factor_y(struct v4l2_subdev *sd, s32 *val)
1079{
1080 struct imx_device *dev = to_imx_sensor(sd);
1081
1082 *val = dev->curr_res_table[dev->fmt_idx].bin_factor_y;
1083
1084 return 0;
1085}
1086
1087int imx_vcm_power_up(struct v4l2_subdev *sd)
1088{
1089 struct imx_device *dev = to_imx_sensor(sd);
1090 if (dev->vcm_driver && dev->vcm_driver->power_up)
1091 return dev->vcm_driver->power_up(sd);
1092 return 0;
1093}
1094
1095int imx_vcm_power_down(struct v4l2_subdev *sd)
1096{
1097 struct imx_device *dev = to_imx_sensor(sd);
1098 if (dev->vcm_driver && dev->vcm_driver->power_down)
1099 return dev->vcm_driver->power_down(sd);
1100 return 0;
1101}
1102
1103int imx_vcm_init(struct v4l2_subdev *sd)
1104{
1105 struct imx_device *dev = to_imx_sensor(sd);
1106 if (dev->vcm_driver && dev->vcm_driver->init)
1107 return dev->vcm_driver->init(sd);
1108 return 0;
1109}
1110
1111int imx_t_focus_vcm(struct v4l2_subdev *sd, u16 val)
1112{
1113 struct imx_device *dev = to_imx_sensor(sd);
1114 if (dev->vcm_driver && dev->vcm_driver->t_focus_vcm)
1115 return dev->vcm_driver->t_focus_vcm(sd, val);
1116 return 0;
1117}
1118
1119int imx_t_focus_abs(struct v4l2_subdev *sd, s32 value)
1120{
1121 struct imx_device *dev = to_imx_sensor(sd);
1122 if (dev->vcm_driver && dev->vcm_driver->t_focus_abs)
1123 return dev->vcm_driver->t_focus_abs(sd, value);
1124 return 0;
1125}
1126int imx_t_focus_rel(struct v4l2_subdev *sd, s32 value)
1127{
1128 struct imx_device *dev = to_imx_sensor(sd);
1129 if (dev->vcm_driver && dev->vcm_driver->t_focus_rel)
1130 return dev->vcm_driver->t_focus_rel(sd, value);
1131 return 0;
1132}
1133
1134int imx_q_focus_status(struct v4l2_subdev *sd, s32 *value)
1135{
1136 struct imx_device *dev = to_imx_sensor(sd);
1137 if (dev->vcm_driver && dev->vcm_driver->q_focus_status)
1138 return dev->vcm_driver->q_focus_status(sd, value);
1139 return 0;
1140}
1141
1142int imx_q_focus_abs(struct v4l2_subdev *sd, s32 *value)
1143{
1144 struct imx_device *dev = to_imx_sensor(sd);
1145 if (dev->vcm_driver && dev->vcm_driver->q_focus_abs)
1146 return dev->vcm_driver->q_focus_abs(sd, value);
1147 return 0;
1148}
1149
1150int imx_t_vcm_slew(struct v4l2_subdev *sd, s32 value)
1151{
1152 struct imx_device *dev = to_imx_sensor(sd);
1153 if (dev->vcm_driver && dev->vcm_driver->t_vcm_slew)
1154 return dev->vcm_driver->t_vcm_slew(sd, value);
1155 return 0;
1156}
1157
1158int imx_t_vcm_timing(struct v4l2_subdev *sd, s32 value)
1159{
1160 struct imx_device *dev = to_imx_sensor(sd);
1161 if (dev->vcm_driver && dev->vcm_driver->t_vcm_timing)
1162 return dev->vcm_driver->t_vcm_timing(sd, value);
1163 return 0;
1164}
1165
1166static int imx_s_ctrl(struct v4l2_ctrl *ctrl)
1167{
1168 struct imx_device *dev = container_of(
1169 ctrl->handler, struct imx_device, ctrl_handler);
1170 struct i2c_client *client = v4l2_get_subdevdata(&dev->sd);
1171 int ret = 0;
1172
1173 switch (ctrl->id) {
1174 case V4L2_CID_TEST_PATTERN:
1175 ret = imx_test_pattern(&dev->sd);
1176 break;
1177 case V4L2_CID_VFLIP:
1178 dev_dbg(&client->dev, "%s: CID_VFLIP:%d.\n",
1179 __func__, ctrl->val);
1180 ret = imx_v_flip(&dev->sd, ctrl->val);
1181 break;
1182 case V4L2_CID_HFLIP:
1183 dev_dbg(&client->dev, "%s: CID_HFLIP:%d.\n",
1184 __func__, ctrl->val);
1185 ret = imx_h_flip(&dev->sd, ctrl->val);
1186 break;
1187 case V4L2_CID_FOCUS_ABSOLUTE:
1188 ret = imx_t_focus_abs(&dev->sd, ctrl->val);
1189 break;
1190 case V4L2_CID_FOCUS_RELATIVE:
1191 ret = imx_t_focus_rel(&dev->sd, ctrl->val);
1192 break;
1193 case V4L2_CID_VCM_SLEW:
1194 ret = imx_t_vcm_slew(&dev->sd, ctrl->val);
1195 break;
1196 case V4L2_CID_VCM_TIMEING:
1197 ret = imx_t_vcm_timing(&dev->sd, ctrl->val);
1198 break;
1199 }
1200
1201 return ret;
1202}
1203
1204static int imx_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
1205{
1206 struct imx_device *dev = container_of(
1207 ctrl->handler, struct imx_device, ctrl_handler);
1208 int ret = 0;
1209 unsigned int val;
1210
1211 switch (ctrl->id) {
1212 case V4L2_CID_EXPOSURE_ABSOLUTE:
1213 ret = imx_q_exposure(&dev->sd, &ctrl->val);
1214 break;
1215 case V4L2_CID_FOCUS_ABSOLUTE:
1216 ret = imx_q_focus_abs(&dev->sd, &ctrl->val);
1217 break;
1218 case V4L2_CID_FOCUS_STATUS:
1219 ret = imx_q_focus_status(&dev->sd, &ctrl->val);
1220 break;
1221 case V4L2_CID_FOCAL_ABSOLUTE:
1222 ret = imx_g_focal(&dev->sd, &ctrl->val);
1223 break;
1224 case V4L2_CID_FNUMBER_ABSOLUTE:
1225 ret = imx_g_fnumber(&dev->sd, &ctrl->val);
1226 break;
1227 case V4L2_CID_FNUMBER_RANGE:
1228 ret = imx_g_fnumber_range(&dev->sd, &ctrl->val);
1229 break;
1230 case V4L2_CID_BIN_FACTOR_HORZ:
1231 ret = imx_g_bin_factor_x(&dev->sd, &ctrl->val);
1232 break;
1233 case V4L2_CID_BIN_FACTOR_VERT:
1234 ret = imx_g_bin_factor_y(&dev->sd, &ctrl->val);
1235 break;
1236 case V4L2_CID_VBLANK:
1237 ctrl->val = dev->lines_per_frame -
1238 dev->curr_res_table[dev->fmt_idx].height;
1239 break;
1240 case V4L2_CID_HBLANK:
1241 ctrl->val = dev->pixels_per_line -
1242 dev->curr_res_table[dev->fmt_idx].width;
1243 break;
1244 case V4L2_CID_PIXEL_RATE:
1245 ctrl->val = dev->vt_pix_clk_freq_mhz;
1246 break;
1247 case V4L2_CID_LINK_FREQ:
1248 val = dev->curr_res_table[dev->fmt_idx].
1249 fps_options[dev->fps_index].mipi_freq;
1250 if (val == 0)
1251 val = dev->curr_res_table[dev->fmt_idx].mipi_freq;
1252 if (val == 0)
1253 return -EINVAL;
1254 ctrl->val = val * 1000;
1255 break;
1256 default:
1257 return -EINVAL;
1258 }
1259
1260 return ret;
1261}
1262
1263static const struct v4l2_ctrl_ops ctrl_ops = {
1264 .s_ctrl = imx_s_ctrl,
1265 .g_volatile_ctrl = imx_g_volatile_ctrl
1266};
1267
1268static const struct v4l2_ctrl_config imx_controls[] = {
1269 {
1270 .ops = &ctrl_ops,
1271 .id = V4L2_CID_EXPOSURE_ABSOLUTE,
1272 .type = V4L2_CTRL_TYPE_INTEGER,
1273 .name = "exposure",
1274 .min = 0x0,
1275 .max = 0xffff,
1276 .step = 0x01,
1277 .def = 0x00,
1278 .flags = V4L2_CTRL_FLAG_VOLATILE,
1279 },
1280 {
1281 .ops = &ctrl_ops,
1282 .id = V4L2_CID_TEST_PATTERN,
1283 .type = V4L2_CTRL_TYPE_INTEGER,
1284 .name = "Test pattern",
1285 .min = 0,
1286 .max = 0xffff,
1287 .step = 1,
1288 .def = 0,
1289 },
1290 {
1291 .ops = &ctrl_ops,
1292 .id = V4L2_CID_TEST_PATTERN_COLOR_R,
1293 .type = V4L2_CTRL_TYPE_INTEGER,
1294 .name = "Test pattern solid color R",
1295 .min = INT_MIN,
1296 .max = INT_MAX,
1297 .step = 1,
1298 .def = 0,
1299 },
1300 {
1301 .ops = &ctrl_ops,
1302 .id = V4L2_CID_TEST_PATTERN_COLOR_GR,
1303 .type = V4L2_CTRL_TYPE_INTEGER,
1304 .name = "Test pattern solid color GR",
1305 .min = INT_MIN,
1306 .max = INT_MAX,
1307 .step = 1,
1308 .def = 0,
1309 },
1310 {
1311 .ops = &ctrl_ops,
1312 .id = V4L2_CID_TEST_PATTERN_COLOR_GB,
1313 .type = V4L2_CTRL_TYPE_INTEGER,
1314 .name = "Test pattern solid color GB",
1315 .min = INT_MIN,
1316 .max = INT_MAX,
1317 .step = 1,
1318 .def = 0,
1319 },
1320 {
1321 .ops = &ctrl_ops,
1322 .id = V4L2_CID_TEST_PATTERN_COLOR_B,
1323 .type = V4L2_CTRL_TYPE_INTEGER,
1324 .name = "Test pattern solid color B",
1325 .min = INT_MIN,
1326 .max = INT_MAX,
1327 .step = 1,
1328 .def = 0,
1329 },
1330 {
1331 .ops = &ctrl_ops,
1332 .id = V4L2_CID_VFLIP,
1333 .type = V4L2_CTRL_TYPE_BOOLEAN,
1334 .name = "Flip",
1335 .min = 0,
1336 .max = 1,
1337 .step = 1,
1338 .def = 0,
1339 },
1340 {
1341 .ops = &ctrl_ops,
1342 .id = V4L2_CID_HFLIP,
1343 .type = V4L2_CTRL_TYPE_BOOLEAN,
1344 .name = "Mirror",
1345 .min = 0,
1346 .max = 1,
1347 .step = 1,
1348 .def = 0,
1349 },
1350 {
1351 .ops = &ctrl_ops,
1352 .id = V4L2_CID_FOCUS_ABSOLUTE,
1353 .type = V4L2_CTRL_TYPE_INTEGER,
1354 .name = "focus move absolute",
1355 .min = 0,
1356 .max = IMX_MAX_FOCUS_POS,
1357 .step = 1,
1358 .def = 0,
1359 .flags = V4L2_CTRL_FLAG_VOLATILE,
1360 },
1361 {
1362 .ops = &ctrl_ops,
1363 .id = V4L2_CID_FOCUS_RELATIVE,
1364 .type = V4L2_CTRL_TYPE_INTEGER,
1365 .name = "focus move relative",
1366 .min = IMX_MAX_FOCUS_NEG,
1367 .max = IMX_MAX_FOCUS_POS,
1368 .step = 1,
1369 .def = 0,
1370 .flags = 0,
1371 },
1372 {
1373 .ops = &ctrl_ops,
1374 .id = V4L2_CID_FOCUS_STATUS,
1375 .type = V4L2_CTRL_TYPE_INTEGER,
1376 .name = "focus status",
1377 .min = 0,
1378 .max = 100,
1379 .step = 1,
1380 .def = 0,
1381 .flags = V4L2_CTRL_FLAG_VOLATILE,
1382 },
1383 {
1384 .ops = &ctrl_ops,
1385 .id = V4L2_CID_VCM_SLEW,
1386 .type = V4L2_CTRL_TYPE_INTEGER,
1387 .name = "vcm slew",
1388 .min = 0,
1389 .max = IMX_VCM_SLEW_STEP_MAX,
1390 .step = 1,
1391 .def = 0,
1392 .flags = 0,
1393 },
1394 {
1395 .ops = &ctrl_ops,
1396 .id = V4L2_CID_VCM_TIMEING,
1397 .type = V4L2_CTRL_TYPE_INTEGER,
1398 .name = "vcm step time",
1399 .min = 0,
1400 .max = IMX_VCM_SLEW_TIME_MAX,
1401 .step = 1,
1402 .def = 0,
1403 .flags = 0,
1404 },
1405 {
1406 .ops = &ctrl_ops,
1407 .id = V4L2_CID_FOCAL_ABSOLUTE,
1408 .type = V4L2_CTRL_TYPE_INTEGER,
1409 .name = "focal length",
1410 .min = IMX_FOCAL_LENGTH_DEFAULT,
1411 .max = IMX_FOCAL_LENGTH_DEFAULT,
1412 .step = 0x01,
1413 .def = IMX_FOCAL_LENGTH_DEFAULT,
1414 .flags = V4L2_CTRL_FLAG_VOLATILE,
1415 },
1416 {
1417 .ops = &ctrl_ops,
1418 .id = V4L2_CID_FNUMBER_ABSOLUTE,
1419 .type = V4L2_CTRL_TYPE_INTEGER,
1420 .name = "f-number",
1421 .min = IMX_F_NUMBER_DEFAULT,
1422 .max = IMX_F_NUMBER_DEFAULT,
1423 .step = 0x01,
1424 .def = IMX_F_NUMBER_DEFAULT,
1425 .flags = V4L2_CTRL_FLAG_VOLATILE,
1426 },
1427 {
1428 .ops = &ctrl_ops,
1429 .id = V4L2_CID_FNUMBER_RANGE,
1430 .type = V4L2_CTRL_TYPE_INTEGER,
1431 .name = "f-number range",
1432 .min = IMX_F_NUMBER_RANGE,
1433 .max = IMX_F_NUMBER_RANGE,
1434 .step = 0x01,
1435 .def = IMX_F_NUMBER_RANGE,
1436 .flags = V4L2_CTRL_FLAG_VOLATILE,
1437 },
1438 {
1439 .ops = &ctrl_ops,
1440 .id = V4L2_CID_BIN_FACTOR_HORZ,
1441 .type = V4L2_CTRL_TYPE_INTEGER,
1442 .name = "horizontal binning factor",
1443 .min = 0,
1444 .max = IMX_BIN_FACTOR_MAX,
1445 .step = 1,
1446 .def = 0,
1447 .flags = V4L2_CTRL_FLAG_VOLATILE,
1448 },
1449 {
1450 .ops = &ctrl_ops,
1451 .id = V4L2_CID_BIN_FACTOR_VERT,
1452 .type = V4L2_CTRL_TYPE_INTEGER,
1453 .name = "vertical binning factor",
1454 .min = 0,
1455 .max = IMX_BIN_FACTOR_MAX,
1456 .step = 1,
1457 .def = 0,
1458 .flags = V4L2_CTRL_FLAG_VOLATILE,
1459 },
1460 {
1461 .ops = &ctrl_ops,
1462 .id = V4L2_CID_LINK_FREQ,
1463 .name = "Link Frequency",
1464 .type = V4L2_CTRL_TYPE_INTEGER,
1465 .min = 1,
1466 .max = 1500000 * 1000,
1467 .step = 1,
1468 .def = 1,
1469 .flags = V4L2_CTRL_FLAG_VOLATILE | V4L2_CTRL_FLAG_READ_ONLY,
1470 },
1471 {
1472 .ops = &ctrl_ops,
1473 .id = V4L2_CID_PIXEL_RATE,
1474 .name = "Pixel Rate",
1475 .type = V4L2_CTRL_TYPE_INTEGER,
1476 .min = 0,
1477 .max = INT_MAX,
1478 .step = 1,
1479 .def = 0,
1480 .flags = V4L2_CTRL_FLAG_VOLATILE,
1481 },
1482 {
1483 .ops = &ctrl_ops,
1484 .id = V4L2_CID_HBLANK,
1485 .name = "Horizontal Blanking",
1486 .type = V4L2_CTRL_TYPE_INTEGER,
1487 .min = 0,
1488 .max = SHRT_MAX,
1489 .step = 1,
1490 .def = 0,
1491 .flags = V4L2_CTRL_FLAG_VOLATILE,
1492 },
1493 {
1494 .ops = &ctrl_ops,
1495 .id = V4L2_CID_VBLANK,
1496 .name = "Vertical Blanking",
1497 .type = V4L2_CTRL_TYPE_INTEGER,
1498 .min = 0,
1499 .max = SHRT_MAX,
1500 .step = 1,
1501 .def = 0,
1502 .flags = V4L2_CTRL_FLAG_VOLATILE,
1503 },
1504 {
1505 .ops = &ctrl_ops,
1506 .id = V4L2_CID_HFLIP,
1507 .name = "Horizontal Flip",
1508 .type = V4L2_CTRL_TYPE_INTEGER,
1509 .min = 0,
1510 .max = 1,
1511 .step = 1,
1512 .def = 0,
1513 .flags = 0,
1514 },
1515 {
1516 .ops = &ctrl_ops,
1517 .id = V4L2_CID_VFLIP,
1518 .name = "Vertical Flip",
1519 .type = V4L2_CTRL_TYPE_INTEGER,
1520 .min = 0,
1521 .max = 1,
1522 .step = 1,
1523 .def = 0,
1524 .flags = 0,
1525 },
1526};
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538#define LARGEST_ALLOWED_RATIO_MISMATCH 600
1539static int distance(struct imx_resolution const *res, u32 w, u32 h,
1540 bool keep_ratio)
1541{
1542 unsigned int w_ratio;
1543 unsigned int h_ratio;
1544 int match;
1545 unsigned int allowed_ratio_mismatch = LARGEST_ALLOWED_RATIO_MISMATCH;
1546
1547 if (!keep_ratio)
1548 allowed_ratio_mismatch = ~0;
1549
1550 if (w == 0)
1551 return -1;
1552 w_ratio = (res->width << 13) / w;
1553 if (h == 0)
1554 return -1;
1555 h_ratio = (res->height << 13) / h;
1556 if (h_ratio == 0)
1557 return -1;
1558 match = abs(((w_ratio << 13) / h_ratio) - ((int)8192));
1559
1560 if ((w_ratio < (int)8192) || (h_ratio < (int)8192) ||
1561 (match > allowed_ratio_mismatch))
1562 return -1;
1563
1564 return w_ratio + h_ratio;
1565}
1566
1567
1568static int nearest_resolution_index(struct v4l2_subdev *sd, int w, int h)
1569{
1570 int i;
1571 int idx = -1;
1572 int dist;
1573 int fps_diff;
1574 int min_fps_diff = INT_MAX;
1575 int min_dist = INT_MAX;
1576 const struct imx_resolution *tmp_res = NULL;
1577 struct imx_device *dev = to_imx_sensor(sd);
1578 bool again = 1;
1579retry:
1580 for (i = 0; i < dev->entries_curr_table; i++) {
1581 tmp_res = &dev->curr_res_table[i];
1582 dist = distance(tmp_res, w, h, again);
1583 if (dist == -1)
1584 continue;
1585 if (dist < min_dist) {
1586 min_dist = dist;
1587 idx = i;
1588 }
1589 if (dist == min_dist) {
1590 fps_diff = __imx_min_fps_diff(dev->targetfps,
1591 tmp_res->fps_options);
1592 if (fps_diff < min_fps_diff) {
1593 min_fps_diff = fps_diff;
1594 idx = i;
1595 }
1596 }
1597 }
1598
1599
1600
1601
1602
1603 if (idx == -1 && again == true && dev->new_res_sel_method) {
1604 again = false;
1605 goto retry;
1606 }
1607 return idx;
1608}
1609
1610
1611static int __adjust_hvblank(struct v4l2_subdev *sd)
1612{
1613 struct i2c_client *client = v4l2_get_subdevdata(sd);
1614 struct imx_device *dev = to_imx_sensor(sd);
1615 u16 new_frame_length_lines, new_line_length_pck;
1616 int ret;
1617
1618
1619
1620
1621
1622
1623 if (!dev->v_blank->val || !dev->h_blank->val)
1624 return 0;
1625
1626 new_frame_length_lines = dev->curr_res_table[dev->fmt_idx].height +
1627 dev->v_blank->val;
1628 new_line_length_pck = dev->curr_res_table[dev->fmt_idx].width +
1629 dev->h_blank->val;
1630
1631 ret = imx_write_reg(client, IMX_16BIT,
1632 dev->reg_addr->line_length_pixels, new_line_length_pck);
1633 if (ret)
1634 return ret;
1635 ret = imx_write_reg(client, IMX_16BIT,
1636 dev->reg_addr->frame_length_lines, new_frame_length_lines);
1637 if (ret)
1638 return ret;
1639
1640 dev->lines_per_frame = new_frame_length_lines;
1641 dev->pixels_per_line = new_line_length_pck;
1642
1643 return 0;
1644}
1645
1646static int imx_set_fmt(struct v4l2_subdev *sd,
1647 struct v4l2_subdev_pad_config *cfg,
1648 struct v4l2_subdev_format *format)
1649{
1650 struct v4l2_mbus_framefmt *fmt = &format->format;
1651 struct imx_device *dev = to_imx_sensor(sd);
1652 struct camera_mipi_info *imx_info = NULL;
1653 struct i2c_client *client = v4l2_get_subdevdata(sd);
1654 const struct imx_resolution *res;
1655 int lanes = imx_get_lanes(sd);
1656 int ret;
1657 u16 data, val;
1658 int idx;
1659 if (format->pad)
1660 return -EINVAL;
1661 if (!fmt)
1662 return -EINVAL;
1663
1664 imx_info = v4l2_get_subdev_hostdata(sd);
1665 if (imx_info == NULL)
1666 return -EINVAL;
1667 if ((fmt->width > imx_max_res[dev->sensor_id].res_max_width)
1668 || (fmt->height > imx_max_res[dev->sensor_id].res_max_height)) {
1669 fmt->width = imx_max_res[dev->sensor_id].res_max_width;
1670 fmt->height = imx_max_res[dev->sensor_id].res_max_height;
1671 } else {
1672 idx = nearest_resolution_index(sd, fmt->width, fmt->height);
1673
1674
1675
1676
1677
1678
1679
1680 if (idx == -1)
1681 idx = dev->entries_curr_table - 1;
1682
1683 fmt->width = dev->curr_res_table[idx].width;
1684 fmt->height = dev->curr_res_table[idx].height;
1685 }
1686
1687 fmt->code = dev->format.code;
1688 if(format->which == V4L2_SUBDEV_FORMAT_TRY) {
1689 cfg->try_fmt = *fmt;
1690 return 0;
1691 }
1692 mutex_lock(&dev->input_lock);
1693
1694 dev->fmt_idx = nearest_resolution_index(sd, fmt->width, fmt->height);
1695 if (dev->fmt_idx == -1) {
1696 ret = -EINVAL;
1697 goto out;
1698 }
1699 res = &dev->curr_res_table[dev->fmt_idx];
1700
1701
1702 dev->fps_index = __imx_nearest_fps_index(dev->targetfps,
1703 res->fps_options);
1704 dev->fps = res->fps_options[dev->fps_index].fps;
1705 dev->regs = res->fps_options[dev->fps_index].regs;
1706 if (!dev->regs)
1707 dev->regs = res->regs;
1708
1709 ret = imx_write_reg_array(client, dev->regs);
1710 if (ret)
1711 goto out;
1712
1713 if (dev->sensor_id == IMX132_ID && lanes > 0) {
1714 static const u8 imx132_rgpltd[] = {
1715 2,
1716 0,
1717 0,
1718 1,
1719 };
1720 ret = imx_write_reg(client, IMX_8BIT, IMX132_208_VT_RGPLTD,
1721 imx132_rgpltd[lanes - 1]);
1722 if (ret)
1723 goto out;
1724 }
1725
1726 dev->pixels_per_line = res->fps_options[dev->fps_index].pixels_per_line;
1727 dev->lines_per_frame = res->fps_options[dev->fps_index].lines_per_frame;
1728
1729
1730 __adjust_hvblank(sd);
1731
1732 ret = __imx_update_exposure_timing(client, dev->coarse_itg,
1733 dev->pixels_per_line, dev->lines_per_frame);
1734 if (ret)
1735 goto out;
1736
1737 ret = __imx_update_gain(sd, dev->gain);
1738 if (ret)
1739 goto out;
1740
1741 ret = __imx_update_digital_gain(client, dev->digital_gain);
1742 if (ret)
1743 goto out;
1744
1745 ret = imx_write_reg_array(client, dev->param_update);
1746 if (ret)
1747 goto out;
1748
1749 ret = imx_get_intg_factor(client, imx_info, dev->regs);
1750 if (ret)
1751 goto out;
1752
1753 ret = imx_read_reg(client, IMX_8BIT,
1754 dev->reg_addr->img_orientation, &val);
1755 if (ret)
1756 goto out;
1757 val &= (IMX_VFLIP_BIT|IMX_HFLIP_BIT);
1758 imx_info->raw_bayer_order = imx_bayer_order_mapping[val];
1759 dev->format.code = imx_translate_bayer_order(
1760 imx_info->raw_bayer_order);
1761
1762
1763
1764
1765 switch (dev->sensor_id) {
1766 case IMX135_ID:
1767 ret = imx_read_reg(client, 2,
1768 IMX135_OUTPUT_DATA_FORMAT_REG, &data);
1769 if (ret)
1770 goto out;
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781 if (data == IMX135_OUTPUT_FORMAT_RAW10)
1782
1783 imx_info->metadata_width = res->width * 10 / 8;
1784 else
1785
1786 imx_info->metadata_width = res->width;
1787
1788 imx_info->metadata_height = IMX135_EMBEDDED_DATA_LINE_NUM;
1789
1790 if (imx_info->metadata_effective_width == NULL)
1791 imx_info->metadata_effective_width =
1792 imx135_embedded_effective_size;
1793
1794 break;
1795 case IMX227_ID:
1796 ret = imx_read_reg(client, 2, IMX227_OUTPUT_DATA_FORMAT_REG,
1797 &data);
1798 if (ret)
1799 goto out;
1800 if (data == IMX227_OUTPUT_FORMAT_RAW10)
1801
1802 imx_info->metadata_width = res->width * 10 / 8;
1803 else
1804
1805 imx_info->metadata_width = res->width;
1806
1807 imx_info->metadata_height = IMX227_EMBEDDED_DATA_LINE_NUM;
1808
1809 if (imx_info->metadata_effective_width == NULL)
1810 imx_info->metadata_effective_width =
1811 imx227_embedded_effective_size;
1812
1813 break;
1814 default:
1815 imx_info->metadata_width = 0;
1816 imx_info->metadata_height = 0;
1817 imx_info->metadata_effective_width = NULL;
1818 break;
1819 }
1820
1821out:
1822 mutex_unlock(&dev->input_lock);
1823 return ret;
1824}
1825
1826
1827static int imx_get_fmt(struct v4l2_subdev *sd,
1828 struct v4l2_subdev_pad_config *cfg,
1829 struct v4l2_subdev_format *format)
1830{
1831 struct v4l2_mbus_framefmt *fmt = &format->format;
1832 struct imx_device *dev = to_imx_sensor(sd);
1833
1834 if (format->pad)
1835 return -EINVAL;
1836 if (!fmt)
1837 return -EINVAL;
1838
1839 mutex_lock(&dev->input_lock);
1840 fmt->width = dev->curr_res_table[dev->fmt_idx].width;
1841 fmt->height = dev->curr_res_table[dev->fmt_idx].height;
1842 fmt->code = dev->format.code;
1843 mutex_unlock(&dev->input_lock);
1844 return 0;
1845}
1846
1847static int imx_detect(struct i2c_client *client, u16 *id, u8 *revision)
1848{
1849 struct i2c_adapter *adapter = client->adapter;
1850
1851
1852 if (!i2c_check_functionality(adapter, I2C_FUNC_I2C))
1853 return -ENODEV;
1854
1855
1856 if (imx_read_reg(client, IMX_16BIT, IMX132_175_208_219_CHIP_ID, id)) {
1857 v4l2_err(client, "sensor_id = 0x%x\n", *id);
1858 return -ENODEV;
1859 }
1860
1861 if (*id == IMX132_ID || *id == IMX175_ID ||
1862 *id == IMX208_ID || *id == IMX219_ID)
1863 goto found;
1864
1865 if (imx_read_reg(client, IMX_16BIT, IMX134_135_227_CHIP_ID, id)) {
1866 v4l2_err(client, "sensor_id = 0x%x\n", *id);
1867 return -ENODEV;
1868 }
1869 if (*id != IMX134_ID && *id != IMX135_ID && *id != IMX227_ID) {
1870 v4l2_err(client, "no imx sensor found\n");
1871 return -ENODEV;
1872 }
1873found:
1874 v4l2_info(client, "sensor_id = 0x%x\n", *id);
1875
1876
1877 *revision = 0;
1878
1879 return 0;
1880}
1881
1882static void __imx_print_timing(struct v4l2_subdev *sd)
1883{
1884 struct imx_device *dev = to_imx_sensor(sd);
1885 struct i2c_client *client = v4l2_get_subdevdata(sd);
1886 u16 width = dev->curr_res_table[dev->fmt_idx].width;
1887 u16 height = dev->curr_res_table[dev->fmt_idx].height;
1888
1889 dev_dbg(&client->dev, "Dump imx timing in stream on:\n");
1890 dev_dbg(&client->dev, "width: %d:\n", width);
1891 dev_dbg(&client->dev, "height: %d:\n", height);
1892 dev_dbg(&client->dev, "pixels_per_line: %d:\n", dev->pixels_per_line);
1893 dev_dbg(&client->dev, "line per frame: %d:\n", dev->lines_per_frame);
1894 dev_dbg(&client->dev, "pix freq: %d:\n", dev->vt_pix_clk_freq_mhz);
1895 dev_dbg(&client->dev, "init fps: %d:\n", dev->vt_pix_clk_freq_mhz /
1896 dev->pixels_per_line / dev->lines_per_frame);
1897 dev_dbg(&client->dev, "HBlank: %d nS:\n",
1898 1000 * (dev->pixels_per_line - width) /
1899 (dev->vt_pix_clk_freq_mhz / 1000000));
1900 dev_dbg(&client->dev, "VBlank: %d uS:\n",
1901 (dev->lines_per_frame - height) * dev->pixels_per_line /
1902 (dev->vt_pix_clk_freq_mhz / 1000000));
1903}
1904
1905
1906
1907
1908static int imx_s_stream(struct v4l2_subdev *sd, int enable)
1909{
1910 int ret;
1911 struct i2c_client *client = v4l2_get_subdevdata(sd);
1912 struct imx_device *dev = to_imx_sensor(sd);
1913
1914 mutex_lock(&dev->input_lock);
1915 if (enable) {
1916
1917 if (dev->fw == NULL) {
1918 dev_warn(&client->dev, "No MSR loaded from library");
1919 } else {
1920 ret = apply_msr_data(client, dev->fw);
1921 if (ret) {
1922 mutex_unlock(&dev->input_lock);
1923 return ret;
1924 }
1925 }
1926 ret = imx_test_pattern(sd);
1927 if (ret) {
1928 v4l2_err(client, "Configure test pattern failed.\n");
1929 mutex_unlock(&dev->input_lock);
1930 return ret;
1931 }
1932 __imx_print_timing(sd);
1933 ret = imx_write_reg_array(client, imx_streaming);
1934 if (ret != 0) {
1935 v4l2_err(client, "write_reg_array err\n");
1936 mutex_unlock(&dev->input_lock);
1937 return ret;
1938 }
1939 dev->streaming = 1;
1940 if (dev->vcm_driver && dev->vcm_driver->t_focus_abs_init)
1941 dev->vcm_driver->t_focus_abs_init(sd);
1942 } else {
1943 ret = imx_write_reg_array(client, imx_soft_standby);
1944 if (ret != 0) {
1945 v4l2_err(client, "write_reg_array err\n");
1946 mutex_unlock(&dev->input_lock);
1947 return ret;
1948 }
1949 dev->streaming = 0;
1950 dev->targetfps = 0;
1951 }
1952 mutex_unlock(&dev->input_lock);
1953
1954 return 0;
1955}
1956
1957static int __update_imx_device_settings(struct imx_device *dev, u16 sensor_id)
1958{
1959
1960 return -EINVAL;
1961}
1962
1963static int imx_s_config(struct v4l2_subdev *sd,
1964 int irq, void *pdata)
1965{
1966 struct imx_device *dev = to_imx_sensor(sd);
1967 struct i2c_client *client = v4l2_get_subdevdata(sd);
1968 u8 sensor_revision;
1969 u16 sensor_id;
1970 int ret;
1971 if (pdata == NULL)
1972 return -ENODEV;
1973
1974 dev->platform_data = pdata;
1975
1976 mutex_lock(&dev->input_lock);
1977
1978 if (dev->platform_data->platform_init) {
1979 ret = dev->platform_data->platform_init(client);
1980 if (ret) {
1981 mutex_unlock(&dev->input_lock);
1982 dev_err(&client->dev, "imx platform init err\n");
1983 return ret;
1984 }
1985 }
1986
1987
1988
1989
1990
1991 ret = __imx_s_power(sd, 0);
1992 if (ret) {
1993 v4l2_err(client, "imx power-down err.\n");
1994 mutex_unlock(&dev->input_lock);
1995 return ret;
1996 }
1997
1998 ret = __imx_s_power(sd, 1);
1999 if (ret) {
2000 v4l2_err(client, "imx power-up err.\n");
2001 mutex_unlock(&dev->input_lock);
2002 return ret;
2003 }
2004
2005 ret = dev->platform_data->csi_cfg(sd, 1);
2006 if (ret)
2007 goto fail_csi_cfg;
2008
2009
2010 ret = imx_detect(client, &sensor_id, &sensor_revision);
2011 if (ret) {
2012 v4l2_err(client, "imx_detect err s_config.\n");
2013 goto fail_detect;
2014 }
2015
2016 dev->sensor_id = sensor_id;
2017 dev->sensor_revision = sensor_revision;
2018
2019
2020 ret = __update_imx_device_settings(dev, dev->sensor_id);
2021 if (ret)
2022 goto fail_detect;
2023
2024 dev->otp_data = dev->otp_driver->otp_read(sd,
2025 dev->otp_driver->dev_addr, dev->otp_driver->start_addr,
2026 dev->otp_driver->size);
2027
2028
2029 ret = __imx_s_power(sd, 0);
2030
2031 mutex_unlock(&dev->input_lock);
2032 if (ret)
2033 v4l2_err(client, "imx power-down err.\n");
2034
2035 return ret;
2036
2037fail_detect:
2038 dev->platform_data->csi_cfg(sd, 0);
2039fail_csi_cfg:
2040 __imx_s_power(sd, 0);
2041 if (dev->platform_data->platform_deinit)
2042 dev->platform_data->platform_deinit();
2043 mutex_unlock(&dev->input_lock);
2044 dev_err(&client->dev, "sensor power-gating failed\n");
2045 return ret;
2046}
2047
2048static int
2049imx_enum_mbus_code(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
2050 struct v4l2_subdev_mbus_code_enum *code)
2051{
2052 struct imx_device *dev = to_imx_sensor(sd);
2053 if (code->index >= MAX_FMTS)
2054 return -EINVAL;
2055
2056 mutex_lock(&dev->input_lock);
2057 code->code = dev->format.code;
2058 mutex_unlock(&dev->input_lock);
2059 return 0;
2060}
2061
2062static int
2063imx_enum_frame_size(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
2064 struct v4l2_subdev_frame_size_enum *fse)
2065{
2066 int index = fse->index;
2067 struct imx_device *dev = to_imx_sensor(sd);
2068
2069 mutex_lock(&dev->input_lock);
2070 if (index >= dev->entries_curr_table) {
2071 mutex_unlock(&dev->input_lock);
2072 return -EINVAL;
2073 }
2074
2075 fse->min_width = dev->curr_res_table[index].width;
2076 fse->min_height = dev->curr_res_table[index].height;
2077 fse->max_width = dev->curr_res_table[index].width;
2078 fse->max_height = dev->curr_res_table[index].height;
2079 mutex_unlock(&dev->input_lock);
2080 return 0;
2081}
2082
2083static int
2084imx_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *param)
2085{
2086 struct imx_device *dev = to_imx_sensor(sd);
2087
2088 mutex_lock(&dev->input_lock);
2089 dev->run_mode = param->parm.capture.capturemode;
2090
2091 switch (dev->run_mode) {
2092 case CI_MODE_VIDEO:
2093 dev->curr_res_table = dev->mode_tables->res_video;
2094 dev->entries_curr_table = dev->mode_tables->n_res_video;
2095 break;
2096 case CI_MODE_STILL_CAPTURE:
2097 dev->curr_res_table = dev->mode_tables->res_still;
2098 dev->entries_curr_table = dev->mode_tables->n_res_still;
2099 break;
2100 default:
2101 dev->curr_res_table = dev->mode_tables->res_preview;
2102 dev->entries_curr_table = dev->mode_tables->n_res_preview;
2103 }
2104 mutex_unlock(&dev->input_lock);
2105 return 0;
2106}
2107
2108int
2109imx_g_frame_interval(struct v4l2_subdev *sd,
2110 struct v4l2_subdev_frame_interval *interval)
2111{
2112 struct imx_device *dev = to_imx_sensor(sd);
2113
2114 mutex_lock(&dev->input_lock);
2115 interval->interval.denominator = dev->fps;
2116 interval->interval.numerator = 1;
2117 mutex_unlock(&dev->input_lock);
2118 return 0;
2119}
2120
2121static int __imx_s_frame_interval(struct v4l2_subdev *sd,
2122 struct v4l2_subdev_frame_interval *interval)
2123{
2124 struct imx_device *dev = to_imx_sensor(sd);
2125 struct i2c_client *client = v4l2_get_subdevdata(sd);
2126 const struct imx_resolution *res =
2127 &dev->curr_res_table[dev->fmt_idx];
2128 struct camera_mipi_info *imx_info = NULL;
2129 unsigned short pixels_per_line;
2130 unsigned short lines_per_frame;
2131 unsigned int fps_index;
2132 int fps;
2133 int ret = 0;
2134
2135
2136 imx_info = v4l2_get_subdev_hostdata(sd);
2137 if (imx_info == NULL)
2138 return -EINVAL;
2139
2140 if (!interval->interval.numerator)
2141 interval->interval.numerator = 1;
2142
2143 fps = interval->interval.denominator / interval->interval.numerator;
2144
2145 if (!fps)
2146 return -EINVAL;
2147
2148 dev->targetfps = fps;
2149
2150 if (!dev->streaming)
2151 return 0;
2152
2153
2154 if (fps == dev->fps)
2155 return 0;
2156
2157
2158
2159
2160 fps_index = __imx_above_nearest_fps_index(fps, res->fps_options);
2161 if (fps > res->fps_options[fps_index].fps) {
2162
2163
2164
2165
2166 dev_err(&client->dev, "Could not support fps: %d.\n", fps);
2167 return -EINVAL;
2168 }
2169
2170 if (res->fps_options[fps_index].regs &&
2171 res->fps_options[fps_index].regs != dev->regs) {
2172
2173
2174
2175
2176
2177 dev_dbg(&client->dev,
2178 "Sensor is streaming, not apply new sensor setting\n");
2179 if (fps > res->fps_options[dev->fps_index].fps) {
2180
2181
2182
2183
2184
2185 dev_warn(&client->dev,
2186 "Could not support fps: %d, keep current: %d.\n",
2187 fps, dev->fps);
2188 return 0;
2189 }
2190 } else {
2191 dev->fps_index = fps_index;
2192 dev->fps = res->fps_options[dev->fps_index].fps;
2193 }
2194
2195
2196 pixels_per_line = res->fps_options[dev->fps_index].pixels_per_line;
2197 lines_per_frame = res->fps_options[dev->fps_index].lines_per_frame;
2198
2199 if (fps > res->fps_options[fps_index].fps) {
2200
2201
2202
2203
2204 dev_warn(&client->dev, "Could not support fps: %d. Use:%d.\n",
2205 fps, res->fps_options[fps_index].fps);
2206 goto done;
2207 }
2208
2209
2210 if (dev->fps != fps) {
2211#define MAX_LINES_PER_FRAME 0xffff
2212 dev_dbg(&client->dev, "adjusting fps using lines_per_frame\n");
2213
2214
2215
2216
2217
2218 if (dev->lines_per_frame * dev->fps / fps >
2219 MAX_LINES_PER_FRAME) {
2220 dev_warn(&client->dev,
2221 "adjust lines_per_frame out of range, try to use max value.\n");
2222 lines_per_frame = MAX_LINES_PER_FRAME;
2223 } else {
2224 lines_per_frame = lines_per_frame * dev->fps / fps;
2225 }
2226 }
2227done:
2228
2229 dev->pixels_per_line = pixels_per_line;
2230 dev->lines_per_frame = lines_per_frame;
2231
2232
2233 ret = __imx_update_exposure_timing(client,
2234 dev->coarse_itg, dev->pixels_per_line, dev->lines_per_frame);
2235 if (ret)
2236 return ret;
2237
2238 dev->fps = fps;
2239
2240 ret = imx_get_intg_factor(client, imx_info, dev->regs);
2241 if (ret)
2242 return ret;
2243
2244 interval->interval.denominator = res->fps_options[dev->fps_index].fps;
2245 interval->interval.numerator = 1;
2246 __imx_print_timing(sd);
2247
2248 return ret;
2249}
2250
2251static int imx_s_frame_interval(struct v4l2_subdev *sd,
2252 struct v4l2_subdev_frame_interval *interval)
2253{
2254 struct imx_device *dev = to_imx_sensor(sd);
2255 int ret;
2256
2257 mutex_lock(&dev->input_lock);
2258 ret = __imx_s_frame_interval(sd, interval);
2259 mutex_unlock(&dev->input_lock);
2260
2261 return ret;
2262}
2263static int imx_g_skip_frames(struct v4l2_subdev *sd, u32 *frames)
2264{
2265 struct imx_device *dev = to_imx_sensor(sd);
2266
2267 mutex_lock(&dev->input_lock);
2268 *frames = dev->curr_res_table[dev->fmt_idx].skip_frames;
2269 mutex_unlock(&dev->input_lock);
2270
2271 return 0;
2272}
2273
2274static const struct v4l2_subdev_sensor_ops imx_sensor_ops = {
2275 .g_skip_frames = imx_g_skip_frames,
2276};
2277
2278static const struct v4l2_subdev_video_ops imx_video_ops = {
2279 .s_stream = imx_s_stream,
2280 .s_parm = imx_s_parm,
2281 .g_frame_interval = imx_g_frame_interval,
2282 .s_frame_interval = imx_s_frame_interval,
2283};
2284
2285static const struct v4l2_subdev_core_ops imx_core_ops = {
2286 .s_power = imx_s_power,
2287 .ioctl = imx_ioctl,
2288 .init = imx_init,
2289};
2290
2291static const struct v4l2_subdev_pad_ops imx_pad_ops = {
2292 .enum_mbus_code = imx_enum_mbus_code,
2293 .enum_frame_size = imx_enum_frame_size,
2294 .get_fmt = imx_get_fmt,
2295 .set_fmt = imx_set_fmt,
2296};
2297
2298static const struct v4l2_subdev_ops imx_ops = {
2299 .core = &imx_core_ops,
2300 .video = &imx_video_ops,
2301 .pad = &imx_pad_ops,
2302 .sensor = &imx_sensor_ops,
2303};
2304
2305static const struct media_entity_operations imx_entity_ops = {
2306 .link_setup = NULL,
2307};
2308
2309static int imx_remove(struct i2c_client *client)
2310{
2311 struct v4l2_subdev *sd = i2c_get_clientdata(client);
2312 struct imx_device *dev = to_imx_sensor(sd);
2313
2314 if (dev->platform_data->platform_deinit)
2315 dev->platform_data->platform_deinit();
2316
2317 media_entity_cleanup(&dev->sd.entity);
2318 v4l2_ctrl_handler_free(&dev->ctrl_handler);
2319 dev->platform_data->csi_cfg(sd, 0);
2320 v4l2_device_unregister_subdev(sd);
2321 release_msr_list(client, dev->fw);
2322 kfree(dev);
2323
2324 return 0;
2325}
2326
2327static int __imx_init_ctrl_handler(struct imx_device *dev)
2328{
2329 struct v4l2_ctrl_handler *hdl;
2330 int i;
2331
2332 hdl = &dev->ctrl_handler;
2333
2334 v4l2_ctrl_handler_init(&dev->ctrl_handler, ARRAY_SIZE(imx_controls));
2335
2336 for (i = 0; i < ARRAY_SIZE(imx_controls); i++)
2337 v4l2_ctrl_new_custom(&dev->ctrl_handler,
2338 &imx_controls[i], NULL);
2339
2340 dev->pixel_rate = v4l2_ctrl_find(&dev->ctrl_handler,
2341 V4L2_CID_PIXEL_RATE);
2342 dev->h_blank = v4l2_ctrl_find(&dev->ctrl_handler,
2343 V4L2_CID_HBLANK);
2344 dev->v_blank = v4l2_ctrl_find(&dev->ctrl_handler,
2345 V4L2_CID_VBLANK);
2346 dev->link_freq = v4l2_ctrl_find(&dev->ctrl_handler,
2347 V4L2_CID_LINK_FREQ);
2348 dev->h_flip = v4l2_ctrl_find(&dev->ctrl_handler,
2349 V4L2_CID_HFLIP);
2350 dev->v_flip = v4l2_ctrl_find(&dev->ctrl_handler,
2351 V4L2_CID_VFLIP);
2352 dev->tp_mode = v4l2_ctrl_find(&dev->ctrl_handler,
2353 V4L2_CID_TEST_PATTERN);
2354 dev->tp_r = v4l2_ctrl_find(&dev->ctrl_handler,
2355 V4L2_CID_TEST_PATTERN_COLOR_R);
2356 dev->tp_gr = v4l2_ctrl_find(&dev->ctrl_handler,
2357 V4L2_CID_TEST_PATTERN_COLOR_GR);
2358 dev->tp_gb = v4l2_ctrl_find(&dev->ctrl_handler,
2359 V4L2_CID_TEST_PATTERN_COLOR_GB);
2360 dev->tp_b = v4l2_ctrl_find(&dev->ctrl_handler,
2361 V4L2_CID_TEST_PATTERN_COLOR_B);
2362
2363 if (dev->ctrl_handler.error || dev->pixel_rate == NULL
2364 || dev->h_blank == NULL || dev->v_blank == NULL
2365 || dev->h_flip == NULL || dev->v_flip == NULL
2366 || dev->link_freq == NULL) {
2367 return dev->ctrl_handler.error;
2368 }
2369
2370 dev->ctrl_handler.lock = &dev->input_lock;
2371 dev->sd.ctrl_handler = hdl;
2372 v4l2_ctrl_handler_setup(&dev->ctrl_handler);
2373
2374 return 0;
2375}
2376
2377static void imx_update_reg_info(struct imx_device *dev)
2378{
2379 if (dev->sensor_id == IMX219_ID) {
2380 dev->reg_addr = &imx219_addr;
2381 dev->param_hold = imx219_param_hold;
2382 dev->param_update = imx219_param_update;
2383 } else {
2384 dev->reg_addr = &imx_addr;
2385 dev->param_hold = imx_param_hold;
2386 dev->param_update = imx_param_update;
2387 }
2388}
2389
2390static int imx_probe(struct i2c_client *client,
2391 const struct i2c_device_id *id)
2392{
2393 struct imx_device *dev;
2394 struct camera_mipi_info *imx_info = NULL;
2395 int ret;
2396 char *msr_file_name = NULL;
2397
2398
2399 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
2400 if (!dev) {
2401 v4l2_err(client, "%s: out of memory\n", __func__);
2402 return -ENOMEM;
2403 }
2404
2405 mutex_init(&dev->input_lock);
2406
2407 dev->i2c_id = id->driver_data;
2408 dev->fmt_idx = 0;
2409 dev->sensor_id = IMX_ID_DEFAULT;
2410 dev->vcm_driver = &imx_vcms[IMX_ID_DEFAULT];
2411 dev->digital_gain = 256;
2412
2413 v4l2_i2c_subdev_init(&(dev->sd), client, &imx_ops);
2414
2415 if (client->dev.platform_data) {
2416 ret = imx_s_config(&dev->sd, client->irq,
2417 client->dev.platform_data);
2418 if (ret)
2419 goto out_free;
2420 }
2421 imx_info = v4l2_get_subdev_hostdata(&dev->sd);
2422
2423
2424
2425
2426
2427 imx_update_reg_info(dev);
2428 snprintf(dev->sd.name, sizeof(dev->sd.name), "%s%x %d-%04x",
2429 IMX_SUBDEV_PREFIX, dev->sensor_id,
2430 i2c_adapter_id(client->adapter), client->addr);
2431
2432 ret = __imx_init_ctrl_handler(dev);
2433 if (ret)
2434 goto out_ctrl_handler_free;
2435
2436 dev->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
2437 dev->pad.flags = MEDIA_PAD_FL_SOURCE;
2438 dev->format.code = imx_translate_bayer_order(
2439 imx_info->raw_bayer_order);
2440 dev->sd.entity.ops = &imx_entity_ops;
2441 dev->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
2442
2443 ret = media_entity_pads_init(&dev->sd.entity, 1, &dev->pad);
2444 if (ret) {
2445 imx_remove(client);
2446 return ret;
2447 }
2448
2449
2450 if (dev->platform_data->msr_file_name != NULL)
2451 msr_file_name = dev->platform_data->msr_file_name();
2452 if (msr_file_name) {
2453 ret = load_msr_list(client, msr_file_name, &dev->fw);
2454 if (ret) {
2455 imx_remove(client);
2456 return ret;
2457 }
2458 } else {
2459 dev_warn(&client->dev, "Drvb file not present");
2460 }
2461
2462 return ret;
2463
2464out_ctrl_handler_free:
2465 v4l2_ctrl_handler_free(&dev->ctrl_handler);
2466
2467out_free:
2468 v4l2_device_unregister_subdev(&dev->sd);
2469 kfree(dev);
2470 return ret;
2471}
2472
2473static const struct i2c_device_id imx_ids[] = {
2474 {IMX_NAME_175, IMX175_ID},
2475 {IMX_NAME_135, IMX135_ID},
2476 {IMX_NAME_135_FUJI, IMX135_FUJI_ID},
2477 {IMX_NAME_134, IMX134_ID},
2478 {IMX_NAME_132, IMX132_ID},
2479 {IMX_NAME_208, IMX208_ID},
2480 {IMX_NAME_219, IMX219_ID},
2481 {IMX_NAME_227, IMX227_ID},
2482 {}
2483};
2484
2485MODULE_DEVICE_TABLE(i2c, imx_ids);
2486
2487static struct i2c_driver imx_driver = {
2488 .driver = {
2489 .name = IMX_DRIVER,
2490 },
2491 .probe = imx_probe,
2492 .remove = imx_remove,
2493 .id_table = imx_ids,
2494};
2495
2496static __init int init_imx(void)
2497{
2498 return i2c_add_driver(&imx_driver);
2499}
2500
2501static __exit void exit_imx(void)
2502{
2503 i2c_del_driver(&imx_driver);
2504}
2505
2506module_init(init_imx);
2507module_exit(exit_imx);
2508
2509MODULE_DESCRIPTION("A low-level driver for Sony IMX sensors");
2510MODULE_AUTHOR("Shenbo Huang <shenbo.huang@intel.com>");
2511MODULE_LICENSE("GPL");
2512
2513