summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--polux/include/mse500/mse500.h3
-rw-r--r--polux/linux-2.6.10/arch/arm/mach-mse500/gpio.c27
2 files changed, 16 insertions, 14 deletions
diff --git a/polux/include/mse500/mse500.h b/polux/include/mse500/mse500.h
index 8c87fce947..be58deb4ed 100644
--- a/polux/include/mse500/mse500.h
+++ b/polux/include/mse500/mse500.h
@@ -176,6 +176,9 @@
#define PLC_INT_PHLIC__TMO2 INT_SPC200_PLC_PHLIC_10
#define PLC_INT_PHLIC_11 INT_SPC200_PLC_PHLIC_11
+/* GPIO */
+#define GPIO_IN_SAFE_RETURN 6
+#define GPIO_OUT_PLC_SYSTEM_LED 7
// for plc_drv compilation problems
#if !defined(__asm__) && !defined(__ASSEMBLY__)
diff --git a/polux/linux-2.6.10/arch/arm/mach-mse500/gpio.c b/polux/linux-2.6.10/arch/arm/mach-mse500/gpio.c
index 80e6dbabe4..18a06721b1 100644
--- a/polux/linux-2.6.10/arch/arm/mach-mse500/gpio.c
+++ b/polux/linux-2.6.10/arch/arm/mach-mse500/gpio.c
@@ -20,6 +20,7 @@
*/
#include <linux/device.h>
+#include "asm/arch/gpio.h"
#include "platform.h"
#include "gpio_event.h"
@@ -34,17 +35,15 @@ char gpio_map[GPIO_EVENT_MAX];
void mse500_init_gpio(void)
{
//Config GPIOs
- CSP_PIO_SET_ECR((CSP_PIO_PTR)CSP_PIO_BASE, 0x01); // enable CLK
- CSP_PIO_SET_PER((CSP_PIO_PTR)CSP_PIO_BASE, 0xFF); // driven by PIO
- CSP_PIO_SET_MDDR((CSP_PIO_PTR)CSP_PIO_BASE, 0xFF); // not Open Drain
- CSP_PIO_SET_SODR((CSP_PIO_PTR)CSP_PIO_BASE, (unsigned int)(1<<0)); //put to 1 the software reset
- CSP_PIO_SET_OER((CSP_PIO_PTR)CSP_PIO_BASE, 0x83); // 0 = RESET (output)
- // 1 = Watch-Dog (output)
- // 7 = Plc-System LED (output)
- CSP_PIO_SET_ODR((CSP_PIO_PTR)CSP_PIO_BASE, 0x7C); // 6 = Safe-return (input)
- // others are in input
- CSP_PIO_SET_IDR((CSP_PIO_PTR)CSP_PIO_BASE, 0xFF); // no interrupts
+ GPIO_SWPORTA_CTL_VA = 0; // driven by PIO
+ GPIO_SWPORTA_DR_VA = 0; // set all values to 0
+
+ GPIO_SWPORTA_DDR_VA = 0; // input by default
+ GPIO_SWPORTA_DDR_VA &= ~(1 << GPIO_IN_SAFE_RETURN);
+ GPIO_SWPORTA_DDR_VA |= (1 << GPIO_OUT_PLC_SYSTEM_LED);
+
+ GPIO_INTEN_VA = 0; // no interrupts
memset(gpio_map, GPIO_NOT_MAPPED, sizeof(gpio_map));
@@ -63,10 +62,10 @@ int gpio_write(int no, int value)
if ((no > 7) || (value > 1))
return -1;
- if(value)
- CSP_PIO_SET_SODR((CSP_PIO_PTR)CSP_PIO_BASE, (unsigned int)(1<<no));
- else
- CSP_PIO_SET_CODR((CSP_PIO_PTR)CSP_PIO_BASE, (unsigned int)(1<<no));
+ if (value)
+ GPIO_SWPORTA_DR_VA |= (1 << no);
+ else
+ GPIO_SWPORTA_DR_VA &= ~(1 << no);
return 0;
}