From mboxrd@z Thu Jan 1 00:00:00 1970 From: York Sun Date: Fri, 31 Jan 2014 09:41:59 -0800 Subject: [U-Boot] [PATCH v3 3/9] kmp204x: I2C deblocking support In-Reply-To: <1391172372-29210-1-git-send-email-valentin.longchamp@keymile.com> References: <1390819752-21233-4-git-send-email-valentin.longchamp@keymile.com> <1391172372-29210-1-git-send-email-valentin.longchamp@keymile.com> Message-ID: <52EBE067.5000001@freescale.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 01/31/2014 04:46 AM, Valentin Longchamp wrote: > From: Rainer Boschung > > This patch adds support for using some GPIOs that are connected to the > I2C bus to force the bus lines state and perform some bus deblocking > sequences. > > The KM common deblocking algorithm from board/keymile/common/common.c is > used. The GPIO lines used for deblocking the I2C bus are some external > GPIOs provided by the QRIO CPLD: > - SCL = GPIOA_20 > - SDA = GPIOA_21 > > The QRIO GPIOs act in an open-drain-like manner, for 0 the line is > driven low and for 1 the GPIO is set as input and the line gets > pulled-up. > > Signed-off-by: Rainer Boschung > Signed-off-by: Valentin Longchamp > > --- > > Changes in v3: > - rewrite the commit message and and the comments for more clarity > - fix the GPIO numbers that where not correct > > Changes in v2: None > > board/keymile/kmp204x/kmp204x.c | 53 ++++++++++++++++++++++++++++++++++--- > include/configs/km/kmp204x-common.h | 10 +++++++ > 2 files changed, 60 insertions(+), 3 deletions(-) > > diff --git a/board/keymile/kmp204x/kmp204x.c b/board/keymile/kmp204x/kmp204x.c > index bbb2453..726d26e 100644 > --- a/board/keymile/kmp204x/kmp204x.c > +++ b/board/keymile/kmp204x/kmp204x.c > @@ -33,12 +33,51 @@ int checkboard(void) > return 0; > } > > -/* TODO: implement the I2C deblocking function */ > -int i2c_make_abort(void) > +/* I2C deblocking uses the algorithm defined in board/keymile/common/common.c > + * 2 dedicated QRIO GPIOs externally pull the SCL and SDA lines > + * For I2C only the low state is activly driven and high state is pulled-up > + * by a resistor. Therefore the deblock GPIOs are used > + * -> as an active output to drive a low state > + * -> as an open-drain input to have a pulled-up high state > + */ > + > +/* QRIO GPIOs used for deblocking */ > +#define DEBLOCK_PORT1 GPIO_A > +#define DEBLOCK_SCL1 20 > +#define DEBLOCK_SDA1 21 You changed these macros but didn't change those below. This causes compiling errors. Please fix it and compile before sending v4. > + > +/* By default deblock GPIOs are floating */ > +static void i2c_deblock_gpio_cfg(void) > +{ > + /* set I2C bus 1 deblocking GPIOs input, but 0 value for open drain */ > + qrio_gpio_direction_input(DBLK_PORT1, DBLK_SCL1); > + qrio_gpio_direction_input(DBLK_PORT1, DBLK_SDA1); > + > + qrio_set_gpio(DBLK_PORT1, DBLK_SCL1, 0); > + qrio_set_gpio(DBLK_PORT1, DBLK_SDA1, 0); > +} York