On 11 March 2016 at 01:47, Peng Fan <van.free...@gmail.com> wrote: > 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 <b54...@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.free...@gmail.com> > Cc: Albert Aribaud <albert.u.b...@aribaud.net> > Cc: Stefano Babic <sba...@denx.de> > Cc: Heiko Schocher <h...@denx.de> > Cc: Simon Glass <s...@chromium.org> > Cc: York Sun <york....@nxp.com> > --- > arch/arm/include/asm/imx-common/mxc_i2c.h | 10 +++ > drivers/i2c/mxc_i2c.c | 101 > +++++++++++++++++++++++++++--- > 2 files changed, 102 insertions(+), 9 deletions(-)
Reviewed-by: Simon Glass <s...@chromium.org> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot