diff options
author | Juergen Beisert <j.beisert@pengutronix.de> | 2007-11-05 12:26:29 +0100 |
---|---|---|
committer | Juergen Beisert <j.beisert@pengutronix.de> | 2007-11-05 12:26:29 +0100 |
commit | 1cb70626537e37b712bf2474b547431b5f53e403 (patch) | |
tree | ed656ca671207a7191fcd74fbbdff634b63d2754 /arch/arm | |
parent | 092a4a3b4bd70672596c4c771e32c31ec4100b91 (diff) | |
download | barebox-1cb70626537e37b712bf2474b547431b5f53e403.tar.gz barebox-1cb70626537e37b712bf2474b547431b5f53e403.tar.xz |
integrating sha's changes into jbe's branch
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-imx/gpio.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/arch/arm/mach-imx/gpio.c b/arch/arm/mach-imx/gpio.c index 9e667e32e5..2d42d3d8f9 100644 --- a/arch/arm/mach-imx/gpio.c +++ b/arch/arm/mach-imx/gpio.c @@ -29,10 +29,14 @@ void imx_gpio_mode(int gpio_mode) { unsigned int pin = gpio_mode & GPIO_PIN_MASK; - unsigned int port = (gpio_mode & GPIO_PORT_MASK) >> 5; - unsigned int ocr = (gpio_mode & GPIO_OCR_MASK) >> 10; + unsigned int port = (gpio_mode & GPIO_PORT_MASK) >> GPIO_PORT_SHIFT; + unsigned int ocr = (gpio_mode & GPIO_OCR_MASK) >> GPIO_OCR_SHIFT; + unsigned int aout = (gpio_mode & GPIO_AOUT_MASK) >> GPIO_AOUT_SHIFT; + unsigned int bout = (gpio_mode & GPIO_BOUT_MASK) >> GPIO_BOUT_SHIFT; unsigned int tmp; + printf("gpio_mode: 0x%08x ocr: 0x%08x port: %d pin: %2d aout: %d bout: %d\n", gpio_mode, ocr, port, pin, aout, bout); + /* Pullup enable */ if(gpio_mode & GPIO_PUEN) PUEN(port) |= (1 << pin); @@ -52,25 +56,22 @@ void imx_gpio_mode(int gpio_mode) GPR(port) &= ~(1 << pin); /* use as gpio? */ - if( ocr == 3 ) + if(!(gpio_mode & (GPIO_PF | GPIO_AF))) GIUS(port) |= (1 << pin); else GIUS(port) &= ~(1 << pin); /* Output / input configuration */ - /* FIXME: I'm not very sure about OCR and ICONF, someone - * should have a look over it - */ if (pin < 16) { tmp = OCR1(port); tmp &= ~(3 << (pin * 2)); tmp |= (ocr << (pin * 2)); OCR1(port) = tmp; - if( gpio_mode & GPIO_AOUT ) - ICONFA1(port) &= ~(3 << (pin * 2)); - if( gpio_mode & GPIO_BOUT ) - ICONFB1(port) &= ~(3 << (pin * 2)); + ICONFA1(port) &= ~(3 << (pin * 2)); + ICONFA1(port) |= aout << (pin * 2); + ICONFB1(port) &= ~(3 << (pin * 2)); + ICONFB1(port) |= bout << (pin * 2); } else { pin -= 16; @@ -79,10 +80,10 @@ void imx_gpio_mode(int gpio_mode) tmp |= (ocr << (pin * 2)); OCR2(port) = tmp; - if( gpio_mode & GPIO_AOUT ) - ICONFA2(port) &= ~(3 << (pin * 2)); - if( gpio_mode & GPIO_BOUT ) - ICONFB2(port) &= ~(3 << (pin * 2)); + ICONFA2(port) &= ~(3 << (pin * 2)); + ICONFA2(port) |= aout << (pin * 2); + ICONFB2(port) &= ~(3 << (pin * 2)); + ICONFB2(port) |= bout << (pin * 2); } } |