media: i2c: ov2685: Add controls from fwnode
authorLuca Weiss <luca@z3ntu.xyz>
Wed, 1 Feb 2023 17:07:00 +0000 (18:07 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Mon, 20 Mar 2023 14:58:09 +0000 (15:58 +0100)
Add V4L2_CID_CAMERA_ORIENTATION and V4L2_CID_CAMERA_SENSOR_ROTATION
controls to the ov2685 driver by attempting to parse them from firmware.

Signed-off-by: Luca Weiss <luca@z3ntu.xyz>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/media/i2c/ov2685.c

index 0eb41a63787e7b27669e1c37de3d2f542ac18286..f1cea313a9c3a004f017e5f0d1b4d8d1d17ce15a 100644 (file)
@@ -17,6 +17,7 @@
 #include <media/media-entity.h>
 #include <media/v4l2-async.h>
 #include <media/v4l2-ctrls.h>
+#include <media/v4l2-fwnode.h>
 #include <media/v4l2-subdev.h>
 
 #define CHIP_ID                                0x2685
@@ -613,13 +614,14 @@ static int ov2685_initialize_controls(struct ov2685 *ov2685)
        const struct ov2685_mode *mode;
        struct v4l2_ctrl_handler *handler;
        struct v4l2_ctrl *ctrl;
+       struct v4l2_fwnode_device_properties props;
        u64 exposure_max;
        u32 pixel_rate, h_blank;
        int ret;
 
        handler = &ov2685->ctrl_handler;
        mode = ov2685->cur_mode;
-       ret = v4l2_ctrl_handler_init(handler, 8);
+       ret = v4l2_ctrl_handler_init(handler, 10);
        if (ret)
                return ret;
        handler->lock = &ov2685->mutex;
@@ -661,6 +663,15 @@ static int ov2685_initialize_controls(struct ov2685 *ov2685)
                                ARRAY_SIZE(ov2685_test_pattern_menu) - 1,
                                0, 0, ov2685_test_pattern_menu);
 
+       /* set properties from fwnode (e.g. rotation, orientation) */
+       ret = v4l2_fwnode_device_parse(&ov2685->client->dev, &props);
+       if (ret)
+               goto err_free_handler;
+
+       ret = v4l2_ctrl_new_fwnode_properties(handler, &ov2685_ctrl_ops, &props);
+       if (ret)
+               goto err_free_handler;
+
        if (handler->error) {
                ret = handler->error;
                dev_err(&ov2685->client->dev,