lkml.org 
[lkml]   [2021]   [Jan]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 2/3] sis-agp: use generic power management
    Date
    Drivers should do only device-specific jobs. But in general, drivers using
    legacy PCI PM framework for .suspend()/.resume() have to manage many PCI
    PM-related tasks themselves which can be done by PCI Core itself. This
    brings extra load on the driver and it directly calls PCI helper functions
    to handle them.

    Switch to the new generic framework by updating function signatures and
    define a "struct dev_pm_ops" variable to bind PM callbacks. Also, remove
    unnecessary calls to the PCI Helper functions along with the legacy
    .suspend & .resume bindings.

    After upgrading, .suspend() became an empty-body function, hence defined as
    NULL.

    Signed-off-by: Vaibhav Gupta <vaibhavgupta40@gmail.com>
    ---
    drivers/char/agp/sis-agp.c | 25 ++++++-------------------
    1 file changed, 6 insertions(+), 19 deletions(-)

    diff --git a/drivers/char/agp/sis-agp.c b/drivers/char/agp/sis-agp.c
    index 14909fc5d767..f8a02f4bef1b 100644
    --- a/drivers/char/agp/sis-agp.c
    +++ b/drivers/char/agp/sis-agp.c
    @@ -217,26 +217,14 @@ static void agp_sis_remove(struct pci_dev *pdev)
    agp_put_bridge(bridge);
    }

    -#ifdef CONFIG_PM
    +#define agp_sis_suspend NULL

    -static int agp_sis_suspend(struct pci_dev *pdev, pm_message_t state)
    +static int __maybe_unused agp_sis_resume(
    + __attribute__((unused)) struct device *dev)
    {
    - pci_save_state(pdev);
    - pci_set_power_state(pdev, pci_choose_state(pdev, state));
    -
    - return 0;
    -}
    -
    -static int agp_sis_resume(struct pci_dev *pdev)
    -{
    - pci_set_power_state(pdev, PCI_D0);
    - pci_restore_state(pdev);
    -
    return sis_driver.configure();
    }

    -#endif /* CONFIG_PM */
    -
    static const struct pci_device_id agp_sis_pci_table[] = {
    {
    .class = (PCI_CLASS_BRIDGE_HOST << 8),
    @@ -419,15 +407,14 @@ static const struct pci_device_id agp_sis_pci_table[] = {

    MODULE_DEVICE_TABLE(pci, agp_sis_pci_table);

    +static SIMPLE_DEV_PM_OPS(agp_sis_pm_ops, agp_sis_suspend, agp_sis_resume);
    +
    static struct pci_driver agp_sis_pci_driver = {
    .name = "agpgart-sis",
    .id_table = agp_sis_pci_table,
    .probe = agp_sis_probe,
    .remove = agp_sis_remove,
    -#ifdef CONFIG_PM
    - .suspend = agp_sis_suspend,
    - .resume = agp_sis_resume,
    -#endif
    + .driver.pm = &agp_sis_pm_ops,
    };

    static int __init agp_sis_init(void)
    --
    2.30.0
    \
     
     \ /
      Last update: 2021-01-12 09:15    [W:3.166 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site