i2c: Convert most new-style drivers to use module aliasing
Based on earlier work by Jon Smirl and Jochen Friedrich. Update most new-style i2c drivers to use standard module aliasing instead of the old driver_name/type driver matching scheme. I've left the video drivers apart (except for SoC camera drivers) as they're a bit more diffcult to deal with, they'll have their own patch later. Signed-off-by: Jean Delvare <khali@linux-fr.org> Cc: Jon Smirl <jonsmirl@gmail.com> Cc: Jochen Friedrich <jochen@scram.de>
This commit is contained in:
committed by
Jean Delvare
parent
d2653e9273
commit
3760f73671
@@ -23,13 +23,7 @@
|
||||
#define PCA953X_INVERT 2
|
||||
#define PCA953X_DIRECTION 3
|
||||
|
||||
/* This is temporary - in 2.6.26 i2c_driver_data should replace it. */
|
||||
struct pca953x_desc {
|
||||
char name[I2C_NAME_SIZE];
|
||||
unsigned long driver_data;
|
||||
};
|
||||
|
||||
static const struct pca953x_desc pca953x_descs[] = {
|
||||
static const struct i2c_device_id pca953x_id[] = {
|
||||
{ "pca9534", 8, },
|
||||
{ "pca9535", 16, },
|
||||
{ "pca9536", 4, },
|
||||
@@ -37,7 +31,9 @@ static const struct pca953x_desc pca953x_descs[] = {
|
||||
{ "pca9538", 8, },
|
||||
{ "pca9539", 16, },
|
||||
/* REVISIT several pca955x parts should work here too */
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, pca953x_id);
|
||||
|
||||
struct pca953x_chip {
|
||||
unsigned gpio_start;
|
||||
@@ -193,26 +189,16 @@ static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
|
||||
}
|
||||
|
||||
static int __devinit pca953x_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *did)
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
struct pca953x_platform_data *pdata;
|
||||
struct pca953x_chip *chip;
|
||||
int ret, i;
|
||||
const struct pca953x_desc *id = NULL;
|
||||
|
||||
pdata = client->dev.platform_data;
|
||||
if (pdata == NULL)
|
||||
return -ENODEV;
|
||||
|
||||
/* this loop vanishes when we get i2c_device_id */
|
||||
for (i = 0; i < ARRAY_SIZE(pca953x_descs); i++)
|
||||
if (!strcmp(pca953x_descs[i].name, client->name)) {
|
||||
id = pca953x_descs + i;
|
||||
break;
|
||||
}
|
||||
if (!id)
|
||||
return -ENODEV;
|
||||
|
||||
chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
|
||||
if (chip == NULL)
|
||||
return -ENOMEM;
|
||||
@@ -292,6 +278,7 @@ static struct i2c_driver pca953x_driver = {
|
||||
},
|
||||
.probe = pca953x_probe,
|
||||
.remove = pca953x_remove,
|
||||
.id_table = pca953x_id,
|
||||
};
|
||||
|
||||
static int __init pca953x_init(void)
|
||||
|
@@ -26,6 +26,21 @@
|
||||
#include <asm/gpio.h>
|
||||
|
||||
|
||||
static const struct i2c_device_id pcf857x_id[] = {
|
||||
{ "pcf8574", 8 },
|
||||
{ "pca8574", 8 },
|
||||
{ "pca9670", 8 },
|
||||
{ "pca9672", 8 },
|
||||
{ "pca9674", 8 },
|
||||
{ "pcf8575", 16 },
|
||||
{ "pca8575", 16 },
|
||||
{ "pca9671", 16 },
|
||||
{ "pca9673", 16 },
|
||||
{ "pca9675", 16 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, pcf857x_id);
|
||||
|
||||
/*
|
||||
* The pcf857x, pca857x, and pca967x chips only expose one read and one
|
||||
* write register. Writing a "one" bit (to match the reset state) lets
|
||||
@@ -173,13 +188,8 @@ static int pcf857x_probe(struct i2c_client *client,
|
||||
*
|
||||
* NOTE: we don't distinguish here between *4 and *4a parts.
|
||||
*/
|
||||
if (strcmp(client->name, "pcf8574") == 0
|
||||
|| strcmp(client->name, "pca8574") == 0
|
||||
|| strcmp(client->name, "pca9670") == 0
|
||||
|| strcmp(client->name, "pca9672") == 0
|
||||
|| strcmp(client->name, "pca9674") == 0
|
||||
) {
|
||||
gpio->chip.ngpio = 8;
|
||||
gpio->chip.ngpio = id->driver_data;
|
||||
if (gpio->chip.ngpio == 8) {
|
||||
gpio->chip.direction_input = pcf857x_input8;
|
||||
gpio->chip.get = pcf857x_get8;
|
||||
gpio->chip.direction_output = pcf857x_output8;
|
||||
@@ -199,13 +209,7 @@ static int pcf857x_probe(struct i2c_client *client,
|
||||
*
|
||||
* NOTE: we don't distinguish here between '75 and '75c parts.
|
||||
*/
|
||||
} else if (strcmp(client->name, "pcf8575") == 0
|
||||
|| strcmp(client->name, "pca8575") == 0
|
||||
|| strcmp(client->name, "pca9671") == 0
|
||||
|| strcmp(client->name, "pca9673") == 0
|
||||
|| strcmp(client->name, "pca9675") == 0
|
||||
) {
|
||||
gpio->chip.ngpio = 16;
|
||||
} else if (gpio->chip.ngpio == 16) {
|
||||
gpio->chip.direction_input = pcf857x_input16;
|
||||
gpio->chip.get = pcf857x_get16;
|
||||
gpio->chip.direction_output = pcf857x_output16;
|
||||
@@ -314,6 +318,7 @@ static struct i2c_driver pcf857x_driver = {
|
||||
},
|
||||
.probe = pcf857x_probe,
|
||||
.remove = pcf857x_remove,
|
||||
.id_table = pcf857x_id,
|
||||
};
|
||||
|
||||
static int __init pcf857x_init(void)
|
||||
|
Reference in New Issue
Block a user