summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/pinctrl-imx233.h
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233/pinctrl-imx233.h')
-rw-r--r--firmware/target/arm/imx233/pinctrl-imx233.h56
1 files changed, 21 insertions, 35 deletions
diff --git a/firmware/target/arm/imx233/pinctrl-imx233.h b/firmware/target/arm/imx233/pinctrl-imx233.h
index 5b4b9c4cd5..82ed47d57e 100644
--- a/firmware/target/arm/imx233/pinctrl-imx233.h
+++ b/firmware/target/arm/imx233/pinctrl-imx233.h
@@ -24,26 +24,12 @@
24#define __PINCTRL_IMX233_H__ 24#define __PINCTRL_IMX233_H__
25 25
26#include "config.h" 26#include "config.h"
27#include "system.h"
28#include "regs/regs-pinctrl.h"
27 29
28// set to debug pinctrl use 30// set to debug pinctrl use
29#define IMX233_PINCTRL_DEBUG 31#define IMX233_PINCTRL_DEBUG
30 32
31#define HW_PINCTRL_BASE 0x80018000
32
33#define HW_PINCTRL_CTRL (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x0))
34#define HW_PINCTRL_MUXSEL(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x100 + (i) * 0x10))
35#define HW_PINCTRL_DRIVE(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x200 + (i) * 0x10))
36#define HW_PINCTRL_PULL(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x400 + (i) * 0x10))
37#define HW_PINCTRL_DOUT(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x500 + (i) * 0x10))
38#define HW_PINCTRL_DIN(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x600 + (i) * 0x10))
39#define HW_PINCTRL_DOE(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x700 + (i) * 0x10))
40#define HW_PINCTRL_PIN2IRQ(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x800 + (i) * 0x10))
41#define HW_PINCTRL_IRQEN(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x900 + (i) * 0x10))
42#define HW_PINCTRL_IRQEN(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0x900 + (i) * 0x10))
43#define HW_PINCTRL_IRQLEVEL(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0xa00 + (i) * 0x10))
44#define HW_PINCTRL_IRQPOL(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0xb00 + (i) * 0x10))
45#define HW_PINCTRL_IRQSTAT(i) (*(volatile uint32_t *)(HW_PINCTRL_BASE + 0xc00 + (i) * 0x10))
46
47#define PINCTRL_FUNCTION_MAIN 0 33#define PINCTRL_FUNCTION_MAIN 0
48#define PINCTRL_FUNCTION_ALT1 1 34#define PINCTRL_FUNCTION_ALT1 1
49#define PINCTRL_FUNCTION_ALT2 2 35#define PINCTRL_FUNCTION_ALT2 2
@@ -72,72 +58,72 @@ typedef void (*pin_irq_cb_t)(int bank, int pin);
72 58
73static inline void imx233_pinctrl_init(void) 59static inline void imx233_pinctrl_init(void)
74{ 60{
75 __REG_CLR(HW_PINCTRL_CTRL) = __BLOCK_CLKGATE | __BLOCK_SFTRST; 61 HW_PINCTRL_CTRL_CLR = BM_OR2(PINCTRL_CTRL, CLKGATE, SFTRST);
76} 62}
77 63
78static inline void imx233_set_pin_drive_strength(unsigned bank, unsigned pin, unsigned strength) 64static inline void imx233_set_pin_drive_strength(unsigned bank, unsigned pin, unsigned strength)
79{ 65{
80 __REG_CLR(HW_PINCTRL_DRIVE(4 * bank + pin / 8)) = 3 << (4 * (pin % 8)); 66 HW_PINCTRL_DRIVEn_CLR(4 * bank + pin / 8) = 3 << (4 * (pin % 8));
81 __REG_SET(HW_PINCTRL_DRIVE(4 * bank + pin / 8)) = strength << (4 * (pin % 8)); 67 HW_PINCTRL_DRIVEn_SET(4 * bank + pin / 8) = strength << (4 * (pin % 8));
82} 68}
83 69
84static inline void imx233_enable_gpio_output(unsigned bank, unsigned pin, bool enable) 70static inline void imx233_enable_gpio_output(unsigned bank, unsigned pin, bool enable)
85{ 71{
86 if(enable) 72 if(enable)
87 __REG_SET(HW_PINCTRL_DOE(bank)) = 1 << pin; 73 HW_PINCTRL_DOEn_SET(bank) = 1 << pin;
88 else 74 else
89 __REG_CLR(HW_PINCTRL_DOE(bank)) = 1 << pin; 75 HW_PINCTRL_DOEn_CLR(bank) = 1 << pin;
90} 76}
91 77
92static inline void imx233_enable_gpio_output_mask(unsigned bank, uint32_t pin_mask, bool enable) 78static inline void imx233_enable_gpio_output_mask(unsigned bank, uint32_t pin_mask, bool enable)
93{ 79{
94 if(enable) 80 if(enable)
95 __REG_SET(HW_PINCTRL_DOE(bank)) = pin_mask; 81 HW_PINCTRL_DOEn_SET(bank) = pin_mask;
96 else 82 else
97 __REG_CLR(HW_PINCTRL_DOE(bank)) = pin_mask; 83 HW_PINCTRL_DOEn_CLR(bank) = pin_mask;
98} 84}
99 85
100static inline void imx233_set_gpio_output(unsigned bank, unsigned pin, bool value) 86static inline void imx233_set_gpio_output(unsigned bank, unsigned pin, bool value)
101{ 87{
102 if(value) 88 if(value)
103 __REG_SET(HW_PINCTRL_DOUT(bank)) = 1 << pin; 89 HW_PINCTRL_DOUTn_SET(bank) = 1 << pin;
104 else 90 else
105 __REG_CLR(HW_PINCTRL_DOUT(bank)) = 1 << pin; 91 HW_PINCTRL_DOUTn_CLR(bank) = 1 << pin;
106} 92}
107 93
108static inline void imx233_set_gpio_output_mask(unsigned bank, uint32_t pin_mask, bool value) 94static inline void imx233_set_gpio_output_mask(unsigned bank, uint32_t pin_mask, bool value)
109{ 95{
110 if(value) 96 if(value)
111 __REG_SET(HW_PINCTRL_DOUT(bank)) = pin_mask; 97 HW_PINCTRL_DOUTn_SET(bank) = pin_mask;
112 else 98 else
113 __REG_CLR(HW_PINCTRL_DOUT(bank)) = pin_mask; 99 HW_PINCTRL_DOUTn_CLR(bank) = pin_mask;
114} 100}
115 101
116static inline uint32_t imx233_get_gpio_input_mask(unsigned bank, uint32_t pin_mask) 102static inline uint32_t imx233_get_gpio_input_mask(unsigned bank, uint32_t pin_mask)
117{ 103{
118 return HW_PINCTRL_DIN(bank) & pin_mask; 104 return HW_PINCTRL_DINn(bank) & pin_mask;
119} 105}
120 106
121static inline void imx233_set_pin_function(unsigned bank, unsigned pin, unsigned function) 107static inline void imx233_set_pin_function(unsigned bank, unsigned pin, unsigned function)
122{ 108{
123 __REG_CLR(HW_PINCTRL_MUXSEL(2 * bank + pin / 16)) = 3 << (2 * (pin % 16)); 109 HW_PINCTRL_MUXSELn_CLR(2 * bank + pin / 16) = 3 << (2 * (pin % 16));
124 __REG_SET(HW_PINCTRL_MUXSEL(2 * bank + pin / 16)) = function << (2 * (pin % 16)); 110 HW_PINCTRL_MUXSELn_SET(2 * bank + pin / 16) = function << (2 * (pin % 16));
125} 111}
126 112
127static inline void imx233_enable_pin_pullup(unsigned bank, unsigned pin, bool enable) 113static inline void imx233_enable_pin_pullup(unsigned bank, unsigned pin, bool enable)
128{ 114{
129 if(enable) 115 if(enable)
130 __REG_SET(HW_PINCTRL_PULL(bank)) = 1 << pin; 116 HW_PINCTRL_PULLn_SET(bank) = 1 << pin;
131 else 117 else
132 __REG_CLR(HW_PINCTRL_PULL(bank)) = 1 << pin; 118 HW_PINCTRL_PULLn_CLR(bank) = 1 << pin;
133} 119}
134 120
135static inline void imx233_enable_pin_pullup_mask(unsigned bank, uint32_t pin_msk, bool enable) 121static inline void imx233_enable_pin_pullup_mask(unsigned bank, uint32_t pin_msk, bool enable)
136{ 122{
137 if(enable) 123 if(enable)
138 __REG_SET(HW_PINCTRL_PULL(bank)) = pin_msk; 124 HW_PINCTRL_PULLn_SET(bank) = pin_msk;
139 else 125 else
140 __REG_CLR(HW_PINCTRL_PULL(bank)) = pin_msk; 126 HW_PINCTRL_PULLn_CLR(bank) = pin_msk;
141} 127}
142 128
143/** On irq, the pin irq interrupt is disable and then cb is called; 129/** On irq, the pin irq interrupt is disable and then cb is called;