Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aa9bcdda authored by Guenter Roeck's avatar Guenter Roeck
Browse files

hwmon: (lm70) Convert to use devm_hwmon_device_register_with_groups



Use devm_hwmon_device_register_with_groups API to attach attributes
to hwmon device, simplify code, and reduce code size.

Reviewed-by: default avatarJean Delvare <jdelvare@suse.de>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 4b660a7f
Loading
Loading
Loading
Loading
+14 −48
Original line number Diff line number Diff line
@@ -47,7 +47,7 @@
#define LM70_CHIP_LM74		3	/* NS LM74 */

struct lm70 {
	struct device *hwmon_dev;
	struct spi_device *spi;
	struct mutex lock;
	unsigned int chip;
};
@@ -56,11 +56,11 @@ struct lm70 {
static ssize_t lm70_sense_temp(struct device *dev,
		struct device_attribute *attr, char *buf)
{
	struct spi_device *spi = to_spi_device(dev);
	struct lm70 *p_lm70 = dev_get_drvdata(dev);
	struct spi_device *spi = p_lm70->spi;
	int status, val = 0;
	u8 rxbuf[2];
	s16 raw = 0;
	struct lm70 *p_lm70 = spi_get_drvdata(spi);

	if (mutex_lock_interruptible(&p_lm70->lock))
		return -ERESTARTSYS;
@@ -121,21 +121,20 @@ static ssize_t lm70_sense_temp(struct device *dev,

static DEVICE_ATTR(temp1_input, S_IRUGO, lm70_sense_temp, NULL);

static ssize_t lm70_show_name(struct device *dev, struct device_attribute
			      *devattr, char *buf)
{
	return sprintf(buf, "%s\n", to_spi_device(dev)->modalias);
}
static struct attribute *lm70_attrs[] = {
	&dev_attr_temp1_input.attr,
	NULL
};

static DEVICE_ATTR(name, S_IRUGO, lm70_show_name, NULL);
ATTRIBUTE_GROUPS(lm70);

/*----------------------------------------------------------------------*/

static int lm70_probe(struct spi_device *spi)
{
	int chip = spi_get_device_id(spi)->driver_data;
	struct device *hwmon_dev;
	struct lm70 *p_lm70;
	int status;

	/* signaling is SPI_MODE_0 */
	if (spi->mode & (SPI_CPOL | SPI_CPHA))
@@ -149,46 +148,14 @@ static int lm70_probe(struct spi_device *spi)

	mutex_init(&p_lm70->lock);
	p_lm70->chip = chip;
	p_lm70->spi = spi;

	spi_set_drvdata(spi, p_lm70);

	status = device_create_file(&spi->dev, &dev_attr_temp1_input);
	if (status)
		goto out_dev_create_temp_file_failed;
	status = device_create_file(&spi->dev, &dev_attr_name);
	if (status)
		goto out_dev_create_file_failed;

	/* sysfs hook */
	p_lm70->hwmon_dev = hwmon_device_register(&spi->dev);
	if (IS_ERR(p_lm70->hwmon_dev)) {
		dev_dbg(&spi->dev, "hwmon_device_register failed.\n");
		status = PTR_ERR(p_lm70->hwmon_dev);
		goto out_dev_reg_failed;
	hwmon_dev = devm_hwmon_device_register_with_groups(&spi->dev,
							   spi->modalias,
							   p_lm70, lm70_groups);
	return PTR_ERR_OR_ZERO(hwmon_dev);
}

	return 0;

out_dev_reg_failed:
	device_remove_file(&spi->dev, &dev_attr_name);
out_dev_create_file_failed:
	device_remove_file(&spi->dev, &dev_attr_temp1_input);
out_dev_create_temp_file_failed:
	return status;
}

static int lm70_remove(struct spi_device *spi)
{
	struct lm70 *p_lm70 = spi_get_drvdata(spi);

	hwmon_device_unregister(p_lm70->hwmon_dev);
	device_remove_file(&spi->dev, &dev_attr_temp1_input);
	device_remove_file(&spi->dev, &dev_attr_name);

	return 0;
}


static const struct spi_device_id lm70_ids[] = {
	{ "lm70",   LM70_CHIP_LM70 },
	{ "tmp121", LM70_CHIP_TMP121 },
@@ -205,7 +172,6 @@ static struct spi_driver lm70_driver = {
	},
	.id_table = lm70_ids,
	.probe	= lm70_probe,
	.remove	= lm70_remove,
};

module_spi_driver(lm70_driver);