linux/drivers/pinctrl
Florian Fainelli 7ceef15e5c pinctrl: Really force states during suspend/resume
commit 981ed1bfbc upstream.

In case a platform only defaults a "default" set of pins, but not a
"sleep" set of pins, and this particular platform suspends and resumes
in a way that the pin states are not preserved by the hardware, when we
resume, we would call pinctrl_single_resume() -> pinctrl_force_default()
-> pinctrl_select_state() and the first thing we do is check that the
pins state is the same as before, and do nothing.

In order to fix this, decouple the actual state change from
pinctrl_select_state() and move it pinctrl_commit_state(), while keeping
the p->state == state check in pinctrl_select_state() not to change the
caller assumptions. pinctrl_force_sleep() and pinctrl_force_default()
are updated to bypass the state check by calling pinctrl_commit_state().

[Linus Walleij]
The forced pin control states are currently only used in some pin
controller drivers that grab their own reference to their own pins.
This is equal to the pin control hogs: pins taken by pin control
devices since there are no corresponding device in the Linux device
hierarchy, such as memory controller lines or unused GPIO lines,
or GPIO lines that are used orthogonally from the GPIO subsystem
but pincontrol-wise managed as hogs (non-strict mode, allowing
simultaneous use by GPIO and pin control). For this case forcing
the state from the drivers' suspend()/resume() callbacks makes
sense and should semantically match the name of the function.

Fixes: 6e5e959dde ("pinctrl: API changes to support multiple states per device")
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
History 2018-06-16 22:21:45 +01:00
..
berlin pinctrl: berlin: fix an error code in berlin_pinctrl_probe() 2014-07-05 01:15:35 +02:00
mvebu pinctrl: mvebu: armada-38x: fix incorrect total number of GPIOs 2015-07-15 10:00:30 +01:00
sh-pfc pinctrl: sh-pfc: r8a7791: Fix IPSR comment typos 2017-08-26 02:14:27 +01:00
sirf pinctrl: sirf: fix a bad conflict resolution 2014-05-30 09:52:43 +02:00
spear pinctrl: remove redundant of_match_ptr 2013-10-08 10:02:25 +02:00
sunxi pinctrl: sunxi: add a missing function of A10/A20 pinctrl driver 2017-11-11 13:33:11 +00:00
vt8500 pinctrl: vt8500: Ensure value reg is updated when setting direction 2014-05-22 23:46:10 +02:00
core.c pinctrl: Really force states during suspend/resume 2018-06-16 22:21:45 +01:00
core.h pinctrl: Don't just pretend to protect pinctrl_maps, do it for real 2015-05-20 13:26:16 +01:00
devicetree.c pinctrl: Don't just pretend to protect pinctrl_maps, do it for real 2015-05-20 13:26:16 +01:00
devicetree.h pinctrl: core device tree mapping table parsing support 2012-04-18 13:53:10 +02:00
Kconfig pinctrl: add pinctrl driver for imx6sx 2014-05-27 11:24:28 +02:00
Makefile pinctrl: add pinctrl driver for imx6sx 2014-05-27 11:24:28 +02:00
pinconf-generic.c pinctrl: Enable "power-source" to be extracted from DT files 2014-05-28 10:16:35 +02:00
pinconf.c pinctrl: pinconf: remove warning: unused variable 'ops' 2013-12-13 13:55:15 +01:00
pinconf.h pinctrl: add function to parse generic pinconfig properties from a dt node 2013-06-16 11:57:32 +02:00
pinctrl-ab8500.c pinctrl: ab8500: Staticize some symbols 2013-04-09 09:54:00 +02:00
pinctrl-ab8505.c pinctrl: ab8505: Staticize some symbols 2013-04-09 09:59:42 +02:00
pinctrl-ab8540.c pinctrl: ab8540: Staticize some symbols 2013-04-09 09:58:02 +02:00
pinctrl-ab9540.c pinctrl: ab9540: Staticize some symbols 2013-04-09 09:55:59 +02:00
pinctrl-abx500.c mfd/pinctrl: Delete platform data header 2014-01-21 08:27:42 +00:00
pinctrl-abx500.h mfd/pinctrl: Delete platform data header 2014-01-21 08:27:42 +00:00
pinctrl-adi2-bf54x.c pinctrl: pinctrl-adi: combine multiple groups of one function together 2014-02-25 10:49:13 +01:00
pinctrl-adi2-bf60x.c pinctrl: pinctrl-adi: combine multiple groups of one function together 2014-02-25 10:49:13 +01:00
pinctrl-adi2.c pinctrl: adi2: Statize adi_gpio_irq_domain_ops 2014-04-22 08:41:35 +02:00
pinctrl-adi2.h pinctrl: pinctrl-adi: combine multiple groups of one function together 2014-02-25 10:49:13 +01:00
pinctrl-apq8064.c pinctrl: msm: Add missing sdc1 and sdc3 groups 2014-05-28 11:02:23 +02:00
pinctrl-as3722.c pinctrl: as3722: fix handling of GPIO invert bit 2014-04-22 17:04:11 +02:00
pinctrl-at91.c pinctrl/at91: Fix lockup when IRQ on PIOC and PIOD occurs 2014-05-27 11:13:10 +02:00
pinctrl-baytrail.c pinctrl: baytrail: show output gpio state correctly on Intel Baytrail 2014-11-14 15:19:54 +00:00
pinctrl-bcm281xx.c pinctrl: Rename Broadcom Capri pinctrl driver 2014-04-14 09:39:33 +02:00
pinctrl-bcm2835.c pinctrl: bcm2835: Fix memory leak in error path 2016-02-02 19:38:16 +00:00
pinctrl-coh901.c pinctrl: coh901: convert driver to use gpiolib irqchip 2014-03-26 10:31:34 +01:00
pinctrl-coh901.h pinctrl: support pinconfig on the U300 2012-03-12 22:49:03 +01:00
pinctrl-exynos.c pinctrl: exynos: Add driver data for Exynos3250 2014-04-23 09:00:25 +02:00
pinctrl-exynos.h pinctrl: exynos: Handle suspend/resume of GPIO EINT registers 2013-05-27 15:37:09 +02:00
pinctrl-exynos5440.c pinctrl: remove redundant of_match_ptr 2013-10-08 10:02:25 +02:00
pinctrl-falcon.c pinctrl: Pass all configs to driver on pin_config_set() 2013-08-28 13:34:41 +02:00
pinctrl-imx.c pinctrl: imx: fix debug message for SHARE_MUX_CONF_REG case 2017-10-12 15:27:43 +01:00
pinctrl-imx.h pinctrl: imx: Use struct type for pins 2013-08-16 14:43:56 +02:00
pinctrl-imx1-core.c pinctrl: imx27: fix offset calculation in imx_read_2bit 2014-02-03 09:08:09 +01:00
pinctrl-imx1.h pinctrl: imx1 core driver 2013-10-29 06:54:37 -07:00
pinctrl-imx6dl.c pinctrl: remove redundant of_match_ptr 2013-10-08 10:02:25 +02:00
pinctrl-imx6q.c pinctrl: remove redundant of_match_ptr 2013-10-08 10:02:25 +02:00
pinctrl-imx6sl.c pinctrl: remove redundant of_match_ptr 2013-10-08 10:02:25 +02:00
pinctrl-imx6sx.c pinctrl: add pinctrl driver for imx6sx 2014-05-27 11:24:28 +02:00
pinctrl-imx23.c Drivers: pinctrl: remove __dev* attributes. 2013-01-03 15:57:02 -08:00
pinctrl-imx25.c pinctrl: pinctrl-imx: add imx25 pinctrl driver 2013-11-25 09:08:30 +01:00
pinctrl-imx27.c pinctrl: imx27: imx27 pincontrol driver 2013-10-29 08:58:06 -07:00
pinctrl-imx28.c Drivers: pinctrl: remove __dev* attributes. 2013-01-03 15:57:02 -08:00
pinctrl-imx35.c pinctrl: remove redundant of_match_ptr 2013-10-08 10:02:25 +02:00
pinctrl-imx50.c pinctrl: imx50: add pinctrl support code for the IMX50 SoC 2013-11-06 10:06:59 +01:00
pinctrl-imx51.c pinctrl: remove redundant of_match_ptr 2013-10-08 10:02:25 +02:00
pinctrl-imx53.c pinctrl: remove redundant of_match_ptr 2013-10-08 10:02:25 +02:00
pinctrl-ipq8064.c pinctrl: qcom: ipq8064: Fix naming convention 2014-05-29 10:37:43 +02:00
pinctrl-lantiq.c pinctrl/lantiq: Free mapping configs for both pin and groups 2013-05-15 13:28:46 +02:00
pinctrl-lantiq.h pinctrl: lantiq: Fix header file include guard 2014-04-22 08:41:35 +02:00
pinctrl-msm.c pinctrl: msm: switch to using generic GPIO irqchip helpers 2014-05-23 00:40:04 +02:00
pinctrl-msm.h pinctrl: msm: Make number of functions variable 2014-04-22 08:41:34 +02:00
pinctrl-msm8x74.c pinctrl: msm: Add more MSM8X74 pin definitions 2014-05-29 10:42:59 +02:00
pinctrl-mxs.c pinctrl: mxs: atomically switch mux and drive strength config 2017-09-15 18:29:49 +01:00
pinctrl-mxs.h pinctrl: add pinctrl-mxs support 2012-05-02 01:18:27 +02:00
pinctrl-nomadik-db8500.c pinctrl/nomadik-db8500: Fix checkpatch errors 2013-03-27 22:21:32 +01:00
pinctrl-nomadik-db8540.c Drivers: pinctrl: remove __dev* attributes. 2013-01-03 15:57:02 -08:00
pinctrl-nomadik-stn8815.c pinctrl: pinctrl-nomadik-stn8815: Fix checkpatch error 2013-03-13 19:50:20 +01:00
pinctrl-nomadik.c pinctrl: nomadik: delete stray debug print 2014-04-14 09:39:33 +02:00
pinctrl-nomadik.h pinctrl: nomadik: move platform data handling into driver 2013-11-26 21:01:58 +01:00
pinctrl-palmas.c pinctrl: palmas: remove pin config BIAS_PULL_PIN_DEFAULT support 2013-10-08 13:27:27 +02:00
pinctrl-rockchip.c pinctrl: rockchip: base regmap supplied by a syscon 2014-05-09 11:16:13 +02:00
pinctrl-s3c24xx.c pinctrl: s3c24xx: off by one in s3c24xx_eint_init() 2013-08-28 14:44:25 +02:00
pinctrl-s3c64xx.c pinctrl: s3c64xx: Fix build error caused by undefined chained_irq_enter 2013-04-23 13:59:45 +02:00
pinctrl-samsung.c pinctrl: exynos: Add driver data for Exynos3250 2014-04-23 09:00:25 +02:00
pinctrl-samsung.h pinctrl: exynos: Add driver data for Exynos3250 2014-04-23 09:00:25 +02:00
pinctrl-single.c pinctrl: single: Fix missing flush of posted write for a wakeirq 2016-08-22 22:38:17 +01:00
pinctrl-st.c pinctrl: st: Fix irqmux handler 2014-07-15 20:55:15 +02:00
pinctrl-tb10x.c pinctrl/TB10x: Fix signedness bug 2014-04-22 14:55:02 +02:00
pinctrl-tegra.c pinctrl: tegra: print better error messages 2014-04-22 16:53:43 +02:00
pinctrl-tegra.h pinctrl: tegra: add missing kerneldoc 2014-04-22 16:55:41 +02:00
pinctrl-tegra20.c pinctrl: tegra: remove fsafe from data tables 2014-04-22 16:50:24 +02:00
pinctrl-tegra30.c pinctrl: tegra: remove fsafe from data tables 2014-04-22 16:50:24 +02:00
pinctrl-tegra114.c pinctrl: tegra: remove fsafe from data tables 2014-04-22 16:50:24 +02:00
pinctrl-tegra124.c pinctrl: tegra: remove fsafe from data tables 2014-04-22 16:50:24 +02:00
pinctrl-tz1090-pdc.c pinctrl: Pass all configs to driver on pin_config_set() 2013-08-28 13:34:41 +02:00
pinctrl-tz1090.c pinctrl: Pass all configs to driver on pin_config_set() 2013-08-28 13:34:41 +02:00
pinctrl-u300.c pinctrl: Pass all configs to driver on pin_config_set() 2013-08-28 13:34:41 +02:00
pinctrl-utils.c pinctrl: utils: include export.h to avoid warnings 2013-08-28 15:50:33 +02:00
pinctrl-utils.h pinctrl: add utility functions for add map/configs 2013-08-14 21:00:41 +02:00
pinctrl-vf610.c pinctrl: remove redundant of_match_ptr 2013-10-08 10:02:25 +02:00
pinctrl-xway.c pinctrl: lantiq: remove bogus of_gpio_chip_add 2015-02-04 10:57:48 +00:00
pinmux.c pinctrl: allows not to define the get_group_pins operation 2014-04-22 14:47:02 +02:00
pinmux.h pinctrl: ifdef CONFIG_DEBUG_FS cleanup 2012-04-18 13:53:12 +02:00