Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 258889
b: refs/heads/master
c: ed4cebd
h: refs/heads/master
i:
  258887: 6bf548c
v: v3
  • Loading branch information
Jean Delvare authored and Jean Delvare committed Jul 25, 2011
1 parent 5f12f7a commit f04f8fa
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 108 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e9b6e9f3d4c58f76da8ec8286c7b901af8575f5b
refs/heads/master: ed4cebdf9cfbf5f97f388ae7f2ac2b24fc362a39
205 changes: 98 additions & 107 deletions trunk/drivers/hwmon/lm78.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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;

/* 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);
static const struct i2c_device_id lm78_i2c_id[] = {
{ "lm78", lm78 },
{ "lm79", lm79 },
{ }
};
MODULE_DEVICE_TABLE(i2c, lm78_i2c_id);

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
Expand Down Expand Up @@ -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)
{
Expand Down

0 comments on commit f04f8fa

Please sign in to comment.