Re: [PATCH v2 06/18] media: i2c: imx219: Merge format and binning setting functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 21 Aug 2023 at 23:30, Laurent Pinchart
<laurent.pinchart@xxxxxxxxxxxxxxxx> wrote:
>
> The imx219_set_binning() function sets registers based on the bpp value,
> which is computed in imx219_set_framefmt(). As both functions are called
> from the same place consecutively, and set registers based on the
> selected mode, merge them together to simplify the code.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> ---
>  drivers/media/i2c/imx219.c | 43 +++++++++-----------------------------
>  1 file changed, 10 insertions(+), 33 deletions(-)
>
> diff --git a/drivers/media/i2c/imx219.c b/drivers/media/i2c/imx219.c
> index 9490dcba42ab..3a0b082d9ee0 100644
> --- a/drivers/media/i2c/imx219.c
> +++ b/drivers/media/i2c/imx219.c
> @@ -618,6 +618,7 @@ static int imx219_set_framefmt(struct imx219 *imx219,
>  {
>         const struct imx219_mode *mode = imx219->mode;
>         unsigned int bpp;
> +       u16 bin_mode;
>         int ret = 0;
>
>         switch (format->code) {
> @@ -648,6 +649,15 @@ static int imx219_set_framefmt(struct imx219 *imx219,
>                   mode->crop.top - IMX219_PIXEL_ARRAY_TOP + mode->crop.height - 1,
>                   &ret);
>
> +       if (!imx219->mode->binning)
> +               bin_mode = IMX219_BINNING_NONE;
> +       else if (bpp == 8)
> +               bin_mode = IMX219_BINNING_2X2_ANALOG;
> +       else
> +               bin_mode = IMX219_BINNING_2X2;
> +
> +       cci_write(imx219->regmap, IMX219_REG_BINNING_MODE, bin_mode, &ret);

It feels a little weird using u16 for bin_mode because you happen to
know that the underlying register is 16 bit, and then are relying on
the compiler to extend it to u64 for cci_write. Is it better to use
the native u64 for cci_write, or just use unsigned int?

Either way:
Reviewed-by: Dave Stevenson <dave.stevenson@xxxxxxxxxxxxxxx>

> +
>         cci_write(imx219->regmap, IMX219_REG_X_OUTPUT_SIZE,
>                   format->width, &ret);
>         cci_write(imx219->regmap, IMX219_REG_Y_OUTPUT_SIZE,
> @@ -665,32 +675,6 @@ static int imx219_set_framefmt(struct imx219 *imx219,
>         return ret;
>  }
>
> -static int imx219_set_binning(struct imx219 *imx219,
> -                             const struct v4l2_mbus_framefmt *format)
> -{
> -       if (!imx219->mode->binning)
> -               return cci_write(imx219->regmap, IMX219_REG_BINNING_MODE,
> -                                IMX219_BINNING_NONE, NULL);
> -
> -       switch (format->code) {
> -       case MEDIA_BUS_FMT_SRGGB8_1X8:
> -       case MEDIA_BUS_FMT_SGRBG8_1X8:
> -       case MEDIA_BUS_FMT_SGBRG8_1X8:
> -       case MEDIA_BUS_FMT_SBGGR8_1X8:
> -               return cci_write(imx219->regmap, IMX219_REG_BINNING_MODE,
> -                                IMX219_BINNING_2X2_ANALOG, NULL);
> -
> -       case MEDIA_BUS_FMT_SRGGB10_1X10:
> -       case MEDIA_BUS_FMT_SGRBG10_1X10:
> -       case MEDIA_BUS_FMT_SGBRG10_1X10:
> -       case MEDIA_BUS_FMT_SBGGR10_1X10:
> -               return cci_write(imx219->regmap, IMX219_REG_BINNING_MODE,
> -                                IMX219_BINNING_2X2, NULL);
> -       }
> -
> -       return -EINVAL;
> -}
> -
>  static int imx219_get_selection(struct v4l2_subdev *sd,
>                                 struct v4l2_subdev_state *sd_state,
>                                 struct v4l2_subdev_selection *sel)
> @@ -764,13 +748,6 @@ static int imx219_start_streaming(struct imx219 *imx219,
>                 goto err_rpm_put;
>         }
>
> -       ret = imx219_set_binning(imx219, format);
> -       if (ret) {
> -               dev_err(&client->dev, "%s failed to set binning: %d\n",
> -                       __func__, ret);
> -               goto err_rpm_put;
> -       }
> -
>         /* Apply customized values from user */
>         ret =  __v4l2_ctrl_handler_setup(imx219->sd.ctrl_handler);
>         if (ret)
> --
> Regards,
>
> Laurent Pinchart
>



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux