Re: [PATCHv5 1 of 8] v4l2_subdev i2c: Add v4l2_i2c_new_subdev_board i2c helper function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Saturday 06 June 2009 17:19:08 Andy Walls wrote:
> On Sat, 2009-06-06 at 14:49 +0200, Hans Verkuil wrote:
> > > I propose to change the API as follows:
> > >
> > > #define V4L2_I2C_ADDRS(addr, addrs...) \
> > > 	((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END })
> > >
> > > Comments? If we decide to go this way, then I need to know soon so
> > > that I can make the changes before the 2.6.31 window closes.
> >
> > I've done the initial conversion to the new API (no _cfg or _board
> > version yet) in my ~hverkuil/v4l-dvb-subdev tree. It really simplifies
> > things and if nobody objects then I'd like to get this in before
> > 2.6.31.
>
> +Alternatively, you can create the unsigned short array dynamically:
> +
> +struct v4l2_subdev *sd = v4l2_i2c_subdev(v4l2_dev, adapter,
> +	       "module_foo", "chipid", 0, V4L2_I2C_ADDRS(0x10, 0x12));
>
> Strictly speaking, that's not "dynamically" in the sense of the
> generated machine code - everything is going to come from the local
> stack and the initialized data space.  The compiler will probably be
> smart enough to generate an unnamed array in the initialized data space
> anyway, avoiding the use of local stack for the array. :)

'on the fly' is perhaps a better term...

> Anyway, the macro looks fine to me.
>
> But...
>
>
> @@ -100,16 +100,16 @@ int cx18_i2c_register(struct cx18 *cx, u
>
> 	if (hw == CX18_HW_TUNER) {
> 		/* special tuner group handling */
> -		sd = v4l2_i2c_new_probed_subdev(&cx->v4l2_dev,
> -				adap, mod, type, cx->card_i2c->radio);
> +		sd = v4l2_i2c_subdev(&cx->v4l2_dev,
> +				adap, mod, type, 0, cx->card_i2c->radio);
>
>
> Something happened with readability for maintenance purposes.  We're in
> cx18_i2c_register(), we're probing, we're allocating new objects, and
> we're registering with two subsystems (i2c and v4l).  However, all we
> see on the surface is
>
>     "foo = v4l2_i2c_subdev(blah, blah, blah, ... );"
>
> The ALSA subsystem at least uses "_create" for object constructor type
> functions.  The v4l2 subdev framework has sophisticated constructors for
> convenience.  I know "new" wasn't strcitly correct, as the function does
> probe, create, & register an object.  However, the proposed name does
> not make it obvious that it's a constructor, IMO.

Hmm, I should probably just leave this as v4l2_i2c_new_subdev since that 
corresponds to the i2c core's i2c_new_device call.

Regards,

	Hans

-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG Telecom
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux