linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dongchun Zhu <dongchun.zhu@mediatek.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: <mchehab@kernel.org>, <robh+dt@kernel.org>,
	<mark.rutland@arm.com>, <sakari.ailus@linux.intel.com>,
	<drinkcat@chromium.org>, <tfiga@chromium.org>,
	<matthias.bgg@gmail.com>, <bingbu.cao@intel.com>,
	<srv_heupstream@mediatek.com>,
	<linux-mediatek@lists.infradead.org>,
	<linux-arm-kernel@lists.infradead.org>, <sj.huang@mediatek.com>,
	<linux-media@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<louis.kuo@mediatek.com>, <shengnan.wang@mediatek.com>,
	<dongchun.zhu@mediatek.com>
Subject: Re: [PATCH v15 2/2] media: i2c: Add OV02A10 image sensor driver
Date: Thu, 19 Nov 2020 21:06:41 +0800	[thread overview]
Message-ID: <1605791201.4733.114.camel@mhfsdcap03> (raw)
In-Reply-To: <20201023143156.GX4077@smile.fi.intel.com>

Hi Andy,

On Fri, 2020-10-23 at 17:31 +0300, Andy Shevchenko wrote:
> On Tue, Oct 13, 2020 at 09:05:03PM +0800, Dongchun Zhu wrote:
> > Add a V4L2 sub-device driver for OmniVision OV02A10 image sensor.
> 
> ...
> 
> > +#define OV02A10_ID_MASK					0xffff
> 
> GENMASK()
> 
> (And include bits.h for that)
> 

It seems could build pass without including bits.h, as DW9768 once used.

> ...
> 
> > +static int __ov02a10_start_stream(struct ov02a10 *ov02a10)
> > +{
> > +	struct i2c_client *client = v4l2_get_subdevdata(&ov02a10->subdev);
> > +	const struct ov02a10_reg_list *reg_list;
> > +	int ret;
> > +
> > +	/* Apply default values of current mode */
> > +	reg_list = &ov02a10->cur_mode->reg_list;
> > +	ret = ov02a10_write_array(ov02a10, reg_list);
> > +	if (ret)
> > +		return ret;
> > +
> > +	/* Apply customized values from user */
> > +	ret = __v4l2_ctrl_handler_setup(ov02a10->subdev.ctrl_handler);
> > +	if (ret)
> > +		return ret;
> > +
> > +	/* Set orientation to 180 degree */
> > +	if (ov02a10->upside_down) {
> > +		ret = i2c_smbus_write_byte_data(client, REG_MIRROR_FLIP_CONTROL,
> > +						REG_MIRROR_FLIP_ENABLE);
> > +		if (ret) {
> 
> Shouldn't you use 'ret < 0' here as well?
> 

Fixed in next release.

> > +			dev_err(&client->dev, "failed to set orientation\n");
> > +			return ret;
> > +		}
> > +		ret = i2c_smbus_write_byte_data(client, REG_GLOBAL_EFFECTIVE,
> > +						REG_ENABLE);
> > +		if (ret < 0)
> > +			return ret;
> > +	}
> > +
> > +	/* Set MIPI TX speed according to DT property */
> > +	if (ov02a10->mipi_clock_voltage != OV02A10_MIPI_TX_SPEED_DEFAULT) {
> > +		ret = i2c_smbus_write_byte_data(client, TX_SPEED_AREA_SEL,
> > +						ov02a10->mipi_clock_voltage);
> > +		if (ret < 0)
> > +			return ret;
> > +	}
> > +
> > +	/* Set stream on register */
> > +	return i2c_smbus_write_byte_data(client, REG_SC_CTRL_MODE,
> > +					 SC_CTRL_MODE_STREAMING);
> > +}
> 
> ...
> 
> > +/*
> 
> Was your intention to declare it as a kernel doc?
> 

Removed in next release.

> > + * ov02a10_set_exposure - Function called when setting exposure time
> > + * @priv: Pointer to device structure
> > + * @val: Variable for exposure time, in the unit of micro-second
> > + *
> > + * Set exposure time based on input value.
> > + *
> > + * Return: 0 on success
> > + */
> > +static int ov02a10_set_exposure(struct ov02a10 *ov02a10, int val)
> 
> ...
> 
> > +static int ov02a10_check_hwcfg(struct device *dev, struct ov02a10 *ov02a10)
> > +{
> > +	struct fwnode_handle *ep;
> > +	struct fwnode_handle *fwnode = dev_fwnode(dev);
> > +	struct v4l2_fwnode_endpoint bus_cfg = {
> > +		.bus_type = V4L2_MBUS_CSI2_DPHY,
> > +	};
> > +	unsigned int i, j;
> > +	int ret;
> 
> > +	if (!fwnode)
> > +		return -EINVAL;
> 
> Basically you can avoid this check, but it's up to you.
> 

I'd like to keep it. Thank you.

> > +	ep = fwnode_graph_get_next_endpoint(fwnode, NULL);
> > +	if (!ep)
> > +		return -ENXIO;
> > +
> > +	ret = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
> > +	fwnode_handle_put(ep);
> > +	if (ret)
> > +		return ret;
> > +
> > +	for (i = 0; i < ARRAY_SIZE(link_freq_menu_items); i++) {
> > +		for (j = 0; j < bus_cfg.nr_of_link_frequencies; j++) {
> > +			if (link_freq_menu_items[i] ==
> > +				bus_cfg.link_frequencies[j]) {
> > +				ov02a10->freq_index = i;
> > +				break;
> > +			}
> > +		}
> > +
> > +		if (j == bus_cfg.nr_of_link_frequencies) {
> > +			dev_err(dev, "no link frequency %lld supported\n",
> > +				link_freq_menu_items[i]);
> > +			ret = -EINVAL;
> > +			break;
> > +		}
> > +	}
> > +
> > +	v4l2_fwnode_endpoint_free(&bus_cfg);
> > +
> > +	return ret;
> > +}
> 
> ...
> 
> > +	fwnode_property_read_u32(dev_fwnode(dev), "rotation", &rotation);
> 
> Same Q as per previous reviews. Why device property API can't be used here?
> 
> And everywhere else when you have
> 	 fwnode_property_read_*(dev_fwnode(dev), ...)
> calls.
> 

Thanks for the reminder.
'fwnode_property_read_u32' and 'fwnode_property_read_u32_array' would be
replaced in next release if local test passes.


  reply	other threads:[~2020-11-19 13:07 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-13 13:05 [PATCH v15 0/2] media: i2c: Add support for OV02A10 sensor Dongchun Zhu
2020-10-13 13:05 ` [PATCH v15 1/2] media: dt-bindings: media: i2c: Document OV02A10 bindings Dongchun Zhu
2020-10-13 16:19   ` Sakari Ailus
2020-10-14  2:10     ` Dongchun Zhu
2020-10-14  8:31       ` Sakari Ailus
2020-10-14 11:48         ` Tomasz Figa
2020-10-16 17:21           ` Rob Herring
2020-10-19  8:27           ` Sakari Ailus
2020-10-19 19:20             ` Tomasz Figa
2020-10-26 22:25               ` Tomasz Figa
2020-10-30 16:27               ` Sakari Ailus
2020-11-19 12:58                 ` Dongchun Zhu
2020-10-16 17:21   ` Rob Herring
2020-10-13 13:05 ` [PATCH v15 2/2] media: i2c: Add OV02A10 image sensor driver Dongchun Zhu
2020-10-23 14:31   ` Andy Shevchenko
2020-11-19 13:06     ` Dongchun Zhu [this message]
2020-11-19 13:57       ` 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=1605791201.4733.114.camel@mhfsdcap03 \
    --to=dongchun.zhu@mediatek.com \
    --cc=andriy.shevchenko@linux.intel.com \
    --cc=bingbu.cao@intel.com \
    --cc=devicetree@vger.kernel.org \
    --cc=drinkcat@chromium.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=louis.kuo@mediatek.com \
    --cc=mark.rutland@arm.com \
    --cc=matthias.bgg@gmail.com \
    --cc=mchehab@kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=shengnan.wang@mediatek.com \
    --cc=sj.huang@mediatek.com \
    --cc=srv_heupstream@mediatek.com \
    --cc=tfiga@chromium.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).