Messages in this thread | | | Date | Fri, 25 Apr 2014 10:18:11 -0500 | From | Felipe Balbi <> | Subject | Re: [PATCHv4 8/9] extcon: gpio: Use devm_extcon_dev_allocate for extcon_dev |
| |
On Fri, Apr 25, 2014 at 09:42:23AM +0900, Chanwoo Choi wrote: > This patch use devm_extcon_dev_allocate() to simplify the memory control > of extcon device. > > Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Reviewed-by: Felipe Balbi <balbi@ti.com>
> --- > drivers/extcon/extcon-gpio.c | 23 +++++++++++++++-------- > 1 file changed, 15 insertions(+), 8 deletions(-) > > diff --git a/drivers/extcon/extcon-gpio.c b/drivers/extcon/extcon-gpio.c > index 43af34c..645b283 100644 > --- a/drivers/extcon/extcon-gpio.c > +++ b/drivers/extcon/extcon-gpio.c > @@ -32,7 +32,7 @@ > #include <linux/extcon/extcon-gpio.h> > > struct gpio_extcon_data { > - struct extcon_dev edev; > + struct extcon_dev *edev; > unsigned gpio; > bool gpio_active_low; > const char *state_on; > @@ -53,7 +53,7 @@ static void gpio_extcon_work(struct work_struct *work) > state = gpio_get_value(data->gpio); > if (data->gpio_active_low) > state = !state; > - extcon_set_state(&data->edev, state); > + extcon_set_state(data->edev, state); > } > > static irqreturn_t gpio_irq_handler(int irq, void *dev_id) > @@ -67,9 +67,10 @@ static irqreturn_t gpio_irq_handler(int irq, void *dev_id) > > static ssize_t extcon_gpio_print_state(struct extcon_dev *edev, char *buf) > { > - struct gpio_extcon_data *extcon_data = > - container_of(edev, struct gpio_extcon_data, edev); > + struct device *dev = edev->dev.parent; > + struct gpio_extcon_data *extcon_data = dev_get_drvdata(dev); > const char *state; > + > if (extcon_get_state(edev)) > state = extcon_data->state_on; > else > @@ -98,15 +99,21 @@ static int gpio_extcon_probe(struct platform_device *pdev) > if (!extcon_data) > return -ENOMEM; > > - extcon_data->edev.name = pdata->name; > - extcon_data->edev.dev.parent = &pdev->dev; > + extcon_data->edev = devm_extcon_dev_allocate(&pdev->dev, NULL); > + if (IS_ERR(extcon_data->edev)) { > + dev_err(&pdev->dev, "failed to allocate extcon device\n"); > + return -ENOMEM; > + } > + extcon_data->edev->name = pdata->name; > + extcon_data->edev->dev.parent = &pdev->dev; > + > extcon_data->gpio = pdata->gpio; > extcon_data->gpio_active_low = pdata->gpio_active_low; > extcon_data->state_on = pdata->state_on; > extcon_data->state_off = pdata->state_off; > extcon_data->check_on_resume = pdata->check_on_resume; > if (pdata->state_on && pdata->state_off) > - extcon_data->edev.print_state = extcon_gpio_print_state; > + extcon_data->edev->print_state = extcon_gpio_print_state; > > ret = devm_gpio_request_one(&pdev->dev, extcon_data->gpio, GPIOF_DIR_IN, > pdev->name); > @@ -121,7 +128,7 @@ static int gpio_extcon_probe(struct platform_device *pdev) > msecs_to_jiffies(pdata->debounce); > } > > - ret = devm_extcon_dev_register(&pdev->dev, &extcon_data->edev); > + ret = devm_extcon_dev_register(&pdev->dev, extcon_data->edev); > if (ret < 0) > return ret; > > -- > 1.8.0 >
-- balbi [unhandled content-type:application/pgp-signature] | |