From 734d1cef29e8333e423c6bf5829cd17677f419e0 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Sat, 6 Apr 2013 08:04:17 -0600 Subject: Fix LPC178x I2C mode GPIO configuration --- nuttx/arch/arm/src/lpc17xx/chip/lpc178x_iocon.h | 16 ++++++++-------- nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.c | 4 ++-- nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.h | 7 +++++-- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/nuttx/arch/arm/src/lpc17xx/chip/lpc178x_iocon.h b/nuttx/arch/arm/src/lpc17xx/chip/lpc178x_iocon.h index 33e883c4e..ab93d08f9 100755 --- a/nuttx/arch/arm/src/lpc17xx/chip/lpc178x_iocon.h +++ b/nuttx/arch/arm/src/lpc17xx/chip/lpc178x_iocon.h @@ -348,17 +348,17 @@ /* Slew rate modes */ -#define IOCON_SLEWMODE_NORMAL (0 << IOCON_SLEW_SHIFT) -#define IOCON_SLEWMODE_FAST (1 << IOCON_SLEW_SHIFT) +#define IOCON_SLEWMODE_NORMAL (0 << IOCON_SLEW_SHIFT) +#define IOCON_SLEWMODE_FAST (1 << IOCON_SLEW_SHIFT) /* I2C modes */ -#define IOCON_I2CMODE_SHIFT (IOCON_I2CHS_SHIFT) -#define IOCON_I2CMODE_MASK (3 << IOCON_I2CMODE_SHIFT) -#define IOCON_I2CMODE_FAST (0 << IOCON_I2CMODE_SHIFT) -#define IOCON_I2CMODE_FASTPLUS (1 << IOCON_I2CMODE_SHIFT)/* */ -#define IOCON_I2CMODE_HIOPENDRAIN (2 << IOCON_I2CMODE_SHIFT)/* */ -#define IOCON_I2CMODE_OPENDRAIN (3 << IOCON_I2CMODE_SHIFT)/* */ +#define IOCON_I2CMODE_SHIFT (IOCON_I2CHS_SHIFT) +#define IOCON_I2CMODE_MASK (3 << IOCON_I2CMODE_SHIFT) +# define IOCON_I2CMODE_FAST (0 << IOCON_I2CMODE_SHIFT) +# define IOCON_I2CMODE_FASTPLUS (1 << IOCON_I2CMODE_SHIFT)/* */ +# define IOCON_I2CMODE_HIOPENDRAIN (2 << IOCON_I2CMODE_SHIFT)/* */ +# define IOCON_I2CMODE_OPENDRAIN (3 << IOCON_I2CMODE_SHIFT)/* */ /************************************************************************************ * Public Types diff --git a/nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.c b/nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.c index 34dcd0162..2272858a2 100755 --- a/nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.c +++ b/nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.c @@ -803,9 +803,9 @@ static int lpc17_configalternate(lpc17_pinset_t cfgset, unsigned int port, if ((cfgset & (GPIO_I2CHS | GPIO_HIDRIVE)) != 0) { - /* WARNING: Using literal values (14) is a maintenance problem */ + /* Isolate the I2C mode bits */ - i2cmode = ((cfgset & (GPIO_I2CHS | GPIO_HIDRIVE)) >> 14); + i2cmode = ((cfgset & GPIO_I2CMODE_MASK) >> GPIO_I2CMODE_SHIFT); /* Set I2C Modes */ diff --git a/nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.h b/nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.h index 130bb3aa3..2e80b0de1 100644 --- a/nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.h +++ b/nuttx/arch/arm/src/lpc17xx/lpc178x_gpio.h @@ -67,8 +67,11 @@ # define GPIO_ADMODE (1 << 19) /* Bit 19: A/D Modes: 0-Analog, 1-Digital */ # define GPIO_FILTER (1 << 20) /* Bit 20: Filter: 0-Off, 1-ON */ # define GPIO_DACEN (1 << 21) /* Bit 21: DAC: 0-Disabled, 1-Enabled, P0:26 only */ -# define GPIO_I2CHS (1 << 22) /* Bit 22: Filter and Rate Control: 0-Enabled, 1-Disabled */ -# define GPIO_HIDRIVE (1 << 23) /* Bit 23: Current Sink: 0-4mA, 1-20mA P5:2 and P5:3 only,*/ + +# define GPIO_I2CMODE_SHIFT (22) /* Bits 22-23: I2C mode */ +# define GPIO_I2CMODE_MASK (3 << GPIO_I2CMODE_SHIFT) +# define GPIO_I2CHS (1 << 22) /* Bit 22: Filter and Rate Control: 0-Enabled, 1-Disabled */ +# define GPIO_HIDRIVE (1 << 23) /* Bit 23: Current Sink: 0-4mA, 1-20mA P5:2 and P5:3 only,*/ /* Pin Function bits: FFFF * Only meaningful when the GPIO function is GPIO_PIN -- cgit v1.2.3