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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to