mmc: sdhci: Fix regression setting power on Trats2 board
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
918f4cbd4340 ("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
918f4cbd4340 ("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: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Link: http://lkml.kernel.org/r/CAJKOXPcGDnPm-Ykh6wHqV1YxfTaov5E8iVqBoBn4OJc7BnhgEQ@mail.gmail.com
Fixes:
918f4cbd4340 ("mmc: sdhci: restore behavior when setting VDD...)
Tested-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Tested-by: Ludovic Desroches <ludovic.desroches@atmel.com>
Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Cc: stable@vger.kernel.org # v4.5+
Reviewed-by: Jisheng Zhang <jszhang@marvell.com>
Tested-by: Jisheng Zhang <jszhang@marvell.com>
Tested-by: Jaehoon Chung <jh80.chung@samsung.com>
Tested-by: Anand Moon <linux.amoon@gmail.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>