All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dongchun Zhu <dongchun.zhu@mediatek.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	drinkcat@chromium.org, srv_heupstream@mediatek.com,
	shengnan.wang@mediatek.com, tfiga@chromium.org,
	louis.kuo@mediatek.com, sj.huang@mediatek.com,
	robh+dt@kernel.org, linux-mediatek@lists.infradead.org,
	dongchun.zhu@mediatek.com, sakari.ailus@linux.intel.com,
	matthias.bgg@gmail.com, bingbu.cao@intel.com, mchehab@kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-media@vger.kernel.org
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.

_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek

WARNING: multiple messages have this Message-ID (diff)
From: Dongchun Zhu <dongchun.zhu@mediatek.com>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: mark.rutland@arm.com, devicetree@vger.kernel.org,
	drinkcat@chromium.org, srv_heupstream@mediatek.com,
	shengnan.wang@mediatek.com, tfiga@chromium.org,
	louis.kuo@mediatek.com, sj.huang@mediatek.com,
	robh+dt@kernel.org, linux-mediatek@lists.infradead.org,
	dongchun.zhu@mediatek.com, sakari.ailus@linux.intel.com,
	matthias.bgg@gmail.com, bingbu.cao@intel.com, mchehab@kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-media@vger.kernel.org
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.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

WARNING: multiple messages have this Message-ID (diff)
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: 51+ 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 ` Dongchun Zhu
2020-10-13 13:05 ` Dongchun Zhu
2020-10-13 13:05 ` [PATCH v15 1/2] media: dt-bindings: media: i2c: Document OV02A10 bindings Dongchun Zhu
2020-10-13 13:05   ` Dongchun Zhu
2020-10-13 13:05   ` Dongchun Zhu
2020-10-13 16:19   ` Sakari Ailus
2020-10-13 16:19     ` Sakari Ailus
2020-10-13 16:19     ` Sakari Ailus
2020-10-14  2:10     ` Dongchun Zhu
2020-10-14  2:10       ` Dongchun Zhu
2020-10-14  2:10       ` Dongchun Zhu
2020-10-14  8:31       ` Sakari Ailus
2020-10-14  8:31         ` Sakari Ailus
2020-10-14  8:31         ` Sakari Ailus
2020-10-14 11:48         ` Tomasz Figa
2020-10-14 11:48           ` Tomasz Figa
2020-10-14 11:48           ` Tomasz Figa
2020-10-16 17:21           ` Rob Herring
2020-10-16 17:21             ` Rob Herring
2020-10-16 17:21             ` Rob Herring
2020-10-19  8:27           ` Sakari Ailus
2020-10-19  8:27             ` Sakari Ailus
2020-10-19  8:27             ` Sakari Ailus
2020-10-19 19:20             ` Tomasz Figa
2020-10-19 19:20               ` Tomasz Figa
2020-10-19 19:20               ` Tomasz Figa
2020-10-26 22:25               ` Tomasz Figa
2020-10-26 22:25                 ` Tomasz Figa
2020-10-26 22:25                 ` Tomasz Figa
2020-10-30 16:27               ` Sakari Ailus
2020-10-30 16:27                 ` Sakari Ailus
2020-10-30 16:27                 ` Sakari Ailus
2020-11-19 12:58                 ` Dongchun Zhu
2020-11-19 12:58                   ` Dongchun Zhu
2020-11-19 12:58                   ` Dongchun Zhu
2020-10-16 17:21   ` Rob Herring
2020-10-16 17:21     ` Rob Herring
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-13 13:05   ` Dongchun Zhu
2020-10-13 13:05   ` Dongchun Zhu
2020-10-23 14:31   ` Andy Shevchenko
2020-10-23 14:31     ` Andy Shevchenko
2020-10-23 14:31     ` Andy Shevchenko
2020-11-19 13:06     ` Dongchun Zhu [this message]
2020-11-19 13:06       ` Dongchun Zhu
2020-11-19 13:06       ` Dongchun Zhu
2020-11-19 13:57       ` Andy Shevchenko
2020-11-19 13:57         ` Andy Shevchenko
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 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.