V4L/DVB (6451): v4l2: add support for bus-based I2C drivers
Two new headers were added: one for I2C drivers that are only used by V4L2 drivers converted to the new bus-based I2C API, and one that can be used by both converted and unconverted drivers (at the expense of some additional overhead). To support the legacy I2C API a helper function was added to v4l2-common.c. These headers take care of all the 'boilerplate' code that all V4L2 I2C drivers have in common and will automatically support the bus-based I2C API introduced in kernel 2.6.22. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
5ef4730d1b
commit
8ffbc65594
@@ -1013,6 +1013,35 @@ int v4l2_chip_match_host(u32 match_type, u32 match_chip)
|
||||
|
||||
/* ----------------------------------------------------------------- */
|
||||
|
||||
/* Helper function for I2C legacy drivers */
|
||||
|
||||
int v4l2_i2c_attach(struct i2c_adapter *adapter, int address, struct i2c_driver *driver,
|
||||
const char *name, int (*probe)(struct i2c_client *))
|
||||
{
|
||||
struct i2c_client *client;
|
||||
int err;
|
||||
|
||||
client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
|
||||
if (client == 0)
|
||||
return -ENOMEM;
|
||||
|
||||
client->addr = address;
|
||||
client->adapter = adapter;
|
||||
client->driver = driver;
|
||||
snprintf(client->name, sizeof(client->name) - 1, name);
|
||||
|
||||
err = probe(client);
|
||||
if (err == 0) {
|
||||
i2c_attach_client(client);
|
||||
}
|
||||
else {
|
||||
kfree(client);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
/* ----------------------------------------------------------------- */
|
||||
|
||||
EXPORT_SYMBOL(v4l2_norm_to_name);
|
||||
EXPORT_SYMBOL(v4l2_video_std_construct);
|
||||
|
||||
@@ -1038,6 +1067,8 @@ EXPORT_SYMBOL(v4l2_chip_match_i2c_client);
|
||||
EXPORT_SYMBOL(v4l2_chip_ident_i2c_client);
|
||||
EXPORT_SYMBOL(v4l2_chip_match_host);
|
||||
|
||||
EXPORT_SYMBOL(v4l2_i2c_attach);
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* c-basic-offset: 8
|
||||
|
Reference in New Issue
Block a user