mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 03:58:17 +00:00 
			
		
		
		
	Signed-off-by: Wolfgang Denk <wd@denx.de> [trini: Fixup common/cmd_io.c] Signed-off-by: Tom Rini <trini@ti.com>
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  *  arch/arm/mach-imx/generic.c
 | |
|  *
 | |
|  *  author: Sascha Hauer
 | |
|  *  Created: april 20th, 2004
 | |
|  *  Copyright: Synertronixx GmbH
 | |
|  *
 | |
|  *  Common code for i.MX machines
 | |
|  *
 | |
|  * SPDX-License-Identifier:	GPL-2.0+
 | |
|  */
 | |
| 
 | |
| #include <common.h>
 | |
| 
 | |
| #ifdef CONFIG_IMX
 | |
| 
 | |
| #include <asm/arch/imx-regs.h>
 | |
| 
 | |
| 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 tmp;
 | |
| 
 | |
| 	/* Pullup enable */
 | |
| 	if(gpio_mode & GPIO_PUEN)
 | |
| 		PUEN(port) |= (1<<pin);
 | |
| 	else
 | |
| 		PUEN(port) &= ~(1<<pin);
 | |
| 
 | |
| 	/* Data direction */
 | |
| 	if(gpio_mode & GPIO_OUT)
 | |
| 		DDIR(port) |= 1<<pin;
 | |
| 	else
 | |
| 		DDIR(port) &= ~(1<<pin);
 | |
| 
 | |
| 	/* Primary / alternate function */
 | |
| 	if(gpio_mode & GPIO_AF)
 | |
| 		GPR(port) |= (1<<pin);
 | |
| 	else
 | |
| 		GPR(port) &= ~(1<<pin);
 | |
| 
 | |
| 	/* use as gpio? */
 | |
| 	if( ocr == 3 )
 | |
| 		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));
 | |
| 	} else {
 | |
| 		tmp = OCR2(port);
 | |
| 		tmp &= ~( 3<<((pin-16)*2));
 | |
| 		tmp |= (ocr << ((pin-16)*2));
 | |
| 		OCR2(port) = tmp;
 | |
| 
 | |
| 		if( gpio_mode &	GPIO_AOUT )
 | |
| 			ICONFA2(port) &= ~( 3<<((pin-16)*2));
 | |
| 		if( gpio_mode &	GPIO_BOUT )
 | |
| 			ICONFB2(port) &= ~( 3<<((pin-16)*2));
 | |
| 	}
 | |
| }
 | |
| 
 | |
| #endif /* CONFIG_IMX */
 |