summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2012-10-12 10:04:28 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2012-10-12 15:37:08 +0200
commite9e5b92d36496b74176f1ffbf49b1d63ea0c6fac (patch)
treee78cf73ba83ceaed7dba08bc0eea2546be0d01a0 /c
parentbsp/lpc24xx: Enable USB clock by PLL0 for LPC17XX (diff)
downloadrtems-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.h9
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/misc/io.c15
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;