• Johan Hovold's avatar
    USB: musb: dsps: add explicit runtime resume at suspend · 706d61b2
    Johan Hovold authored
    The musb_dsps driver is special in that the parent (glue) device's
    driver is accessing registers mapped by the child. The clock is however
    shared and is managed by the grandparent device.
    
    Since commit 869c5978 ("usb: musb: dsps: add support for suspend and
    resume") the dsps driver has been accessing these registers as part of
    suspend and resume.
    
    The parent driver obviously cannot runtime resume the child during
    system suspend and is currently relying on the fact that the child will
    be RPM_ACTIVE throughout suspend. The suspend implementation also makes
    sure to check that the child is indeed present (and hence the clock
    enabled) before accessing the registers.
    
    Let's add an explicit runtime resume of the glue device itself to enable
    the clock before doing the register accesses in case these assumptions ever
    change (i.e. if the child is left runtime suspended).
    
    Note that the glue-timer cancellation is moved after the child-presence
    check to keep error handling simple. This should be fine as the timer is
    not setup until the controller is being registered and at that time
    glue->musb and its driver data have already been initialised.
    
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: Daniel Mack <zonque@gmail.com>
    Cc: Tony Lindgren <tony@atomide.com>
    Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
    Signed-off-by: default avatarBin Liu <b-liu@ti.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    706d61b2
musb_dsps.c 27.4 KB