The camera location is retrieved from the firmware interface parsing the "location" device property and reported through the read-only V4L2_CID_LOCATION control. Signed-off-by: Jacopo Mondi <jacopo@xxxxxxxxxx> --- drivers/media/i2c/ov13858.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/media/i2c/ov13858.c b/drivers/media/i2c/ov13858.c index 45bb872db3c5..6baefc3083e1 100644 --- a/drivers/media/i2c/ov13858.c +++ b/drivers/media/i2c/ov13858.c @@ -1591,6 +1591,7 @@ static int ov13858_init_controls(struct ov13858 *ov13858) struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd); struct v4l2_ctrl_handler *ctrl_hdlr; s64 exposure_max; + u32 location; s64 vblank_def; s64 vblank_min; s64 hblank; @@ -1659,6 +1660,16 @@ static int ov13858_init_controls(struct ov13858 *ov13858) V4L2_CID_TEST_PATTERN, ARRAY_SIZE(ov13858_test_pattern_menu) - 1, 0, 0, ov13858_test_pattern_menu); + + ret = device_property_read_u32(&client->dev, "location", &location); + if (!ret) { + v4l2_ctrl_new_std(ctrl_hdlr, &ov13858_ctrl_ops, + V4L2_CID_LOCATION, V4L2_LOCATION_FRONT, + V4L2_LOCATION_BACK, 1, + location == V4L2_LOCATION_FRONT ? + V4L2_LOCATION_FRONT : V4L2_LOCATION_BACK); + } + if (ctrl_hdlr->error) { ret = ctrl_hdlr->error; dev_err(&client->dev, "%s control init failed (%d)\n", -- 2.22.0