diff mbox series

[v1,2/6,media] cx23885: use generic power management

Message ID 20200629073604.205478-3-vaibhavgupta40@gmail.com
State New
Headers show
Series pci: use generic power management | expand

Commit Message

Vaibhav Gupta June 29, 2020, 7:36 a.m. UTC
The .suspend() and .resume() callbacks are not defined for this driver.
Still, their power managemgement stucture can be easily upgraded to
gemeric, without affecting its normal behaviour.

Hence, define them NULL and use struct dev_pm_ops type to bind them.

Compile-tested only.

Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
---
 drivers/media/pci/cx23885/cx23885-core.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

Comments

Hans Verkuil July 13, 2020, 10:01 a.m. UTC | #1
On 29/06/2020 09:36, Vaibhav Gupta wrote:
> The .suspend() and .resume() callbacks are not defined for this driver.

> Still, their power managemgement stucture can be easily upgraded to


management structure

> gemeric, without affecting its normal behaviour.


generic

> 

> Hence, define them NULL and use struct dev_pm_ops type to bind them.

> 

> Compile-tested only.

> 

> Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>

> ---

>  drivers/media/pci/cx23885/cx23885-core.c | 16 ++++++++++------

>  1 file changed, 10 insertions(+), 6 deletions(-)

> 

> diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c

> index 7e0b0b7cc2a3..da9ee7270dfd 100644

> --- a/drivers/media/pci/cx23885/cx23885-core.c

> +++ b/drivers/media/pci/cx23885/cx23885-core.c

> @@ -2230,14 +2230,18 @@ static const struct pci_device_id cx23885_pci_tbl[] = {

>  };

>  MODULE_DEVICE_TABLE(pci, cx23885_pci_tbl);

>  

> +#define cx23885_suspend NULL

> +#define cx23885_resume NULL

> +

> +static SIMPLE_DEV_PM_OPS(cx23885_pm_ops, cx23885_suspend, cx23885_resume);

> +

>  static struct pci_driver cx23885_pci_driver = {

> -	.name     = "cx23885",

> -	.id_table = cx23885_pci_tbl,

> -	.probe    = cx23885_initdev,

> -	.remove   = cx23885_finidev,

> +	.name      = "cx23885",

> +	.id_table  = cx23885_pci_tbl,

> +	.probe     = cx23885_initdev,

> +	.remove    = cx23885_finidev,

>  	/* TODO */

> -	.suspend  = NULL,

> -	.resume   = NULL,

> +	.driver.pm = &cx23885_pm_ops,


I don't entirely understand this. Wouldn't it be sufficient to just
drop the .suspend/.resume assignments here? It is now required for
driver.pm to be non-NULL?

I'm not up to speed on the changes, but normally you can leave things
NULL if you don't support a feature (PM in this case).

Regards,

	Hans

>  };

>  

>  static int __init cx23885_init(void)

>
Bjorn Helgaas July 14, 2020, 12:38 a.m. UTC | #2
On Mon, Jul 13, 2020 at 12:01:51PM +0200, Hans Verkuil wrote:
> On 29/06/2020 09:36, Vaibhav Gupta wrote:

> > The .suspend() and .resume() callbacks are not defined for this driver.

> > Still, their power managemgement stucture can be easily upgraded to

> 

> management structure

> 

> > gemeric, without affecting its normal behaviour.

> 

> generic

> 

> > Hence, define them NULL and use struct dev_pm_ops type to bind them.

> > 

> > Compile-tested only.

> > 

> > Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>

> > ---

> >  drivers/media/pci/cx23885/cx23885-core.c | 16 ++++++++++------

> >  1 file changed, 10 insertions(+), 6 deletions(-)

> > 

> > diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c

> > index 7e0b0b7cc2a3..da9ee7270dfd 100644

> > --- a/drivers/media/pci/cx23885/cx23885-core.c

> > +++ b/drivers/media/pci/cx23885/cx23885-core.c

> > @@ -2230,14 +2230,18 @@ static const struct pci_device_id cx23885_pci_tbl[] = {

> >  };

> >  MODULE_DEVICE_TABLE(pci, cx23885_pci_tbl);

> >  

> > +#define cx23885_suspend NULL

> > +#define cx23885_resume NULL

> > +

> > +static SIMPLE_DEV_PM_OPS(cx23885_pm_ops, cx23885_suspend, cx23885_resume);

> > +

> >  static struct pci_driver cx23885_pci_driver = {

> > -	.name     = "cx23885",

> > -	.id_table = cx23885_pci_tbl,

> > -	.probe    = cx23885_initdev,

> > -	.remove   = cx23885_finidev,

> > +	.name      = "cx23885",

> > +	.id_table  = cx23885_pci_tbl,

> > +	.probe     = cx23885_initdev,

> > +	.remove    = cx23885_finidev,

> >  	/* TODO */

> > -	.suspend  = NULL,

> > -	.resume   = NULL,

> > +	.driver.pm = &cx23885_pm_ops,

> 

> I don't entirely understand this. Wouldn't it be sufficient to just

> drop the .suspend/.resume assignments here? It is now required for

> driver.pm to be non-NULL?

> 

> I'm not up to speed on the changes, but normally you can leave things

> NULL if you don't support a feature (PM in this case).


I think this patch will break things.  Previously, we had:

  cx23885_pci_driver.suspend == NULL
  cx23885_pci_driver.resume == NULL
  cx23885_pci_driver.driver.pm == NULL

pci_pm_suspend() looks like:

  if (pci_has_legacy_pm_support(pci_dev))
    return pci_legacy_suspend(dev, PMSG_SUSPEND);

  if (!pm) {
    pci_pm_default_suspend(pci_dev);
    return 0;
  }

pci_has_legacy_pm_support() was false since drv->suspend and
drv->resume are both NULL, so we'd take the pci_pm_default_suspend()
path.  After this patch, driver.pm would no longer be NULL, so we'd
take a different path that is clearly not equivalent.

I think you should do this:

  - 	/* TODO */
  -	.suspend  = NULL,
  -	.resume   = NULL,

and leave .driver.pm NULL by not mentioning it at all.  That should be
identical at the object code level since those are the defaults
anyway.

That almost looks like useless churn, but the point of this patch is
to remove use of PCI legacy PM (pci_driver.suspend and .resume) so we
can completely remove that infrastructure from the PCI core, including
the .suspend and .resume members of struct pci_driver, so we really do
need to do it.

Bjorn
Vaibhav Gupta July 14, 2020, 10:52 a.m. UTC | #3
On Mon, Jul 13, 2020 at 07:38:14PM -0500, Bjorn Helgaas wrote:
> On Mon, Jul 13, 2020 at 12:01:51PM +0200, Hans Verkuil wrote:

> > On 29/06/2020 09:36, Vaibhav Gupta wrote:

> > 

> > I don't entirely understand this. Wouldn't it be sufficient to just

> > drop the .suspend/.resume assignments here? It is now required for

> > driver.pm to be non-NULL?

> > 

> > I'm not up to speed on the changes, but normally you can leave things

> > NULL if you don't support a feature (PM in this case).

> 

> I think this patch will break things.  Previously, we had:

> 

>   cx23885_pci_driver.suspend == NULL

>   cx23885_pci_driver.resume == NULL

>   cx23885_pci_driver.driver.pm == NULL

> 

> pci_pm_suspend() looks like:

> 

>   if (pci_has_legacy_pm_support(pci_dev))

>     return pci_legacy_suspend(dev, PMSG_SUSPEND);

> 

>   if (!pm) {

>     pci_pm_default_suspend(pci_dev);

>     return 0;

>   }

> 

> pci_has_legacy_pm_support() was false since drv->suspend and

> drv->resume are both NULL, so we'd take the pci_pm_default_suspend()

> path.  After this patch, driver.pm would no longer be NULL, so we'd

> take a different path that is clearly not equivalent.

> 

> I think you should do this:

> 

>   - 	/* TODO */

>   -	.suspend  = NULL,

>   -	.resume   = NULL,

> 

> and leave .driver.pm NULL by not mentioning it at all.  That should be

> identical at the object code level since those are the defaults

> anyway.

> 

> That almost looks like useless churn, but the point of this patch is

> to remove use of PCI legacy PM (pci_driver.suspend and .resume) so we

> can completely remove that infrastructure from the PCI core, including

> the .suspend and .resume members of struct pci_driver, so we really do

> need to do it.

Okay!

Thanks!
-- Vaibhav Gupta
> 

> Bjorn
diff mbox series

Patch

diff --git a/drivers/media/pci/cx23885/cx23885-core.c b/drivers/media/pci/cx23885/cx23885-core.c
index 7e0b0b7cc2a3..da9ee7270dfd 100644
--- a/drivers/media/pci/cx23885/cx23885-core.c
+++ b/drivers/media/pci/cx23885/cx23885-core.c
@@ -2230,14 +2230,18 @@  static const struct pci_device_id cx23885_pci_tbl[] = {
 };
 MODULE_DEVICE_TABLE(pci, cx23885_pci_tbl);
 
+#define cx23885_suspend NULL
+#define cx23885_resume NULL
+
+static SIMPLE_DEV_PM_OPS(cx23885_pm_ops, cx23885_suspend, cx23885_resume);
+
 static struct pci_driver cx23885_pci_driver = {
-	.name     = "cx23885",
-	.id_table = cx23885_pci_tbl,
-	.probe    = cx23885_initdev,
-	.remove   = cx23885_finidev,
+	.name      = "cx23885",
+	.id_table  = cx23885_pci_tbl,
+	.probe     = cx23885_initdev,
+	.remove    = cx23885_finidev,
 	/* TODO */
-	.suspend  = NULL,
-	.resume   = NULL,
+	.driver.pm = &cx23885_pm_ops,
 };
 
 static int __init cx23885_init(void)