mirror of
https://github.com/torvalds/linux.git
synced 2024-12-26 21:02:19 +00:00
Input: ad7879 - use more devm interfaces
gpiochip_add now has a managed version, and we can remove sysfs attribute group via devm_add_action_or_reset (at least until we have devm version of sysfs_create_group). This allows us to get rid of ad7879_remove(). Reviewed-by: Michael Hennerich <michael.hennerich@analog.com> Tested-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
parent
404a24c35d
commit
069b2e2cd7
@ -45,17 +45,6 @@ static int ad7879_i2c_probe(struct i2c_client *client,
|
||||
if (IS_ERR(ts))
|
||||
return PTR_ERR(ts);
|
||||
|
||||
i2c_set_clientdata(client, ts);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ad7879_i2c_remove(struct i2c_client *client)
|
||||
{
|
||||
struct ad7879 *ts = i2c_get_clientdata(client);
|
||||
|
||||
ad7879_remove(ts);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -81,7 +70,6 @@ static struct i2c_driver ad7879_i2c_driver = {
|
||||
.of_match_table = of_match_ptr(ad7879_i2c_dt_ids),
|
||||
},
|
||||
.probe = ad7879_i2c_probe,
|
||||
.remove = ad7879_i2c_remove,
|
||||
.id_table = ad7879_id,
|
||||
};
|
||||
|
||||
|
@ -62,15 +62,6 @@ static int ad7879_spi_probe(struct spi_device *spi)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ad7879_spi_remove(struct spi_device *spi)
|
||||
{
|
||||
struct ad7879 *ts = spi_get_drvdata(spi);
|
||||
|
||||
ad7879_remove(ts);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id ad7879_spi_dt_ids[] = {
|
||||
{ .compatible = "adi,ad7879", },
|
||||
@ -86,7 +77,6 @@ static struct spi_driver ad7879_spi_driver = {
|
||||
.of_match_table = of_match_ptr(ad7879_spi_dt_ids),
|
||||
},
|
||||
.probe = ad7879_spi_probe,
|
||||
.remove = ad7879_spi_remove,
|
||||
};
|
||||
|
||||
module_spi_driver(ad7879_spi_driver);
|
||||
|
@ -458,7 +458,7 @@ static int ad7879_gpio_add(struct ad7879 *ts,
|
||||
|
||||
mutex_init(&ts->mutex);
|
||||
|
||||
if (pdata->gpio_export) {
|
||||
if (pdata && pdata->gpio_export) {
|
||||
ts->gc.direction_input = ad7879_gpio_direction_input;
|
||||
ts->gc.direction_output = ad7879_gpio_direction_output;
|
||||
ts->gc.get = ad7879_gpio_get_value;
|
||||
@ -470,7 +470,7 @@ static int ad7879_gpio_add(struct ad7879 *ts,
|
||||
ts->gc.owner = THIS_MODULE;
|
||||
ts->gc.parent = ts->dev;
|
||||
|
||||
ret = gpiochip_add_data(&ts->gc, ts);
|
||||
ret = devm_gpiochip_add_data(ts->dev, &ts->gc, ts);
|
||||
if (ret)
|
||||
dev_err(ts->dev, "failed to register gpio %d\n",
|
||||
ts->gc.base);
|
||||
@ -478,25 +478,12 @@ static int ad7879_gpio_add(struct ad7879 *ts,
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void ad7879_gpio_remove(struct ad7879 *ts)
|
||||
{
|
||||
const struct ad7879_platform_data *pdata = dev_get_platdata(ts->dev);
|
||||
|
||||
if (pdata && pdata->gpio_export)
|
||||
gpiochip_remove(&ts->gc);
|
||||
|
||||
}
|
||||
#else
|
||||
static inline int ad7879_gpio_add(struct ad7879 *ts,
|
||||
const struct ad7879_platform_data *pdata)
|
||||
static int ad7879_gpio_add(struct ad7879 *ts,
|
||||
const struct ad7879_platform_data *pdata)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void ad7879_gpio_remove(struct ad7879 *ts)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static int ad7879_parse_dt(struct device *dev, struct ad7879 *ts)
|
||||
@ -525,6 +512,13 @@ static int ad7879_parse_dt(struct device *dev, struct ad7879 *ts)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ad7879_cleanup_sysfs(void *_ts)
|
||||
{
|
||||
struct ad7879 *ts = _ts;
|
||||
|
||||
sysfs_remove_group(&ts->dev->kobj, &ad7879_attr_group);
|
||||
}
|
||||
|
||||
struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
|
||||
int irq, u16 bustype, u8 devid)
|
||||
{
|
||||
@ -660,36 +654,24 @@ struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
|
||||
|
||||
err = sysfs_create_group(&dev->kobj, &ad7879_attr_group);
|
||||
if (err)
|
||||
goto err_out;
|
||||
return ERR_PTR(err);
|
||||
|
||||
if (pdata) {
|
||||
err = ad7879_gpio_add(ts, pdata);
|
||||
if (err)
|
||||
goto err_remove_attr;
|
||||
}
|
||||
err = devm_add_action_or_reset(dev, ad7879_cleanup_sysfs, ts);
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
|
||||
err = ad7879_gpio_add(ts, pdata);
|
||||
if (err)
|
||||
return ERR_PTR(err);
|
||||
|
||||
err = input_register_device(input_dev);
|
||||
if (err)
|
||||
goto err_remove_gpio;
|
||||
return ERR_PTR(err);
|
||||
|
||||
return ts;
|
||||
|
||||
err_remove_gpio:
|
||||
ad7879_gpio_remove(ts);
|
||||
err_remove_attr:
|
||||
sysfs_remove_group(&dev->kobj, &ad7879_attr_group);
|
||||
err_out:
|
||||
return ERR_PTR(err);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(ad7879_probe);
|
||||
|
||||
void ad7879_remove(struct ad7879 *ts)
|
||||
{
|
||||
ad7879_gpio_remove(ts);
|
||||
sysfs_remove_group(&ts->dev->kobj, &ad7879_attr_group);
|
||||
}
|
||||
EXPORT_SYMBOL(ad7879_remove);
|
||||
|
||||
MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
|
||||
MODULE_DESCRIPTION("AD7879(-1) touchscreen Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
@ -19,6 +19,5 @@ extern const struct dev_pm_ops ad7879_pm_ops;
|
||||
|
||||
struct ad7879 *ad7879_probe(struct device *dev, struct regmap *regmap,
|
||||
int irq, u16 bustype, u8 devid);
|
||||
void ad7879_remove(struct ad7879 *);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user