summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/lpc24xx/misc
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2011-05-19 12:30:00 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2011-05-19 12:30:00 +0000
commitd74ed4ad4bde98dda6b685515b2523539e04ea1f (patch)
tree263bf95d00057efd30a7e0eec10f6125d74c2c63 /c/src/lib/libbsp/arm/lpc24xx/misc
parent2011-05-19 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-d74ed4ad4bde98dda6b685515b2523539e04ea1f.tar.bz2
2011-05-19 Sebastian Huber <sebastian.huber@embedded-brains.de>
* i2c/i2c-config.c: New file. * include/lcd.h: Removed EMC definitions. * misc/dma.c: Fixed initialization. * include/i2c.h, include/io.h, include/lpc-ethernet-config.h, include/lpc24xx.h, console/console-config.c, i2c/i2c.c, misc/io.c, misc/lcd.c, startup/bspstart.c, startup/bspstarthooks.c: New pin configuration API. * Makefile.am, preinstall.am: Update.
Diffstat (limited to 'c/src/lib/libbsp/arm/lpc24xx/misc')
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/misc/dma.c29
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/misc/io.c330
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/misc/lcd.c10
3 files changed, 157 insertions, 212 deletions
diff --git a/c/src/lib/libbsp/arm/lpc24xx/misc/dma.c b/c/src/lib/libbsp/arm/lpc24xx/misc/dma.c
index 5b0a50dcf3..c00e21f6ee 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/misc/dma.c
+++ b/c/src/lib/libbsp/arm/lpc24xx/misc/dma.c
@@ -7,12 +7,13 @@
*/
/*
- * Copyright (c) 2008, 2009
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * D-82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (c) 2008-2011 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -38,19 +39,21 @@ void lpc24xx_dma_initialize(void)
/* Disable module */
GPDMA_CONFIG = 0;
- /* Enable module */
- #if BYTE_ORDER == LITTLE_ENDIAN
- GPDMA_CONFIG = GPDMA_CONFIG_EN;
- #else
- GPDMA_CONFIG = GPDMA_CONFIG_EN | GPDMA_CONFIG_MODE;
- #endif
-
/* Reset registers */
GPDMA_SOFT_SREQ = 0;
GPDMA_SOFT_BREQ = 0;
GPDMA_SOFT_LSREQ = 0;
GPDMA_SOFT_LBREQ = 0;
GPDMA_SYNC = 0;
+ GPDMA_CH0_CFG = 0;
+ GPDMA_CH1_CFG = 0;
+
+ /* Enable module */
+ #if BYTE_ORDER == LITTLE_ENDIAN
+ GPDMA_CONFIG = GPDMA_CONFIG_EN;
+ #else
+ GPDMA_CONFIG = GPDMA_CONFIG_EN | GPDMA_CONFIG_MODE;
+ #endif
}
rtems_status_code lpc24xx_dma_channel_obtain(unsigned channel)
diff --git a/c/src/lib/libbsp/arm/lpc24xx/misc/io.c b/c/src/lib/libbsp/arm/lpc24xx/misc/io.c
index 6af279efad..0a25271a78 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/misc/io.c
+++ b/c/src/lib/libbsp/arm/lpc24xx/misc/io.c
@@ -7,12 +7,13 @@
*/
/*
- * Copyright (c) 2009, 2010
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * D-82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
+ * Copyright (c) 2009-2011 embedded brains GmbH. All rights reserved.
+ *
+ * embedded brains GmbH
+ * Obere Lagerstr. 30
+ * 82178 Puchheim
+ * Germany
+ * <rtems@embedded-brains.de>
*
* The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at
@@ -22,193 +23,11 @@
#include <bsp/io.h>
#include <bsp/system-clocks.h>
-#define LPC24XX_IO_SELECT(pin) (pin >> 4U)
-
-#define LPC24XX_IO_SELECT_SHIFT(pin) ((pin & 0xfU) << 1U)
-
-#define LPC24XX_IO_SELECT_MASK 0x3U
-
-#define LPC24XX_IO_PRIMARY 0x0U
-
-#define LPC24XX_IO_ALTERNATE_0 0x1U
-
-#define LPC24XX_IO_ALTERNATE_1 0x2U
-
-#define LPC24XX_IO_ALTERNATE_2 0x3U
-
-#define LPC24XX_IO_ENTRY(mod, cfg, begin_port, begin_index, last_port, last_index, function) \
- { \
- .module = mod, \
- .config = cfg, \
- .pin_begin = LPC24XX_IO_INDEX_BY_PORT(begin_port, begin_index), \
- .pin_last = LPC24XX_IO_INDEX_BY_PORT(last_port, last_index), \
- .pin_function = function \
- }
-
-typedef struct {
- unsigned module : 6;
- unsigned config : 4;
- unsigned pin_begin : 8;
- unsigned pin_last : 8;
- unsigned pin_function : 3;
-} lpc24xx_io_entry;
-
-typedef void (*lpc24xx_io_iterate_routine)(unsigned pin, unsigned function);
-
-static const lpc24xx_io_entry lpc24xx_io_config_table [] = {
- /* UART */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_0, 0, 0, 2, 0, 3, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_1, 0, 0, 15, 0, 16, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_1, 1, 2, 0, 2, 1, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_1, 2, 3, 16, 3, 17, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_2, 0, 0, 10, 0, 11, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_2, 1, 2, 8, 2, 9, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_2, 2, 4, 22, 4, 23, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_3, 0, 0, 0, 0, 1, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_3, 1, 0, 25, 0, 26, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_UART_3, 2, 4, 28, 4, 29, LPC24XX_IO_ALTERNATE_2),
-
- /* Ethernet */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_ETHERNET, 0, 1, 0, 1, 17, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_ETHERNET, 1, 1, 0, 1, 1, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_ETHERNET, 1, 1, 4, 1, 4, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_ETHERNET, 1, 1, 8, 1, 10, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_ETHERNET, 1, 1, 14, 1, 17, LPC24XX_IO_ALTERNATE_0),
-
- /* ADC */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_ADC, 0, 0, 12, 0, 13, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_ADC, 1, 0, 23, 0, 25, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_ADC, 2, 0, 26, 0, 26, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_ADC, 2, 1, 30, 1, 31, LPC24XX_IO_ALTERNATE_2),
-
- /* I2C */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2C_0, 0, 0, 27, 0, 28, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2C_1, 0, 0, 0, 0, 1, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2C_1, 1, 0, 19, 0, 20, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2C_1, 2, 2, 14, 2, 15, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2C_2, 0, 0, 10, 0, 11, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2C_2, 1, 2, 30, 2, 31, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2C_2, 2, 4, 20, 4, 21, LPC24XX_IO_ALTERNATE_1),
-
- /* I2S */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2S, 0, 0, 4, 0, 9, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2S, 1, 0, 23, 0, 25, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_I2S, 1, 2, 11, 2, 13, LPC24XX_IO_ALTERNATE_2),
-
- /* SSP */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_0, 0, 0, 15, 0, 18, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_0, 1, 1, 20, 0, 21, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_0, 1, 1, 23, 0, 24, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_0, 2, 2, 22, 2, 23, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_0, 2, 2, 26, 2, 27, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_1, 0, 0, 6, 0, 9, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_1, 1, 0, 12, 0, 13, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_1, 1, 0, 14, 0, 14, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_1, 1, 1, 31, 1, 31, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SSP_1, 2, 4, 20, 4, 23, LPC24XX_IO_ALTERNATE_2),
-
- /* USB */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_USB, 0, 0, 29, 0, 30, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_USB, 0, 1, 19, 1, 19, LPC24XX_IO_ALTERNATE_1),
-
- /* SPI */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_SPI, 0, 0, 15, 0, 18, LPC24XX_IO_ALTERNATE_2),
-
- /* PWM */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_PWM_1, 0, 2, 0, 2, 0, LPC24XX_IO_ALTERNATE_0),
-
- /* LCD */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 0, 0, 4, 0, 9, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 0, 1, 20, 1, 29, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 0, 2, 0, 2, 3, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 0, 2, 5, 2, 9, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 0, 2, 12, 2, 13, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 0, 4, 28, 4, 29, LPC24XX_IO_ALTERNATE_1),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 1, 1, 20, 1, 29, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 1, 2, 0, 2, 3, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 1, 2, 5, 2, 9, LPC24XX_IO_ALTERNATE_2),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 1, 2, 12, 2, 13, LPC24XX_IO_ALTERNATE_0),
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_LCD, 1, 4, 28, 4, 29, LPC24XX_IO_ALTERNATE_1),
-
- /* DAC */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_DAC, 0, 0, 26, 0, 26, LPC24XX_IO_ALTERNATE_1),
-
- /* Terminate */
- LPC24XX_IO_ENTRY(LPC24XX_MODULE_COUNT, 0, 0, 0, 0, 0, 0)
-};
-
-static rtems_status_code lpc24xx_io_iterate(
- lpc24xx_module module,
- unsigned config,
- lpc24xx_io_iterate_routine routine
-)
-{
- rtems_status_code sc = RTEMS_SUCCESSFUL;
- const lpc24xx_io_entry *e = &lpc24xx_io_config_table [0];
-
- while (e->module != LPC24XX_MODULE_COUNT) {
- if (e->module == module && e->config == config) {
- unsigned pin = e->pin_begin;
- unsigned last = e->pin_last;
- unsigned function = e->pin_function;
-
- while (pin <= last) {
- (*routine)(pin, function);
-
- ++pin;
- }
-
- sc = RTEMS_SUCCESSFUL;
- }
- ++e;
- }
-
- return sc;
-}
-
-static void lpc24xx_io_do_config(unsigned pin, unsigned function)
-{
- rtems_interrupt_level level;
- unsigned select = LPC24XX_IO_SELECT(pin);
- unsigned shift = LPC24XX_IO_SELECT_SHIFT(pin);
- unsigned mask = LPC24XX_IO_SELECT_MASK << shift;
- unsigned pinsel = 0;
-
- rtems_interrupt_disable(level);
- pinsel = LPC24XX_PINSEL [select];
- pinsel &= ~mask;
- pinsel |= (function & LPC24XX_IO_SELECT_MASK) << shift;
- LPC24XX_PINSEL [select] = pinsel;
- rtems_interrupt_enable(level);
-}
-
-static void lpc24xx_io_do_release(unsigned pin, unsigned function)
-{
- rtems_interrupt_level level;
- unsigned select = LPC24XX_IO_SELECT(pin);
- unsigned shift = LPC24XX_IO_SELECT_SHIFT(pin);
- unsigned mask = LPC24XX_IO_SELECT_MASK << shift;
-
- rtems_interrupt_disable(level);
- LPC24XX_PINSEL [select] &= ~mask;
- rtems_interrupt_enable(level);
-}
+#define LPC24XX_PIN_SELECT(pin) (pin >> 4U)
-rtems_status_code lpc24xx_io_config(
- lpc24xx_module module,
- unsigned config
-)
-{
- return lpc24xx_io_iterate(module, config, lpc24xx_io_do_config);
-}
+#define LPC24XX_PIN_SELECT_SHIFT(pin) ((pin & 0xfU) << 1U)
-rtems_status_code lpc24xx_io_release(
- lpc24xx_module module,
- unsigned config
-)
-{
- return lpc24xx_io_iterate(module, config, lpc24xx_io_do_release);
-}
+#define LPC24XX_PIN_SELECT_MASK 0x3U
rtems_status_code lpc24xx_gpio_config(
unsigned pin,
@@ -219,8 +38,8 @@ rtems_status_code lpc24xx_gpio_config(
rtems_interrupt_level level;
unsigned port = LPC24XX_IO_PORT(pin);
unsigned bit = LPC24XX_IO_PORT_BIT(pin);
- unsigned select = LPC24XX_IO_SELECT(pin);
- unsigned shift = LPC24XX_IO_SELECT_SHIFT(pin);
+ unsigned select = LPC24XX_PIN_SELECT(pin);
+ unsigned shift = LPC24XX_PIN_SELECT_SHIFT(pin);
unsigned resistor = settings & LPC24XX_GPIO_RESISTOR_MASK;
unsigned output = (settings & LPC24XX_GPIO_OUTPUT) != 0 ? 1U : 0U;
@@ -244,8 +63,8 @@ rtems_status_code lpc24xx_gpio_config(
/* Resistor */
LPC24XX_PINMODE [select] =
- (LPC24XX_PINMODE [select] & ~(LPC24XX_IO_SELECT_MASK << shift))
- | ((resistor & LPC24XX_IO_SELECT_MASK) << shift);
+ (LPC24XX_PINMODE [select] & ~(LPC24XX_PIN_SELECT_MASK << shift))
+ | ((resistor & LPC24XX_PIN_SELECT_MASK) << shift);
rtems_interrupt_flash(level);
@@ -392,3 +211,124 @@ rtems_status_code lpc24xx_module_disable(
{
return lpc24xx_module_do_enable(module, 0U, false);
}
+
+typedef rtems_status_code (*lpc24xx_pin_visitor)(
+ volatile uint32_t *pinsel,
+ uint32_t pinsel_mask,
+ uint32_t pinsel_value,
+ volatile uint32_t *fio_dir,
+ uint32_t fio_bit
+);
+
+static rtems_status_code lpc24xx_pin_set_function(
+ volatile uint32_t *pinsel,
+ uint32_t pinsel_mask,
+ uint32_t pinsel_value,
+ volatile uint32_t *fio_dir,
+ uint32_t fio_bit
+)
+{
+ rtems_interrupt_level level;
+
+ rtems_interrupt_disable(level);
+ *pinsel = (*pinsel & ~pinsel_mask) | pinsel_value;
+ rtems_interrupt_enable(level);
+
+ return RTEMS_SUCCESSFUL;
+}
+
+static rtems_status_code lpc24xx_pin_check_function(
+ volatile uint32_t *pinsel,
+ uint32_t pinsel_mask,
+ uint32_t pinsel_value,
+ volatile uint32_t *fio_dir,
+ uint32_t fio_bit
+)
+{
+ if ((*pinsel & pinsel_mask) == pinsel_value) {
+ return RTEMS_SUCCESSFUL;
+ } else {
+ return RTEMS_IO_ERROR;
+ }
+}
+
+static rtems_status_code lpc24xx_pin_set_input(
+ volatile uint32_t *pinsel,
+ uint32_t pinsel_mask,
+ uint32_t pinsel_value,
+ volatile uint32_t *fio_dir,
+ uint32_t fio_bit
+)
+{
+ rtems_interrupt_level level;
+
+ rtems_interrupt_disable(level);
+ *fio_dir &= ~fio_bit;
+ *pinsel &= ~pinsel_mask;
+ rtems_interrupt_enable(level);
+
+ return RTEMS_SUCCESSFUL;
+}
+
+static rtems_status_code lpc24xx_pin_check_input(
+ volatile uint32_t *pinsel,
+ uint32_t pinsel_mask,
+ uint32_t pinsel_value,
+ volatile uint32_t *fio_dir,
+ uint32_t fio_bit
+)
+{
+ if ((*pinsel & pinsel_mask) == 0 && (*fio_dir & fio_bit) == 0) {
+ return RTEMS_SUCCESSFUL;
+ } else {
+ return RTEMS_IO_ERROR;
+ }
+}
+
+static const lpc24xx_pin_visitor lpc24xx_pin_visitors [] = {
+ [LPC24XX_PIN_SET_FUNCTION] = lpc24xx_pin_set_function,
+ [LPC24XX_PIN_CHECK_FUNCTION] = lpc24xx_pin_check_function,
+ [LPC24XX_PIN_SET_INPUT] = lpc24xx_pin_set_input,
+ [LPC24XX_PIN_CHECK_INPUT] = lpc24xx_pin_check_input
+};
+
+rtems_status_code lpc24xx_pin_config(
+ const lpc24xx_pin_range *pins,
+ lpc24xx_pin_action action
+)
+{
+ rtems_status_code sc = RTEMS_SUCCESSFUL;
+
+ if ((unsigned) action <= LPC24XX_PIN_CHECK_INPUT) {
+ lpc24xx_pin_visitor visitor = lpc24xx_pin_visitors [action];
+ lpc24xx_pin_range terminal = LPC24XX_PIN_TERMINAL;
+
+ while (sc == RTEMS_SUCCESSFUL && pins->value != terminal.value) {
+ uint32_t port = pins->fields.port;
+ uint32_t index = pins->fields.index_begin;
+ uint32_t last = pins->fields.index_last;
+ uint32_t function = pins->fields.function;
+ volatile uint32_t *fio_dir = &LPC24XX_FIO [port].dir;
+
+ while (sc == RTEMS_SUCCESSFUL && index <= last) {
+ uint32_t pin = LPC24XX_IO_INDEX_BY_PORT(port, index);
+ uint32_t select = LPC24XX_PIN_SELECT(pin);
+ uint32_t shift = LPC24XX_PIN_SELECT_SHIFT(pin);
+ volatile uint32_t *pinsel = &LPC24XX_PINSEL [select];
+ uint32_t pinsel_mask = LPC24XX_PIN_SELECT_MASK << shift;
+ uint32_t pinsel_value = (function & LPC24XX_PIN_SELECT_MASK) << shift;
+ uint32_t fio_bit = 1U << index;
+
+ sc = (*visitor)(pinsel, pinsel_mask, pinsel_value, fio_dir, fio_bit);
+
+ ++index;
+ }
+
+ ++pins;
+ }
+ } else {
+ sc = RTEMS_NOT_DEFINED;
+ }
+
+ return sc;
+}
diff --git a/c/src/lib/libbsp/arm/lpc24xx/misc/lcd.c b/c/src/lib/libbsp/arm/lpc24xx/misc/lcd.c
index d16f274625..c69b974b77 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/misc/lcd.c
+++ b/c/src/lib/libbsp/arm/lpc24xx/misc/lcd.c
@@ -23,14 +23,16 @@
#include <assert.h>
#include <bsp/lpc24xx.h>
-#include <bsp/io.h>
#include <bsp/lcd.h>
#include <bsp/utility.h>
#include <bsp/system-clocks.h>
#define LCD_ENABLE BSP_BIT32(0)
-rtems_status_code lpc24xx_lcd_set_mode(lpc24xx_lcd_mode mode, unsigned pin_config)
+rtems_status_code lpc24xx_lcd_set_mode(
+ lpc24xx_lcd_mode mode,
+ const lpc24xx_pin_range *pins
+)
{
rtems_status_code sc = RTEMS_SUCCESSFUL;
bool enable = false;
@@ -61,7 +63,7 @@ rtems_status_code lpc24xx_lcd_set_mode(lpc24xx_lcd_mode mode, unsigned pin_confi
PINSEL11 = BSP_FLD32(mode, 1, 3) | LCD_ENABLE;
- sc = lpc24xx_io_config(LPC24XX_MODULE_LCD, pin_config);
+ sc = lpc24xx_pin_config(pins, LPC24XX_PIN_SET_FUNCTION);
assert(sc == RTEMS_SUCCESSFUL);
} else {
if (lpc24xx_lcd_current_mode() != LCD_MODE_DISABLED) {
@@ -78,7 +80,7 @@ rtems_status_code lpc24xx_lcd_set_mode(lpc24xx_lcd_mode mode, unsigned pin_confi
LCD_CTRL = lcd_ctrl;
}
- sc = lpc24xx_io_release(LPC24XX_MODULE_LCD, pin_config);
+ sc = lpc24xx_pin_config(pins, LPC24XX_PIN_SET_INPUT);
assert(sc == RTEMS_SUCCESSFUL);
PINSEL11 = 0;