Message ID | 20241104031552.3475108-1-peng.fan@oss.nxp.com |
---|---|
State | New |
Headers | show |
Series | [V2] Input: bbnsm_pwrkey - add remove hook | expand |
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.
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 --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);