aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/pca953x.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpio/pca953x.c')
-rw-r--r--drivers/gpio/pca953x.c24
1 files changed, 6 insertions, 18 deletions
diff --git a/drivers/gpio/pca953x.c b/drivers/gpio/pca953x.c
index e0e0af536108..5a99e81d2784 100644
--- a/drivers/gpio/pca953x.c
+++ b/drivers/gpio/pca953x.c
@@ -23,13 +23,7 @@
23#define PCA953X_INVERT 2 23#define PCA953X_INVERT 2
24#define PCA953X_DIRECTION 3 24#define PCA953X_DIRECTION 3
25 25
26/* This is temporary - in 2.6.26 i2c_driver_data should replace it. */ 26static const struct i2c_device_id pca953x_id[] = {
27struct pca953x_desc {
28 char name[I2C_NAME_SIZE];
29 unsigned long driver_data;
30};
31
32static const struct pca953x_desc pca953x_descs[] = {
33 { "pca9534", 8, }, 27 { "pca9534", 8, },
34 { "pca9535", 16, }, 28 { "pca9535", 16, },
35 { "pca9536", 4, }, 29 { "pca9536", 4, },
@@ -37,7 +31,9 @@ static const struct pca953x_desc pca953x_descs[] = {
37 { "pca9538", 8, }, 31 { "pca9538", 8, },
38 { "pca9539", 16, }, 32 { "pca9539", 16, },
39 /* REVISIT several pca955x parts should work here too */ 33 /* REVISIT several pca955x parts should work here too */
34 { }
40}; 35};
36MODULE_DEVICE_TABLE(i2c, pca953x_id);
41 37
42struct pca953x_chip { 38struct pca953x_chip {
43 unsigned gpio_start; 39 unsigned gpio_start;
@@ -192,26 +188,17 @@ static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
192 gc->owner = THIS_MODULE; 188 gc->owner = THIS_MODULE;
193} 189}
194 190
195static int __devinit pca953x_probe(struct i2c_client *client) 191static int __devinit pca953x_probe(struct i2c_client *client,
192 const struct i2c_device_id *id)
196{ 193{
197 struct pca953x_platform_data *pdata; 194 struct pca953x_platform_data *pdata;
198 struct pca953x_chip *chip; 195 struct pca953x_chip *chip;
199 int ret, i; 196 int ret, i;
200 const struct pca953x_desc *id = NULL;
201 197
202 pdata = client->dev.platform_data; 198 pdata = client->dev.platform_data;
203 if (pdata == NULL) 199 if (pdata == NULL)
204 return -ENODEV; 200 return -ENODEV;
205 201
206 /* this loop vanishes when we get i2c_device_id */
207 for (i = 0; i < ARRAY_SIZE(pca953x_descs); i++)
208 if (!strcmp(pca953x_descs[i].name, client->name)) {
209 id = pca953x_descs + i;
210 break;
211 }
212 if (!id)
213 return -ENODEV;
214
215 chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL); 202 chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
216 if (chip == NULL) 203 if (chip == NULL)
217 return -ENOMEM; 204 return -ENOMEM;
@@ -291,6 +278,7 @@ static struct i2c_driver pca953x_driver = {
291 }, 278 },
292 .probe = pca953x_probe, 279 .probe = pca953x_probe,
293 .remove = pca953x_remove, 280 .remove = pca953x_remove,
281 .id_table = pca953x_id,
294}; 282};
295 283
296static int __init pca953x_init(void) 284static int __init pca953x_init(void)