1 // SPDX-License-Identifier: GPL-2.0+
3 * arch/arm/mach-imx/generic.c
6 * Created: april 20th, 2004
7 * Copyright: Synertronixx GmbH
9 * Common code for i.MX machines
16 #include <asm/arch/imx-regs.h>
18 void imx_gpio_mode(int gpio_mode)
20 unsigned int pin = gpio_mode & GPIO_PIN_MASK;
21 unsigned int port = (gpio_mode & GPIO_PORT_MASK) >> 5;
22 unsigned int ocr = (gpio_mode & GPIO_OCR_MASK) >> 10;
26 if(gpio_mode & GPIO_PUEN)
27 PUEN(port) |= (1<<pin);
29 PUEN(port) &= ~(1<<pin);
32 if(gpio_mode & GPIO_OUT)
35 DDIR(port) &= ~(1<<pin);
37 /* Primary / alternate function */
38 if(gpio_mode & GPIO_AF)
39 GPR(port) |= (1<<pin);
41 GPR(port) &= ~(1<<pin);
45 GIUS(port) |= (1<<pin);
47 GIUS(port) &= ~(1<<pin);
49 /* Output / input configuration */
50 /* FIXME: I'm not very sure about OCR and ICONF, someone
51 * should have a look over it
55 tmp &= ~( 3<<(pin*2));
56 tmp |= (ocr << (pin*2));
59 if( gpio_mode & GPIO_AOUT )
60 ICONFA1(port) &= ~( 3<<(pin*2));
61 if( gpio_mode & GPIO_BOUT )
62 ICONFB1(port) &= ~( 3<<(pin*2));
65 tmp &= ~( 3<<((pin-16)*2));
66 tmp |= (ocr << ((pin-16)*2));
69 if( gpio_mode & GPIO_AOUT )
70 ICONFA2(port) &= ~( 3<<((pin-16)*2));
71 if( gpio_mode & GPIO_BOUT )
72 ICONFB2(port) &= ~( 3<<((pin-16)*2));
76 #endif /* CONFIG_IMX */