diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2021-06-05 00:12:01 +0100 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2021-06-06 11:06:14 +0000 |
commit | e85bc74b307365e9a7b4adab51d646638db12fbd (patch) | |
tree | c45ba9079344b5cc0ea48a77b6aa77aacd71cdc5 /firmware/target/mips/ingenic_x1000/fiiom3k/gpio-target.h | |
parent | 695d1701cdd1bb4539f652c2204f7787097b2715 (diff) | |
download | rockbox-e85bc74b307365e9a7b4adab51d646638db12fbd.tar.gz rockbox-e85bc74b307365e9a7b4adab51d646638db12fbd.zip |
x1000: GPIO refactor
The GPIO API was pretty clunky and pin settings were decentralized,
making it hard to see what was happening and making GPIO stuff look
like a mess, frankly.
Instead of passing clunky (port, pin) pairs everywhere, GPIOs are now
identified with a single int. The extra overhead should be minimal as
GPIO configuration is generally not on a performance-critical path.
Pin assignments are now mostly consolidated in gpio-target.h and put
in various tables so gpio_init() can assign most pins at boot time.
Most drivers no longer need to touch GPIOs and basic pin I/O stuff
can happen without config since pins are put into the right state.
IRQ pins still need to be configured manually before use.
Change-Id: Ic5326284b0b2a2f613e9e76a41cb50e24af3aa47
Diffstat (limited to 'firmware/target/mips/ingenic_x1000/fiiom3k/gpio-target.h')
-rw-r--r-- | firmware/target/mips/ingenic_x1000/fiiom3k/gpio-target.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/firmware/target/mips/ingenic_x1000/fiiom3k/gpio-target.h b/firmware/target/mips/ingenic_x1000/fiiom3k/gpio-target.h new file mode 100644 index 0000000000..f580cd9167 --- /dev/null +++ b/firmware/target/mips/ingenic_x1000/fiiom3k/gpio-target.h | |||
@@ -0,0 +1,26 @@ | |||
1 | /* Name Port Pins Function */ | ||
2 | DEFINE_PINGROUP(LCD_DATA, GPIO_A, 0xffff << 0, GPIOF_DEVICE(1)) | ||
3 | DEFINE_PINGROUP(LCD_CONTROL, GPIO_B, 0x1a << 16, GPIOF_DEVICE(1)) | ||
4 | DEFINE_PINGROUP(MSC0, GPIO_A, 0x3f << 20, GPIOF_DEVICE(1)) | ||
5 | DEFINE_PINGROUP(SFC, GPIO_A, 0x3f << 26, GPIOF_DEVICE(1)) | ||
6 | DEFINE_PINGROUP(I2S, GPIO_B, 0x1f << 0, GPIOF_DEVICE(1)) | ||
7 | DEFINE_PINGROUP(DMIC, GPIO_B, 3 << 21, GPIOF_DEVICE(0)) | ||
8 | DEFINE_PINGROUP(I2C0, GPIO_B, 3 << 23, GPIOF_DEVICE(0)) | ||
9 | DEFINE_PINGROUP(I2C1, GPIO_C, 3 << 26, GPIOF_DEVICE(0)) | ||
10 | DEFINE_PINGROUP(I2C2, GPIO_D, 3 << 0, GPIOF_DEVICE(1)) | ||
11 | |||
12 | /* Name Pin Function */ | ||
13 | DEFINE_GPIO(AK4376_POWER, GPIO_PA(16), GPIOF_OUTPUT(0)) | ||
14 | DEFINE_GPIO(BTN_PLAY, GPIO_PA(17), GPIOF_INPUT) | ||
15 | DEFINE_GPIO(BTN_VOL_UP, GPIO_PA(19), GPIOF_INPUT) | ||
16 | DEFINE_GPIO(MSC0_CD, GPIO_PB(6), GPIOF_INPUT) | ||
17 | DEFINE_GPIO(USB_ID, GPIO_PB(7), GPIOF_INPUT) | ||
18 | DEFINE_GPIO(AXP_IRQ, GPIO_PB(10), GPIOF_INPUT) | ||
19 | DEFINE_GPIO(USB_DETECT, GPIO_PB(11), GPIOF_INPUT) | ||
20 | DEFINE_GPIO(FT6x06_INTERRUPT, GPIO_PB(12), GPIOF_INPUT) | ||
21 | DEFINE_GPIO(FT6x06_RESET, GPIO_PB(15), GPIOF_OUTPUT(0)) | ||
22 | DEFINE_GPIO(LCD_RD, GPIO_PB(16), GPIOF_OUTPUT(1)) | ||
23 | DEFINE_GPIO(LCD_CE, GPIO_PB(18), GPIOF_OUTPUT(1)) | ||
24 | DEFINE_GPIO(USB_DRVVBUS, GPIO_PB(25), GPIOF_OUTPUT(0)) | ||
25 | DEFINE_GPIO(BTN_VOL_DOWN, GPIO_PB(28), GPIOF_INPUT) | ||
26 | DEFINE_GPIO(BTN_POWER, GPIO_PB(31), GPIOF_INPUT) | ||