Message ID | 20240403150355.189229-13-git@luigi311.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | imx258 improvement series | expand |
Hi! > 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. > + ret = imx258_write_reg(imx258, IMX258_CLK_BLANK_STOP, > + IMX258_REG_VALUE_08BIT, > + imx258->csi2_flags & V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK ? > + 1 : 0); !! can be used to turn value into 1/0. I find it easier to read than ? 1 : 0 combination, but possibly that's fine, too. Best regards, Pavel
On 4/3/24 12:48, Pavel Machek wrote: > Hi! > >> 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. > >> + ret = imx258_write_reg(imx258, IMX258_CLK_BLANK_STOP, >> + IMX258_REG_VALUE_08BIT, >> + imx258->csi2_flags & V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK ? >> + 1 : 0); > > !! can be used to turn value into 1/0. I find it easier to read than ? > 1 : 0 combination, but possibly that's fine, too. > > Best regards, > Pavel > I assume you mean by using !!(imx258->csi2_flags & V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK) I can go ahead and use that instead
On Thu 2024-04-04 16:29:11, Luigi311 wrote: > On 4/3/24 12:48, Pavel Machek wrote: > > Hi! > > > >> 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. > > > >> + ret = imx258_write_reg(imx258, IMX258_CLK_BLANK_STOP, > >> + IMX258_REG_VALUE_08BIT, > >> + imx258->csi2_flags & V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK ? > >> + 1 : 0); > > > > !! can be used to turn value into 1/0. I find it easier to read than ? > > 1 : 0 combination, but possibly that's fine, too. > > > > Best regards, > > Pavel > > > > I assume you mean by using > > !!(imx258->csi2_flags & V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK) > > I can go ahead and use that instead Yes, I'd do that. Best regards, Pavel
diff --git a/drivers/media/i2c/imx258.c b/drivers/media/i2c/imx258.c index 805308b4a4c6..692a5aeb7941 100644 --- a/drivers/media/i2c/imx258.c +++ b/drivers/media/i2c/imx258.c @@ -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,15 @@ 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 ? + 1 : 0); + 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 +1450,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);