All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Scally <djrscally@gmail.com>
To: Sakari Ailus <sakari.ailus@linux.intel.com>
Cc: Paul Kocialkowski <paul.kocialkowski@bootlin.com>,
	linux-media@vger.kernel.org, Yong Zhi <yong.zhi@intel.com>,
	Bingbu Cao <bingbu.cao@intel.com>,
	Tianshu Qiu <tian.shu.qiu@intel.com>,
	Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
	Hans de Goede <hdegoede@redhat.com>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Kieran Bingham <kieran.bingham@ideasonboard.com>
Subject: Re: [PATCH v4 07/16] media: i2c: Add vblank control to ov8865
Date: Mon, 1 Nov 2021 23:45:45 +0000	[thread overview]
Message-ID: <fbf8f587-9532-d657-a030-0a84b14eaa49@gmail.com> (raw)
In-Reply-To: <YX//lBBlskOv+37i@paasikivi.fi.intel.com>

Hi Sakari

On 01/11/2021 14:54, Sakari Ailus wrote:
> Hi Daniel,
>
> On Mon, Nov 01, 2021 at 12:11:10AM +0000, Daniel Scally wrote:
>> Add a V4L2_CID_VBLANK control to the ov8865 driver.
>>
>> Signed-off-by: Daniel Scally <djrscally@gmail.com>
>> ---
>>  drivers/media/i2c/ov8865.c | 34 ++++++++++++++++++++++++++++++++++
>>  1 file changed, 34 insertions(+)
>>
>> diff --git a/drivers/media/i2c/ov8865.c b/drivers/media/i2c/ov8865.c
>> index a832938c33b6..f741c0713ca4 100644
>> --- a/drivers/media/i2c/ov8865.c
>> +++ b/drivers/media/i2c/ov8865.c
>> @@ -183,6 +183,8 @@
>>  #define OV8865_VTS_H(v)				(((v) & GENMASK(11, 8)) >> 8)
>>  #define OV8865_VTS_L_REG			0x380f
>>  #define OV8865_VTS_L(v)				((v) & GENMASK(7, 0))
>> +#define OV8865_TIMING_MAX_VTS			0xffff
>> +#define OV8865_TIMING_MIN_VTS			0x04
>>  #define OV8865_OFFSET_X_H_REG			0x3810
>>  #define OV8865_OFFSET_X_H(v)			(((v) & GENMASK(15, 8)) >> 8)
>>  #define OV8865_OFFSET_X_L_REG			0x3811
>> @@ -675,6 +677,7 @@ struct ov8865_state {
>>  struct ov8865_ctrls {
>>  	struct v4l2_ctrl *link_freq;
>>  	struct v4l2_ctrl *pixel_rate;
>> +	struct v4l2_ctrl *vblank;
>>  
>>  	struct v4l2_ctrl_handler handler;
>>  };
>> @@ -2225,6 +2228,20 @@ static int ov8865_test_pattern_configure(struct ov8865_sensor *sensor,
>>  			    ov8865_test_pattern_bits[index]);
>>  }
>>  
>> +/* Blanking */
>> +
>> +static int ov8865_vts_configure(struct ov8865_sensor *sensor, u32 vblank)
>> +{
>> +	u16 vts = sensor->state.mode->output_size_y + vblank;
>> +	int ret;
>> +
>> +	ret = ov8865_write(sensor, OV8865_VTS_H_REG, OV8865_VTS_H(vts));
>> +	if (ret)
>> +		return ret;
>> +
>> +	return ov8865_write(sensor, OV8865_VTS_L_REG, OV8865_VTS_L(vts));
>> +}
>> +
>>  /* State */
>>  
>>  static int ov8865_state_mipi_configure(struct ov8865_sensor *sensor,
>> @@ -2476,6 +2493,8 @@ static int ov8865_s_ctrl(struct v4l2_ctrl *ctrl)
>>  	case V4L2_CID_TEST_PATTERN:
>>  		index = (unsigned int)ctrl->val;
>>  		return ov8865_test_pattern_configure(sensor, index);
>> +	case V4L2_CID_VBLANK:
>> +		return ov8865_vts_configure(sensor, ctrl->val);
>>  	default:
>>  		return -EINVAL;
>>  	}
>> @@ -2492,6 +2511,8 @@ static int ov8865_ctrls_init(struct ov8865_sensor *sensor)
>>  	struct ov8865_ctrls *ctrls = &sensor->ctrls;
>>  	struct v4l2_ctrl_handler *handler = &ctrls->handler;
>>  	const struct v4l2_ctrl_ops *ops = &ov8865_ctrl_ops;
>> +	const struct ov8865_mode *mode = sensor->state.mode;
>> +	unsigned int vblank_max, vblank_def;
>>  	int ret;
>>  
>>  	v4l2_ctrl_handler_init(handler, 32);
>> @@ -2528,6 +2549,13 @@ static int ov8865_ctrls_init(struct ov8865_sensor *sensor)
>>  				     ARRAY_SIZE(ov8865_test_pattern_menu) - 1,
>>  				     0, 0, ov8865_test_pattern_menu);
>>  
>> +	/* Blanking */
>> +	vblank_max = OV8865_TIMING_MAX_VTS - mode->output_size_y;
>> +	vblank_def = mode->vts - mode->output_size_y;
>> +	ctrls->vblank = v4l2_ctrl_new_std(handler, ops, V4L2_CID_VBLANK,
>> +					  OV8865_TIMING_MIN_VTS, vblank_max, 1,
>> +					  vblank_def);
>> +
>>  	/* MIPI CSI-2 */
>>  
>>  	ctrls->link_freq =
>> @@ -2708,6 +2736,10 @@ static int ov8865_set_fmt(struct v4l2_subdev *subdev,
>>  		 sensor->state.mbus_code != mbus_code)
>>  		ret = ov8865_state_configure(sensor, mode, mbus_code);
>>  
>> +	__v4l2_ctrl_modify_range(sensor->ctrls.vblank, OV8865_TIMING_MIN_VTS,
>> +				 OV8865_TIMING_MAX_VTS - mode->output_size_y,
>> +				 1, mode->vts - mode->output_size_y);
>> +
>>  complete:
>>  	mutex_unlock(&sensor->mutex);
>>  
>> @@ -3035,6 +3067,8 @@ static int ov8865_probe(struct i2c_client *client)
>>  
>>  	/* Sensor */
>>  
>> +	sensor->state.mode =  &ov8865_modes[0];
> This seems to be an unrelated change. Does it belong here?


In ov8865_ctrls_init() I'm using sensor->state.mode to initialise the
new vblank control. I guess instead of


+	const struct ov8865_mode *mode = sensor->state.mode;

I could have

+	const struct ov8865_mode *mode = &ov8865_modes[0];


in that function though

>
>> +
>>  	ret = ov8865_ctrls_init(sensor);
>>  	if (ret)
>>  		goto error_mutex;

  reply	other threads:[~2021-11-01 23:45 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-01  0:11 [PATCH v4 00/16] Extensions to ov8865 driver Daniel Scally
2021-11-01  0:11 ` [PATCH v4 01/16] media: i2c: Add ACPI support to ov8865 Daniel Scally
2021-11-01 10:01   ` Andy Shevchenko
2021-11-01 23:24     ` Daniel Scally
2021-11-01  0:11 ` [PATCH v4 02/16] media: i2c: Fix incorrect value in comment Daniel Scally
2021-11-01  0:11 ` [PATCH v4 03/16] media: i2c: Defer probe if not endpoint found Daniel Scally
2021-11-01  0:11 ` [PATCH v4 04/16] media: i2c: Support 19.2MHz input clock in ov8865 Daniel Scally
2021-11-01 10:29   ` Andy Shevchenko
2021-11-21 23:14     ` Daniel Scally
2021-11-01 14:52   ` Sakari Ailus
2021-11-20 22:46     ` Daniel Scally
2021-11-21 23:32     ` Daniel Scally
2021-11-01  0:11 ` [PATCH v4 05/16] media: i2c: Add .get_selection() support to ov8865 Daniel Scally
2021-11-01  0:11 ` [PATCH v4 06/16] media: i2c: Switch control to V4L2_CID_ANALOGUE_GAIN Daniel Scally
2021-11-01  0:11 ` [PATCH v4 07/16] media: i2c: Add vblank control to ov8865 Daniel Scally
2021-11-01 14:54   ` Sakari Ailus
2021-11-01 23:45     ` Daniel Scally [this message]
2021-11-02  9:26       ` Sakari Ailus
2021-11-01  0:11 ` [PATCH v4 08/16] media: i2c: Add hblank " Daniel Scally
2021-11-01  0:11 ` [PATCH v4 09/16] media: i2c: Update HTS values in ov8865 Daniel Scally
2021-11-01 15:04   ` Sakari Ailus
2021-11-22  0:18     ` Daniel Scally
2021-11-01  0:11 ` [PATCH v4 10/16] media: i2c: cap exposure at height + vblank " Daniel Scally
2021-11-01  0:11 ` [PATCH v4 11/16] media: i2c: Add controls from fwnode to ov8865 Daniel Scally
2021-11-01  0:11 ` [PATCH v4 12/16] media: i2c: Switch exposure control unit to lines Daniel Scally
2021-11-01  0:11 ` [PATCH v4 13/16] media: i2c: Re-order runtime pm initialisation Daniel Scally
2021-11-01 11:30   ` Andy Shevchenko
2021-11-02  8:30     ` Daniel Scally
2021-11-01  0:11 ` [PATCH v4 14/16] media: i2c: Use dev_err_probe() in ov8865 Daniel Scally
2021-11-01  0:11 ` [PATCH v4 15/16] media: ipu3-cio2: Add INT347A to cio2-bridge Daniel Scally
2021-11-01  0:11 ` [PATCH v4 16/16] media: i2c: ov8865: Fix lockdep error Daniel Scally
2021-11-01 11:31   ` Andy Shevchenko

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=fbf8f587-9532-d657-a030-0a84b14eaa49@gmail.com \
    --to=djrscally@gmail.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=bingbu.cao@intel.com \
    --cc=hdegoede@redhat.com \
    --cc=kieran.bingham@ideasonboard.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-media@vger.kernel.org \
    --cc=paul.kocialkowski@bootlin.com \
    --cc=sakari.ailus@linux.intel.com \
    --cc=tian.shu.qiu@intel.com \
    --cc=yong.zhi@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.