• Vaibhav Gupta's avatar
    typhoon: use generic power management · 7b46681c
    Vaibhav Gupta authored
    With legacy PM, drivers themselves were responsible for managing the
    device's power states and takes care of register states. And they use PCI
    helper functions to do it.
    
    After upgrading to the generic structure, PCI core will take care of
    required tasks and drivers should do only device-specific operations.
    
    In this driver:
    typhoon_resume() calls typhoon_wakeup() which then calls PCI helper
    functions pci_set_power_state() and pci_restore_state(). The only other
    function, using typhoon_wakeup() is typhoon_open().
    
    Thus remove the pci_*() calls from tyhpoon_wakeup() and place them in
    typhoon_open(), maintaining the order, to retain the normal behavior of
    the function
    
    Now, typhoon_suspend() calls typhoon_sleep() which then calls PCI helper
    functions pci_enable_wake(), pci_disable_device() and
    pci_set_power_state(). Other functions:
     - typhoon_open()
     - typhoon_close()
     - typhoon_init_one()
    are also invoking typhoon_sleep(). Thus, in this case, cannot simply
    move PCI helper functions call.
    
    Hence, define a new function typhoon_sleep_early() which will do all the
    operations, which typhoon_sleep() was doing before calling PCI helper
    functions. Now typhoon_sleep() will call typhoon_sleep_early() to do
    those tasks, hence, the behavior for _open(), _close and _init_one() remain
    unchanged. And typhon_suspend() only requires typhoon_sleep_early().
    
    Compile-tested only.
    Signed-off-by: default avatarVaibhav Gupta <vaibhavgupta40@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7b46681c
typhoon.c 71.3 KB