mirror of
git://projects.qi-hardware.com/iris.git
synced 2024-11-16 19:36:15 +02:00
351 lines
9.0 KiB
Plaintext
351 lines
9.0 KiB
Plaintext
GPIO control:
|
|
|
|
#define GPIO_BASE 0xB0010000
|
|
|
|
#define IRQ_GPIO3 25
|
|
#define IRQ_GPIO2 26
|
|
#define IRQ_GPIO1 27
|
|
#define IRQ_GPIO0 28
|
|
|
|
#define GPIO_IRQ_LOLEVEL 0
|
|
#define GPIO_IRQ_HILEVEL 1
|
|
#define GPIO_IRQ_FALLEDG 2
|
|
#define GPIO_IRQ_RAISEDG 3
|
|
|
|
// GP ... Registers: one set for each port of 32 pins; total 128 pins means 4 groups. Total size: 4 * 0x30 == 0xc0.
|
|
#define GPIO_GPDR(n) (GPIO_BASE + (0x00 + (n)*0x30)) // D: data
|
|
#define GPIO_GPDIR(n) (GPIO_BASE + (0x04 + (n)*0x30)) // DI: data in: 0 is input; 1 is output. Disable interrupts on the pin before touching this.
|
|
#define GPIO_GPODR(n) (GPIO_BASE + (0x08 + (n)*0x30)) // OD:
|
|
#define GPIO_GPPUR(n) (GPIO_BASE + (0x0c + (n)*0x30)) // PU: pull-up (1 is enable)
|
|
#define GPIO_GPALR(n) (GPIO_BASE + (0x10 + (n)*0x30)) // AL: alternate lower: per 2 bit; 00 means use as gpio; other values mean use as alternate function
|
|
#define GPIO_GPAUR(n) (GPIO_BASE + (0x14 + (n)*0x30)) // AU: alternate upper: same thing, needs 2 registers because it's 2 bits per pin.
|
|
#define GPIO_GPIDLR(n) (GPIO_BASE + (0x18 + (n)*0x30)) // IDL: interrupt detect lower: per 2 bit (GPIO_IRQ_*)
|
|
#define GPIO_GPIDUR(n) (GPIO_BASE + (0x1c + (n)*0x30)) // IDU: interrupt detect upper: same thing, upper 16 bit
|
|
#define GPIO_GPIER(n) (GPIO_BASE + (0x20 + (n)*0x30)) // IE: interrupt enable (0 is disable)
|
|
#define GPIO_GPIMR(n) (GPIO_BASE + (0x24 + (n)*0x30)) // IM:
|
|
#define GPIO_GPFR(n) (GPIO_BASE + (0x28 + (n)*0x30)) // F: flag: set on interrupt; cleared by user.
|
|
|
|
#define IRQ_GPIO_0 48
|
|
#define NUM_GPIO 128
|
|
|
|
// Pins for alternate functions:
|
|
|
|
#define __gpio_as_ssi() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xFC00FFFF; \
|
|
REG_GPIO_GPALR(2) |= 0x01550000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uart3() \
|
|
do { \
|
|
REG_GPIO_GPAUR(0) &= 0xFFFF0000; \
|
|
REG_GPIO_GPAUR(0) |= 0x00005555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uart2() \
|
|
do { \
|
|
REG_GPIO_GPALR(3) &= 0x3FFFFFFF; \
|
|
REG_GPIO_GPALR(3) |= 0x40000000; \
|
|
REG_GPIO_GPAUR(3) &= 0xF3FFFFFF; \
|
|
REG_GPIO_GPAUR(3) |= 0x04000000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uart1() \
|
|
do { \
|
|
REG_GPIO_GPAUR(0) &= 0xFFF0FFFF; \
|
|
REG_GPIO_GPAUR(0) |= 0x00050000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uart0() \
|
|
do { \
|
|
REG_GPIO_GPAUR(3) &= 0x0FFFFFFF; \
|
|
REG_GPIO_GPAUR(3) |= 0x50000000; \
|
|
} while (0)
|
|
|
|
|
|
#define __gpio_as_scc0() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xFFFFFFCC; \
|
|
REG_GPIO_GPALR(2) |= 0x00000011; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_scc1() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xFFFFFF33; \
|
|
REG_GPIO_GPALR(2) |= 0x00000044; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_scc() \
|
|
do { \
|
|
__gpio_as_scc0(); \
|
|
__gpio_as_scc1(); \
|
|
} while (0)
|
|
|
|
#define __gpio_as_dma() \
|
|
do { \
|
|
REG_GPIO_GPALR(0) &= 0x00FFFFFF; \
|
|
REG_GPIO_GPALR(0) |= 0x55000000; \
|
|
REG_GPIO_GPAUR(0) &= 0xFF0FFFFF; \
|
|
REG_GPIO_GPAUR(0) |= 0x00500000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_msc() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0xFFFF000F; \
|
|
REG_GPIO_GPALR(1) |= 0x00005550; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_pcmcia() \
|
|
do { \
|
|
REG_GPIO_GPAUR(2) &= 0xF000FFFF; \
|
|
REG_GPIO_GPAUR(2) |= 0x05550000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_emc(csmask) \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0x3FFFFFFF; \
|
|
REG_GPIO_GPALR(2) |= 0x40000000; \
|
|
REG_GPIO_GPAUR(2) &= 0xFFFF0000; \
|
|
REG_GPIO_GPAUR(2) |= 0x00005555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_lcd_slave() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0x0000FFFF; \
|
|
REG_GPIO_GPALR(1) |= 0x55550000; \
|
|
REG_GPIO_GPAUR(1) &= 0x00000000; \
|
|
REG_GPIO_GPAUR(1) |= 0x55555555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_lcd_master() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0x0000FFFF; \
|
|
REG_GPIO_GPALR(1) |= 0x55550000; \
|
|
REG_GPIO_GPAUR(1) &= 0x00000000; \
|
|
REG_GPIO_GPAUR(1) |= 0x556A5555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_usb() \
|
|
do { \
|
|
REG_GPIO_GPAUR(0) &= 0x00FFFFFF; \
|
|
REG_GPIO_GPAUR(0) |= 0x55000000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_ac97() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xC3FF03FF; \
|
|
REG_GPIO_GPALR(2) |= 0x24005400; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_i2s_slave() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xC3FF0CFF; \
|
|
REG_GPIO_GPALR(2) |= 0x14005100; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_i2s_master() \
|
|
do { \
|
|
REG_GPIO_GPALR(2) &= 0xC3FF0CFF; \
|
|
REG_GPIO_GPALR(2) |= 0x28005100; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_eth() \
|
|
do { \
|
|
REG_GPIO_GPAUR(3) &= 0xFC000000; \
|
|
REG_GPIO_GPAUR(3) |= 0x01555555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_pwm() \
|
|
do { \
|
|
REG_GPIO_GPAUR(2) &= 0x0FFFFFFF; \
|
|
REG_GPIO_GPAUR(2) |= 0x50000000; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_ps2() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0xFFFFFFF0; \
|
|
REG_GPIO_GPALR(1) |= 0x00000005; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_uprt() \
|
|
do { \
|
|
REG_GPIO_GPALR(1) &= 0x0000000F; \
|
|
REG_GPIO_GPALR(1) |= 0x55555550; \
|
|
REG_GPIO_GPALR(3) &= 0xC0000000; \
|
|
REG_GPIO_GPALR(3) |= 0x15555555; \
|
|
} while (0)
|
|
|
|
#define __gpio_as_cim() \
|
|
do { \
|
|
REG_GPIO_GPALR(0) &= 0xFF000000; \
|
|
REG_GPIO_GPALR(0) |= 0x00555555; \
|
|
} while (0)
|
|
|
|
|
|
// Pins on the trendtac:
|
|
0.00 keyboard
|
|
0.01 keyboard
|
|
0.02 keyboard
|
|
0.03 keyboard
|
|
0.04 keyboard
|
|
0.05 keyboard
|
|
0.06 keyboard
|
|
0.07 keyboard
|
|
0.08 keyboard interrupt?
|
|
0.09
|
|
0.10
|
|
0.11
|
|
0.12
|
|
0.13 touchpad right button
|
|
0.14
|
|
0.15
|
|
0.16 touchpad left button
|
|
0.17
|
|
0.18
|
|
0.19
|
|
0.20
|
|
0.21
|
|
0.22
|
|
0.23
|
|
0.24
|
|
0.25
|
|
0.26
|
|
0.27
|
|
0.28
|
|
0.29
|
|
0.30
|
|
0.31
|
|
1.00
|
|
1.01
|
|
1.02
|
|
1.03
|
|
1.04
|
|
1.05
|
|
1.06
|
|
1.07
|
|
1.08
|
|
1.09
|
|
1.10
|
|
1.11
|
|
1.12
|
|
1.13
|
|
1.14
|
|
1.15
|
|
1.16
|
|
1.17
|
|
1.18
|
|
1.19
|
|
1.20
|
|
1.21
|
|
1.22
|
|
1.23
|
|
1.24
|
|
1.25
|
|
1.26
|
|
1.27
|
|
1.28
|
|
1.29
|
|
1.30
|
|
1.31
|
|
2.00 SPEN: lcd enable
|
|
2.01 SPCK: lcd clock
|
|
2.02 SPDA: lcd data
|
|
2.03 LCD_RET: lcd reset
|
|
2.04
|
|
2.05
|
|
2.06
|
|
2.07
|
|
2.08
|
|
2.09
|
|
2.10
|
|
2.11
|
|
2.12
|
|
2.13
|
|
2.14
|
|
2.15
|
|
2.16
|
|
2.17
|
|
2.18
|
|
2.19
|
|
2.20
|
|
2.21
|
|
2.22
|
|
2.23
|
|
2.24
|
|
2.25
|
|
2.26
|
|
2.27
|
|
2.28
|
|
2.29
|
|
2.30 PWM enable (for lcd backlight)
|
|
2.31
|
|
3.00 keyboard
|
|
3.01 keyboard
|
|
3.02 keyboard
|
|
3.03 keyboard
|
|
3.04 keyboard
|
|
3.05 keyboard
|
|
3.06 keyboard
|
|
3.07 keyboard
|
|
3.08 keyboard
|
|
3.09 keyboard
|
|
3.10 keyboard
|
|
3.11 keyboard
|
|
3.12 keyboard
|
|
3.13 keyboard
|
|
3.14 keyboard
|
|
3.15 keyboard
|
|
3.16
|
|
3.17
|
|
3.18
|
|
3.19
|
|
3.20
|
|
3.21
|
|
3.22
|
|
3.23
|
|
3.24
|
|
3.25
|
|
3.26
|
|
3.27
|
|
3.28
|
|
3.29 keyboard
|
|
3.30
|
|
3.31
|
|
|
|
Devices enabled in linux:
|
|
+ __harb_usb0_uhc();
|
|
+ __gpio_as_emc();
|
|
+ __gpio_as_uart0();
|
|
+ __gpio_as_dma();
|
|
+ __gpio_as_eth();
|
|
+ __gpio_as_usb();
|
|
+ __gpio_as_lcd_master();
|
|
+#if defined(CONFIG_I2S_AK4642EN)
|
|
+//wjx __gpio_as_scc1();
|
|
+ __gpio_as_i2s_master(); //wjx
|
|
+#endif
|
|
+#if defined(CONFIG_I2S_TSC2301) || defined(CONFIG_I2S_TLC320AIC23)
|
|
+ __gpio_as_ssi();
|
|
+#endif
|
|
+ //__gpio_as_ac97();
|
|
+#if defined(CONFIG_I2S_TSC2301) || defined(CONFIG_I2S_TLC320AIC23) || defined(CONFIG_I2S_CS42L51)
|
|
+ __gpio_as_i2s_slave();
|
|
+#endif
|
|
+//wjx __gpio_as_cim();
|
|
+ __gpio_as_msc();
|
|
+
|
|
+/* wjx
|
|
+ __gpio_as_output(GPIO_LED_EN);
|
|
+ __gpio_set_pin(GPIO_LED_EN);
|
|
+
|
|
+ __gpio_as_output(GPIO_DISP_OFF_N);
|
|
+ __gpio_set_pin(GPIO_DISP_OFF_N);
|
|
+*/
|
|
+ __gpio_as_output(GPIO_PWM0);
|
|
+ __gpio_set_pin(GPIO_PWM0);
|
|
+
|
|
+
|
|
+//wjx __gpio_as_input(GPIO_RTC_IRQ);
|
|
+ __gpio_as_output(GPIO_USB_CLK_EN);
|
|
+ __gpio_set_pin(GPIO_USB_CLK_EN);
|