Skip to content
  • Hans Verkuil's avatar
    i2c: New macro to initialize i2c address lists on the fly · c7036673
    Hans Verkuil authored
    
    
    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));
    
    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).
    
    Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
    Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
    c7036673