Commit c6f9d67e authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Mauro Carvalho Chehab

media: i2c: imx258: add HDR control

The IMX258 supports High Dynamic Range with 5 levels of low/high
exposure ratio.  Add a V4L2 control for HDR (WIDE_DYNAMIC_RANGE).
Signed-off-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent dd90caa0
...@@ -61,6 +61,15 @@ ...@@ -61,6 +61,15 @@
#define IMX258_DGTL_GAIN_DEFAULT 1024 #define IMX258_DGTL_GAIN_DEFAULT 1024
#define IMX258_DGTL_GAIN_STEP 1 #define IMX258_DGTL_GAIN_STEP 1
/* HDR control */
#define IMX258_REG_HDR 0x0220
#define IMX258_HDR_ON BIT(0)
#define IMX258_REG_HDR_RATIO 0x0222
#define IMX258_HDR_RATIO_MIN 0
#define IMX258_HDR_RATIO_MAX 5
#define IMX258_HDR_RATIO_STEP 1
#define IMX258_HDR_RATIO_DEFAULT 0x0
/* Test Pattern Control */ /* Test Pattern Control */
#define IMX258_REG_TEST_PATTERN 0x0600 #define IMX258_REG_TEST_PATTERN 0x0600
...@@ -777,6 +786,22 @@ static int imx258_set_ctrl(struct v4l2_ctrl *ctrl) ...@@ -777,6 +786,22 @@ static int imx258_set_ctrl(struct v4l2_ctrl *ctrl)
!ctrl->val ? REG_CONFIG_MIRROR_FLIP : !ctrl->val ? REG_CONFIG_MIRROR_FLIP :
REG_CONFIG_FLIP_TEST_PATTERN); REG_CONFIG_FLIP_TEST_PATTERN);
break; break;
case V4L2_CID_WIDE_DYNAMIC_RANGE:
if (!ctrl->val) {
ret = imx258_write_reg(imx258, IMX258_REG_HDR,
IMX258_REG_VALUE_08BIT,
IMX258_HDR_RATIO_MIN);
} else {
ret = imx258_write_reg(imx258, IMX258_REG_HDR,
IMX258_REG_VALUE_08BIT,
IMX258_HDR_ON);
if (ret)
break;
ret = imx258_write_reg(imx258, IMX258_REG_HDR_RATIO,
IMX258_REG_VALUE_08BIT,
BIT(IMX258_HDR_RATIO_MAX));
}
break;
default: default:
dev_info(&client->dev, dev_info(&client->dev,
"ctrl(id:0x%x,val:0x%x) is not handled\n", "ctrl(id:0x%x,val:0x%x) is not handled\n",
...@@ -1193,6 +1218,9 @@ static int imx258_init_controls(struct imx258 *imx258) ...@@ -1193,6 +1218,9 @@ static int imx258_init_controls(struct imx258 *imx258)
IMX258_DGTL_GAIN_STEP, IMX258_DGTL_GAIN_STEP,
IMX258_DGTL_GAIN_DEFAULT); IMX258_DGTL_GAIN_DEFAULT);
v4l2_ctrl_new_std(ctrl_hdlr, &imx258_ctrl_ops, V4L2_CID_WIDE_DYNAMIC_RANGE,
0, 1, 1, IMX258_HDR_RATIO_DEFAULT);
v4l2_ctrl_new_std_menu_items(ctrl_hdlr, &imx258_ctrl_ops, v4l2_ctrl_new_std_menu_items(ctrl_hdlr, &imx258_ctrl_ops,
V4L2_CID_TEST_PATTERN, V4L2_CID_TEST_PATTERN,
ARRAY_SIZE(imx258_test_pattern_menu) - 1, ARRAY_SIZE(imx258_test_pattern_menu) - 1,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment