All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jacopo Mondi <jacopo@jmondi.org>
To: Dave Stevenson <dave.stevenson@raspberrypi.com>
Cc: paul.j.murphy@intel.com, daniele.alessandrelli@intel.com,
	linux-media@vger.kernel.org
Subject: Re: [PATCH 12/16] media: i2c: ov9282: Make V4L2_CID_HBLANK r/w
Date: Thu, 6 Oct 2022 11:41:08 +0200	[thread overview]
Message-ID: <20221006094108.x3ey5cae4cc6cac2@uno.localdomain> (raw)
In-Reply-To: <20221005152809.3785786-13-dave.stevenson@raspberrypi.com>

Hi Dave

On Wed, Oct 05, 2022 at 04:28:05PM +0100, Dave Stevenson wrote:
> There's no reason why HBLANK has to be read-only as it
> only changes the TIMING_HTS register in the sensor.
>
> Remove the READ_ONLY flag, and add the relevant handling
> for it.
>
> The minimum value also varies based on whether continuous clock
> mode is being used or not, so allow hblank_min to depend on
> that.

Interesting, do you know why they're different and why the continous
version is smaller ?

>
> Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
> ---
>  drivers/media/i2c/ov9282.c | 34 +++++++++++++++++++++-------------
>  1 file changed, 21 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/media/i2c/ov9282.c b/drivers/media/i2c/ov9282.c
> index 12cbe401fd78..8e86aa7e4b2a 100644
> --- a/drivers/media/i2c/ov9282.c
> +++ b/drivers/media/i2c/ov9282.c
> @@ -22,6 +22,9 @@
>  #define OV9282_MODE_STANDBY	0x00
>  #define OV9282_MODE_STREAMING	0x01
>
> +#define OV9282_REG_TIMING_HTS	0x380c
> +#define OV9282_TIMING_HTS_MAX	0x7fff
> +
>  /* Lines per frame */
>  #define OV9282_REG_LPFR		0x380e
>
> @@ -99,7 +102,8 @@ struct ov9282_reg_list {
>   * struct ov9282_mode - ov9282 sensor mode structure
>   * @width: Frame width
>   * @height: Frame height
> - * @hblank: Horizontal blanking in lines
> + * @hblank_min: Minimum horizontal blanking in lines for non-continuous[0] and
> + *		continuous[1] clock modes
>   * @vblank: Vertical blanking in lines
>   * @vblank_min: Minimum vertical blanking in lines
>   * @vblank_max: Maximum vertical blanking in lines
> @@ -109,7 +113,7 @@ struct ov9282_reg_list {
>  struct ov9282_mode {
>  	u32 width;
>  	u32 height;
> -	u32 hblank;
> +	u32 hblank_min[2];
>  	u32 vblank;
>  	u32 vblank_min;
>  	u32 vblank_max;
> @@ -249,8 +253,6 @@ static const struct ov9282_reg mode_1280x720_regs[] = {
>  	{0x3809, 0x00},
>  	{0x380a, 0x02},
>  	{0x380b, 0xd0},
> -	{0x380c, 0x02},
> -	{0x380d, 0xfd},
>  	{0x3810, 0x00},
>  	{0x3811, 0x08},
>  	{0x3812, 0x00},
> @@ -273,7 +275,7 @@ static const struct ov9282_mode supported_modes[] = {
>  	{
>  		.width = 1280,
>  		.height = 720,
> -		.hblank = 250,
> +		.hblank_min = { 250, 176 },
>  		.vblank = 1022,
>  		.vblank_min = 41,
>  		.vblank_max = 51540,
> @@ -399,15 +401,17 @@ static int ov9282_write_regs(struct ov9282 *ov9282,
>  static int ov9282_update_controls(struct ov9282 *ov9282,
>  				  const struct ov9282_mode *mode)
>  {
> +	u32 hblank_min;
>  	int ret;
>
>  	ret = __v4l2_ctrl_s_ctrl(ov9282->link_freq_ctrl, mode->link_freq_idx);
>  	if (ret)
>  		return ret;
>
> -	ret = __v4l2_ctrl_s_ctrl(ov9282->hblank_ctrl, mode->hblank);
> -	if (ret)
> -		return ret;
> +	hblank_min = mode->hblank_min[ov9282->noncontinuous_clock ? 0 : 1];
> +	ret =  __v4l2_ctrl_modify_range(ov9282->hblank_ctrl, hblank_min,
> +					OV9282_TIMING_HTS_MAX - mode->width, 1,
> +					hblank_min);
>
>  	return __v4l2_ctrl_modify_range(ov9282->vblank_ctrl, mode->vblank_min,
>  					mode->vblank_max, 1, mode->vblank);
> @@ -539,6 +543,10 @@ static int ov9282_set_ctrl(struct v4l2_ctrl *ctrl)
>  	case V4L2_CID_VFLIP:
>  		ret = ov9282_set_ctrl_vflip(ov9282, ctrl->val);
>  		break;
> +	case V4L2_CID_HBLANK:
> +		ret = ov9282_write_reg(ov9282, OV9282_REG_TIMING_HTS, 2,
> +				       (ctrl->val + ov9282->cur_mode->width) >> 1);
> +		break;
>  	default:
>  		dev_err(ov9282->dev, "Invalid control %d", ctrl->id);
>  		ret = -EINVAL;
> @@ -1033,6 +1041,7 @@ static int ov9282_init_controls(struct ov9282 *ov9282)
>  	struct v4l2_ctrl_handler *ctrl_hdlr = &ov9282->ctrl_handler;
>  	const struct ov9282_mode *mode = ov9282->cur_mode;
>  	struct v4l2_fwnode_device_properties props;
> +	u32 hblank_min;
>  	u32 lpfr;
>  	int ret;
>
> @@ -1091,14 +1100,13 @@ static int ov9282_init_controls(struct ov9282 *ov9282)
>  	if (ov9282->link_freq_ctrl)
>  		ov9282->link_freq_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
>
> +	hblank_min = mode->hblank_min[ov9282->noncontinuous_clock ? 0 : 1];
>  	ov9282->hblank_ctrl = v4l2_ctrl_new_std(ctrl_hdlr,
>  						&ov9282_ctrl_ops,
>  						V4L2_CID_HBLANK,
> -						OV9282_REG_MIN,
> -						OV9282_REG_MAX,
> -						1, mode->hblank);
> -	if (ov9282->hblank_ctrl)
> -		ov9282->hblank_ctrl->flags |= V4L2_CTRL_FLAG_READ_ONLY;
> +						hblank_min,
> +						OV9282_TIMING_HTS_MAX - mode->width,
> +						1, hblank_min);
>
>  	ret = v4l2_fwnode_device_parse(ov9282->dev, &props);
>  	if (!ret) {
> --
> 2.34.1
>

  reply	other threads:[~2022-10-06  9:41 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-05 15:27 [PATCH 00/16] Updates to ov9282 sensor driver Dave Stevenson
2022-10-05 15:27 ` [PATCH 01/16] media: i2c: ov9282: Remove duplication of registers Dave Stevenson
2022-10-06  9:14   ` Jacopo Mondi
2022-10-05 15:27 ` [PATCH 02/16] media: i2c: ov9282: Split registers into common and mode specific Dave Stevenson
2022-10-06  9:15   ` Jacopo Mondi
2022-10-05 15:27 ` [PATCH 03/16] media: i2c: ov9282: Remove format code from the mode Dave Stevenson
2022-10-06  9:15   ` Jacopo Mondi
2022-10-05 15:27 ` [PATCH 04/16] media: i2c: ov9282: Remove pixel rate from mode definition Dave Stevenson
2022-10-06  9:17   ` Jacopo Mondi
2022-10-06 11:51     ` Dave Stevenson
2022-10-05 15:27 ` [PATCH 05/16] media: i2c: ov9281: Support more than 1 mode Dave Stevenson
2022-10-06  9:18   ` Jacopo Mondi
2022-10-26  7:22   ` Sakari Ailus
2022-10-05 15:27 ` [PATCH 06/16] media: i2c: ov9282: Correct HTS register for configured pixel rate Dave Stevenson
2022-10-06  9:23   ` Jacopo Mondi
2022-10-06 13:01     ` Dave Stevenson
2022-10-05 15:28 ` [PATCH 07/16] media: i2c: ov9282: Reduce vblank_min values based on testing Dave Stevenson
2022-10-06 11:56   ` Jacopo Mondi
2022-10-06 13:02     ` Dave Stevenson
2022-10-05 15:28 ` [PATCH 08/16] media: i2c: ov9282: Add selection for CSI2 clock mode Dave Stevenson
2022-10-06  9:24   ` Jacopo Mondi
2022-10-26  7:21   ` Sakari Ailus
2022-10-28 12:57     ` Dave Stevenson
2022-10-28 14:30       ` Sakari Ailus
2022-10-28 15:03         ` Dave Stevenson
2022-10-31 13:06           ` Sakari Ailus
2022-10-05 15:28 ` [PATCH 09/16] media: i2c: ov9282: Add the properties from fwnode Dave Stevenson
2022-10-06 11:57   ` Jacopo Mondi
2022-10-05 15:28 ` [PATCH 10/16] media: i2c: ov9282: Action CID_VBLANK when set Dave Stevenson
2022-10-06  9:29   ` Jacopo Mondi
2022-10-06 13:21     ` Dave Stevenson
2022-10-05 15:28 ` [PATCH 11/16] media: i2c: ov9282: Add HFLIP and VFLIP support Dave Stevenson
2022-10-06  9:38   ` Jacopo Mondi
2022-10-06 14:21     ` Dave Stevenson
2022-10-05 15:28 ` [PATCH 12/16] media: i2c: ov9282: Make V4L2_CID_HBLANK r/w Dave Stevenson
2022-10-06  9:41   ` Jacopo Mondi [this message]
2022-10-06 11:33     ` Dave Stevenson
2022-10-06 11:53       ` Jacopo Mondi
2022-10-05 15:28 ` [PATCH 13/16] media: i2c: ov9282: Add selection API calls for cropping info Dave Stevenson
2022-10-06  9:43   ` Jacopo Mondi
2022-10-06 11:39     ` Dave Stevenson
2022-10-06 11:54       ` Jacopo Mondi
2022-10-05 15:28 ` [PATCH 14/16] media: i2c: ov9282: Add support for 1280x800 and 640x400 modes Dave Stevenson
2022-10-06  9:48   ` Jacopo Mondi
2022-10-06 11:46     ` Dave Stevenson
2022-10-05 15:28 ` [PATCH 15/16] media: i2c: ov9282: Add support for 8bit readout Dave Stevenson
2022-10-06  9:57   ` Jacopo Mondi
2022-10-06 12:20     ` Dave Stevenson
2022-10-05 15:28 ` [PATCH 16/16] media: i2c: ov9282: Support event handlers Dave Stevenson
2022-10-06  9:59   ` Jacopo Mondi
2022-10-07 10:22     ` Dave Stevenson
2022-10-07 12:57       ` Jacopo Mondi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221006094108.x3ey5cae4cc6cac2@uno.localdomain \
    --to=jacopo@jmondi.org \
    --cc=daniele.alessandrelli@intel.com \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=linux-media@vger.kernel.org \
    --cc=paul.j.murphy@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.