android_kernel_samsung_sm8650/drivers/pinctrl
Nishanth Menon 003910ebc8 pinctrl: Introduce TI IOdelay configuration driver
SoC family such as DRA7 family of processors have, in addition
to the regular muxing of pins (as done by pinctrl-single), a separate
hardware module called IODelay which is also expected to be configured.
The "IODelay" module has it's own register space that is independent
of the control module and the padconf register area.

With recent changes to the pinctrl framework, we can now support
this hardware with a reasonably minimal driver by using #pinctrl-cells,
GENERIC_PINCTRL_GROUPS and GENERIC_PINMUX_FUNCTIONS.

It is advocated strongly in TI's official documentation considering
the existing design of the DRA7 family of processors during mux or
IODelay reconfiguration, there is a potential for a significant glitch
which may cause functional impairment to certain hardware. It is
hence recommended to do as little of muxing as absolutely necessary
without I/O isolation (which can only be done in initial stages of
bootloader).

NOTE: with the system wide I/O isolation scheme present in DRA7 SoC
family, it is not reasonable to do stop all I/O operations for every
such pad configuration scheme. So, we will let it glitch when used in
this mode.

Even with the above limitation, certain functionality such as MMC has
mandatory need for IODelay reconfiguration requirements, depending on
speed of transfer. In these cases, with careful examination of usecase
involved, the expected glitch can be controlled such that it does not
impact functionality.

In short, IODelay module support as a padconf driver being introduced
here is not expected to do SoC wide I/O Isolation and is meant for
a limited subset of IODelay configuration requirements that need to
be dynamic and whose glitchy behavior will not cause functionality
failure for that interface.

IMPORTANT NOTE: we take the approach of keeping LOCK_BITs cleared
to 0x0 at all times, even when configuring Manual IO Timing Modes.
This is done by eliminating the LOCK_BIT=1 setting from Step
of the Manual IO timing Mode configuration procedure. This option
leaves the CFG_* registers unprotected from unintended writes to the
CTRL_CORE_PAD_* registers while Manual IO Timing Modes are configured.

This approach is taken to allow for a generic driver to exist in kernel
world that has to be used carefully in required usecases.

Signed-off-by: Nishanth Menon <nm@ti.com>
Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com>
[tony@atomide.com: updated to use generic pinctrl functions, added
 binding documentation, updated comments]
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2017-01-09 19:43:21 +01:00
..
aspeed pinctrl: aspeed: Fix kerneldoc return descriptions 2016-12-28 01:23:10 +01:00
bcm ARM: DT updates for v4.10 2016-12-15 15:50:24 -08:00
berlin pinctrl: berlin: Use devm_pinctrl_register() for pinctrl registration 2016-04-21 00:02:13 +02:00
freescale pinctrl: imx: use generic pinmux helpers for managing functions 2017-01-03 09:26:21 +01:00
intel Bulk pin control changes for the v4.10 kernel cycle: 2016-12-13 07:59:10 -08:00
mediatek pinctrl: update my email address 2016-12-30 09:17:02 +01:00
meson pinctrl: meson: Add GXL pinctrl definitions 2016-11-04 23:05:06 +01:00
mvebu pinctrl: mvebu: orion5x: Generalise mv88f5181l support for 88f5181 2016-09-21 11:49:18 +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 pinctrl: qcom: msm8660: rename some SDC1->SDC4 2017-01-03 09:26:20 +01:00
samsung pinctrl: samsung: Add GPF support for Exynos5433 2016-11-15 09:42:44 +01:00
sh-pfc pinctrl: sh-pfc: r8a7795: Add group for QSPI0 and QSPI1 pins 2016-11-16 10:29:14 +01:00
sirf pinctrl: sirf: atlas7: Improve code layout 2016-12-30 09:14:55 +01:00
spear pinctrl: spear: Use devm_pinctrl_register() for pinctrl registration 2016-04-21 00:03:18 +02:00
stm32 pinctrl: stm32: activate strict mux mode 2016-12-30 09:06:39 +01:00
sunxi pinctrl: sunxi: Remove old sun5i pinctrl drivers 2017-01-09 15:44:02 +01:00
tegra This is the bulk of pin control changes for the v4.8 kernel cycle. 2016-07-28 17:06:51 -07:00
ti pinctrl: Introduce TI IOdelay configuration driver 2017-01-09 19:43:21 +01:00
uniphier pinctrl: uniphier: add Ethernet pin-mux settings 2016-07-11 09:53:25 +02:00
vt8500 pinctrl: vt8500: make bool drivers explicitly non-modular 2016-11-15 10:04:20 +01:00
core.c pinctrl: core: Make dt_free_map optional 2017-01-09 19:41:07 +01:00
core.h pinctrl: core: Add generic pinctrl functions for managing groups 2017-01-03 09:26:18 +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: Introduce TI IOdelay configuration driver 2017-01-09 19:43:21 +01:00
Makefile pinctrl: Introduce TI IOdelay configuration driver 2017-01-09 19:43:21 +01:00
pinconf-generic.c pinctrl: generic: Parse pinmux init nodes if node status is okay 2016-10-29 10:31:58 +02:00
pinconf.c pinctrl: pinconf: separate config parameters with commas for debugfs 2016-05-31 10:29:06 +02:00
pinconf.h pinctrl: pinconf-generic: Allow driver to specify DT params 2015-01-11 22:32:19 +01: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 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: pinctrl-adi: combine multiple groups of one function together 2014-02-25 10:49:13 +01:00
pinctrl-amd.c pinctrl: amd: fix compilation warning 2017-01-03 09:26:21 +01:00
pinctrl-amd.h pinctrl: amd: Add support for additional GPIO 2016-12-28 13:26:09 +01: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: make it explicitly non-modular 2016-06-13 08:40:14 +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: support pinconfig on the U300 2012-03-12 22:49:03 +01:00
pinctrl-da850-pupd.c pinctrl: New driver for TI DA850/OMAP-L138/AM18XX pinconf 2016-12-07 15:27:00 +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: lpc18xx: make it explicitly non-modular 2016-06-13 08:28:18 +02:00
pinctrl-max77620.c pinctrl: max77620: Remove unused structure definition 2016-06-15 08:37:40 +02:00
pinctrl-oxnas.c pinctrl: oxnas: Add support for OX820 2016-10-24 16:30:14 +02:00
pinctrl-palmas.c pinctrl: palmas: fix a possible NULL dereference 2016-08-22 14:11:00 +02: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: add support for rk1108 2016-11-16 20:34:00 +01:00
pinctrl-single.c pinctrl: single: Use generic pinmux helpers for managing functions 2017-01-03 09:26:19 +01:00
pinctrl-st.c Bulk pin control changes for the v4.10 kernel cycle: 2016-12-13 07:59:10 -08:00
pinctrl-sx150x.c pinctrl: sx150x: use new nested IRQ infrastructure 2016-12-07 16:02:55 +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: Add generic pinctrl functions for managing groups 2017-01-03 09:26:18 +01:00
pinmux.h pinctrl: core: Add generic pinctrl functions for managing groups 2017-01-03 09:26:18 +01:00