]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
media: i2c: imx258: Allow configuration of clock lane behaviour
authorDave Stevenson <dave.stevenson@raspberrypi.com>
Wed, 1 May 2024 15:24:29 +0000 (09:24 -0600)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Tue, 4 Jun 2024 06:31:23 +0000 (08:31 +0200)
The sensor supports the clock lane either remaining in HS mode
during frame blanking, or dropping to LP11.

Add configuration of the mode via V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
Reviewed-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Signed-off-by: Luis Garcia <git@luigi311.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/i2c/imx258.c

index 59a78a4cfe4490e5cf7d46f70b885a3c91f8f3cd..2429eb7b55c689171e6eb63c26aac4d56311ee0f 100644 (file)
@@ -72,6 +72,8 @@
 /* Test Pattern Control */
 #define IMX258_REG_TEST_PATTERN                0x0600
 
+#define IMX258_CLK_BLANK_STOP          0x4040
+
 /* Orientation */
 #define REG_MIRROR_FLIP_CONTROL                0x0101
 #define REG_CONFIG_MIRROR_FLIP         0x03
@@ -632,6 +634,7 @@ struct imx258 {
        const struct imx258_link_freq_config *link_freq_configs;
        const s64 *link_freq_menu_items;
        unsigned int nlanes;
+       unsigned int csi2_flags;
 
        /*
         * Mutex for serialized access:
@@ -1066,6 +1069,14 @@ static int imx258_start_streaming(struct imx258 *imx258)
                return ret;
        }
 
+       ret = imx258_write_reg(imx258, IMX258_CLK_BLANK_STOP,
+                              IMX258_REG_VALUE_08BIT,
+                              !!(imx258->csi2_flags & V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK));
+       if (ret) {
+               dev_err(&client->dev, "%s failed to set clock lane mode\n", __func__);
+               return ret;
+       }
+
        /* Apply default values of current mode */
        reg_list = &imx258->cur_mode->reg_list;
        ret = imx258_write_regs(imx258, reg_list->regs, reg_list->num_of_regs);
@@ -1438,6 +1449,8 @@ static int imx258_probe(struct i2c_client *client)
                goto error_endpoint_free;
        }
 
+       imx258->csi2_flags = ep.bus.mipi_csi2.flags;
+
        /* Initialize subdev */
        v4l2_i2c_subdev_init(&imx258->sd, client, &imx258_subdev_ops);