hwmon: (lm78) Avoid forward declarations
Move code around to avoid several forward declarations. Also group ISA-related functions together, to make future changes easier. Signed-off-by: Jean Delvare <khali@linux-fr.org> Cc: Dean Nelson <dnelson@redhat.com>
This commit is contained in:
Родитель
e9b6e9f3d4
Коммит
ed4cebdf9c
|
@ -143,50 +143,12 @@ struct lm78_data {
|
|||
};
|
||||
|
||||
|
||||
static int lm78_i2c_detect(struct i2c_client *client,
|
||||
struct i2c_board_info *info);
|
||||
static int lm78_i2c_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id);
|
||||
static int lm78_i2c_remove(struct i2c_client *client);
|
||||
|
||||
static int __devinit lm78_isa_probe(struct platform_device *pdev);
|
||||
static int __devexit lm78_isa_remove(struct platform_device *pdev);
|
||||
|
||||
static int lm78_read_value(struct lm78_data *data, u8 reg);
|
||||
static int lm78_write_value(struct lm78_data *data, u8 reg, u8 value);
|
||||
static struct lm78_data *lm78_update_device(struct device *dev);
|
||||
static void lm78_init_device(struct lm78_data *data);
|
||||
|
||||
|
||||
static const struct i2c_device_id lm78_i2c_id[] = {
|
||||
{ "lm78", lm78 },
|
||||
{ "lm79", lm79 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, lm78_i2c_id);
|
||||
|
||||
static struct i2c_driver lm78_driver = {
|
||||
.class = I2C_CLASS_HWMON,
|
||||
.driver = {
|
||||
.name = "lm78",
|
||||
},
|
||||
.probe = lm78_i2c_probe,
|
||||
.remove = lm78_i2c_remove,
|
||||
.id_table = lm78_i2c_id,
|
||||
.detect = lm78_i2c_detect,
|
||||
.address_list = normal_i2c,
|
||||
};
|
||||
|
||||
static struct platform_driver lm78_isa_driver = {
|
||||
.driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "lm78",
|
||||
},
|
||||
.probe = lm78_isa_probe,
|
||||
.remove = __devexit_p(lm78_isa_remove),
|
||||
};
|
||||
|
||||
|
||||
/* 7 Voltages */
|
||||
static ssize_t show_in(struct device *dev, struct device_attribute *da,
|
||||
char *buf)
|
||||
|
@ -663,76 +625,24 @@ static int lm78_i2c_remove(struct i2c_client *client)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int __devinit lm78_isa_probe(struct platform_device *pdev)
|
||||
{
|
||||
int err;
|
||||
struct lm78_data *data;
|
||||
struct resource *res;
|
||||
static const struct i2c_device_id lm78_i2c_id[] = {
|
||||
{ "lm78", lm78 },
|
||||
{ "lm79", lm79 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, lm78_i2c_id);
|
||||
|
||||
/* Reserve the ISA region */
|
||||
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
||||
if (!request_region(res->start + LM78_ADDR_REG_OFFSET, 2, "lm78")) {
|
||||
err = -EBUSY;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!(data = kzalloc(sizeof(struct lm78_data), GFP_KERNEL))) {
|
||||
err = -ENOMEM;
|
||||
goto exit_release_region;
|
||||
}
|
||||
mutex_init(&data->lock);
|
||||
data->isa_addr = res->start;
|
||||
platform_set_drvdata(pdev, data);
|
||||
|
||||
if (lm78_read_value(data, LM78_REG_CHIPID) & 0x80) {
|
||||
data->type = lm79;
|
||||
data->name = "lm79";
|
||||
} else {
|
||||
data->type = lm78;
|
||||
data->name = "lm78";
|
||||
}
|
||||
|
||||
/* Initialize the LM78 chip */
|
||||
lm78_init_device(data);
|
||||
|
||||
/* Register sysfs hooks */
|
||||
if ((err = sysfs_create_group(&pdev->dev.kobj, &lm78_group))
|
||||
|| (err = device_create_file(&pdev->dev, &dev_attr_name)))
|
||||
goto exit_remove_files;
|
||||
|
||||
data->hwmon_dev = hwmon_device_register(&pdev->dev);
|
||||
if (IS_ERR(data->hwmon_dev)) {
|
||||
err = PTR_ERR(data->hwmon_dev);
|
||||
goto exit_remove_files;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
exit_remove_files:
|
||||
sysfs_remove_group(&pdev->dev.kobj, &lm78_group);
|
||||
device_remove_file(&pdev->dev, &dev_attr_name);
|
||||
kfree(data);
|
||||
exit_release_region:
|
||||
release_region(res->start + LM78_ADDR_REG_OFFSET, 2);
|
||||
exit:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __devexit lm78_isa_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct lm78_data *data = platform_get_drvdata(pdev);
|
||||
struct resource *res;
|
||||
|
||||
hwmon_device_unregister(data->hwmon_dev);
|
||||
sysfs_remove_group(&pdev->dev.kobj, &lm78_group);
|
||||
device_remove_file(&pdev->dev, &dev_attr_name);
|
||||
kfree(data);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
||||
release_region(res->start + LM78_ADDR_REG_OFFSET, 2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static struct i2c_driver lm78_driver = {
|
||||
.class = I2C_CLASS_HWMON,
|
||||
.driver = {
|
||||
.name = "lm78",
|
||||
},
|
||||
.probe = lm78_i2c_probe,
|
||||
.remove = lm78_i2c_remove,
|
||||
.id_table = lm78_i2c_id,
|
||||
.detect = lm78_i2c_detect,
|
||||
.address_list = normal_i2c,
|
||||
};
|
||||
|
||||
/* The SMBus locks itself, but ISA access must be locked explicitly!
|
||||
We don't want to lock the whole ISA bus, so we lock each client
|
||||
|
@ -849,6 +759,87 @@ static struct lm78_data *lm78_update_device(struct device *dev)
|
|||
return data;
|
||||
}
|
||||
|
||||
static int __devinit lm78_isa_probe(struct platform_device *pdev)
|
||||
{
|
||||
int err;
|
||||
struct lm78_data *data;
|
||||
struct resource *res;
|
||||
|
||||
/* Reserve the ISA region */
|
||||
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
||||
if (!request_region(res->start + LM78_ADDR_REG_OFFSET, 2, "lm78")) {
|
||||
err = -EBUSY;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
data = kzalloc(sizeof(struct lm78_data), GFP_KERNEL);
|
||||
if (!data) {
|
||||
err = -ENOMEM;
|
||||
goto exit_release_region;
|
||||
}
|
||||
mutex_init(&data->lock);
|
||||
data->isa_addr = res->start;
|
||||
platform_set_drvdata(pdev, data);
|
||||
|
||||
if (lm78_read_value(data, LM78_REG_CHIPID) & 0x80) {
|
||||
data->type = lm79;
|
||||
data->name = "lm79";
|
||||
} else {
|
||||
data->type = lm78;
|
||||
data->name = "lm78";
|
||||
}
|
||||
|
||||
/* Initialize the LM78 chip */
|
||||
lm78_init_device(data);
|
||||
|
||||
/* Register sysfs hooks */
|
||||
if ((err = sysfs_create_group(&pdev->dev.kobj, &lm78_group))
|
||||
|| (err = device_create_file(&pdev->dev, &dev_attr_name)))
|
||||
goto exit_remove_files;
|
||||
|
||||
data->hwmon_dev = hwmon_device_register(&pdev->dev);
|
||||
if (IS_ERR(data->hwmon_dev)) {
|
||||
err = PTR_ERR(data->hwmon_dev);
|
||||
goto exit_remove_files;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
exit_remove_files:
|
||||
sysfs_remove_group(&pdev->dev.kobj, &lm78_group);
|
||||
device_remove_file(&pdev->dev, &dev_attr_name);
|
||||
kfree(data);
|
||||
exit_release_region:
|
||||
release_region(res->start + LM78_ADDR_REG_OFFSET, 2);
|
||||
exit:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int __devexit lm78_isa_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct lm78_data *data = platform_get_drvdata(pdev);
|
||||
struct resource *res;
|
||||
|
||||
hwmon_device_unregister(data->hwmon_dev);
|
||||
sysfs_remove_group(&pdev->dev.kobj, &lm78_group);
|
||||
device_remove_file(&pdev->dev, &dev_attr_name);
|
||||
kfree(data);
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
||||
release_region(res->start + LM78_ADDR_REG_OFFSET, 2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver lm78_isa_driver = {
|
||||
.driver = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "lm78",
|
||||
},
|
||||
.probe = lm78_isa_probe,
|
||||
.remove = __devexit_p(lm78_isa_remove),
|
||||
};
|
||||
|
||||
/* return 1 if a supported chip is found, 0 otherwise */
|
||||
static int __init lm78_isa_found(unsigned short address)
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче