lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0182/1039] mfd: atmel-flexcom: Use .resume_noirq
    Date
    From: Claudiu Beznea <claudiu.beznea@microchip.com>

    [ Upstream commit 5d051cf94fd5834a1513aa77e542c49fd973988a ]

    Flexcom IP embeds 3 other IPs: usart, i2c, spi and selects the operation
    mode (usart, i2c, spi) via mode register (FLEX_MR). On i2c bus there might
    be connected critical devices (like PMIC) which on suspend/resume should
    be suspended/resumed at the end/beginning. i2c uses
    .suspend_noirq/.resume_noirq for this kind of purposes. Align flexcom
    to use .resume_noirq as it should be resumed before the embedded IPs.
    Otherwise the embedded devices might behave badly.

    Fixes: 7fdec11015c3 ("atmel_flexcom: Support resuming after a chip reset")
    Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
    Tested-by: Codrin Ciubotariu <codrin.ciubotariu@microchip.com>
    Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Link: https://lore.kernel.org/r/20211028135138.3481166-3-claudiu.beznea@microchip.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/mfd/atmel-flexcom.c | 7 ++++---
    1 file changed, 4 insertions(+), 3 deletions(-)

    diff --git a/drivers/mfd/atmel-flexcom.c b/drivers/mfd/atmel-flexcom.c
    index 962f66dc8813e..559eb4d352b68 100644
    --- a/drivers/mfd/atmel-flexcom.c
    +++ b/drivers/mfd/atmel-flexcom.c
    @@ -87,7 +87,7 @@ static const struct of_device_id atmel_flexcom_of_match[] = {
    };
    MODULE_DEVICE_TABLE(of, atmel_flexcom_of_match);

    -static int __maybe_unused atmel_flexcom_resume(struct device *dev)
    +static int __maybe_unused atmel_flexcom_resume_noirq(struct device *dev)
    {
    struct atmel_flexcom *ddata = dev_get_drvdata(dev);
    int err;
    @@ -105,8 +105,9 @@ static int __maybe_unused atmel_flexcom_resume(struct device *dev)
    return 0;
    }

    -static SIMPLE_DEV_PM_OPS(atmel_flexcom_pm_ops, NULL,
    - atmel_flexcom_resume);
    +static const struct dev_pm_ops atmel_flexcom_pm_ops = {
    + .resume_noirq = atmel_flexcom_resume_noirq,
    +};

    static struct platform_driver atmel_flexcom_driver = {
    .probe = atmel_flexcom_probe,
    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 23:10    [W:2.958 / U:0.152 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site