На днях реализовал поддержку команды "gpio" в uboot для ti814x. Хочу поделится сырцами:
1) Сам патч:
https://dl.dropboxusercontent.com/u/35006834/ti814x/uboot-custom-0002-Added-GPIO-command-support-for-OMAP4-and-TI81xx.patch
2) Изменения в файле борды:
настройка клоков GPIOх в pll_config
+ /* GPIO0 */
+ __raw_writel(0x2, CM_ALWON_GPIO_0_CLKCTRL);
+ while(__raw_readl(CM_ALWON_GPIO_0_CLKCTRL) != 0x2);
+
+ __raw_writel((BIT(8)), CM_ALWON_GPIO_0_OPTFCLKEN_DBCLK);
+
+ /* GPIO1, GPIO2 and GPIO3 */
+ __raw_writel(0x2, CM_ALWON_GPIO_1_CLKCTRL);
+ while(__raw_readl(CM_ALWON_GPIO_1_CLKCTRL) != 0x2);
и банки
+static const struct gpio_bank gpio_bank_ti814x[4] = {
+ { (void *)TI81XX_GPIO0_BASE, METHOD_GPIO_24XX },
+ { (void *)TI81XX_GPIO1_BASE, METHOD_GPIO_24XX },
+ { (void *)TI814X_GPIO2_BASE, METHOD_GPIO_24XX },
+ { (void *)TI814X_GPIO3_BASE, METHOD_GPIO_24XX },
+};
+
+const struct gpio_bank *const omap_gpio_bank = gpio_bank_ti814x;
3) не забываем о pinmux для вашего пина(для нашей платы GP2[12]):
+MUX_VAL(PINCNTL147, (IEN | IPU | FCN8 )) /* GP2[12] */\
4) Инклуд с конфигом:
+#define CONFIG_CMD_GPIO //Enable gpio command
+#define CONFIG_OMAP_GPIO
5) Ну и сама команда:
+ // Recovery switch: GP2[12]; 76 = BANK2(32 + 32) + PIN(12);
+ #define CONFIG_BOOTCOMMAND \
+ "if gpio input 76; then " \
+ "run recovery; " \
+ "else " \
+ "run nandboot; " \
+ "fi"
Все банки я не проверял, но должно работать.