u-boot-brain/arch/arm/include/asm
Peng Fan e1bed80272 dm: i2c: mxc_i2c: implement i2c_idle_bus
Implement i2c_idle_bus in driver, then setup_i2c can
be dropped for boards which enable DM_I2C/DM_GPIO/PINCTRL.
The i2c_idle_bus force bus idle flow follows setup_i2c in
arch/arm/imx-common/i2c-mxv7.c

This patch is an implementation following linux kernel patch:
"
commit 1c4b6c3bcf30d0804db0d0647d8ebeb862c6f7e5
Author: Gao Pan <b54642@freescale.com>
Date:   Fri Oct 23 20:28:54 2015 +0800

    i2c: imx: implement bus recovery

    Implement bus recovery methods for i2c-imx so we can recover from
    situations where SCL/SDA are stuck low.

    Once i2c bus SCL/SDA are stuck low during transfer, config the i2c
    pinctrl to gpio mode by calling pinctrl sleep set function, and then
    use GPIO to emulate the i2c protocol to send nine dummy clock to recover
    i2c device. After recovery, set i2c pinctrl to default group setting.
"

See Documentation/devicetree/bindings/i2c/i2c-imx.txt for detailed
description.
1. Introuduce scl_gpio/sda_gpio/bus in mxc_i2c_bus.
2. Discard the __weak attribute for i2c_idle_bus and implement it,
   since we have pinctrl driver/driver model gpio driver. We can
   use device tree, but not let board code to do this.
3. gpio state for mxc_i2c is not a must, but it is recommended. If
   there is no gpio state, driver will give tips, but not fail.
4. The i2c controller was first probed, default pinctrl state will
   be used, so when need to use gpio function, need to do
   "pinctrl_select_state(dev, "gpio")" and after force bus idle,
   need to switch back "pinctrl_select_state(dev, "default")".

This is example about how to use the gpio force bus
idle function:
"
 &i2c1 {
 	clock-frequency = <100000>;
	pinctrl-names = "default", "gpio";
 	pinctrl-0 = <&pinctrl_i2c1>;
	pinctrl-1 = <&pinctrl_i2c1_gpio>;
	scl-gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>;
	sda-gpios = <&gpio1 29 GPIO_ACTIVE_HIGH>;
	status = "okay";
	[....]
 };

[.....]

	pinctrl_i2c1_gpio: i2c1grp_gpio {
		fsl,pins = <
			MX6UL_PAD_UART4_TX_DATA__GPIO1_IO28 0x1b8b0
			MX6UL_PAD_UART4_RX_DATA__GPIO1_IO29 0x1b8b0
		>;
	};
"

Signed-off-by: Peng Fan <van.freenix@gmail.com>
Cc: Albert Aribaud <albert.u.boot@aribaud.net>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Heiko Schocher <hs@denx.de>
Cc: Simon Glass <sjg@chromium.org>
Cc: York Sun <york.sun@nxp.com>
2016-03-28 09:22:58 +02:00
..
arch-am33xx ARM: am43xx: Enable QUAD read and EDMA support for ti_qspi 2015-11-17 23:43:29 +05:30
arch-armada100 ARM: remove CONFIG_ARM926EJS defines 2014-11-20 11:28:25 -05:00
arch-armv7 ARMv7: Factor out reusable timer_wait from sunxi/psci_sun7i.S 2015-07-20 11:44:38 -07:00
arch-bcm281xx usb: gadget: bcm_udc_otg files 2015-07-22 08:57:54 +02:00
arch-bcmcygnus arm: bcmcygnus: Enable Ethernet support 2015-08-12 20:47:28 -04:00
arch-bcmnsp arm: add Cygnus and NSP boards 2014-08-30 07:46:40 -04:00
arch-ep93xx arm: ep9315: Return back Cirrus Logic EDB9315A board support 2014-07-04 23:45:48 +02:00
arch-fsl-layerscape driver/ddr/fsl: Add workaround for erratum A-009803 2016-03-21 12:42:13 -07:00
arch-hi6220 driver: gpio: hikey: Fix pointer conversion warnings for hikey 2015-11-12 15:58:59 -05:00
arch-imx imx: cpu: move common chip revision id's 2015-10-30 15:20:56 +01:00
arch-lpc32xx arm: lpc32xx: switch SPL builds to driver model 2016-01-13 21:05:22 -05:00
arch-ls102xa arm: ls102xa: fdt: Update FSL_QSPI_COMPAT and FSL_DSPI_COMPAT 2016-03-21 12:42:11 -07:00
arch-mvebu arm: mvebu: spi.h: Add registers for direct write access 2016-03-24 09:48:07 +01:00
arch-mx5 imx: cpu: move common chip revision id's 2015-10-30 15:20:56 +01:00
arch-mx6 imx: mx6: implement functions to boot auxiliary core 2016-02-21 11:46:26 +01:00
arch-mx7 imx: mx7: implement functions to boot auxiliary core 2016-02-21 11:46:26 +01:00
arch-mx25 imx: cpu: move common chip revision id's 2015-10-30 15:20:56 +01:00
arch-mx27 i2c, mxc: rework i2c base address names for different SoCs 2015-05-26 14:17:00 +02:00
arch-mx31 imx-common: consolidate macros and prototypes into sys_proto.h 2015-09-02 15:29:14 +02:00
arch-mx35 imx-common: consolidate macros and prototypes into sys_proto.h 2015-09-02 15:29:14 +02:00
arch-mxs ARM: mxs: allow boards to select DC-DC switching clock source 2016-01-03 15:56:36 +01:00
arch-omap3 omap3: Use a define for reboot reason offset 2016-03-15 15:10:48 -04:00
arch-omap4 omap4: Reboot mode support 2016-03-15 15:12:53 -04:00
arch-omap5 ARM: OMAP5/DRA7: Expose do_set_iodelay 2016-03-27 09:12:15 -04:00
arch-orion5x edminiv2: switch to SPL 2015-02-25 07:59:50 +01:00
arch-pxa arm: pxa: use common timer functions 2015-08-24 20:30:37 +02:00
arch-rmobile Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
arch-rockchip rockchip: video: Add LVDS support in vop driver 2016-03-14 22:24:10 +01:00
arch-s3c24x0 mtd: nand: s3c: Unify the register definition and naming 2014-11-26 23:21:43 -06:00
arch-sa1100 Move architecture-specific includes to arch/$ARCH/include/asm 2010-04-13 09:13:12 +02:00
arch-spear arm: spear: Add command to switch between 1-bit HW ECC and SW BCH4 2015-09-11 17:15:14 -04:00
arch-stm32f1 gpio: stm32_gpio: move base addresses to the soc file 2016-02-24 18:42:50 -05:00
arch-stm32f4 stm32: stm32f4: move flash driver to mtd driver location 2016-03-26 18:49:28 -04:00
arch-stm32f7 stm32f746-disco: enable flash support 2016-03-26 18:49:28 -04:00
arch-stv0991 stv0991: configure clock & pad muxing for qspi 2015-07-03 13:50:53 +05:30
arch-sunxi sunxi: Fix gmac not working due to cpu_eth_init no longer being called 2016-03-23 22:04:13 +01:00
arch-tegra tegra: video: Clean up the old LCD/PWM driver code 2016-02-16 09:17:53 -07:00
arch-tegra20 tegra: video: Move LCD enums into the driver 2016-02-16 09:17:53 -07:00
arch-tegra30 Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
arch-tegra114 Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
arch-tegra124 Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
arch-tegra210 ARM: tegra: Implement clk_m 2015-09-16 16:10:22 -07:00
arch-vf610 colibri-vf: Disable pull-up configuration in GPIO pin mux 2016-03-02 14:47:16 +01:00
arch-zynqmp ARM: zynq: Remove unused SPI base addresses 2016-02-22 16:20:59 +01:00
armv8 arm64: Remove non-full-va map code 2016-03-15 15:13:10 -04:00
imx-common dm: i2c: mxc_i2c: implement i2c_idle_bus 2016-03-28 09:22:58 +02:00
iproc-common arm: add Cygnus and NSP boards 2014-08-30 07:46:40 -04:00
kona-common bcm281xx: add support for "USB OTG clock" 2014-12-29 16:31:23 -05:00
proc-armv ARM: add missing HYP mode constant 2014-07-28 17:06:35 +02:00
ti-common driver: net: keystone_net: add support for rgmii phy 2015-10-22 14:22:23 -04:00
armv7.h virt-dt: Allow reservation of secure region when in a RAM carveout 2015-05-13 09:24:14 -07:00
armv7m.h Change e-mail address of Kamil Lulko 2015-12-05 18:22:32 -05:00
assembler.h arm: build arch memset/memcpy in Thumb2 mode 2015-01-09 10:20:22 -05:00
atomic.h arm, ubifs: fix gcc5.x compiler warning 2016-01-20 10:03:58 -05:00
bitops.h arm, ubifs: fix gcc5.x compiler warning 2016-01-20 10:03:58 -05:00
bootm.h Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
byteorder.h armv8: Use __aarch64__ rather than CONFIG_ARM64 in some cases 2014-01-10 10:10:23 +01:00
cache.h arm: support Thumb-1 with CONFIG_SYS_THUMB_BUILD 2015-11-10 15:03:48 +01:00
config.h armv8/fsl_lsch3: Change arch to fsl-layerscape 2015-10-29 10:34:00 -07:00
davinci_rtc.h am33xx, davinci: Create and use <asm/davinci_rtc.h> 2013-11-01 15:30:22 -04:00
dma-mapping.h arm: asm: dma-mapping: added dma_free_coherent API 2015-04-14 05:48:09 +02:00
ehci-omap.h Add more SPDX-License-Identifier tags 2016-01-19 08:31:21 -05:00
emif.h ARM: DRA7: DDR: Enable SR in Power Management Control 2016-03-15 21:30:19 -04:00
errno.h Move architecture-specific includes to arch/$ARCH/include/asm 2010-04-13 09:13:12 +02:00
fsl_secure_boot.h Kconfig: Move CONFIG_FIT and related options to Kconfig 2016-03-14 19:18:07 -04:00
gic.h arm64 patch: gicv3 support 2014-04-08 00:15:12 +02:00
global_data.h arm64: Remove non-full-va map code 2016-03-15 15:13:10 -04:00
gpio.h gpio: do not include <asm/arch/gpio.h> for UniPhier 2016-02-29 03:50:15 +09:00
hardware.h Move architecture-specific includes to arch/$ARCH/include/asm 2010-04-13 09:13:12 +02:00
io.h Data types defined for 64 bit physical address 2015-10-29 10:33:57 -07:00
linkage.h arm: adapt asm/linkage.h from Linux 2012-05-15 08:31:26 +02:00
mach-types.h arm: Remove snowball and u8500_href boards 2015-09-11 14:08:06 -04:00
macro.h Armv8: Initializing CNTVOFF_EL2 2015-04-16 11:27:15 +02:00
memory.h include: delete include/linux/config.h 2013-11-08 15:25:13 -05:00
omap_common.h ARM: DRA72x: Add support for detection of SR2.0 2016-03-27 09:12:12 -04:00
omap_gpio.h gpio: omap: Drop 'method' parameter 2015-08-12 20:48:06 -04:00
omap_mmc.h omap_hsmmc: update struct hsmmc to accomodate base address from DT 2015-10-22 14:22:28 -04:00
omap_musb.h Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
pl310.h arm: socfpga: enable data/inst prefetch and shared override in the L2 2015-10-17 01:47:31 +02:00
posix_types.h armv8: Use __aarch64__ rather than CONFIG_ARM64 in some cases 2014-01-10 10:10:23 +01:00
processor.h Remove ${objtree}/include/asm/proc/ link 2014-06-11 16:27:05 -04:00
psci.h ARM: Add board-specific initialization hook for PSCI 2015-05-13 09:24:15 -07:00
ptrace.h Remove ${objtree}/include/asm/proc/ link 2014-06-11 16:27:05 -04:00
sections.h Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00
secure.h ARM: HYP/non-sec: allow relocation to secure RAM 2014-07-28 17:19:09 +02:00
setup.h arm bootm: Allow to pass board specified atags 2012-10-30 15:28:05 -07:00
spl.h spl: define BOOT_DEVICE_USB 2016-02-14 16:36:13 +09:00
string.h arm: Use optimized memcpy and memset from linux 2011-04-27 19:38:07 +02:00
system.h arm: Add support for HYP mode and LPAE page tables 2016-03-27 09:12:17 -04:00
types.h ARM: asm: types: Introduce DMA_ADDR_T_64BIT 2016-03-27 09:13:03 -04:00
u-boot-arm.h common: Move dram_init() declaration to common location 2015-02-09 15:08:48 +01:00
u-boot.h arm: Drop old non-generic-board code 2015-09-28 10:48:24 -04:00
unaligned.h arm64: core support 2014-01-09 16:08:44 +01:00
utils.h Add GPL-2.0+ SPDX-License-Identifier to source files 2013-07-24 09:44:38 -04:00