• Adrian Hunter's avatar
    mmc: sdhci: Fix regression setting power on Trats2 board · 1dceb041
    Adrian Hunter authored
    Several commits relating to setting power have been introducing
    problems by putting driver-specific rules into generic SDHCI code.
    
    Krzysztof Kozlowski reported that after commit 918f4cbd ("mmc:
    sdhci: restore behavior when setting VDD via external regulator")
    on Trats2 board there are warnings for invalid VDD  value (2.8V):
    
    [    3.119656] ------------[ cut here ]------------
    [    3.119666] WARNING: CPU: 3 PID: 90 at
    ../drivers/mmc/host/sdhci.c:1234 sdhci_do_set_ios+0x4cc/0x5e0
    [    3.119669] mmc0: Invalid vdd 0x10
    [    3.119673] Modules linked in:
    [    3.119679] CPU: 3 PID: 90 Comm: kworker/3:1 Tainted: G        W
       4.5.0-next-20160324 #23
    [    3.119681] Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
    [    3.119690] Workqueue: events_freezable mmc_rescan
    [    3.119708] [<c010e0ac>] (unwind_backtrace) from [<c010ae10>]
    (show_stack+0x10/0x14)
    [    3.119719] [<c010ae10>] (show_stack) from [<c0323260>]
    (dump_stack+0x88/0x9c)
    [    3.119728] [<c0323260>] (dump_stack) from [<c011b754>] (__warn+0xe8/0x100)
    [    3.119734] [<c011b754>] (__warn) from [<c011b7a4>]
    (warn_slowpath_fmt+0x38/0x48)
    [    3.119740] [<c011b7a4>] (warn_slowpath_fmt) from [<c0527d28>]
    (sdhci_do_set_ios+0x4cc/0x5e0)
    [    3.119748] [<c0527d28>] (sdhci_do_set_ios) from [<c0528018>]
    (sdhci_runtime_resume_host+0x60/0x114)
    [    3.119758] [<c0528018>] (sdhci_runtime_resume_host) from
    [<c0402570>] (__rpm_callback+0x2c/0x60)
    [    3.119767] [<c0402570>] (__rpm_callback) from [<c04025c4>]
    (rpm_callback+0x20/0x80)
    [    3.119773] [<c04025c4>] (rpm_callback) from [<c04034b8>]
    (rpm_resume+0x36c/0x558)
    [    3.119780] [<c04034b8>] (rpm_resume) from [<c04036f0>]
    (__pm_runtime_resume+0x4c/0x64)
    [    3.119788] [<c04036f0>] (__pm_runtime_resume) from [<c0512728>]
    (__mmc_claim_host+0x170/0x1b0)
    [    3.119795] [<c0512728>] (__mmc_claim_host) from [<c0514e2c>]
    (mmc_rescan+0x54/0x348)
    [    3.119807] [<c0514e2c>] (mmc_rescan) from [<c0130dac>]
    (process_one_work+0x120/0x3f4)
    [    3.119815] [<c0130dac>] (process_one_work) from [<c01310b8>]
    (worker_thread+0x38/0x554)
    [    3.119823] [<c01310b8>] (worker_thread) from [<c01365a4>]
    (kthread+0xdc/0xf4)
    [    3.119831] [<c01365a4>] (kthread) from [<c0107878>]
    (ret_from_fork+0x14/0x3c)
    [    3.119834] ---[ end trace a22d652aa3276886 ]---
    
    Fix by adding a 'set_power' callback and restoring the default
    behaviour prior to commit 918f4cbd ("mmc: sdhci: restore
    behavior when setting VDD via external regulator").  The desired
    behaviour of that commit is gotten by having sdhci-pxav3 provide
    its own set_power callback.
    Reported-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
    Link: http://lkml.kernel.org/r/CAJKOXPcGDnPm-Ykh6wHqV1YxfTaov5E8iVqBoBn4OJc7BnhgEQ@mail.gmail.com
    Fixes: 918f4cbd ("mmc: sdhci: restore behavior when setting VDD...)
    Tested-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
    Tested-by: default avatarLudovic Desroches <ludovic.desroches@atmel.com>
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Cc: stable@vger.kernel.org # v4.5+
    Reviewed-by: default avatarJisheng Zhang <jszhang@marvell.com>
    Tested-by: default avatarJisheng Zhang <jszhang@marvell.com>
    Tested-by: default avatarJaehoon Chung <jh80.chung@samsung.com>
    Tested-by: default avatarAnand Moon <linux.amoon@gmail.com>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    1dceb041
sdhci.c 91.7 KB