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>
16 static int ad714x_i2c_suspend(struct i2c_client
*client
, pm_message_t message
)
18 return ad714x_disable(i2c_get_clientdata(client
));
21 static int ad714x_i2c_resume(struct i2c_client
*client
)
23 return ad714x_enable(i2c_get_clientdata(client
));
26 # define ad714x_i2c_suspend NULL
27 # define ad714x_i2c_resume NULL
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",
118 .probe
= ad714x_i2c_probe
,
119 .remove
= __devexit_p(ad714x_i2c_remove
),
120 .suspend
= ad714x_i2c_suspend
,
121 .resume
= ad714x_i2c_resume
,
122 .id_table
= ad714x_id
,
125 static __init
int ad714x_i2c_init(void)
127 return i2c_add_driver(&ad714x_i2c_driver
);
129 module_init(ad714x_i2c_init
);
131 static __exit
void ad714x_i2c_exit(void)
133 i2c_del_driver(&ad714x_i2c_driver
);
135 module_exit(ad714x_i2c_exit
);
137 MODULE_DESCRIPTION("Analog Devices AD714X Capacitance Touch Sensor I2C Bus Driver");
138 MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
139 MODULE_LICENSE("GPL");