diff mbox series

[V2] Input: bbnsm_pwrkey - add remove hook

Message ID 20241104031552.3475108-1-peng.fan@oss.nxp.com
State New
Headers show
Series [V2] Input: bbnsm_pwrkey - add remove hook | expand

Commit Message

Peng Fan (OSS) Nov. 4, 2024, 3:15 a.m. UTC
From: Peng Fan <peng.fan@nxp.com>

Without remove hook to clear wake irq, there will be kernel dump when
doing module test.
"bbnsm_pwrkey 44440000.bbnsm:pwrkey: wake irq already initialized"

Add remove hook to clear wake irq and set wakeup to false.

Fixes: 40e40fdfec3f ("Input: bbnsm_pwrkey - add bbnsm power key support")
Cc: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Signed-off-by: Peng Fan <peng.fan@nxp.com>
---

V2:
 Per Christophe JAILLET
  Use remove, not remove_new
  Drop checking bbnsm pointer in remove

 drivers/input/misc/nxp-bbnsm-pwrkey.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

Comments

Dmitry Torokhov Nov. 5, 2024, 5:48 a.m. UTC | #1
Hi Peng,

On Mon, Nov 04, 2024 at 11:15:51AM +0800, Peng Fan (OSS) wrote:
> From: Peng Fan <peng.fan@nxp.com>
> 
> Without remove hook to clear wake irq, there will be kernel dump when
> doing module test.
> "bbnsm_pwrkey 44440000.bbnsm:pwrkey: wake irq already initialized"
> 
> Add remove hook to clear wake irq and set wakeup to false.
> 
> Fixes: 40e40fdfec3f ("Input: bbnsm_pwrkey - add bbnsm power key support")
> Cc: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> Signed-off-by: Peng Fan <peng.fan@nxp.com>
> ---
> 
> V2:
>  Per Christophe JAILLET
>   Use remove, not remove_new
>   Drop checking bbnsm pointer in remove
> 
>  drivers/input/misc/nxp-bbnsm-pwrkey.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
> 
> diff --git a/drivers/input/misc/nxp-bbnsm-pwrkey.c b/drivers/input/misc/nxp-bbnsm-pwrkey.c
> index eb4173f9c820..f0bf119309dd 100644
> --- a/drivers/input/misc/nxp-bbnsm-pwrkey.c
> +++ b/drivers/input/misc/nxp-bbnsm-pwrkey.c
> @@ -187,6 +187,16 @@ static int bbnsm_pwrkey_probe(struct platform_device *pdev)
>  	return 0;
>  }
>  
> +static void bbnsm_pwrkey_remove(struct platform_device *pdev)
> +{
> +	struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
> +
> +	dev_pm_clear_wake_irq(&pdev->dev);

I wonder, could we have this done in the driver core instead of
individual drivers?

> +	device_init_wakeup(&pdev->dev, false);
> +
> +	input_unregister_device(bbnsm->input);

No need to call unregister here, it should happen automatically.

Thanks.
Peng Fan Nov. 5, 2024, 3:09 p.m. UTC | #2
Hi Dmitry,

> Subject: Re: [PATCH V2] Input: bbnsm_pwrkey - add remove hook
> 
> Hi Peng,
> 
> On Mon, Nov 04, 2024 at 11:15:51AM +0800, Peng Fan (OSS) wrote:
> > From: Peng Fan <peng.fan@nxp.com>
> >
> > Without remove hook to clear wake irq, there will be kernel dump
> when
> > doing module test.
> > "bbnsm_pwrkey 44440000.bbnsm:pwrkey: wake irq already
> initialized"
> >
> > Add remove hook to clear wake irq and set wakeup to false.
> >
> > Fixes: 40e40fdfec3f ("Input: bbnsm_pwrkey - add bbnsm power key
> > support")
> > Cc: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
> > Signed-off-by: Peng Fan <peng.fan@nxp.com>
> > ---
> >
> > V2:
> >  Per Christophe JAILLET
> >   Use remove, not remove_new
> >   Drop checking bbnsm pointer in remove
> >
> >  drivers/input/misc/nxp-bbnsm-pwrkey.c | 12 ++++++++++++
> >  1 file changed, 12 insertions(+)
> >
> > diff --git a/drivers/input/misc/nxp-bbnsm-pwrkey.c
> > b/drivers/input/misc/nxp-bbnsm-pwrkey.c
> > index eb4173f9c820..f0bf119309dd 100644
> > --- a/drivers/input/misc/nxp-bbnsm-pwrkey.c
> > +++ b/drivers/input/misc/nxp-bbnsm-pwrkey.c
> > @@ -187,6 +187,16 @@ static int bbnsm_pwrkey_probe(struct
> platform_device *pdev)
> >  	return 0;
> >  }
> >
> > +static void bbnsm_pwrkey_remove(struct platform_device *pdev) {
> > +	struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
> > +
> > +	dev_pm_clear_wake_irq(&pdev->dev);
> 
> I wonder, could we have this done in the driver core instead of
> individual drivers?

I will give a look to see whether possible to make it in
device_unbind_cleanup. But as a bug fix, I still need
to do this in remove. In future, if clear wake irq
could be in driver core, it could be remove in the 
individual driver remove path. How do you think?

> 
> > +	device_init_wakeup(&pdev->dev, false);
> > +
> > +	input_unregister_device(bbnsm->input);
> 
> No need to call unregister here, it should happen automatically.

sure. I will remove this line.

Thanks,
Peng.

> 
> Thanks.
> 
> --
> Dmitry
diff mbox series

Patch

diff --git a/drivers/input/misc/nxp-bbnsm-pwrkey.c b/drivers/input/misc/nxp-bbnsm-pwrkey.c
index eb4173f9c820..f0bf119309dd 100644
--- a/drivers/input/misc/nxp-bbnsm-pwrkey.c
+++ b/drivers/input/misc/nxp-bbnsm-pwrkey.c
@@ -187,6 +187,16 @@  static int bbnsm_pwrkey_probe(struct platform_device *pdev)
 	return 0;
 }
 
+static void bbnsm_pwrkey_remove(struct platform_device *pdev)
+{
+	struct bbnsm_pwrkey *bbnsm = platform_get_drvdata(pdev);
+
+	dev_pm_clear_wake_irq(&pdev->dev);
+	device_init_wakeup(&pdev->dev, false);
+
+	input_unregister_device(bbnsm->input);
+}
+
 static int __maybe_unused bbnsm_pwrkey_suspend(struct device *dev)
 {
 	struct platform_device *pdev = to_platform_device(dev);
@@ -223,6 +233,8 @@  static struct platform_driver bbnsm_pwrkey_driver = {
 		.of_match_table = bbnsm_pwrkey_ids,
 	},
 	.probe = bbnsm_pwrkey_probe,
+	.remove = bbnsm_pwrkey_remove,
+
 };
 module_platform_driver(bbnsm_pwrkey_driver);