lkml.org 
[lkml]   [2020]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 198/391] extcon: ptn5150: Fix usage of atomic GPIO with sleeping GPIO chips
    Date
    From: Krzysztof Kozlowski <krzk@kernel.org>

    commit 6aaad58c872db062f7ea2761421ca748bd0931cc upstream.

    The driver uses atomic version of gpiod_set_value() without any real
    reason. It is called in a workqueue under mutex so it could sleep
    there. Changing it to "can_sleep" flavor allows to use the driver with
    all GPIO chips.

    Fixes: 4ed754de2d66 ("extcon: Add support for ptn5150 extcon driver")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Reviewed-by: Vijai Kumar K <vijaikumar.kanagarajan@gmail.com>
    Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/extcon/extcon-ptn5150.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    --- a/drivers/extcon/extcon-ptn5150.c
    +++ b/drivers/extcon/extcon-ptn5150.c
    @@ -127,7 +127,7 @@ static void ptn5150_irq_work(struct work
    case PTN5150_DFP_ATTACHED:
    extcon_set_state_sync(info->edev,
    EXTCON_USB_HOST, false);
    - gpiod_set_value(info->vbus_gpiod, 0);
    + gpiod_set_value_cansleep(info->vbus_gpiod, 0);
    extcon_set_state_sync(info->edev, EXTCON_USB,
    true);
    break;
    @@ -138,9 +138,9 @@ static void ptn5150_irq_work(struct work
    PTN5150_REG_CC_VBUS_DETECTION_MASK) >>
    PTN5150_REG_CC_VBUS_DETECTION_SHIFT);
    if (vbus)
    - gpiod_set_value(info->vbus_gpiod, 0);
    + gpiod_set_value_cansleep(info->vbus_gpiod, 0);
    else
    - gpiod_set_value(info->vbus_gpiod, 1);
    + gpiod_set_value_cansleep(info->vbus_gpiod, 1);

    extcon_set_state_sync(info->edev,
    EXTCON_USB_HOST, true);
    @@ -156,7 +156,7 @@ static void ptn5150_irq_work(struct work
    EXTCON_USB_HOST, false);
    extcon_set_state_sync(info->edev,
    EXTCON_USB, false);
    - gpiod_set_value(info->vbus_gpiod, 0);
    + gpiod_set_value_cansleep(info->vbus_gpiod, 0);
    }
    }


    \
     
     \ /
      Last update: 2020-11-03 21:46    [W:4.076 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site