2 * ST Microelectronics MFD: stmpe's i2c client specific driver
4 * Copyright (C) ST-Ericsson SA 2010
5 * Copyright (C) ST Microelectronics SA 2011
7 * License Terms: GNU General Public License, version 2
8 * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
9 * Author: Viresh Kumar <viresh.linux@gmail.com> for ST Microelectronics
12 #include <linux/i2c.h>
13 #include <linux/interrupt.h>
14 #include <linux/kernel.h>
15 #include <linux/module.h>
16 #include <linux/types.h>
19 static int i2c_reg_read(struct stmpe
*stmpe
, u8 reg
)
21 struct i2c_client
*i2c
= stmpe
->client
;
23 return i2c_smbus_read_byte_data(i2c
, reg
);
26 static int i2c_reg_write(struct stmpe
*stmpe
, u8 reg
, u8 val
)
28 struct i2c_client
*i2c
= stmpe
->client
;
30 return i2c_smbus_write_byte_data(i2c
, reg
, val
);
33 static int i2c_block_read(struct stmpe
*stmpe
, u8 reg
, u8 length
, u8
*values
)
35 struct i2c_client
*i2c
= stmpe
->client
;
37 return i2c_smbus_read_i2c_block_data(i2c
, reg
, length
, values
);
40 static int i2c_block_write(struct stmpe
*stmpe
, u8 reg
, u8 length
,
43 struct i2c_client
*i2c
= stmpe
->client
;
45 return i2c_smbus_write_i2c_block_data(i2c
, reg
, length
, values
);
48 static struct stmpe_client_info i2c_ci
= {
49 .read_byte
= i2c_reg_read
,
50 .write_byte
= i2c_reg_write
,
51 .read_block
= i2c_block_read
,
52 .write_block
= i2c_block_write
,
56 stmpe_i2c_probe(struct i2c_client
*i2c
, const struct i2c_device_id
*id
)
58 i2c_ci
.data
= (void *)id
;
59 i2c_ci
.irq
= i2c
->irq
;
61 i2c_ci
.dev
= &i2c
->dev
;
63 return stmpe_probe(&i2c_ci
, id
->driver_data
);
66 static int stmpe_i2c_remove(struct i2c_client
*i2c
)
68 struct stmpe
*stmpe
= dev_get_drvdata(&i2c
->dev
);
70 return stmpe_remove(stmpe
);
73 static const struct i2c_device_id stmpe_i2c_id
[] = {
74 { "stmpe610", STMPE610
},
75 { "stmpe801", STMPE801
},
76 { "stmpe811", STMPE811
},
77 { "stmpe1601", STMPE1601
},
78 { "stmpe1801", STMPE1801
},
79 { "stmpe2401", STMPE2401
},
80 { "stmpe2403", STMPE2403
},
83 MODULE_DEVICE_TABLE(i2c
, stmpe_id
);
85 static struct i2c_driver stmpe_i2c_driver
= {
90 .pm
= &stmpe_dev_pm_ops
,
93 .probe
= stmpe_i2c_probe
,
94 .remove
= stmpe_i2c_remove
,
95 .id_table
= stmpe_i2c_id
,
98 static int __init
stmpe_init(void)
100 return i2c_add_driver(&stmpe_i2c_driver
);
102 subsys_initcall(stmpe_init
);
104 static void __exit
stmpe_exit(void)
106 i2c_del_driver(&stmpe_i2c_driver
);
108 module_exit(stmpe_exit
);
110 MODULE_LICENSE("GPL v2");
111 MODULE_DESCRIPTION("STMPE MFD I2C Interface Driver");
112 MODULE_AUTHOR("Rabin Vincent <rabin.vincent@stericsson.com>");