• Tony Lindgren's avatar
    ARM: OMAP2+: Improve omap_device error for driver writers · 08c78e9d
    Tony Lindgren authored
    Drivers using pm_runtime_use_autosuspend() may not get disabled after
    -EPROBE_DEFER. On the following device driver probe, hardware state
    is different from the PM runtime state causing omap_device to produce
    the following error:
    
    omap_device_enable() called from invalid state 1
    
    And with omap_device and omap hardware being picky for PM, this will
    block any deeper idle states in hardware.
    
    Let's add a proper error message so driver writers can easily fix
    their drivers for PM.
    
    In general, the solution is to fix the drivers to follow the PM
    runtime documentation:
    
    1. For sections of code that needs the device disabled, use
       pm_runtime_put_sync_suspend() if pm_runtime_set_autosuspend() has
       been set.
    
    2. For driver exit code, use pm_runtime_dont_use_autosuspend() before
       pm_runtime_put_sync() if pm_runtime_use_autosuspend() has been
       set.
    
    Let's not return with 0 from _od_runtime_resume() as that will
    eventually lead into new drivers with broken PM runtime that will
    block deeper idle states on omaps.
    
    Cc: Alan Stern <stern@rowland.harvard.edu>
    Cc: Nishanth Menon <nm@ti.com>
    Cc: Rafael J. Wysocki <rafael@kernel.org>
    Cc: Tero Kristo <t-kristo@ti.com>
    Acked-by: default avatarKevin Hilman <khilman@baylibre.com>
    Acked-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
    08c78e9d
omap_device.c 24.4 KB