mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
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.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
8f275fc73d
commit
985addc133
@ -98,13 +98,6 @@ static int adxl34x_i2c_probe(struct i2c_client *client)
|
||||
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[] = {
|
||||
{ "adxl34x" },
|
||||
{ }
|
||||
@ -137,7 +130,6 @@ static struct i2c_driver adxl34x_driver = {
|
||||
.of_match_table = adxl34x_of_id,
|
||||
},
|
||||
.probe = adxl34x_i2c_probe,
|
||||
.remove = adxl34x_i2c_remove,
|
||||
.id_table = adxl34x_id,
|
||||
};
|
||||
|
||||
|
@ -87,13 +87,6 @@ static int adxl34x_spi_probe(struct spi_device *spi)
|
||||
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 = {
|
||||
.driver = {
|
||||
.name = "adxl34x",
|
||||
@ -101,7 +94,6 @@ static struct spi_driver adxl34x_driver = {
|
||||
.pm = pm_sleep_ptr(&adxl34x_pm),
|
||||
},
|
||||
.probe = adxl34x_spi_probe,
|
||||
.remove = adxl34x_spi_remove,
|
||||
};
|
||||
|
||||
module_spi_driver(adxl34x_driver);
|
||||
|
@ -707,21 +707,21 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq,
|
||||
struct adxl34x *ac;
|
||||
struct input_dev *input_dev;
|
||||
const struct adxl34x_platform_data *pdata;
|
||||
int err, range, i;
|
||||
int error, range, i;
|
||||
int revid;
|
||||
|
||||
if (!irq) {
|
||||
dev_err(dev, "no IRQ?\n");
|
||||
err = -ENODEV;
|
||||
goto err_out;
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
ac = kzalloc(sizeof(*ac), GFP_KERNEL);
|
||||
input_dev = input_allocate_device();
|
||||
if (!ac || !input_dev) {
|
||||
err = -ENOMEM;
|
||||
goto err_free_mem;
|
||||
}
|
||||
ac = devm_kzalloc(dev, sizeof(*ac), GFP_KERNEL);
|
||||
if (!ac)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
input_dev = devm_input_allocate_device(dev);
|
||||
if (!input_dev)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
ac->fifo_delay = fifo_delay_default;
|
||||
|
||||
@ -754,14 +754,12 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq,
|
||||
break;
|
||||
default:
|
||||
dev_err(dev, "Failed to probe %s\n", input_dev->name);
|
||||
err = -ENODEV;
|
||||
goto err_free_mem;
|
||||
return ERR_PTR(-ENODEV);
|
||||
}
|
||||
|
||||
snprintf(ac->phys, sizeof(ac->phys), "%s/input0", dev_name(dev));
|
||||
|
||||
input_dev->phys = ac->phys;
|
||||
input_dev->dev.parent = dev;
|
||||
input_dev->id.product = ac->model;
|
||||
input_dev->id.bustype = bops->bustype;
|
||||
input_dev->open = adxl34x_input_open;
|
||||
@ -816,16 +814,16 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq,
|
||||
|
||||
AC_WRITE(ac, POWER_CTL, 0);
|
||||
|
||||
err = request_threaded_irq(ac->irq, NULL, adxl34x_irq,
|
||||
IRQF_ONESHOT, dev_name(dev), ac);
|
||||
if (err) {
|
||||
error = devm_request_threaded_irq(dev, ac->irq, NULL, adxl34x_irq,
|
||||
IRQF_ONESHOT, dev_name(dev), ac);
|
||||
if (error) {
|
||||
dev_err(dev, "irq %d busy?\n", ac->irq);
|
||||
goto err_free_mem;
|
||||
return ERR_PTR(error);
|
||||
}
|
||||
|
||||
err = input_register_device(input_dev);
|
||||
if (err)
|
||||
goto err_free_irq;
|
||||
error = input_register_device(input_dev);
|
||||
if (error)
|
||||
return ERR_PTR(error);
|
||||
|
||||
AC_WRITE(ac, OFSX, pdata->x_axis_offset);
|
||||
ac->hwcal.x = pdata->x_axis_offset;
|
||||
@ -884,26 +882,9 @@ struct adxl34x *adxl34x_probe(struct device *dev, int irq,
|
||||
ac->pdata.power_mode &= (PCTL_AUTO_SLEEP | PCTL_LINK);
|
||||
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
|
||||
|
@ -23,7 +23,6 @@ struct adxl34x_bus_ops {
|
||||
struct adxl34x *adxl34x_probe(struct device *dev, int irq,
|
||||
bool fifo_delay_default,
|
||||
const struct adxl34x_bus_ops *bops);
|
||||
void adxl34x_remove(struct adxl34x *ac);
|
||||
|
||||
extern const struct dev_pm_ops adxl34x_pm;
|
||||
extern const struct attribute_group *adxl34x_groups[];
|
||||
|
Loading…
Reference in New Issue
Block a user