Subject: [PATCH] iio: adc: mt6577_auxadc: Fix kernel panic on suspend

Commit a2d518fbe376 ("iio: adc: mt6577_auxadc: Simplify with device managed function")
simplified the driver with devm hooks, but wrongly states that the
platform_set_drvdata(), platform_get_drvdata() are unused after the
simplification: the driver data is infact used in .suspend() and
.resume() PM callbacks, currently producing a kernel panic.

Reintroduce the call to platform_set_drvdata() in the probe function

Fixes: a2d518fbe376 ("iio: adc: mt6577_auxadc: Simplify with device managed function")
Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
---
drivers/iio/adc/mt6577_auxadc.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/iio/adc/mt6577_auxadc.c b/drivers/iio/adc/mt6577_auxadc.c
index 370b84c2d0ba..3343b54e8e44 100644
--- a/drivers/iio/adc/mt6577_auxadc.c
+++ b/drivers/iio/adc/mt6577_auxadc.c
@@ -293,6 +293,7 @@ static int mt6577_auxadc_probe(struct platform_device *pdev)
mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
MT6577_AUXADC_PDN_EN, 0);
mdelay(MT6577_AUXADC_POWER_READY_MS);
+ platform_set_drvdata(pdev, indio_dev);

ret = devm_add_action_or_reset(&pdev->dev, mt6577_power_off, adc_dev);
if (ret)
--
2.42.0


2023-10-10 12:35:22

by Alexandre Mergnat

[permalink] [raw]
Subject: Re: [PATCH] iio: adc: mt6577_auxadc: Fix kernel panic on suspend

Reviewed-by: Alexandre Mergnat <[email protected]>

On 10/10/2023 14:19, AngeloGioacchino Del Regno wrote:
> Commit a2d518fbe376 ("iio: adc: mt6577_auxadc: Simplify with device
> managed function") simplified the driver with devm hooks, but wrongly
> states that the platform_set_drvdata(), platform_get_drvdata() are
> unused after the simplification: the driver data is infact used in
> .suspend() and .resume() PM callbacks, currently producing a kernel
> panic. Reintroduce the call to platform_set_drvdata() in the probe function

--
Regards,
Alexandre

Subject: Re: [PATCH] iio: adc: mt6577_auxadc: Fix kernel panic on suspend

On Tue, Oct 10, 2023 at 02:19:40PM +0200, AngeloGioacchino Del Regno wrote:
> Commit a2d518fbe376 ("iio: adc: mt6577_auxadc: Simplify with device managed function")
> simplified the driver with devm hooks, but wrongly states that the
> platform_set_drvdata(), platform_get_drvdata() are unused after the
> simplification: the driver data is infact used in .suspend() and
> .resume() PM callbacks, currently producing a kernel panic.
>
> Reintroduce the call to platform_set_drvdata() in the probe function
>
> Fixes: a2d518fbe376 ("iio: adc: mt6577_auxadc: Simplify with device managed function")
> Signed-off-by: AngeloGioacchino Del Regno <[email protected]>

Reviewed-by: Markus Schneider-Pargmann <[email protected]>

Best,
Markus

> ---
> drivers/iio/adc/mt6577_auxadc.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/iio/adc/mt6577_auxadc.c b/drivers/iio/adc/mt6577_auxadc.c
> index 370b84c2d0ba..3343b54e8e44 100644
> --- a/drivers/iio/adc/mt6577_auxadc.c
> +++ b/drivers/iio/adc/mt6577_auxadc.c
> @@ -293,6 +293,7 @@ static int mt6577_auxadc_probe(struct platform_device *pdev)
> mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
> MT6577_AUXADC_PDN_EN, 0);
> mdelay(MT6577_AUXADC_POWER_READY_MS);
> + platform_set_drvdata(pdev, indio_dev);
>
> ret = devm_add_action_or_reset(&pdev->dev, mt6577_power_off, adc_dev);
> if (ret)
> --
> 2.42.0
>

2023-10-10 15:33:55

by Jonathan Cameron

[permalink] [raw]
Subject: Re: [PATCH] iio: adc: mt6577_auxadc: Fix kernel panic on suspend

On Tue, 10 Oct 2023 14:19:40 +0200
AngeloGioacchino Del Regno <[email protected]> wrote:

> Commit a2d518fbe376 ("iio: adc: mt6577_auxadc: Simplify with device managed function")
> simplified the driver with devm hooks, but wrongly states that the
> platform_set_drvdata(), platform_get_drvdata() are unused after the
> simplification: the driver data is infact used in .suspend() and
> .resume() PM callbacks, currently producing a kernel panic.
>
> Reintroduce the call to platform_set_drvdata() in the probe function
>
> Fixes: a2d518fbe376 ("iio: adc: mt6577_auxadc: Simplify with device managed function")
> Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
Applied to the togreg branch of iio.git (as the patch it is fixing is only there for now)
Pushed out initially as testing for 0-day to take a look.

Thanks,

Jonathan

> ---
> drivers/iio/adc/mt6577_auxadc.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/iio/adc/mt6577_auxadc.c b/drivers/iio/adc/mt6577_auxadc.c
> index 370b84c2d0ba..3343b54e8e44 100644
> --- a/drivers/iio/adc/mt6577_auxadc.c
> +++ b/drivers/iio/adc/mt6577_auxadc.c
> @@ -293,6 +293,7 @@ static int mt6577_auxadc_probe(struct platform_device *pdev)
> mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
> MT6577_AUXADC_PDN_EN, 0);
> mdelay(MT6577_AUXADC_POWER_READY_MS);
> + platform_set_drvdata(pdev, indio_dev);
>
> ret = devm_add_action_or_reset(&pdev->dev, mt6577_power_off, adc_dev);
> if (ret)