linux/drivers/pinctrl
Uwe Kleine-König da6c2addf6 pinctrl: mxs: atomically switch mux and drive strength config
To set the mux mode of a pin two bits must be set. Up to now this is
implemented using the following idiom:

	writel(mask, reg + CLR);
	writel(value, reg + SET);

. This however results in the mux mode being 0 between the two writes.

On my machine there is an IC's reset pin connected to LCD_D20. The
bootloader configures this pin as GPIO output-high (i.e. not holding the
IC in reset). When Linux reconfigures the pin to GPIO the short time
LCD_D20 is muxed as LCD_D20 instead of GPIO_1_20 is enough to confuse
the connected IC.

The same problem is present for the pin's drive strength setting which is
reset to low drive strength before using the right value.

So instead of relying on the hardware to modify the register setting
using two writes implement the bit toggling using read-modify-write.

Fixes: 17723111e6 ("pinctrl: add pinctrl-mxs support")
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-by: Shawn Guo <shawnguo@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2017-05-23 11:27:53 +02:00
..
aspeed pinctrl: aspeed: g5: Add pinconf support 2017-04-24 14:55:50 +02:00
bcm pinctrl: bcm: make use of raw_spinlock variants 2017-03-16 16:39:14 +01:00
berlin Pin control bulk changes for the v4.11 kernel cycle: 2017-02-21 16:34:22 -08:00
freescale pinctrl: mxs: atomically switch mux and drive strength config 2017-05-23 11:27:53 +02:00
intel pinctrl: cherryview: Extend the Chromebook DMI quirk to Intel_Strago systems 2017-05-23 10:08:40 +02:00
mediatek pinctrl: mediatek: Use real dependencies 2017-01-26 16:26:50 +01:00
meson This is the bulk of pin control changes for the v4.12 cycle: 2017-05-02 17:59:33 -07:00
mvebu pinctrl: armada-37xx: Add gpio support 2017-04-24 13:47:29 +02:00
nomadik pinctrl: nomadik: split up and comments MC0 pins 2016-11-18 09:54:32 +01:00
pxa pinctrl: pxa: Use devm_pinctrl_register() for pinctrl registration 2016-04-21 00:03:04 +02:00
qcom This is the bulk of pin control changes for the v4.12 cycle: 2017-05-02 17:59:33 -07:00
samsung This is the bulk of pin control changes for the v4.12 cycle: 2017-05-02 17:59:33 -07:00
sh-pfc This is the bulk of pin control changes for the v4.12 cycle: 2017-05-02 17:59:33 -07:00
sirf pinctrl: sirf: atlas7: make use of raw_spinlock variants 2017-03-16 16:39:15 +01:00
spear pinctrl: spear: make bool drivers explicitly non-modular 2017-02-13 14:25:55 +01:00
stm32 pinctrl: stm32: Add STM32F469 MCU support 2017-04-24 14:26:14 +02:00
sunxi pinctrl: sunxi: make use of raw_spinlock variants 2017-03-16 16:39:16 +01:00
tegra pinctrl: tegra: xusb: Silence sparse warnings 2017-04-24 18:35:54 +02:00
ti pinctrl: core: Fix pinctrl_register_and_init() with pinctrl_enable() 2017-04-07 01:08:08 +02:00
uniphier This is the bulk of pin control changes for the v4.12 cycle: 2017-05-02 17:59:33 -07:00
vt8500 pinctrl: Widen the generic pinconf argument from 16 to 24 bits 2017-01-26 15:22:32 +01:00
core.c pinctrl: core: Fix warning by removing bogus code 2017-05-22 17:36:13 +02:00
core.h pinctrl: core: Fix regression caused by delayed work for hogs 2017-01-13 16:25:17 +01:00
devicetree.c pinctrl: core: Make dt_free_map optional 2017-01-09 19:41:07 +01:00
devicetree.h pinctrl: core: Use delayed work for hogs 2017-01-03 09:26:16 +01:00
Kconfig pinctrl: Add pincontrol driver for ARTPEC-6 SoC 2017-04-07 11:48:33 +02:00
Makefile pinctrl: armada-37xx: Add pin controller support for Armada 37xx 2017-04-24 11:31:36 +02:00
pinconf-generic.c Revert "pinctrl: generic: Add bi-directional and output-enable" 2017-05-22 10:39:10 +02:00
pinconf.c pinctrl: Fix spelling typos 2017-03-14 14:42:22 +01:00
pinconf.h pinctrl: Allow configuration of pins from gpiolib based drivers 2017-01-26 15:23:01 +01:00
pinctrl-adi2-bf54x.c
pinctrl-adi2-bf60x.c added tabs instead of spaces 2015-07-16 09:39:01 +02:00
pinctrl-adi2.c pinctrl: adi2: Use devm_pinctrl_register() for pinctrl registration 2016-04-21 09:23:20 +02:00
pinctrl-adi2.h
pinctrl-amd.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2017-05-02 19:09:35 -07:00
pinctrl-amd.h pinctrl: amd: make use of raw_spinlock variants 2017-03-16 16:39:15 +01:00
pinctrl-artpec6.c pinctrl: artpec6: Fix return value check in artpec6_pmx_probe() 2017-04-28 09:40:52 +02:00
pinctrl-as3722.c pinctrl: as3722: Use devm_pinctrl_register() for pinctrl registration 2016-04-21 09:23:21 +02:00
pinctrl-at91-pio4.c pinctrl: at91-pio4: handle suspend to ram 2017-04-07 14:32:51 +02:00
pinctrl-at91.c pinctrl: at91: add support for OUTPUT config 2016-10-31 09:16:46 +01:00
pinctrl-at91.h pinctrl: at91: use own header 2014-10-29 09:28:35 +01:00
pinctrl-coh901.c pinctrl: coh901: fix initconst annotation 2016-02-15 20:40:52 +01:00
pinctrl-coh901.h
pinctrl-da850-pupd.c Merge branch 'ib-pinctrl-genprops' into devel 2017-01-26 15:27:54 +01:00
pinctrl-digicolor.c Revert "pinctrl: digicolor: add missing platform_set_drvdata() call" 2016-06-23 09:50:05 +02:00
pinctrl-falcon.c pinctrl: update my email address 2016-12-30 09:17:02 +01:00
pinctrl-lantiq.c pinctrl: update my email address 2016-12-30 09:17:02 +01:00
pinctrl-lantiq.h pinctrl: update my email address 2016-12-30 09:17:02 +01:00
pinctrl-lpc18xx.c pinctrl: Widen the generic pinconf argument from 16 to 24 bits 2017-01-26 15:22:32 +01:00
pinctrl-max77620.c pinctrl: Widen the generic pinconf argument from 16 to 24 bits 2017-01-26 15:22:32 +01:00
pinctrl-oxnas.c pinctrl: oxnas: Add support for OX820 2016-10-24 16:30:14 +02:00
pinctrl-palmas.c pinctrl: Widen the generic pinconf argument from 16 to 24 bits 2017-01-26 15:22:32 +01:00
pinctrl-pic32.c pinctrl: pic32: Use devm_pinctrl_register() for pinctrl registration 2016-04-21 09:23:24 +02:00
pinctrl-pic32.h pinctrl: pinctrl-pic32: Add PIC32 pin control driver 2016-02-05 23:54:47 +01:00
pinctrl-pistachio.c pinctrl: pistachio: fix mfio pll_lock pinmux 2016-08-22 15:28:35 +02:00
pinctrl-rockchip.c pinctrl: rockchip: avoid hardirq-unsafe functions in irq_chip 2017-03-28 11:18:50 +02:00
pinctrl-single.c pinctrl: core: Fix pinctrl_register_and_init() with pinctrl_enable() 2017-04-07 01:08:08 +02:00
pinctrl-st.c pinctrl: st: add irq_request/release_resources callbacks 2017-03-23 10:10:39 +01:00
pinctrl-sx150x.c pinctrl / gpio: Introduce .set_config() callback for GPIO chips 2017-01-26 15:27:37 +01:00
pinctrl-tb10x.c pinctrl: tb10x: Use devm_pinctrl_register() for pinctrl registration 2016-04-21 09:23:25 +02:00
pinctrl-tz1090-pdc.c pinctrl: tz1090-pdc: Use devm_pinctrl_register() for pinctrl registration 2016-04-21 09:23:26 +02:00
pinctrl-tz1090.c pinctrl: tz1090 Use devm_pinctrl_register() for pinctrl registration 2016-04-21 09:23:26 +02:00
pinctrl-u300.c pinctrl: u300: make u300_pmx_registers static 2016-06-13 09:27:43 +02:00
pinctrl-utils.c pinctrl: Rename pinctrl_utils_dt_free_map to pinctrl_utils_free_map 2016-04-01 15:06:36 +02:00
pinctrl-utils.h pinctrl: Rename pinctrl_utils_dt_free_map to pinctrl_utils_free_map 2016-04-01 15:06:36 +02:00
pinctrl-xway.c pinctrl: update my email address 2016-12-30 09:17:02 +01:00
pinctrl-zynq.c pinctrl: zynq: Add a 8 bit wide nand option 2016-11-04 15:19:00 +01:00
pinmux.c pinctrl: core: Fix warning by removing bogus code 2017-05-22 17:36:13 +02:00
pinmux.h pinctrl: core: Add generic pinctrl functions for managing groups 2017-01-03 09:26:18 +01:00