1.2.6.29内核使用的mux系统:
(1)定义arch/arm/mach-omap2/mux.c:
MUX_CFG_34XX("GP142_UART2_TX", 0x170,
OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_OUTPUT) /* GP142 UART2_TX */
MUX_CFG_34XX("GP143_UART2_RX", 0x172,
OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_INPUT) /* GP143 UART2_RX */
(2)添加arch/arm/plat-omap/include/mach/mux.h:
GP142_UART2_TX,
GP14333_UART2_RX,
(3)在主文件设置arch/arm/mach-omap2/board-omap3evm.c:
omap_cfg_reg(GP142_UART2_TX);
omap_cfg_reg(GP143_UART2_RX);
======================================================================
2.2.6.32内核使用的新的mux系统
(1)定义arch/arm/mach-omap2/mux34xx.c
#ifdef CONFIG_OMAP_MUX
#define _OMAP3_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7)
{
.reg_offset = (OMAP3_CONTROL_PADCONF_##M0##_OFFSET),
.gpio = (g),
.muxnames = { m0, m1, m2, m3, m4, m5, m6, m7 },
}
#else
#define _OMAP3_MUXENTRY(M0, g, m0, m1, m2, m3, m4, m5, m6, m7)
{
.reg_offset = (OMAP3_CONTROL_PADCONF_##M0##_OFFSET),
.gpio = (g),
}
#endif
关注红色部分,M0指的是主名称,g代表gpio,m0-m7是他们的别名
如:
_OMAP3_MUXENTRY(SDMMC2_DAT6, 138,
"sdmmc2_dat6", "sdmmc2_dir_cmd", "cam_shutter", "sdmmc3_dat2",
"gpio_138", "hsusb3_tll_dir", NULL, "safe_mode"),
(2)使用主名初始化
OMAP3_MUX(SDMMC2_DAT6, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
(3)使用别名初始化
omap_mux_init_signal("sdmmc2_dat6.sdmmc2_dat6",
OMAP_PIN_INPUT_PULLUP);
omap_mux_init_signal("hsusb3_tll_dir",
OMAP_PIN_INPUT_PULLDOWN);
======================================================================
3.在omap系统初始化gpio的流程为:
(1)定义,如果复杂的初始化就需要用上面的方法去初始化。
omap_mux_init_gpio(OMAP3STALKER_ETHR_GPIO_IRQ, OMAP_PIN_INPUT_PULLUP);
(2)申请
gpio_request(OMAP3STALKER_ETHR_GPIO_IRQ, "SMC911x irq") < 0)
(3)方向
gpio_direction_input(OMAP3STALKER_ETHR_GPIO_IRQ);
(4)gpio转irq
OMAP_GPIO_IRQ(OMAP3STALKER_ETHR_GPIO_IRQ)
http://blog.chinaunix.net/uid-1718717-id-377248.html
阅读(1371) | 评论(0) | 转发(0) |