diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-12 10:04:28 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-10-12 15:37:08 +0200 |
commit | e9e5b92d36496b74176f1ffbf49b1d63ea0c6fac (patch) | |
tree | e78cf73ba83ceaed7dba08bc0eea2546be0d01a0 /c | |
parent | bsp/lpc24xx: Enable USB clock by PLL0 for LPC17XX (diff) | |
download | rtems-e9e5b92d36496b74176f1ffbf49b1d63ea0c6fac.tar.bz2 |
bsp/lpc24xx: Evaluate LPC17XX pin type
New pin type LPC17XX_PIN_TYPE_OPEN_DRAIN.
Diffstat (limited to 'c')
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/include/io.h | 9 | ||||
-rw-r--r-- | c/src/lib/libbsp/arm/lpc24xx/misc/io.c | 15 |
2 files changed, 20 insertions, 4 deletions
diff --git a/c/src/lib/libbsp/arm/lpc24xx/include/io.h b/c/src/lib/libbsp/arm/lpc24xx/include/io.h index f77b44717e..497d4a7b72 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/include/io.h +++ b/c/src/lib/libbsp/arm/lpc24xx/include/io.h @@ -240,7 +240,8 @@ typedef enum { LPC17XX_PIN_TYPE_ADC, LPC17XX_PIN_TYPE_DAC, LPC17XX_PIN_TYPE_I2C, - LPC17XX_PIN_TYPE_I2C_FAST_PLUS + LPC17XX_PIN_TYPE_I2C_FAST_PLUS, + LPC17XX_PIN_TYPE_OPEN_DRAIN } lpc17xx_pin_type; #ifdef ARM_MULTILIB_ARCH_V4 @@ -1102,8 +1103,10 @@ rtems_status_code lpc24xx_pin_config( LPC24XX_PIN(1, 27, LPC24XX_PIN_FUNCTION_10, 2) #define LPC24XX_PIN_USB_SCL_1\ LPC24XX_PIN(1, 28, LPC24XX_PIN_FUNCTION_01, 1) -#define LPC24XX_PIN_USB_SDA_1\ - LPC24XX_PIN(1, 29, LPC24XX_PIN_FUNCTION_01, 1) +#define LPC24XX_PIN_USB_SDA_1 \ + LPC24XX_PIN_WITH_TYPE( \ + 1, 29, LPC24XX_PIN_FUNCTION_01, 1, LPC17XX_PIN_TYPE_OPEN_DRAIN \ + ) #define LPC24XX_PIN_USB_CONNECT_1\ LPC24XX_PIN(2, 9, LPC24XX_PIN_FUNCTION_01, 1) diff --git a/c/src/lib/libbsp/arm/lpc24xx/misc/io.c b/c/src/lib/libbsp/arm/lpc24xx/misc/io.c index b16615e5d8..ddf7ce37e9 100644 --- a/c/src/lib/libbsp/arm/lpc24xx/misc/io.c +++ b/c/src/lib/libbsp/arm/lpc24xx/misc/io.c @@ -394,8 +394,21 @@ lpc24xx_pin_set_function( *pinsel = (*pinsel & ~pinsel_mask) | pinsel_value; rtems_interrupt_enable(level); #else + uint32_t iocon_extra = 0; + /* TODO */ - *iocon = IOCON_FUNC(pin_range.fields.function); + switch (pin_range.fields.type) { + case LPC17XX_PIN_TYPE_I2C_FAST_PLUS: + iocon_extra |= IOCON_HS; + break; + case LPC17XX_PIN_TYPE_OPEN_DRAIN: + iocon_extra |= IOCON_OD; + break; + default: + break; + } + + *iocon = IOCON_FUNC(pin_range.fields.function) | iocon_extra; #endif return RTEMS_SUCCESSFUL; |