On Sun, 2024-06-09 at 16:41 -0700, Dmitry Torokhov wrote: > Switch the driver to use managed resources to simplify error handling. > > Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> > --- > drivers/input/misc/adxl34x-i2c.c | 8 --- > drivers/input/misc/adxl34x-spi.c | 8 --- > drivers/input/misc/adxl34x.c | 85 +++++++++++--------------------- > drivers/input/misc/adxl34x.h | 1 - > 4 files changed, 30 insertions(+), 72 deletions(-) > > diff --git a/drivers/input/misc/adxl34x-i2c.c b/drivers/input/misc/adxl34x- > i2c.c > index 7531c7b2d657..c05d898898e8 100644 > --- a/drivers/input/misc/adxl34x-i2c.c > +++ b/drivers/input/misc/adxl34x-i2c.c > @@ -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, > }; > > diff --git a/drivers/input/misc/adxl34x-spi.c b/drivers/input/misc/adxl34x- > spi.c > index 2befcc4df0be..fd716d861832 100644 > --- a/drivers/input/misc/adxl34x-spi.c > +++ b/drivers/input/misc/adxl34x-spi.c > @@ -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); > diff --git a/drivers/input/misc/adxl34x.c b/drivers/input/misc/adxl34x.c > index fbe5a56c19d1..c6c34005f5d2 100644 > --- a/drivers/input/misc/adxl34x.c > +++ b/drivers/input/misc/adxl34x.c > @@ -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; > @@ -769,18 +767,12 @@ struct adxl34x *adxl34x_probe(struct device *dev, int > irq, > > input_set_drvdata(input_dev, ac); > > - __set_bit(ac->pdata.ev_type, input_dev->evbit); > - > if (ac->pdata.ev_type == EV_REL) { > - __set_bit(REL_X, input_dev->relbit); > - __set_bit(REL_Y, input_dev->relbit); > - __set_bit(REL_Z, input_dev->relbit); > + input_set_capability(input_dev, EV_REL, REL_X); > + input_set_capability(input_dev, EV_REL, REL_Y); > + input_set_capability(input_dev, EV_REL, REL_Z); > } else { > /* EV_ABS */ > - __set_bit(ABS_X, input_dev->absbit); > - __set_bit(ABS_Y, input_dev->absbit); > - __set_bit(ABS_Z, input_dev->absbit); Are these somehow default or already set? I guess in input_set_abs_params()... Anyways, the move from "raw" __set_bits() to input APIs should maybe be done in a separate patch? They are unrelated with the current one. - Nuno Sá