• Rafael J. Wysocki's avatar
    mmc: sdio: Use empty system suspend/resume callbacks at the bus level · e841a7c6
    Rafael J. Wysocki authored
    Neil Brown reports that commit 35cd133c
    
       PM: Run the driver callback directly if the subsystem one is not there
    
    breaks suspend for his libertas wifi, because SDIO has a protocol
    where the suspend method can return -ENOSYS and this means "There is
    no point in suspending, just turn me off".  Moreover, the suspend
    methods provided by SDIO drivers are not supposed to be called by
    the PM core or bus-level suspend routines (which aren't presend for
    SDIO).  Instead, when the SDIO core gets to suspend the device's
    ancestor, it calls the device driver's suspend function, catches the
    ENOSYS, and turns the device off.
    
    The commit above breaks the SDIO core's assumption that the device
    drivers' callbacks won't be executed if it doesn't provide any
    bus-level callbacks.  If fact, however, this assumption has never
    been really satisfied, because device class or device type suspend
    might very well use the driver's callback even without that commit.
    
    The simplest way to address this problem is to make the SDIO core
    tell the PM core to ignore driver callbacks, for example by providing
    no-operation suspend/resume callbacks at the bus level for it,
    which is implemented by this change.
    Reported-and-tested-by: default avatarNeil Brown <neilb@suse.de>
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    [stable: please apply to 3.3-stable only]
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarChris Ball <cjb@laptop.org>
    e841a7c6
sdio_bus.c 7.21 KB