1 // SPDX-License-Identifier: GPL-2.0
3 * imx214.c - imx214 sensor driver
5 * Copyright 2018 Qtechnology A/S
7 * Ricardo Ribalda <ricardo.ribalda@gmail.com>
10 #include <linux/delay.h>
11 #include <linux/gpio/consumer.h>
12 #include <linux/i2c.h>
13 #include <linux/module.h>
14 #include <linux/pm_runtime.h>
15 #include <linux/regmap.h>
16 #include <linux/regulator/consumer.h>
17 #include <media/media-entity.h>
18 #include <media/v4l2-ctrls.h>
19 #include <media/v4l2-fwnode.h>
20 #include <media/v4l2-subdev.h>
22 #define IMX214_DEFAULT_CLK_FREQ 24000000
23 #define IMX214_DEFAULT_LINK_FREQ 480000000
24 #define IMX214_DEFAULT_PIXEL_RATE ((IMX214_DEFAULT_LINK_FREQ * 8LL) / 10)
26 #define IMX214_MBUS_CODE MEDIA_BUS_FMT_SRGGB10_1X10
28 static const char * const imx214_supply_name
[] = {
34 #define IMX214_NUM_SUPPLIES ARRAY_SIZE(imx214_supply_name)
39 struct regmap
*regmap
;
41 struct v4l2_subdev sd
;
43 struct v4l2_mbus_framefmt fmt
;
44 struct v4l2_rect crop
;
46 struct v4l2_ctrl_handler ctrls
;
47 struct v4l2_ctrl
*pixel_rate
;
48 struct v4l2_ctrl
*link_freq
;
49 struct v4l2_ctrl
*exposure
;
51 struct regulator_bulk_data supplies
[IMX214_NUM_SUPPLIES
];
53 struct gpio_desc
*enable_gpio
;
56 * Serialize control access, get/set format, get selection
57 * and start streaming.
70 IMX214_TABLE_WAIT_MS
= 0,
76 /*From imx214_mode_tbls.h*/
77 static const struct reg_8 mode_4096x2304
[] = {
176 {IMX214_TABLE_WAIT_MS
, 10},
178 {IMX214_TABLE_END
, 0x00}
181 static const struct reg_8 mode_1920x1080
[] = {
280 {IMX214_TABLE_WAIT_MS
, 10},
282 {IMX214_TABLE_END
, 0x00}
285 static const struct reg_8 mode_table_common
[] = {
288 /* software standby settings */
294 /* external clock setting */
374 /* CNR parameter setting */
377 /* Moire reduction */
380 /* image enhancement */
402 {IMX214_TABLE_END
, 0x00}
406 * Declare modes in order, from biggest
407 * to smallest height.
409 static const struct imx214_mode
{
412 const struct reg_8
*reg_table
;
417 .reg_table
= mode_4096x2304
,
422 .reg_table
= mode_1920x1080
,
426 static inline struct imx214
*to_imx214(struct v4l2_subdev
*sd
)
428 return container_of(sd
, struct imx214
, sd
);
431 static int __maybe_unused
imx214_power_on(struct device
*dev
)
433 struct i2c_client
*client
= to_i2c_client(dev
);
434 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
435 struct imx214
*imx214
= to_imx214(sd
);
438 ret
= regulator_bulk_enable(IMX214_NUM_SUPPLIES
, imx214
->supplies
);
440 dev_err(imx214
->dev
, "failed to enable regulators: %d\n", ret
);
444 usleep_range(2000, 3000);
446 ret
= clk_prepare_enable(imx214
->xclk
);
448 regulator_bulk_disable(IMX214_NUM_SUPPLIES
, imx214
->supplies
);
449 dev_err(imx214
->dev
, "clk prepare enable failed\n");
453 gpiod_set_value_cansleep(imx214
->enable_gpio
, 1);
454 usleep_range(12000, 15000);
459 static int __maybe_unused
imx214_power_off(struct device
*dev
)
461 struct i2c_client
*client
= to_i2c_client(dev
);
462 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
463 struct imx214
*imx214
= to_imx214(sd
);
465 gpiod_set_value_cansleep(imx214
->enable_gpio
, 0);
467 clk_disable_unprepare(imx214
->xclk
);
469 regulator_bulk_disable(IMX214_NUM_SUPPLIES
, imx214
->supplies
);
470 usleep_range(10, 20);
475 static int imx214_enum_mbus_code(struct v4l2_subdev
*sd
,
476 struct v4l2_subdev_pad_config
*cfg
,
477 struct v4l2_subdev_mbus_code_enum
*code
)
482 code
->code
= IMX214_MBUS_CODE
;
487 static int imx214_enum_frame_size(struct v4l2_subdev
*subdev
,
488 struct v4l2_subdev_pad_config
*cfg
,
489 struct v4l2_subdev_frame_size_enum
*fse
)
491 if (fse
->code
!= IMX214_MBUS_CODE
)
494 if (fse
->index
>= ARRAY_SIZE(imx214_modes
))
497 fse
->min_width
= fse
->max_width
= imx214_modes
[fse
->index
].width
;
498 fse
->min_height
= fse
->max_height
= imx214_modes
[fse
->index
].height
;
503 #ifdef CONFIG_VIDEO_ADV_DEBUG
504 static int imx214_s_register(struct v4l2_subdev
*subdev
,
505 const struct v4l2_dbg_register
*reg
)
507 struct imx214
*imx214
= container_of(subdev
, struct imx214
, sd
);
509 return regmap_write(imx214
->regmap
, reg
->reg
, reg
->val
);
512 static int imx214_g_register(struct v4l2_subdev
*subdev
,
513 struct v4l2_dbg_register
*reg
)
515 struct imx214
*imx214
= container_of(subdev
, struct imx214
, sd
);
520 ret
= regmap_read(imx214
->regmap
, reg
->reg
, &aux
);
527 static const struct v4l2_subdev_core_ops imx214_core_ops
= {
528 #ifdef CONFIG_VIDEO_ADV_DEBUG
529 .g_register
= imx214_g_register
,
530 .s_register
= imx214_s_register
,
534 static struct v4l2_mbus_framefmt
*
535 __imx214_get_pad_format(struct imx214
*imx214
,
536 struct v4l2_subdev_pad_config
*cfg
,
538 enum v4l2_subdev_format_whence which
)
541 case V4L2_SUBDEV_FORMAT_TRY
:
542 return v4l2_subdev_get_try_format(&imx214
->sd
, cfg
, pad
);
543 case V4L2_SUBDEV_FORMAT_ACTIVE
:
550 static int imx214_get_format(struct v4l2_subdev
*sd
,
551 struct v4l2_subdev_pad_config
*cfg
,
552 struct v4l2_subdev_format
*format
)
554 struct imx214
*imx214
= to_imx214(sd
);
556 mutex_lock(&imx214
->mutex
);
557 format
->format
= *__imx214_get_pad_format(imx214
, cfg
, format
->pad
,
559 mutex_unlock(&imx214
->mutex
);
564 static struct v4l2_rect
*
565 __imx214_get_pad_crop(struct imx214
*imx214
, struct v4l2_subdev_pad_config
*cfg
,
566 unsigned int pad
, enum v4l2_subdev_format_whence which
)
569 case V4L2_SUBDEV_FORMAT_TRY
:
570 return v4l2_subdev_get_try_crop(&imx214
->sd
, cfg
, pad
);
571 case V4L2_SUBDEV_FORMAT_ACTIVE
:
572 return &imx214
->crop
;
578 static int imx214_set_format(struct v4l2_subdev
*sd
,
579 struct v4l2_subdev_pad_config
*cfg
,
580 struct v4l2_subdev_format
*format
)
582 struct imx214
*imx214
= to_imx214(sd
);
583 struct v4l2_mbus_framefmt
*__format
;
584 struct v4l2_rect
*__crop
;
585 const struct imx214_mode
*mode
;
587 mutex_lock(&imx214
->mutex
);
589 __crop
= __imx214_get_pad_crop(imx214
, cfg
, format
->pad
, format
->which
);
591 mode
= v4l2_find_nearest_size(imx214_modes
,
592 ARRAY_SIZE(imx214_modes
), width
, height
,
593 format
->format
.width
,
594 format
->format
.height
);
596 __crop
->width
= mode
->width
;
597 __crop
->height
= mode
->height
;
599 __format
= __imx214_get_pad_format(imx214
, cfg
, format
->pad
,
601 __format
->width
= __crop
->width
;
602 __format
->height
= __crop
->height
;
603 __format
->code
= IMX214_MBUS_CODE
;
604 __format
->field
= V4L2_FIELD_NONE
;
605 __format
->colorspace
= V4L2_COLORSPACE_SRGB
;
606 __format
->ycbcr_enc
= V4L2_MAP_YCBCR_ENC_DEFAULT(__format
->colorspace
);
607 __format
->quantization
= V4L2_MAP_QUANTIZATION_DEFAULT(true,
608 __format
->colorspace
, __format
->ycbcr_enc
);
609 __format
->xfer_func
= V4L2_MAP_XFER_FUNC_DEFAULT(__format
->colorspace
);
611 format
->format
= *__format
;
613 mutex_unlock(&imx214
->mutex
);
618 static int imx214_get_selection(struct v4l2_subdev
*sd
,
619 struct v4l2_subdev_pad_config
*cfg
,
620 struct v4l2_subdev_selection
*sel
)
622 struct imx214
*imx214
= to_imx214(sd
);
624 if (sel
->target
!= V4L2_SEL_TGT_CROP
)
627 mutex_lock(&imx214
->mutex
);
628 sel
->r
= *__imx214_get_pad_crop(imx214
, cfg
, sel
->pad
,
630 mutex_unlock(&imx214
->mutex
);
634 static int imx214_entity_init_cfg(struct v4l2_subdev
*subdev
,
635 struct v4l2_subdev_pad_config
*cfg
)
637 struct v4l2_subdev_format fmt
= { };
639 fmt
.which
= cfg
? V4L2_SUBDEV_FORMAT_TRY
: V4L2_SUBDEV_FORMAT_ACTIVE
;
640 fmt
.format
.width
= imx214_modes
[0].width
;
641 fmt
.format
.height
= imx214_modes
[0].height
;
643 imx214_set_format(subdev
, cfg
, &fmt
);
648 static int imx214_set_ctrl(struct v4l2_ctrl
*ctrl
)
650 struct imx214
*imx214
= container_of(ctrl
->handler
,
651 struct imx214
, ctrls
);
656 * Applying V4L2 control value only happens
657 * when power is up for streaming
659 if (!pm_runtime_get_if_in_use(imx214
->dev
))
663 case V4L2_CID_EXPOSURE
:
665 vals
[0] = ctrl
->val
>> 8;
666 ret
= regmap_bulk_write(imx214
->regmap
, 0x202, vals
, 2);
668 dev_err(imx214
->dev
, "Error %d\n", ret
);
676 pm_runtime_put(imx214
->dev
);
681 static const struct v4l2_ctrl_ops imx214_ctrl_ops
= {
682 .s_ctrl
= imx214_set_ctrl
,
686 static int imx214_write_table(struct imx214
*imx214
,
687 const struct reg_8 table
[])
693 for (; table
->addr
!= IMX214_TABLE_END
; table
++) {
694 if (table
->addr
== IMX214_TABLE_WAIT_MS
) {
695 usleep_range(table
->val
* 1000,
696 table
->val
* 1000 + 500);
700 for (i
= 0; i
< MAX_CMD
; i
++) {
701 if (table
[i
].addr
!= (table
[0].addr
+ i
))
703 vals
[i
] = table
[i
].val
;
706 ret
= regmap_bulk_write(imx214
->regmap
, table
->addr
, vals
, i
);
709 dev_err(imx214
->dev
, "write_table error: %d\n", ret
);
719 static int imx214_start_streaming(struct imx214
*imx214
)
721 const struct imx214_mode
*mode
;
724 mutex_lock(&imx214
->mutex
);
725 ret
= imx214_write_table(imx214
, mode_table_common
);
727 dev_err(imx214
->dev
, "could not sent common table %d\n", ret
);
731 mode
= v4l2_find_nearest_size(imx214_modes
,
732 ARRAY_SIZE(imx214_modes
), width
, height
,
733 imx214
->fmt
.width
, imx214
->fmt
.height
);
734 ret
= imx214_write_table(imx214
, mode
->reg_table
);
736 dev_err(imx214
->dev
, "could not sent mode table %d\n", ret
);
739 ret
= __v4l2_ctrl_handler_setup(&imx214
->ctrls
);
741 dev_err(imx214
->dev
, "could not sync v4l2 controls\n");
744 ret
= regmap_write(imx214
->regmap
, 0x100, 1);
746 dev_err(imx214
->dev
, "could not sent start table %d\n", ret
);
750 mutex_unlock(&imx214
->mutex
);
754 mutex_unlock(&imx214
->mutex
);
758 static int imx214_stop_streaming(struct imx214
*imx214
)
762 ret
= regmap_write(imx214
->regmap
, 0x100, 0);
764 dev_err(imx214
->dev
, "could not sent stop table %d\n", ret
);
769 static int imx214_s_stream(struct v4l2_subdev
*subdev
, int enable
)
771 struct imx214
*imx214
= to_imx214(subdev
);
774 if (imx214
->streaming
== enable
)
778 ret
= pm_runtime_get_sync(imx214
->dev
);
780 pm_runtime_put_noidle(imx214
->dev
);
784 ret
= imx214_start_streaming(imx214
);
788 ret
= imx214_start_streaming(imx214
);
791 pm_runtime_put(imx214
->dev
);
794 imx214
->streaming
= enable
;
798 pm_runtime_put(imx214
->dev
);
802 static int imx214_g_frame_interval(struct v4l2_subdev
*subdev
,
803 struct v4l2_subdev_frame_interval
*fival
)
806 fival
->interval
.numerator
= 1;
807 fival
->interval
.denominator
= IMX214_FPS
;
812 static int imx214_enum_frame_interval(struct v4l2_subdev
*subdev
,
813 struct v4l2_subdev_pad_config
*cfg
,
814 struct v4l2_subdev_frame_interval_enum
*fie
)
816 const struct imx214_mode
*mode
;
821 mode
= v4l2_find_nearest_size(imx214_modes
,
822 ARRAY_SIZE(imx214_modes
), width
, height
,
823 fie
->width
, fie
->height
);
825 fie
->code
= IMX214_MBUS_CODE
;
826 fie
->width
= mode
->width
;
827 fie
->height
= mode
->height
;
828 fie
->interval
.numerator
= 1;
829 fie
->interval
.denominator
= IMX214_FPS
;
834 static const struct v4l2_subdev_video_ops imx214_video_ops
= {
835 .s_stream
= imx214_s_stream
,
836 .g_frame_interval
= imx214_g_frame_interval
,
837 .s_frame_interval
= imx214_g_frame_interval
,
840 static const struct v4l2_subdev_pad_ops imx214_subdev_pad_ops
= {
841 .enum_mbus_code
= imx214_enum_mbus_code
,
842 .enum_frame_size
= imx214_enum_frame_size
,
843 .enum_frame_interval
= imx214_enum_frame_interval
,
844 .get_fmt
= imx214_get_format
,
845 .set_fmt
= imx214_set_format
,
846 .get_selection
= imx214_get_selection
,
847 .init_cfg
= imx214_entity_init_cfg
,
850 static const struct v4l2_subdev_ops imx214_subdev_ops
= {
851 .core
= &imx214_core_ops
,
852 .video
= &imx214_video_ops
,
853 .pad
= &imx214_subdev_pad_ops
,
856 static const struct regmap_config sensor_regmap_config
= {
859 .cache_type
= REGCACHE_RBTREE
,
862 static int imx214_get_regulators(struct device
*dev
, struct imx214
*imx214
)
866 for (i
= 0; i
< IMX214_NUM_SUPPLIES
; i
++)
867 imx214
->supplies
[i
].supply
= imx214_supply_name
[i
];
869 return devm_regulator_bulk_get(dev
, IMX214_NUM_SUPPLIES
,
873 static int imx214_parse_fwnode(struct device
*dev
)
875 struct fwnode_handle
*endpoint
;
876 struct v4l2_fwnode_endpoint bus_cfg
= {
877 .bus_type
= V4L2_MBUS_CSI2_DPHY
,
882 endpoint
= fwnode_graph_get_next_endpoint(dev_fwnode(dev
), NULL
);
884 dev_err(dev
, "endpoint node not found\n");
888 ret
= v4l2_fwnode_endpoint_alloc_parse(endpoint
, &bus_cfg
);
890 dev_err(dev
, "parsing endpoint node failed\n");
894 for (i
= 0; i
< bus_cfg
.nr_of_link_frequencies
; i
++)
895 if (bus_cfg
.link_frequencies
[i
] == IMX214_DEFAULT_LINK_FREQ
)
898 if (i
== bus_cfg
.nr_of_link_frequencies
) {
899 dev_err(dev
, "link-frequencies %d not supported, Please review your DT\n",
900 IMX214_DEFAULT_LINK_FREQ
);
906 v4l2_fwnode_endpoint_free(&bus_cfg
);
907 fwnode_handle_put(endpoint
);
911 static int __maybe_unused
imx214_suspend(struct device
*dev
)
913 struct i2c_client
*client
= to_i2c_client(dev
);
914 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
915 struct imx214
*imx214
= to_imx214(sd
);
917 if (imx214
->streaming
)
918 imx214_stop_streaming(imx214
);
923 static int __maybe_unused
imx214_resume(struct device
*dev
)
925 struct i2c_client
*client
= to_i2c_client(dev
);
926 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
927 struct imx214
*imx214
= to_imx214(sd
);
930 if (imx214
->streaming
) {
931 ret
= imx214_start_streaming(imx214
);
939 imx214_stop_streaming(imx214
);
940 imx214
->streaming
= 0;
944 static int imx214_probe(struct i2c_client
*client
)
946 struct device
*dev
= &client
->dev
;
947 struct imx214
*imx214
;
948 static const s64 link_freq
[] = {
949 IMX214_DEFAULT_LINK_FREQ
,
953 ret
= imx214_parse_fwnode(dev
);
957 imx214
= devm_kzalloc(dev
, sizeof(*imx214
), GFP_KERNEL
);
963 imx214
->xclk
= devm_clk_get(dev
, NULL
);
964 if (IS_ERR(imx214
->xclk
)) {
965 dev_err(dev
, "could not get xclk");
966 return PTR_ERR(imx214
->xclk
);
969 ret
= clk_set_rate(imx214
->xclk
, IMX214_DEFAULT_CLK_FREQ
);
971 dev_err(dev
, "could not set xclk frequency\n");
975 ret
= imx214_get_regulators(dev
, imx214
);
977 dev_err(dev
, "cannot get regulators\n");
981 imx214
->enable_gpio
= devm_gpiod_get(dev
, "enable", GPIOD_OUT_LOW
);
982 if (IS_ERR(imx214
->enable_gpio
)) {
983 dev_err(dev
, "cannot get enable gpio\n");
984 return PTR_ERR(imx214
->enable_gpio
);
987 imx214
->regmap
= devm_regmap_init_i2c(client
, &sensor_regmap_config
);
988 if (IS_ERR(imx214
->regmap
)) {
989 dev_err(dev
, "regmap init failed\n");
990 return PTR_ERR(imx214
->regmap
);
993 v4l2_i2c_subdev_init(&imx214
->sd
, client
, &imx214_subdev_ops
);
996 * Enable power initially, to avoid warnings
997 * from clk_disable on power_off
999 imx214_power_on(imx214
->dev
);
1001 pm_runtime_set_active(imx214
->dev
);
1002 pm_runtime_enable(imx214
->dev
);
1003 pm_runtime_idle(imx214
->dev
);
1005 v4l2_ctrl_handler_init(&imx214
->ctrls
, 3);
1007 imx214
->pixel_rate
= v4l2_ctrl_new_std(&imx214
->ctrls
, NULL
,
1008 V4L2_CID_PIXEL_RATE
, 0,
1009 IMX214_DEFAULT_PIXEL_RATE
, 1,
1010 IMX214_DEFAULT_PIXEL_RATE
);
1011 imx214
->link_freq
= v4l2_ctrl_new_int_menu(&imx214
->ctrls
, NULL
,
1013 ARRAY_SIZE(link_freq
) - 1,
1015 if (imx214
->link_freq
)
1016 imx214
->link_freq
->flags
|= V4L2_CTRL_FLAG_READ_ONLY
;
1020 * Values obtained reverse engineering blobs and/or devices.
1021 * Ranges and functionality might be wrong.
1023 * Sony, please release some register set documentation for the
1026 * Yours sincerely, Ricardo.
1028 imx214
->exposure
= v4l2_ctrl_new_std(&imx214
->ctrls
, &imx214_ctrl_ops
,
1030 0, 3184, 1, 0x0c70);
1032 ret
= imx214
->ctrls
.error
;
1034 dev_err(&client
->dev
, "%s control init failed (%d)\n",
1039 imx214
->sd
.ctrl_handler
= &imx214
->ctrls
;
1040 mutex_init(&imx214
->mutex
);
1041 imx214
->ctrls
.lock
= &imx214
->mutex
;
1043 imx214
->sd
.flags
|= V4L2_SUBDEV_FL_HAS_DEVNODE
;
1044 imx214
->pad
.flags
= MEDIA_PAD_FL_SOURCE
;
1045 imx214
->sd
.dev
= &client
->dev
;
1046 imx214
->sd
.entity
.function
= MEDIA_ENT_F_CAM_SENSOR
;
1048 ret
= media_entity_pads_init(&imx214
->sd
.entity
, 1, &imx214
->pad
);
1050 dev_err(dev
, "could not register media entity\n");
1054 imx214_entity_init_cfg(&imx214
->sd
, NULL
);
1056 ret
= v4l2_async_register_subdev_sensor_common(&imx214
->sd
);
1058 dev_err(dev
, "could not register v4l2 device\n");
1065 media_entity_cleanup(&imx214
->sd
.entity
);
1067 mutex_destroy(&imx214
->mutex
);
1068 v4l2_ctrl_handler_free(&imx214
->ctrls
);
1069 pm_runtime_disable(imx214
->dev
);
1074 static int imx214_remove(struct i2c_client
*client
)
1076 struct v4l2_subdev
*sd
= i2c_get_clientdata(client
);
1077 struct imx214
*imx214
= to_imx214(sd
);
1079 v4l2_async_unregister_subdev(&imx214
->sd
);
1080 media_entity_cleanup(&imx214
->sd
.entity
);
1081 v4l2_ctrl_handler_free(&imx214
->ctrls
);
1083 pm_runtime_disable(&client
->dev
);
1084 pm_runtime_set_suspended(&client
->dev
);
1086 mutex_destroy(&imx214
->mutex
);
1091 static const struct of_device_id imx214_of_match
[] = {
1092 { .compatible
= "sony,imx214" },
1095 MODULE_DEVICE_TABLE(of
, imx214_of_match
);
1097 static const struct dev_pm_ops imx214_pm_ops
= {
1098 SET_SYSTEM_SLEEP_PM_OPS(imx214_suspend
, imx214_resume
)
1099 SET_RUNTIME_PM_OPS(imx214_power_off
, imx214_power_on
, NULL
)
1102 static struct i2c_driver imx214_i2c_driver
= {
1104 .of_match_table
= imx214_of_match
,
1105 .pm
= &imx214_pm_ops
,
1108 .probe_new
= imx214_probe
,
1109 .remove
= imx214_remove
,
1112 module_i2c_driver(imx214_i2c_driver
);
1114 MODULE_DESCRIPTION("Sony IMX214 Camera driver");
1115 MODULE_AUTHOR("Ricardo Ribalda <ricardo.ribalda@gmail.com>");
1116 MODULE_LICENSE("GPL v2");