On Monday 08 June 2009 14:39:32 Jean Delvare wrote: > Hi Hans, > > On Sat, 6 Jun 2009 15:00:48 +0200, Hans Verkuil wrote: > > For video4linux we sometimes need to probe for a single i2c address. > > Normally you would do it like this: > > > > static const unsigned short addrs[] = { > > addr, I2C_CLIENT_END > > }; > > > > client = i2c_new_probed_device(adapter, &info, addrs); > > > > This is a bit awkward and I came up with this macro: > > > > #define V4L2_I2C_ADDRS(addr, addrs...) \ > > ((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END }) > > > > This can construct a list of one or more i2c addresses on the fly. But > > this is something that really belongs in i2c.h, renamed to I2C_ADDRS. > > > > With this macro we can just do: > > > > client = i2c_new_probed_device(adapter, &info, I2C_ADDRS(addr)); > > > > Comments? > > I'm not a big fan of macros which hide how things work, but if this > makes your life easier, why not. Just send a patch and I'll queue it up > for 2.6.31. Hi Jean, Here it is: --- linux-git/include/linux/i2c.h.orig 2009-06-09 14:53:32.000000000 +0200 +++ linux-git/include/linux/i2c.h 2009-06-09 15:03:24.000000000 +0200 @@ -412,6 +412,10 @@ /* The numbers to use to set I2C bus address */ #define ANY_I2C_BUS 0xffff +/* Construct an I2C_CLIENT_END-terminated array of i2c addresses */ +#define I2C_ADDRS(addr, addrs...) \ + ((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END }) + /* ----- functions exported by i2c.o */ Signed-off-by: Hans Verkuil <hverkuil@xxxxxxxxx> Note that this can also be used to initialize an array: static const unsigned short addrs[] = I2C_ADDRS(0x2a, 0x2c); Whether you want to is another matter, but it works. This functionality is also available in the oldest supported gcc (3.2). Thanks, 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