mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
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 <[email protected]> Cc: Jon Smirl <[email protected]> Cc: Jochen Friedrich <[email protected]>
This commit is contained in:
parent
d2653e9273
commit
3760f73671
43 changed files with 211 additions and 247 deletions
|
|
@ -99,45 +99,38 @@ struct ds1307 {
|
|||
};
|
||||
|
||||
struct chip_desc {
|
||||
char name[9];
|
||||
unsigned nvram56:1;
|
||||
unsigned alarm:1;
|
||||
enum ds_type type;
|
||||
};
|
||||
|
||||
static const struct chip_desc chips[] = { {
|
||||
.name = "ds1307",
|
||||
.type = ds_1307,
|
||||
static const struct chip_desc chips[] = {
|
||||
[ds_1307] = {
|
||||
.nvram56 = 1,
|
||||
}, {
|
||||
.name = "ds1337",
|
||||
.type = ds_1337,
|
||||
},
|
||||
[ds_1337] = {
|
||||
.alarm = 1,
|
||||
}, {
|
||||
.name = "ds1338",
|
||||
.type = ds_1338,
|
||||
},
|
||||
[ds_1338] = {
|
||||
.nvram56 = 1,
|
||||
}, {
|
||||
.name = "ds1339",
|
||||
.type = ds_1339,
|
||||
},
|
||||
[ds_1339] = {
|
||||
.alarm = 1,
|
||||
}, {
|
||||
.name = "ds1340",
|
||||
.type = ds_1340,
|
||||
}, {
|
||||
.name = "m41t00",
|
||||
.type = m41t00,
|
||||
},
|
||||
[ds_1340] = {
|
||||
},
|
||||
[m41t00] = {
|
||||
}, };
|
||||
|
||||
static inline const struct chip_desc *find_chip(const char *s)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(chips); i++)
|
||||
if (strnicmp(s, chips[i].name, sizeof chips[i].name) == 0)
|
||||
return &chips[i];
|
||||
return NULL;
|
||||
}
|
||||
static const struct i2c_device_id ds1307_id[] = {
|
||||
{ "ds1307", ds_1307 },
|
||||
{ "ds1337", ds_1337 },
|
||||
{ "ds1338", ds_1338 },
|
||||
{ "ds1339", ds_1339 },
|
||||
{ "ds1340", ds_1340 },
|
||||
{ "m41t00", m41t00 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, ds1307_id);
|
||||
|
||||
static int ds1307_get_time(struct device *dev, struct rtc_time *t)
|
||||
{
|
||||
|
|
@ -332,16 +325,9 @@ static int __devinit ds1307_probe(struct i2c_client *client,
|
|||
struct ds1307 *ds1307;
|
||||
int err = -ENODEV;
|
||||
int tmp;
|
||||
const struct chip_desc *chip;
|
||||
const struct chip_desc *chip = &chips[id->driver_data];
|
||||
struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
|
||||
|
||||
chip = find_chip(client->name);
|
||||
if (!chip) {
|
||||
dev_err(&client->dev, "unknown chip type '%s'\n",
|
||||
client->name);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!i2c_check_functionality(adapter,
|
||||
I2C_FUNC_I2C | I2C_FUNC_SMBUS_WRITE_BYTE_DATA))
|
||||
return -EIO;
|
||||
|
|
@ -362,7 +348,7 @@ static int __devinit ds1307_probe(struct i2c_client *client,
|
|||
ds1307->msg[1].len = sizeof(ds1307->regs);
|
||||
ds1307->msg[1].buf = ds1307->regs;
|
||||
|
||||
ds1307->type = chip->type;
|
||||
ds1307->type = id->driver_data;
|
||||
|
||||
switch (ds1307->type) {
|
||||
case ds_1337:
|
||||
|
|
@ -551,6 +537,7 @@ static struct i2c_driver ds1307_driver = {
|
|||
},
|
||||
.probe = ds1307_probe,
|
||||
.remove = __devexit_p(ds1307_remove),
|
||||
.id_table = ds1307_id,
|
||||
};
|
||||
|
||||
static int __init ds1307_init(void)
|
||||
|
|
|
|||
|
|
@ -41,6 +41,12 @@
|
|||
#define DS1374_REG_SR_AF 0x01 /* Alarm Flag */
|
||||
#define DS1374_REG_TCR 0x09 /* Trickle Charge */
|
||||
|
||||
static const struct i2c_device_id ds1374_id[] = {
|
||||
{ "rtc-ds1374", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, ds1374_id);
|
||||
|
||||
struct ds1374 {
|
||||
struct i2c_client *client;
|
||||
struct rtc_device *rtc;
|
||||
|
|
@ -430,6 +436,7 @@ static struct i2c_driver ds1374_driver = {
|
|||
},
|
||||
.probe = ds1374_probe,
|
||||
.remove = __devexit_p(ds1374_remove),
|
||||
.id_table = ds1374_id,
|
||||
};
|
||||
|
||||
static int __init ds1374_init(void)
|
||||
|
|
|
|||
|
|
@ -545,12 +545,19 @@ isl1208_remove(struct i2c_client *client)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct i2c_device_id isl1208_id[] = {
|
||||
{ "isl1208", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, isl1208_id);
|
||||
|
||||
static struct i2c_driver isl1208_driver = {
|
||||
.driver = {
|
||||
.name = "rtc-isl1208",
|
||||
},
|
||||
.probe = isl1208_probe,
|
||||
.remove = isl1208_remove,
|
||||
.id_table = isl1208_id,
|
||||
};
|
||||
|
||||
static int __init
|
||||
|
|
|
|||
|
|
@ -60,48 +60,21 @@
|
|||
|
||||
#define DRV_VERSION "0.05"
|
||||
|
||||
struct m41t80_chip_info {
|
||||
const char *name;
|
||||
u8 features;
|
||||
};
|
||||
|
||||
static const struct m41t80_chip_info m41t80_chip_info_tbl[] = {
|
||||
{
|
||||
.name = "m41t80",
|
||||
.features = 0,
|
||||
},
|
||||
{
|
||||
.name = "m41t81",
|
||||
.features = M41T80_FEATURE_HT,
|
||||
},
|
||||
{
|
||||
.name = "m41t81s",
|
||||
.features = M41T80_FEATURE_HT | M41T80_FEATURE_BL,
|
||||
},
|
||||
{
|
||||
.name = "m41t82",
|
||||
.features = M41T80_FEATURE_HT | M41T80_FEATURE_BL,
|
||||
},
|
||||
{
|
||||
.name = "m41t83",
|
||||
.features = M41T80_FEATURE_HT | M41T80_FEATURE_BL,
|
||||
},
|
||||
{
|
||||
.name = "m41st84",
|
||||
.features = M41T80_FEATURE_HT | M41T80_FEATURE_BL,
|
||||
},
|
||||
{
|
||||
.name = "m41st85",
|
||||
.features = M41T80_FEATURE_HT | M41T80_FEATURE_BL,
|
||||
},
|
||||
{
|
||||
.name = "m41st87",
|
||||
.features = M41T80_FEATURE_HT | M41T80_FEATURE_BL,
|
||||
},
|
||||
static const struct i2c_device_id m41t80_id[] = {
|
||||
{ "m41t80", 0 },
|
||||
{ "m41t81", M41T80_FEATURE_HT },
|
||||
{ "m41t81s", M41T80_FEATURE_HT | M41T80_FEATURE_BL },
|
||||
{ "m41t82", M41T80_FEATURE_HT | M41T80_FEATURE_BL },
|
||||
{ "m41t83", M41T80_FEATURE_HT | M41T80_FEATURE_BL },
|
||||
{ "m41st84", M41T80_FEATURE_HT | M41T80_FEATURE_BL },
|
||||
{ "m41st85", M41T80_FEATURE_HT | M41T80_FEATURE_BL },
|
||||
{ "m41st87", M41T80_FEATURE_HT | M41T80_FEATURE_BL },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, m41t80_id);
|
||||
|
||||
struct m41t80_data {
|
||||
const struct m41t80_chip_info *chip;
|
||||
u8 features;
|
||||
struct rtc_device *rtc;
|
||||
};
|
||||
|
||||
|
|
@ -208,7 +181,7 @@ static int m41t80_rtc_proc(struct device *dev, struct seq_file *seq)
|
|||
struct m41t80_data *clientdata = i2c_get_clientdata(client);
|
||||
u8 reg;
|
||||
|
||||
if (clientdata->chip->features & M41T80_FEATURE_BL) {
|
||||
if (clientdata->features & M41T80_FEATURE_BL) {
|
||||
reg = i2c_smbus_read_byte_data(client, M41T80_REG_FLAGS);
|
||||
seq_printf(seq, "battery\t\t: %s\n",
|
||||
(reg & M41T80_FLAGS_BATT_LOW) ? "exhausted" : "ok");
|
||||
|
|
@ -759,10 +732,9 @@ static struct notifier_block wdt_notifier = {
|
|||
static int m41t80_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
int i, rc = 0;
|
||||
int rc = 0;
|
||||
struct rtc_device *rtc = NULL;
|
||||
struct rtc_time tm;
|
||||
const struct m41t80_chip_info *chip;
|
||||
struct m41t80_data *clientdata = NULL;
|
||||
|
||||
if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C
|
||||
|
|
@ -774,19 +746,6 @@ static int m41t80_probe(struct i2c_client *client,
|
|||
dev_info(&client->dev,
|
||||
"chip found, driver version " DRV_VERSION "\n");
|
||||
|
||||
chip = NULL;
|
||||
for (i = 0; i < ARRAY_SIZE(m41t80_chip_info_tbl); i++) {
|
||||
if (!strcmp(m41t80_chip_info_tbl[i].name, client->name)) {
|
||||
chip = &m41t80_chip_info_tbl[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!chip) {
|
||||
dev_err(&client->dev, "%s is not supported\n", client->name);
|
||||
rc = -ENODEV;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
clientdata = kzalloc(sizeof(*clientdata), GFP_KERNEL);
|
||||
if (!clientdata) {
|
||||
rc = -ENOMEM;
|
||||
|
|
@ -802,7 +761,7 @@ static int m41t80_probe(struct i2c_client *client,
|
|||
}
|
||||
|
||||
clientdata->rtc = rtc;
|
||||
clientdata->chip = chip;
|
||||
clientdata->features = id->driver_data;
|
||||
i2c_set_clientdata(client, clientdata);
|
||||
|
||||
/* Make sure HT (Halt Update) bit is cleared */
|
||||
|
|
@ -811,7 +770,7 @@ static int m41t80_probe(struct i2c_client *client,
|
|||
goto ht_err;
|
||||
|
||||
if (rc & M41T80_ALHOUR_HT) {
|
||||
if (chip->features & M41T80_FEATURE_HT) {
|
||||
if (clientdata->features & M41T80_FEATURE_HT) {
|
||||
m41t80_get_datetime(client, &tm);
|
||||
dev_info(&client->dev, "HT bit was set!\n");
|
||||
dev_info(&client->dev,
|
||||
|
|
@ -843,7 +802,7 @@ static int m41t80_probe(struct i2c_client *client,
|
|||
goto exit;
|
||||
|
||||
#ifdef CONFIG_RTC_DRV_M41T80_WDT
|
||||
if (chip->features & M41T80_FEATURE_HT) {
|
||||
if (clientdata->features & M41T80_FEATURE_HT) {
|
||||
rc = misc_register(&wdt_dev);
|
||||
if (rc)
|
||||
goto exit;
|
||||
|
|
@ -879,7 +838,7 @@ static int m41t80_remove(struct i2c_client *client)
|
|||
struct rtc_device *rtc = clientdata->rtc;
|
||||
|
||||
#ifdef CONFIG_RTC_DRV_M41T80_WDT
|
||||
if (clientdata->chip->features & M41T80_FEATURE_HT) {
|
||||
if (clientdata->features & M41T80_FEATURE_HT) {
|
||||
misc_deregister(&wdt_dev);
|
||||
unregister_reboot_notifier(&wdt_notifier);
|
||||
}
|
||||
|
|
@ -897,6 +856,7 @@ static struct i2c_driver m41t80_driver = {
|
|||
},
|
||||
.probe = m41t80_probe,
|
||||
.remove = m41t80_remove,
|
||||
.id_table = m41t80_id,
|
||||
};
|
||||
|
||||
static int __init m41t80_rtc_init(void)
|
||||
|
|
|
|||
|
|
@ -300,12 +300,19 @@ static int pcf8563_remove(struct i2c_client *client)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct i2c_device_id pcf8563_id[] = {
|
||||
{ "pcf8563", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, pcf8563_id);
|
||||
|
||||
static struct i2c_driver pcf8563_driver = {
|
||||
.driver = {
|
||||
.name = "rtc-pcf8563",
|
||||
},
|
||||
.probe = pcf8563_probe,
|
||||
.remove = pcf8563_remove,
|
||||
.id_table = pcf8563_id,
|
||||
};
|
||||
|
||||
static int __init pcf8563_init(void)
|
||||
|
|
|
|||
|
|
@ -69,6 +69,15 @@ enum rtc_type {
|
|||
rtc_rv5c387a,
|
||||
};
|
||||
|
||||
static const struct i2c_device_id rs5c372_id[] = {
|
||||
{ "rs5c372a", rtc_rs5c372a },
|
||||
{ "rs5c372b", rtc_rs5c372b },
|
||||
{ "rv5c386", rtc_rv5c386 },
|
||||
{ "rv5c387a", rtc_rv5c387a },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, rs5c372_id);
|
||||
|
||||
/* REVISIT: this assumes that:
|
||||
* - we're in the 21st century, so it's safe to ignore the century
|
||||
* bit for rv5c38[67] (REG_MONTH bit 7);
|
||||
|
|
@ -515,6 +524,7 @@ static int rs5c372_probe(struct i2c_client *client,
|
|||
|
||||
rs5c372->client = client;
|
||||
i2c_set_clientdata(client, rs5c372);
|
||||
rs5c372->type = id->driver_data;
|
||||
|
||||
/* we read registers 0x0f then 0x00-0x0f; skip the first one */
|
||||
rs5c372->regs = &rs5c372->buf[1];
|
||||
|
|
@ -523,19 +533,6 @@ static int rs5c372_probe(struct i2c_client *client,
|
|||
if (err < 0)
|
||||
goto exit_kfree;
|
||||
|
||||
if (strcmp(client->name, "rs5c372a") == 0)
|
||||
rs5c372->type = rtc_rs5c372a;
|
||||
else if (strcmp(client->name, "rs5c372b") == 0)
|
||||
rs5c372->type = rtc_rs5c372b;
|
||||
else if (strcmp(client->name, "rv5c386") == 0)
|
||||
rs5c372->type = rtc_rv5c386;
|
||||
else if (strcmp(client->name, "rv5c387a") == 0)
|
||||
rs5c372->type = rtc_rv5c387a;
|
||||
else {
|
||||
rs5c372->type = rtc_rs5c372b;
|
||||
dev_warn(&client->dev, "assuming rs5c372b\n");
|
||||
}
|
||||
|
||||
/* clock may be set for am/pm or 24 hr time */
|
||||
switch (rs5c372->type) {
|
||||
case rtc_rs5c372a:
|
||||
|
|
@ -652,6 +649,7 @@ static struct i2c_driver rs5c372_driver = {
|
|||
},
|
||||
.probe = rs5c372_probe,
|
||||
.remove = rs5c372_remove,
|
||||
.id_table = rs5c372_id,
|
||||
};
|
||||
|
||||
static __init int rs5c372_init(void)
|
||||
|
|
|
|||
|
|
@ -34,6 +34,12 @@
|
|||
#define S35390A_FLAG_RESET 0x80
|
||||
#define S35390A_FLAG_TEST 0x01
|
||||
|
||||
static const struct i2c_device_id s35390a_id[] = {
|
||||
{ "s35390a", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, s35390a_id);
|
||||
|
||||
struct s35390a {
|
||||
struct i2c_client *client[8];
|
||||
struct rtc_device *rtc;
|
||||
|
|
@ -297,6 +303,7 @@ static struct i2c_driver s35390a_driver = {
|
|||
},
|
||||
.probe = s35390a_probe,
|
||||
.remove = s35390a_remove,
|
||||
.id_table = s35390a_id,
|
||||
};
|
||||
|
||||
static int __init s35390a_rtc_init(void)
|
||||
|
|
|
|||
|
|
@ -553,12 +553,19 @@ static int x1205_remove(struct i2c_client *client)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct i2c_device_id x1205_id[] = {
|
||||
{ "x1205", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, x1205_id);
|
||||
|
||||
static struct i2c_driver x1205_driver = {
|
||||
.driver = {
|
||||
.name = "rtc-x1205",
|
||||
},
|
||||
.probe = x1205_probe,
|
||||
.remove = x1205_remove,
|
||||
.id_table = x1205_id,
|
||||
};
|
||||
|
||||
static int __init x1205_init(void)
|
||||
|
|
|
|||
Loading…
Reference in a new issue