All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mikhail Rudenko <mike.rudenko@gmail.com>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	Sakari Ailus <sakari.ailus@linux.intel.com>,
	Jacopo Mondi <jacopo@jmondi.org>,
	Christophe JAILLET <christophe.jaillet@wanadoo.fr>,
	Dave Stevenson <dave.stevenson@raspberrypi.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>
Subject: Re: [PATCH 12/19] media: i2c: ov4689: Implement digital gain control
Date: Tue, 12 Dec 2023 15:52:19 +0300	[thread overview]
Message-ID: <87cyvbpoqb.fsf@gmail.com> (raw)
In-Reply-To: <20231211221533.GK27535@pendragon.ideasonboard.com>


On 2023-12-12 at 00:15 +02, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote:

> Hi Mikhail,
>
> Thank you for the patch.
>
> On Mon, Dec 11, 2023 at 08:50:15PM +0300, Mikhail Rudenko wrote:
>> The OV4689 sensor supports digital gain up to 16x. Implement
>> corresponding control in the driver. Default digital gain value is not
>> modified by this patch.
>>
>> Signed-off-by: Mikhail Rudenko <mike.rudenko@gmail.com>
>> ---
>>  drivers/media/i2c/ov4689.c | 16 ++++++++++++++--
>>  1 file changed, 14 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/media/i2c/ov4689.c b/drivers/media/i2c/ov4689.c
>> index 62aeae43d749..ed0ce1b9e55b 100644
>> --- a/drivers/media/i2c/ov4689.c
>> +++ b/drivers/media/i2c/ov4689.c
>> @@ -35,6 +35,12 @@
>>  #define OV4689_GAIN_STEP		1
>>  #define OV4689_GAIN_DEFAULT		0x80
>>
>> +#define OV4689_REG_DIG_GAIN		CCI_REG16(0x352A)
>
> Lowercase for hex constatns please.
>
>> +#define OV4689_DIG_GAIN_MIN		1
>> +#define OV4689_DIG_GAIN_MAX		0x7fff
>> +#define OV4689_DIG_GAIN_STEP		1
>> +#define OV4689_DIG_GAIN_DEFAULT		0x800
>> +
>>  #define OV4689_REG_TEST_PATTERN		CCI_REG8(0x5040)
>>  #define OV4689_TEST_PATTERN_ENABLE	0x80
>>  #define OV4689_TEST_PATTERN_DISABLE	0x0
>> @@ -131,7 +137,6 @@ static const struct cci_reg_sequence ov4689_2688x1520_regs[] = {
>>
>>  	/* AEC PK */
>>  	{CCI_REG8(0x3503), 0x04}, /* AEC_MANUAL gain_input_as_sensor_gain_format = 1 */
>> -	{CCI_REG8(0x352a), 0x08}, /* DIG_GAIN_FRAC_LONG dig_gain_long[14:8] = 0x08 (2x) */
>
> Is the default value really x2 ? That's not very nice :-S
>
> It would be much nicer if the default value of the control mapped to x1,
> otherwise it's impossible for userspace to interpret the scale of the
> digital gain value in a generic way. I suppose that could break existing
> applications though, which isn't great.
>
> Out of curiosity, can you tell what SoC(s) you're using this sensor with
> ?
>
>>
>>  	/* ADC and analog control*/
>>  	{CCI_REG8(0x3603), 0x40},
>> @@ -622,6 +627,9 @@ static int ov4689_set_ctrl(struct v4l2_ctrl *ctrl)
>>  				OV4689_TIMING_FLIP_MASK,
>>  				val ? 0 : OV4689_TIMING_FLIP_BOTH, &ret);
>>  		break;
>> +	case V4L2_CID_DIGITAL_GAIN:
>> +		cci_write(regmap, OV4689_REG_DIG_GAIN, val, &ret);
>> +		break;
>>  	default:
>>  		dev_warn(dev, "%s Unhandled id:0x%x, val:0x%x\n",
>>  			 __func__, ctrl->id, val);
>> @@ -650,7 +658,7 @@ static int ov4689_initialize_controls(struct ov4689 *ov4689)
>>
>>  	handler = &ov4689->ctrl_handler;
>>  	mode = ov4689->cur_mode;
>> -	ret = v4l2_ctrl_handler_init(handler, 13);
>> +	ret = v4l2_ctrl_handler_init(handler, 14);
>>  	if (ret)
>>  		return ret;
>>
>> @@ -693,6 +701,10 @@ static int ov4689_initialize_controls(struct ov4689 *ov4689)
>>  	v4l2_ctrl_new_std(handler, &ov4689_ctrl_ops, V4L2_CID_VFLIP, 0, 1, 1, 0);
>>  	v4l2_ctrl_new_std(handler, &ov4689_ctrl_ops, V4L2_CID_HFLIP, 0, 1, 1, 0);
>>
>> +	v4l2_ctrl_new_std(handler, &ov4689_ctrl_ops, V4L2_CID_DIGITAL_GAIN,
>> +			  OV4689_DIG_GAIN_MIN, OV4689_DIG_GAIN_MAX,
>> +			  OV4689_DIG_GAIN_STEP, OV4689_DIG_GAIN_DEFAULT);
>> +
>>  	if (handler->error) {
>>  		ret = handler->error;
>>  		dev_err(ov4689->dev, "Failed to init controls(%d)\n", ret);


--
Best regards,
Mikhail Rudenko

  reply	other threads:[~2023-12-12 12:52 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-11 17:50 [PATCH 00/19] Omnivision OV4689 refactoring and improvements Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 01/19] media: i2c: ov4689: Clean up and annotate the register table Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 02/19] media: i2c: ov4689: Fix typo in a comment Mikhail Rudenko
2023-12-11 18:01   ` Laurent Pinchart
2023-12-12 12:22     ` Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 03/19] media: i2c: ov4689: CCI conversion Mikhail Rudenko
2023-12-11 18:08   ` Laurent Pinchart
2023-12-11 17:50 ` [PATCH 04/19] media: i2c: ov4689: Remove i2c_client from ov4689 struct Mikhail Rudenko
2023-12-11 18:09   ` Laurent Pinchart
2023-12-11 17:50 ` [PATCH 05/19] media: i2c: ov4689: Refactor ov4689_set_ctrl Mikhail Rudenko
2023-12-11 18:11   ` Laurent Pinchart
2023-12-12 12:25     ` Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 06/19] media: i2c: ov4689: Set gain in one 16 bit write Mikhail Rudenko
2023-12-11 18:11   ` Laurent Pinchart
2023-12-11 17:50 ` [PATCH 07/19] media: i2c: ov4689: Use sub-device active state Mikhail Rudenko
2023-12-11 18:15   ` Laurent Pinchart
2023-12-12 12:27     ` Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 08/19] media: i2c: ov4689: Enable runtime PM before registering sub-device Mikhail Rudenko
2023-12-11 18:19   ` Laurent Pinchart
2023-12-12 12:32     ` Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 09/19] media: i2c: ov4689: Remove max_fps field from struct ov4689_mode Mikhail Rudenko
2023-12-11 18:19   ` Laurent Pinchart
2023-12-11 17:50 ` [PATCH 10/19] media: i2c: ov4689: Make horizontal blanking configurable Mikhail Rudenko
2023-12-11 22:08   ` Laurent Pinchart
2023-12-12 12:37     ` Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 11/19] media: i2c: ov4689: Implement vflip/hflip controls Mikhail Rudenko
2023-12-11 22:10   ` Laurent Pinchart
2023-12-12 12:42     ` Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 12/19] media: i2c: ov4689: Implement digital gain control Mikhail Rudenko
2023-12-11 22:15   ` Laurent Pinchart
2023-12-12 12:52     ` Mikhail Rudenko [this message]
2023-12-12 12:52     ` Mikhail Rudenko
2023-12-18 18:04       ` Laurent Pinchart
2023-12-18 20:10         ` Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 13/19] media: i2c: ov4689: Implement manual color balance controls Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 14/19] media: i2c: ov4689: Move pixel array size out of struct ov4689_mode Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 15/19] media: i2c: ov4689: Set timing registers programmatically Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 16/19] media: i2c: ov4689: Configurable analogue crop Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 17/19] media: i2c: ov4689: Eliminate struct ov4689_mode Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 18/19] media: i2c: ov4689: Refactor ov4689_s_stream Mikhail Rudenko
2023-12-11 17:50 ` [PATCH 19/19] media: i2c: ov4689: Implement 2x2 binning Mikhail Rudenko

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=87cyvbpoqb.fsf@gmail.com \
    --to=mike.rudenko@gmail.com \
    --cc=christophe.jaillet@wanadoo.fr \
    --cc=dave.stevenson@raspberrypi.com \
    --cc=jacopo@jmondi.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=sakari.ailus@linux.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.