Input: gpio_keys - consolidate key destructor code
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
@@ -195,7 +195,7 @@ static ssize_t gpio_keys_attr_show_helper(struct gpio_keys_drvdata *ddata,
|
|||||||
* @type: button type (%EV_KEY, %EV_SW)
|
* @type: button type (%EV_KEY, %EV_SW)
|
||||||
*
|
*
|
||||||
* This function parses stringified bitmap from @buf and disables/enables
|
* This function parses stringified bitmap from @buf and disables/enables
|
||||||
* GPIO buttons accordinly. Returns 0 on success and negative error
|
* GPIO buttons accordingly. Returns 0 on success and negative error
|
||||||
* on failure.
|
* on failure.
|
||||||
*/
|
*/
|
||||||
static ssize_t gpio_keys_attr_store_helper(struct gpio_keys_drvdata *ddata,
|
static ssize_t gpio_keys_attr_store_helper(struct gpio_keys_drvdata *ddata,
|
||||||
@@ -551,6 +551,15 @@ static int gpio_keys_get_devtree_pdata(struct device *dev,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void gpio_remove_key(struct gpio_button_data *bdata)
|
||||||
|
{
|
||||||
|
free_irq(gpio_to_irq(bdata->button->gpio), bdata);
|
||||||
|
if (bdata->timer_debounce)
|
||||||
|
del_timer_sync(&bdata->timer);
|
||||||
|
cancel_work_sync(&bdata->work);
|
||||||
|
gpio_free(bdata->button->gpio);
|
||||||
|
}
|
||||||
|
|
||||||
static int __devinit gpio_keys_probe(struct platform_device *pdev)
|
static int __devinit gpio_keys_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
const struct gpio_keys_platform_data *pdata = pdev->dev.platform_data;
|
const struct gpio_keys_platform_data *pdata = pdev->dev.platform_data;
|
||||||
@@ -640,13 +649,8 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
|
|||||||
fail3:
|
fail3:
|
||||||
sysfs_remove_group(&pdev->dev.kobj, &gpio_keys_attr_group);
|
sysfs_remove_group(&pdev->dev.kobj, &gpio_keys_attr_group);
|
||||||
fail2:
|
fail2:
|
||||||
while (--i >= 0) {
|
while (--i >= 0)
|
||||||
free_irq(gpio_to_irq(pdata->buttons[i].gpio), &ddata->data[i]);
|
gpio_remove_key(&ddata->data[i]);
|
||||||
if (ddata->data[i].timer_debounce)
|
|
||||||
del_timer_sync(&ddata->data[i].timer);
|
|
||||||
cancel_work_sync(&ddata->data[i].work);
|
|
||||||
gpio_free(pdata->buttons[i].gpio);
|
|
||||||
}
|
|
||||||
|
|
||||||
platform_set_drvdata(pdev, NULL);
|
platform_set_drvdata(pdev, NULL);
|
||||||
fail1:
|
fail1:
|
||||||
@@ -669,14 +673,8 @@ static int __devexit gpio_keys_remove(struct platform_device *pdev)
|
|||||||
|
|
||||||
device_init_wakeup(&pdev->dev, 0);
|
device_init_wakeup(&pdev->dev, 0);
|
||||||
|
|
||||||
for (i = 0; i < ddata->n_buttons; i++) {
|
for (i = 0; i < ddata->n_buttons; i++)
|
||||||
int irq = gpio_to_irq(ddata->data[i].button->gpio);
|
gpio_remove_key(&ddata->data[i]);
|
||||||
free_irq(irq, &ddata->data[i]);
|
|
||||||
if (ddata->data[i].timer_debounce)
|
|
||||||
del_timer_sync(&ddata->data[i].timer);
|
|
||||||
cancel_work_sync(&ddata->data[i].work);
|
|
||||||
gpio_free(ddata->data[i].button->gpio);
|
|
||||||
}
|
|
||||||
|
|
||||||
input_unregister_device(input);
|
input_unregister_device(input);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user