All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans Verkuil <hverkuil@xs4all.nl>
To: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Cc: Linux Media Mailing List <linux-media@vger.kernel.org>,
	Magnus Damm <magnus.damm@gmail.com>,
	Robert Jarzmik <robert.jarzmik@free.fr>,
	Darius Augulis <augulis.darius@gmail.com>,
	Paul Mundt <lethal@linux-sh.org>
Subject: Re: [PATCH 08/10 v2] v4l2-subdev: add a v4l2_i2c_subdev_board() function
Date: Thu, 21 May 2009 15:53:13 +0200	[thread overview]
Message-ID: <200905211553.13802.hverkuil@xs4all.nl> (raw)
In-Reply-To: <Pine.LNX.4.64.0905151905440.4658@axis700.grange>

On Friday 15 May 2009 19:20:10 Guennadi Liakhovetski wrote:
> Introduce a function similar to v4l2_i2c_new_subdev() but taking a
> pointer to a struct i2c_board_info as a parameter instead of a client
> type and an I2C address, and make v4l2_i2c_new_subdev() a wrapper around
> it.
>
> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
> ---
>
> Hans, renamed as you requested and updated to a (more) current state.

NAK. Not because it is a bad idea, but because you need to patch against the 
version in the v4l-dvb repo. The version in the kernel is missing a lot of 
the compatibility code which we unfortunately need to keep.

Any function passing the board_info will be valid for kernels >= 2.6.26 
only.

I've been thinking of an alternative that is more 'compatibility' friendly:

The board info contains two fields that are really of interest: irq and the 
platform data. The core ops can be extended with a new .s_config function 
that receives the irq and a platform data pointer. If the new 
v4l2_i2c_subdev_board function is called, then .s_config is called 
automatically with the right parameters. This makes it possible to use 
v4l2_i2c_subdev_board with a i2c subdev that has to be backwards compatible 
(and so cannot rely on board_info). Instead that subdev will receive an 
s_config call with the needed info.

And v4l drivers that have to be backwards compatible and so cannot use 
v4l2_i2c_subdev_board can call s_config directly.

I agree, it is not elegant, but it is a fact of life that we need to stay 
backwards compatible. This new i2c API is only usable from 2.6.26 onwards, 
and that's simply too recent.

In my opinion doing it the way I proposed above will be a reasonable 
alternative that is also easy to remove when at some point in the future we 
stop supporting pre-2.6.26 kernels.

Regards,

	Hans

>
>  drivers/media/video/v4l2-common.c |   30 +++++++++++++++++++-----------
>  include/media/v4l2-common.h       |    5 +++++
>  2 files changed, 24 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/media/video/v4l2-common.c
> b/drivers/media/video/v4l2-common.c index f576ef6..ab190aa 100644
> --- a/drivers/media/video/v4l2-common.c
> +++ b/drivers/media/video/v4l2-common.c
> @@ -758,30 +758,38 @@ void v4l2_i2c_subdev_init(struct v4l2_subdev *sd,
> struct i2c_client *client, }
>  EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_init);
>
> -
> -
>  /* Load an i2c sub-device. */
>  struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
>  		struct i2c_adapter *adapter,
>  		const char *module_name, const char *client_type, u8 addr)
>  {
> -	struct v4l2_subdev *sd = NULL;
> -	struct i2c_client *client;
>  	struct i2c_board_info info;
>
> -	BUG_ON(!v4l2_dev);
> -
> -	if (module_name)
> -		request_module(module_name);
> -
>  	/* Setup the i2c board info with the device type and
>  	   the device address. */
>  	memset(&info, 0, sizeof(info));
>  	strlcpy(info.type, client_type, sizeof(info.type));
>  	info.addr = addr;
>
> +	return v4l2_i2c_subdev_board(v4l2_dev, adapter, module_name, &info);
> +}
> +EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev);
> +
> +/* Load an i2c sub-device using provided struct i2c_board_info. */
> +struct v4l2_subdev *v4l2_i2c_subdev_board(struct v4l2_device *v4l2_dev,
> +		struct i2c_adapter *adapter,
> +		const char *module_name, const struct i2c_board_info *info)
> +{
> +	struct v4l2_subdev *sd = NULL;
> +	struct i2c_client *client;
> +
> +	BUG_ON(!v4l2_dev);
> +
> +	if (module_name)
> +		request_module(module_name);
> +
>  	/* Create the i2c client */
> -	client = i2c_new_device(adapter, &info);
> +	client = i2c_new_device(adapter, info);
>  	/* Note: it is possible in the future that
>  	   c->driver is NULL if the driver is still being loaded.
>  	   We need better support from the kernel so that we
> @@ -808,7 +816,7 @@ error:
>  		i2c_unregister_device(client);
>  	return sd;
>  }
> -EXPORT_SYMBOL_GPL(v4l2_i2c_new_subdev);
> +EXPORT_SYMBOL_GPL(v4l2_i2c_subdev_board);
>
>  /* Probe and load an i2c sub-device. */
>  struct v4l2_subdev *v4l2_i2c_new_probed_subdev(struct v4l2_device
> *v4l2_dev, diff --git a/include/media/v4l2-common.h
> b/include/media/v4l2-common.h index c48c24e..a67f5c3 100644
> --- a/include/media/v4l2-common.h
> +++ b/include/media/v4l2-common.h
> @@ -131,6 +131,7 @@ struct i2c_driver;
>  struct i2c_adapter;
>  struct i2c_client;
>  struct i2c_device_id;
> +struct i2c_board_info;
>  struct v4l2_device;
>  struct v4l2_subdev;
>  struct v4l2_subdev_ops;
> @@ -142,6 +143,10 @@ struct v4l2_subdev_ops;
>  struct v4l2_subdev *v4l2_i2c_new_subdev(struct v4l2_device *v4l2_dev,
>  		struct i2c_adapter *adapter,
>  		const char *module_name, const char *client_type, u8 addr);
> +/* Same as above but uses user-provided struct i2c_board_info */
> +struct v4l2_subdev *v4l2_i2c_subdev_board(struct v4l2_device *v4l2_dev,
> +		struct i2c_adapter *adapter,
> +		const char *module_name, const struct i2c_board_info *info);
>  /* Probe and load an i2c module and return an initialized v4l2_subdev
> struct. Only call request_module if module_name != NULL.
>     The client_type argument is the name of the chip that's on the
> adapter. */



-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG

  reply	other threads:[~2009-05-21 13:53 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-15 17:18 [PATCH 00/10 v2] soc-camera conversions Guennadi Liakhovetski
2009-05-15 17:18 ` [PATCH 01/10 v2] soc-camera: prepare soc_camera_platform.c and its users for conversion Guennadi Liakhovetski
2009-05-15 17:19 ` [PATCH 02/10 v2] ARM: convert pcm037 to the new platform-device soc-camera interface Guennadi Liakhovetski
2009-05-20  7:38   ` Sascha Hauer
2009-05-20  9:01     ` Guennadi Liakhovetski
2009-05-20 11:23       ` Sascha Hauer
2009-05-20 12:07         ` Guennadi Liakhovetski
2009-05-22 10:58     ` [PATCH] pcm037: add MT9T031 camera support Guennadi Liakhovetski
2009-05-15 17:19 ` [PATCH 03/10 v2] soc_camera_platform: pass device pointer from soc-camera core on .add_device() Guennadi Liakhovetski
2009-05-15 17:19 ` [PATCH 04/10 v2] soc-camera: convert to platform device Guennadi Liakhovetski
2009-05-15 17:19 ` [PATCH 05/10 v2] sh: soc-camera updates Guennadi Liakhovetski
2009-05-15 17:19 ` [PATCH 06/10 v2] soc-camera: remove unused .iface from struct soc_camera_platform_info Guennadi Liakhovetski
2009-05-15 17:20 ` [PATCH 07/10 v2] sh: prepare board-ap325rxa.c for v4l2-subdev conversion Guennadi Liakhovetski
2009-05-15 17:20 ` [PATCH 08/10 v2] v4l2-subdev: add a v4l2_i2c_subdev_board() function Guennadi Liakhovetski
2009-05-21 13:53   ` Hans Verkuil [this message]
2009-05-21 15:33     ` Guennadi Liakhovetski
2009-05-22  8:58       ` Eduardo Valentin
2009-05-22 10:45         ` [RFC] v4l2_subdev i2c: Add i2c board info to v4l2_i2c_new_subdev Eduardo Valentin
2009-05-22 11:55         ` [PATCH 08/10 v2] v4l2-subdev: add a v4l2_i2c_subdev_board() function Hans Verkuil
2009-05-22 12:16           ` Guennadi Liakhovetski
2009-05-22 12:58             ` Hans Verkuil
2009-05-22 13:14               ` Eduardo Valentin
2009-05-25 10:18                 ` Eduardo Valentin
2009-05-25 10:37                   ` [PATCH 1/1] v4l2_subdev i2c: Add v4l2_i2c_new_subdev_board i2c helper function Eduardo Valentin
2009-05-15 17:20 ` [RFC 09/10 v2] v4l2-subdev: re-add s_standby to v4l2_subdev_core_ops Guennadi Liakhovetski
2009-05-21 13:33   ` Hans Verkuil
2009-05-22 14:23     ` Guennadi Liakhovetski
2009-05-22 14:30       ` Hans Verkuil
2009-05-22 16:44       ` Robert Jarzmik
2009-05-22 17:37         ` Guennadi Liakhovetski
2009-05-23 11:49           ` Robert Jarzmik
2009-05-23 15:17             ` Guennadi Liakhovetski
2009-05-15 17:20 ` [PATCH/RFC 10/10 v2] soc-camera: (partially) convert to v4l2-(sub)dev API Guennadi Liakhovetski
2009-05-15 17:31 ` [PATCH 00/10 v2] soc-camera conversions Guennadi Liakhovetski
2009-05-19  3:05 ` Paul Mundt
2009-06-08 19:19   ` Guennadi Liakhovetski
2009-06-09 13:26     ` Paul Mundt

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=200905211553.13802.hverkuil@xs4all.nl \
    --to=hverkuil@xs4all.nl \
    --cc=augulis.darius@gmail.com \
    --cc=g.liakhovetski@gmx.de \
    --cc=lethal@linux-sh.org \
    --cc=linux-media@vger.kernel.org \
    --cc=magnus.damm@gmail.com \
    --cc=robert.jarzmik@free.fr \
    /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.