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:
parent
e9b6e9f3d4
commit
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_read_value(struct lm78_data *data, u8 reg);
|
||||||
static int lm78_write_value(struct lm78_data *data, u8 reg, u8 value);
|
static int lm78_write_value(struct lm78_data *data, u8 reg, u8 value);
|
||||||
static struct lm78_data *lm78_update_device(struct device *dev);
|
static struct lm78_data *lm78_update_device(struct device *dev);
|
||||||
static void lm78_init_device(struct lm78_data *data);
|
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 */
|
/* 7 Voltages */
|
||||||
static ssize_t show_in(struct device *dev, struct device_attribute *da,
|
static ssize_t show_in(struct device *dev, struct device_attribute *da,
|
||||||
char *buf)
|
char *buf)
|
||||||
|
@ -663,76 +625,24 @@ static int lm78_i2c_remove(struct i2c_client *client)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __devinit lm78_isa_probe(struct platform_device *pdev)
|
static const struct i2c_device_id lm78_i2c_id[] = {
|
||||||
{
|
{ "lm78", lm78 },
|
||||||
int err;
|
{ "lm79", lm79 },
|
||||||
struct lm78_data *data;
|
{ }
|
||||||
struct resource *res;
|
};
|
||||||
|
MODULE_DEVICE_TABLE(i2c, lm78_i2c_id);
|
||||||
|
|
||||||
/* Reserve the ISA region */
|
static struct i2c_driver lm78_driver = {
|
||||||
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
.class = I2C_CLASS_HWMON,
|
||||||
if (!request_region(res->start + LM78_ADDR_REG_OFFSET, 2, "lm78")) {
|
.driver = {
|
||||||
err = -EBUSY;
|
.name = "lm78",
|
||||||
goto exit;
|
},
|
||||||
}
|
.probe = lm78_i2c_probe,
|
||||||
|
.remove = lm78_i2c_remove,
|
||||||
if (!(data = kzalloc(sizeof(struct lm78_data), GFP_KERNEL))) {
|
.id_table = lm78_i2c_id,
|
||||||
err = -ENOMEM;
|
.detect = lm78_i2c_detect,
|
||||||
goto exit_release_region;
|
.address_list = normal_i2c,
|
||||||
}
|
};
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The SMBus locks itself, but ISA access must be locked explicitly!
|
/* 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
|
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;
|
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 */
|
/* return 1 if a supported chip is found, 0 otherwise */
|
||||||
static int __init lm78_isa_found(unsigned short address)
|
static int __init lm78_isa_found(unsigned short address)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue