lkml.org 
[lkml]   [2020]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.5 151/189] phy: mapphone-mdm6600: Fix timeouts by adding wake-up handling
    Date
    From: Tony Lindgren <tony@atomide.com>

    commit be4e3c737eebd75815633f4b8fd766defaf0f1fc upstream.

    We have an interrupt handler for the wake-up GPIO pin, but we're missing
    the code to wake-up the system. This can cause timeouts receiving data
    for the UART that shares the wake-up GPIO pin with the USB PHY.

    All we need to do is just wake the system and kick the autosuspend
    timeout to fix the issue.

    Fixes: 5d1ebbda0318 ("phy: mapphone-mdm6600: Add USB PHY driver for MDM6600 on Droid 4")
    Cc: Marcel Partap <mpartap@gmx.net>
    Cc: Merlijn Wajer <merlijn@wizzup.org>
    Cc: Michael Scott <hashcode0f@gmail.com>
    Cc: NeKit <nekit1000@gmail.com>
    Cc: Pavel Machek <pavel@ucw.cz>
    Cc: Sebastian Reichel <sre@kernel.org>
    Signed-off-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/phy/motorola/phy-mapphone-mdm6600.c | 18 ++++++++++++++++--
    1 file changed, 16 insertions(+), 2 deletions(-)

    --- a/drivers/phy/motorola/phy-mapphone-mdm6600.c
    +++ b/drivers/phy/motorola/phy-mapphone-mdm6600.c
    @@ -243,10 +243,24 @@ static irqreturn_t phy_mdm6600_wakeirq_t
    {
    struct phy_mdm6600 *ddata = data;
    struct gpio_desc *mode_gpio1;
    + int error, wakeup;

    mode_gpio1 = ddata->mode_gpios->desc[PHY_MDM6600_MODE1];
    - dev_dbg(ddata->dev, "OOB wake on mode_gpio1: %i\n",
    - gpiod_get_value(mode_gpio1));
    + wakeup = gpiod_get_value(mode_gpio1);
    + if (!wakeup)
    + return IRQ_NONE;
    +
    + dev_dbg(ddata->dev, "OOB wake on mode_gpio1: %i\n", wakeup);
    + error = pm_runtime_get_sync(ddata->dev);
    + if (error < 0) {
    + pm_runtime_put_noidle(ddata->dev);
    +
    + return IRQ_NONE;
    + }
    +
    + /* Just wake-up and kick the autosuspend timer */
    + pm_runtime_mark_last_busy(ddata->dev);
    + pm_runtime_put_autosuspend(ddata->dev);

    return IRQ_HANDLED;
    }

    \
     
     \ /
      Last update: 2020-03-10 14:09    [W:4.125 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site