29 #ifndef __MSP_GPIO_MACROS_H__
30 #define __MSP_GPIO_MACROS_H__
35 #ifdef CONFIG_PMC_MSP7120_GW
36 #define MSP_NUM_GPIOS 20
38 #define MSP_NUM_GPIOS 28
63 static volatile u32 *
const MSP_GPIO_DATA_REGISTER[] = {
83 static volatile u32 *
const MSP_GPIO_MODE_REGISTER[] = {
103 static int MSP_GPIO_OFFSET[] = {
111 10, 10, 10, 10, 10, 10,
115 static unsigned int MSP_GPIO_MODE_ALLOWED[] = {
130 #define OFFSET_GPIO_NUMBER(gpio) (gpio - MSP_GPIO_OFFSET[gpio])
133 #define BASIC_DATA_REG_MASK(ogpio) (1 << ogpio)
134 #define BASIC_MODE_REG_VALUE(mode, ogpio) \
135 (mode << BASIC_MODE_REG_SHIFT(ogpio))
136 #define BASIC_MODE_REG_MASK(ogpio) \
137 BASIC_MODE_REG_VALUE(0xf, ogpio)
138 #define BASIC_MODE_REG_SHIFT(ogpio) (ogpio * 4)
139 #define BASIC_MODE_REG_FROM_REG(data, ogpio) \
140 ((data & BASIC_MODE_REG_MASK(ogpio)) >> BASIC_MODE_REG_SHIFT(ogpio))
143 #define BASIC_DATA_MASK(gpio) \
144 BASIC_DATA_REG_MASK(OFFSET_GPIO_NUMBER(gpio))
145 #define BASIC_MODE_MASK(gpio) \
146 BASIC_MODE_REG_MASK(OFFSET_GPIO_NUMBER(gpio))
147 #define BASIC_MODE(mode, gpio) \
148 BASIC_MODE_REG_VALUE(mode, OFFSET_GPIO_NUMBER(gpio))
149 #define BASIC_MODE_SHIFT(gpio) \
150 BASIC_MODE_REG_SHIFT(OFFSET_GPIO_NUMBER(gpio))
151 #define BASIC_MODE_FROM_REG(data, gpio) \
152 BASIC_MODE_REG_FROM_REG(data, OFFSET_GPIO_NUMBER(gpio))
175 #define EXTENDED_OFFSET_GPIO(gpio) (gpio < 24 ? gpio - 16 : gpio - 24)
178 #define EXTENDED_REG_DISABLE(ogpio) (0x2 << ((ogpio * 2) + 16))
179 #define EXTENDED_REG_ENABLE(ogpio) (0x1 << ((ogpio * 2) + 16))
180 #define EXTENDED_REG_SET(ogpio) (0x2 << (ogpio * 2))
181 #define EXTENDED_REG_CLR(ogpio) (0x1 << (ogpio * 2))
184 #define EXTENDED_DISABLE(gpio) \
185 EXTENDED_REG_DISABLE(EXTENDED_OFFSET_GPIO(gpio))
186 #define EXTENDED_ENABLE(gpio) \
187 EXTENDED_REG_ENABLE(EXTENDED_OFFSET_GPIO(gpio))
188 #define EXTENDED_SET(gpio) \
189 EXTENDED_REG_SET(EXTENDED_OFFSET_GPIO(gpio))
190 #define EXTENDED_CLR(gpio) \
191 EXTENDED_REG_CLR(EXTENDED_OFFSET_GPIO(gpio))
193 #define EXTENDED_FULL_MASK (0xffffffff)
202 u32 pinhi_mask = 0, pinhi_mask2 = 0;
218 if (((*MSP_GPIO_DATA_REGISTER[gpio] & pinhi_mask) == pinhi_mask) ||
219 (*MSP_GPIO_DATA_REGISTER[gpio] & pinhi_mask2))
233 toggle_reg32(MSP_GPIO_DATA_REGISTER[gpio],
236 set_reg32(MSP_GPIO_DATA_REGISTER[gpio],
239 clear_reg32(MSP_GPIO_DATA_REGISTER[gpio],
265 set_value_reg32(MSP_GPIO_DATA_REGISTER[gpio],
272 static inline void msp_gpio_pin_hi(
unsigned int gpio)
278 static inline void msp_gpio_pin_lo(
unsigned int gpio)
284 static inline void msp_gpio_pin_toggle(
unsigned int gpio)
290 static inline enum msp_gpio_mode msp_gpio_pin_get_mode(
unsigned int gpio)
298 data = *MSP_GPIO_MODE_REGISTER[
gpio];
319 u32 modemask, newmode;
321 if ((1 << gpio) & ~MSP_GPIO_MODE_ALLOWED[mode])
338 set_value_reg32(MSP_GPIO_MODE_REGISTER[gpio], modemask, newmode);