2 * AD714X CapTouch Programmable Controller driver (I2C bus)
4 * Copyright 2009 Analog Devices Inc.
6 * Licensed under the GPL-2 or later.
9 #include <linux/input.h> /* BUS_I2C */
10 #include <linux/i2c.h>
11 #include <linux/module.h>
12 #include <linux/types.h>
17 static int ad714x_i2c_suspend(struct device
*dev
)
19 return ad714x_disable(i2c_get_clientdata(to_i2c_client(dev
)));
22 static int ad714x_i2c_resume(struct device
*dev
)
24 return ad714x_enable(i2c_get_clientdata(to_i2c_client(dev
)));
28 static SIMPLE_DEV_PM_OPS(ad714x_i2c_pm
, ad714x_i2c_suspend
, ad714x_i2c_resume
);
30 static int ad714x_i2c_write(struct device
*dev
, unsigned short reg
,
33 struct i2c_client
*client
= to_i2c_client(dev
);
35 u8
*_reg
= (u8
*)®
;
36 u8
*_data
= (u8
*)&data
;
45 ret
= i2c_master_send(client
, tx
, 4);
47 dev_err(&client
->dev
, "I2C write error\n");
52 static int ad714x_i2c_read(struct device
*dev
, unsigned short reg
,
55 struct i2c_client
*client
= to_i2c_client(dev
);
57 u8
*_reg
= (u8
*)®
;
58 u8
*_data
= (u8
*)data
;
66 ret
= i2c_master_send(client
, tx
, 2);
68 ret
= i2c_master_recv(client
, rx
, 2);
70 if (unlikely(ret
< 0)) {
71 dev_err(&client
->dev
, "I2C read error\n");
80 static int __devinit
ad714x_i2c_probe(struct i2c_client
*client
,
81 const struct i2c_device_id
*id
)
83 struct ad714x_chip
*chip
;
85 chip
= ad714x_probe(&client
->dev
, BUS_I2C
, client
->irq
,
86 ad714x_i2c_read
, ad714x_i2c_write
);
90 i2c_set_clientdata(client
, chip
);
95 static int __devexit
ad714x_i2c_remove(struct i2c_client
*client
)
97 struct ad714x_chip
*chip
= i2c_get_clientdata(client
);
104 static const struct i2c_device_id ad714x_id
[] = {
105 { "ad7142_captouch", 0 },
106 { "ad7143_captouch", 0 },
107 { "ad7147_captouch", 0 },
108 { "ad7147a_captouch", 0 },
109 { "ad7148_captouch", 0 },
112 MODULE_DEVICE_TABLE(i2c
, ad714x_id
);
114 static struct i2c_driver ad714x_i2c_driver
= {
116 .name
= "ad714x_captouch",
117 .pm
= &ad714x_i2c_pm
,
119 .probe
= ad714x_i2c_probe
,
120 .remove
= __devexit_p(ad714x_i2c_remove
),
121 .id_table
= ad714x_id
,
124 static __init
int ad714x_i2c_init(void)
126 return i2c_add_driver(&ad714x_i2c_driver
);
128 module_init(ad714x_i2c_init
);
130 static __exit
void ad714x_i2c_exit(void)
132 i2c_del_driver(&ad714x_i2c_driver
);
134 module_exit(ad714x_i2c_exit
);
136 MODULE_DESCRIPTION("Analog Devices AD714X Capacitance Touch Sensor I2C Bus Driver");
137 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
138 MODULE_LICENSE("GPL");