Hi Kishon, Felipe,

If you possible, I'd like you to test or review this patch.
And then I'll apply it on extcon-next branch if you could give
me a acked or tested message.

- This patch has a depenency on extcon-next branch.
Following patchset support devm_extcon_dev_* function.
[1] https://lkml.org/lkml/2014/4/21/140
[2] https://lkml.org/lkml/2014/4/21/164

Thanks,
Chanwoo Choi

On 04/21/2014 09:02 PM, Chanwoo Choi wrote:
> This patch use devm_extcon_dev_allocate() to simplify the memory control
> of extcon device.
> 
> Cc: Graeme Gregory <g...@slimlogic.co.uk>
> Cc: Kishon Vijay Abraham I <kis...@ti.com>
> Cc: Felipe Balbi <ba...@ti.com>
> Cc: Samuel Ortiz <sa...@linux.intel.com>
> Cc: Lee Jones <lee.jo...@linaro.org>
> Signed-off-by: Chanwoo Choi <cw00.c...@samsung.com>
> ---
>  drivers/extcon/extcon-palmas.c | 35 ++++++++++++++++++++---------------
>  include/linux/mfd/palmas.h     |  2 +-
>  2 files changed, 21 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/extcon/extcon-palmas.c b/drivers/extcon/extcon-palmas.c
> index 1a770e0..a9299ea 100644
> --- a/drivers/extcon/extcon-palmas.c
> +++ b/drivers/extcon/extcon-palmas.c
> @@ -57,7 +57,7 @@ static irqreturn_t palmas_vbus_irq_handler(int irq, void 
> *_palmas_usb)
>       if (vbus_line_state & PALMAS_INT3_LINE_STATE_VBUS) {
>               if (palmas_usb->linkstat != PALMAS_USB_STATE_VBUS) {
>                       palmas_usb->linkstat = PALMAS_USB_STATE_VBUS;
> -                     extcon_set_cable_state(&palmas_usb->edev, "USB", true);
> +                     extcon_set_cable_state(palmas_usb->edev, "USB", true);
>                       dev_info(palmas_usb->dev, "USB cable is attached\n");
>               } else {
>                       dev_dbg(palmas_usb->dev,
> @@ -66,7 +66,7 @@ static irqreturn_t palmas_vbus_irq_handler(int irq, void 
> *_palmas_usb)
>       } else if (!(vbus_line_state & PALMAS_INT3_LINE_STATE_VBUS)) {
>               if (palmas_usb->linkstat == PALMAS_USB_STATE_VBUS) {
>                       palmas_usb->linkstat = PALMAS_USB_STATE_DISCONNECT;
> -                     extcon_set_cable_state(&palmas_usb->edev, "USB", false);
> +                     extcon_set_cable_state(palmas_usb->edev, "USB", false);
>                       dev_info(palmas_usb->dev, "USB cable is detached\n");
>               } else {
>                       dev_dbg(palmas_usb->dev,
> @@ -93,7 +93,7 @@ static irqreturn_t palmas_id_irq_handler(int irq, void 
> *_palmas_usb)
>                       PALMAS_USB_ID_INT_LATCH_CLR,
>                       PALMAS_USB_ID_INT_EN_HI_CLR_ID_GND);
>               palmas_usb->linkstat = PALMAS_USB_STATE_ID;
> -             extcon_set_cable_state(&palmas_usb->edev, "USB-HOST", true);
> +             extcon_set_cable_state(palmas_usb->edev, "USB-HOST", true);
>               dev_info(palmas_usb->dev, "USB-HOST cable is attached\n");
>       } else if ((set & PALMAS_USB_ID_INT_SRC_ID_FLOAT) &&
>                               (id_src & PALMAS_USB_ID_INT_SRC_ID_FLOAT)) {
> @@ -101,17 +101,17 @@ static irqreturn_t palmas_id_irq_handler(int irq, void 
> *_palmas_usb)
>                       PALMAS_USB_ID_INT_LATCH_CLR,
>                       PALMAS_USB_ID_INT_EN_HI_CLR_ID_FLOAT);
>               palmas_usb->linkstat = PALMAS_USB_STATE_DISCONNECT;
> -             extcon_set_cable_state(&palmas_usb->edev, "USB-HOST", false);
> +             extcon_set_cable_state(palmas_usb->edev, "USB-HOST", false);
>               dev_info(palmas_usb->dev, "USB-HOST cable is detached\n");
>       } else if ((palmas_usb->linkstat == PALMAS_USB_STATE_ID) &&
>                               (!(set & PALMAS_USB_ID_INT_SRC_ID_GND))) {
>               palmas_usb->linkstat = PALMAS_USB_STATE_DISCONNECT;
> -             extcon_set_cable_state(&palmas_usb->edev, "USB-HOST", false);
> +             extcon_set_cable_state(palmas_usb->edev, "USB-HOST", false);
>               dev_info(palmas_usb->dev, "USB-HOST cable is detached\n");
>       } else if ((palmas_usb->linkstat == PALMAS_USB_STATE_DISCONNECT) &&
>                               (id_src & PALMAS_USB_ID_INT_SRC_ID_GND)) {
>               palmas_usb->linkstat = PALMAS_USB_STATE_ID;
> -             extcon_set_cable_state(&palmas_usb->edev, "USB-HOST", true);
> +             extcon_set_cable_state(palmas_usb->edev, "USB-HOST", true);
>               dev_info(palmas_usb->dev, " USB-HOST cable is attached\n");
>       }
>  
> @@ -187,15 +187,20 @@ static int palmas_usb_probe(struct platform_device 
> *pdev)
>  
>       platform_set_drvdata(pdev, palmas_usb);
>  
> -     palmas_usb->edev.supported_cable = palmas_extcon_cable;
> -     palmas_usb->edev.dev.parent = palmas_usb->dev;
> -     palmas_usb->edev.name = kstrdup(node->name, GFP_KERNEL);
> -     palmas_usb->edev.mutually_exclusive = mutually_exclusive;
> +     palmas_usb->edev = devm_extcon_dev_allocate(&pdev->dev,
> +                                                 palmas_extcon_cable);
> +     if (!palmas_usb->edev) {
> +             dev_err(&pdev->dev, "failed to allocate extcon device\n");
> +             return -ENOMEM;
> +     }
> +     palmas_usb->edev->name = kstrdup(node->name, GFP_KERNEL);
> +     palmas_usb->edev->dev.parent = palmas_usb->dev;
> +     palmas_usb->edev->mutually_exclusive = mutually_exclusive;
>  
> -     status = devm_extcon_dev_register(&pdev->dev, &palmas_usb->edev);
> +     status = devm_extcon_dev_register(&pdev->dev, palmas_usb->edev);
>       if (status) {
>               dev_err(&pdev->dev, "failed to register extcon device\n");
> -             kfree(palmas_usb->edev.name);
> +             kfree(palmas_usb->edev->name);
>               return status;
>       }
>  
> @@ -209,7 +214,7 @@ static int palmas_usb_probe(struct platform_device *pdev)
>               if (status < 0) {
>                       dev_err(&pdev->dev, "can't get IRQ %d, err %d\n",
>                                       palmas_usb->id_irq, status);
> -                     kfree(palmas_usb->edev.name);
> +                     kfree(palmas_usb->edev->name);
>                       return status;
>               }
>       }
> @@ -224,7 +229,7 @@ static int palmas_usb_probe(struct platform_device *pdev)
>               if (status < 0) {
>                       dev_err(&pdev->dev, "can't get IRQ %d, err %d\n",
>                                       palmas_usb->vbus_irq, status);
> -                     kfree(palmas_usb->edev.name);
> +                     kfree(palmas_usb->edev->name);
>                       return status;
>               }
>       }
> @@ -238,7 +243,7 @@ static int palmas_usb_remove(struct platform_device *pdev)
>  {
>       struct palmas_usb *palmas_usb = platform_get_drvdata(pdev);
>  
> -     kfree(palmas_usb->edev.name);
> +     kfree(palmas_usb->edev->name);
>  
>       return 0;
>  }
> diff --git a/include/linux/mfd/palmas.h b/include/linux/mfd/palmas.h
> index 9974e38..b8f87b7 100644
> --- a/include/linux/mfd/palmas.h
> +++ b/include/linux/mfd/palmas.h
> @@ -415,7 +415,7 @@ struct palmas_usb {
>       struct palmas *palmas;
>       struct device *dev;
>  
> -     struct extcon_dev edev;
> +     struct extcon_dev *edev;
>  
>       int id_otg_irq;
>       int id_irq;
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to