blob: 40ecef29801d3be1e5902cea4aee4a823e87f158 [file] [log] [blame]
Hans Verkuil8ffbc652007-09-12 08:32:50 -03001/*
2 * v4l2-i2c-drv.h - contains I2C handling code that's identical for
3 * all V4L2 I2C drivers. Use this header if the
4 * I2C driver is only used by drivers converted
5 * to the bus-based I2C API.
6 *
7 * Copyright (C) 2007 Hans Verkuil <hverkuil@xs4all.nl>
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, write to the Free Software
21 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 */
23
Michael Krufky8574ac62007-12-24 15:49:33 -030024#ifndef __V4L2_I2C_DRV_H__
25#define __V4L2_I2C_DRV_H__
26
27#include <media/v4l2-common.h>
28
Hans Verkuil8ffbc652007-09-12 08:32:50 -030029struct v4l2_i2c_driver_data {
30 const char * const name;
31 int driverid;
32 int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
Jean Delvared2653e92008-04-29 23:11:39 +020033 int (*probe)(struct i2c_client *client, const struct i2c_device_id *id);
Hans Verkuil8ffbc652007-09-12 08:32:50 -030034 int (*remove)(struct i2c_client *client);
35 int (*suspend)(struct i2c_client *client, pm_message_t state);
36 int (*resume)(struct i2c_client *client);
Hans Verkuil88307eb2007-09-14 04:49:16 -030037 int (*legacy_probe)(struct i2c_adapter *adapter);
Hans Verkuil8ffbc652007-09-12 08:32:50 -030038 int legacy_class;
Jean Delvareae429082008-05-11 20:37:06 +020039 const struct i2c_device_id *id_table;
Hans Verkuil8ffbc652007-09-12 08:32:50 -030040};
41
42static struct v4l2_i2c_driver_data v4l2_i2c_data;
Hans Verkuil8ffbc652007-09-12 08:32:50 -030043static struct i2c_driver v4l2_i2c_driver;
44
45
46/* Bus-based I2C implementation for kernels >= 2.6.22 */
47
48static int __init v4l2_i2c_drv_init(void)
49{
50 v4l2_i2c_driver.driver.name = v4l2_i2c_data.name;
51 v4l2_i2c_driver.id = v4l2_i2c_data.driverid;
52 v4l2_i2c_driver.command = v4l2_i2c_data.command;
53 v4l2_i2c_driver.probe = v4l2_i2c_data.probe;
54 v4l2_i2c_driver.remove = v4l2_i2c_data.remove;
55 v4l2_i2c_driver.suspend = v4l2_i2c_data.suspend;
56 v4l2_i2c_driver.resume = v4l2_i2c_data.resume;
Jean Delvareae429082008-05-11 20:37:06 +020057 v4l2_i2c_driver.id_table = v4l2_i2c_data.id_table;
Hans Verkuil8ffbc652007-09-12 08:32:50 -030058 return i2c_add_driver(&v4l2_i2c_driver);
59}
60
61
62static void __exit v4l2_i2c_drv_cleanup(void)
63{
64 i2c_del_driver(&v4l2_i2c_driver);
65}
66
67module_init(v4l2_i2c_drv_init);
68module_exit(v4l2_i2c_drv_cleanup);
Michael Krufky8574ac62007-12-24 15:49:33 -030069
70#endif /* __V4L2_I2C_DRV_H__ */