Commit 985addc1 authored by Dmitry Torokhov's avatar Dmitry Torokhov

Input: adxl34x - switch to using managed resources

Switch the driver to use managed resources to simplify error handling.

Link: https://lore.kernel.org/r/20240610164301.1048482-3-dmitry.torokhov@gmail.comSigned-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 8f275fc7
...@@ -98,13 +98,6 @@ static int adxl34x_i2c_probe(struct i2c_client *client) ...@@ -98,13 +98,6 @@ static int adxl34x_i2c_probe(struct i2c_client *client)
return 0; return 0;
} }
static void adxl34x_i2c_remove(struct i2c_client *client)
{
struct adxl34x *ac = i2c_get_clientdata(client);
adxl34x_remove(ac);
}
static const struct i2c_device_id adxl34x_id[] = { static const struct i2c_device_id adxl34x_id[] = {
{ "adxl34x" }, { "adxl34x" },
{ } { }
...@@ -137,7 +130,6 @@ static struct i2c_driver adxl34x_driver = { ...@@ -137,7 +130,6 @@ static struct i2c_driver adxl34x_driver = {
.of_match_table = adxl34x_of_id, .of_match_table = adxl34x_of_id,
}, },
.probe = adxl34x_i2c_probe, .probe = adxl34x_i2c_probe,
.remove = adxl34x_i2c_remove,
.id_table = adxl34x_id, .id_table = adxl34x_id,
}; };
......
...@@ -87,13 +87,6 @@ static int adxl34x_spi_probe(struct spi_device *spi) ...@@ -87,13 +87,6 @@ static int adxl34x_spi_probe(struct spi_device *spi)
return 0; return 0;
} }
static void adxl34x_spi_remove(struct spi_device *spi)
{
struct adxl34x *ac = spi_get_drvdata(spi);
adxl34x_remove(ac);
}
static struct spi_driver adxl34x_driver = { static struct spi_driver adxl34x_driver = {
.driver = { .driver = {
.name = "adxl34x", .name = "adxl34x",
...@@ -101,7 +94,6 @@ static struct spi_driver adxl34x_driver = { ...@@ -101,7 +94,6 @@ static struct spi_driver adxl34x_driver = {
.pm = pm_sleep_ptr(&adxl34x_pm), .pm = pm_sleep_ptr(&adxl34x_pm),
}, },
.probe = adxl34x_spi_probe, .probe = adxl34x_spi_probe,
.remove = adxl34x_spi_remove,
}; };
module_spi_driver(adxl34x_driver); module_spi_driver(adxl34x_driver);
......
...@@ -707,21 +707,21 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq, ...@@ -707,21 +707,21 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq,
struct adxl34x *ac; struct adxl34x *ac;
struct input_dev *input_dev; struct input_dev *input_dev;
const struct adxl34x_platform_data *pdata; const struct adxl34x_platform_data *pdata;
int err, range, i; int error, range, i;
int revid; int revid;
if (!irq) { if (!irq) {
dev_err(dev, "no IRQ?\n"); dev_err(dev, "no IRQ?\n");
err = -ENODEV; return ERR_PTR(-ENODEV);
goto err_out;
} }
ac = kzalloc(sizeof(*ac), GFP_KERNEL); ac = devm_kzalloc(dev, sizeof(*ac), GFP_KERNEL);
input_dev = input_allocate_device(); if (!ac)
if (!ac || !input_dev) { return ERR_PTR(-ENOMEM);
err = -ENOMEM;
goto err_free_mem; input_dev = devm_input_allocate_device(dev);
} if (!input_dev)
return ERR_PTR(-ENOMEM);
ac->fifo_delay = fifo_delay_default; ac->fifo_delay = fifo_delay_default;
...@@ -754,14 +754,12 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq, ...@@ -754,14 +754,12 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq,
break; break;
default: default:
dev_err(dev, "Failed to probe %s\n", input_dev->name); dev_err(dev, "Failed to probe %s\n", input_dev->name);
err = -ENODEV; return ERR_PTR(-ENODEV);
goto err_free_mem;
} }
snprintf(ac->phys, sizeof(ac->phys), "%s/input0", dev_name(dev)); snprintf(ac->phys, sizeof(ac->phys), "%s/input0", dev_name(dev));
input_dev->phys = ac->phys; input_dev->phys = ac->phys;
input_dev->dev.parent = dev;
input_dev->id.product = ac->model; input_dev->id.product = ac->model;
input_dev->id.bustype = bops->bustype; input_dev->id.bustype = bops->bustype;
input_dev->open = adxl34x_input_open; input_dev->open = adxl34x_input_open;
...@@ -816,16 +814,16 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq, ...@@ -816,16 +814,16 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq,
AC_WRITE(ac, POWER_CTL, 0); AC_WRITE(ac, POWER_CTL, 0);
err = request_threaded_irq(ac->irq, NULL, adxl34x_irq, error = devm_request_threaded_irq(dev, ac->irq, NULL, adxl34x_irq,
IRQF_ONESHOT, dev_name(dev), ac); IRQF_ONESHOT, dev_name(dev), ac);
if (err) { if (error) {
dev_err(dev, "irq %d busy?\n", ac->irq); dev_err(dev, "irq %d busy?\n", ac->irq);
goto err_free_mem; return ERR_PTR(error);
} }
err = input_register_device(input_dev); error = input_register_device(input_dev);
if (err) if (error)
goto err_free_irq; return ERR_PTR(error);
AC_WRITE(ac, OFSX, pdata->x_axis_offset); AC_WRITE(ac, OFSX, pdata->x_axis_offset);
ac->hwcal.x = pdata->x_axis_offset; ac->hwcal.x = pdata->x_axis_offset;
...@@ -884,26 +882,9 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq, ...@@ -884,26 +882,9 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq,
ac->pdata.power_mode &= (PCTL_AUTO_SLEEP | PCTL_LINK); ac->pdata.power_mode &= (PCTL_AUTO_SLEEP | PCTL_LINK);
return ac; return ac;
err_free_irq:
free_irq(ac->irq, ac);
err_free_mem:
input_free_device(input_dev);
kfree(ac);
err_out:
return ERR_PTR(err);
} }
EXPORT_SYMBOL_GPL(adxl34x_probe); EXPORT_SYMBOL_GPL(adxl34x_probe);
void adxl34x_remove(struct adxl34x *ac)
{
free_irq(ac->irq, ac);
input_unregister_device(ac->input);
dev_dbg(ac->dev, "unregistered accelerometer\n");
kfree(ac);
}
EXPORT_SYMBOL_GPL(adxl34x_remove);
EXPORT_GPL_SIMPLE_DEV_PM_OPS(adxl34x_pm, adxl34x_suspend, adxl34x_resume); EXPORT_GPL_SIMPLE_DEV_PM_OPS(adxl34x_pm, adxl34x_suspend, adxl34x_resume);
MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
......
...@@ -23,7 +23,6 @@ struct adxl34x_bus_ops { ...@@ -23,7 +23,6 @@ struct adxl34x_bus_ops {
struct adxl34x *adxl34x_probe(struct device *dev, int irq, struct adxl34x *adxl34x_probe(struct device *dev, int irq,
bool fifo_delay_default, bool fifo_delay_default,
const struct adxl34x_bus_ops *bops); const struct adxl34x_bus_ops *bops);
void adxl34x_remove(struct adxl34x *ac);
extern const struct dev_pm_ops adxl34x_pm; extern const struct dev_pm_ops adxl34x_pm;
extern const struct attribute_group *adxl34x_groups[]; extern const struct attribute_group *adxl34x_groups[];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment