900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > linux驱动:TI+DM8127+GPIO(三)之omap_hwmod中添加GPIO资源

linux驱动:TI+DM8127+GPIO(三)之omap_hwmod中添加GPIO资源

时间:2020-01-20 08:52:10

相关推荐

linux驱动:TI+DM8127+GPIO(三)之omap_hwmod中添加GPIO资源

三、【GPIO驱动框架》向omap_hwmod中添加GPIO资源】

***将GPIO硬件信息添加到注册到omap_hwmod_list列表中

Arch/arm/plat-omap/include/plat/ti81xx.h中

#define TI814X_GPIO3_BASE 0x481AE000

Arch/arm/plat-omap/gpio.c中

输入输出控制寄存器偏移地址

#define OMAP4_GPIO_OE 0x0134

Arch/arm/mach-omap2/Omap_hwmod_81xx_data.c中

/* L4 SLOW -> GPIO4 */

static struct omap_hwmod_addr_space ti814x_gpio4_addrs[] = {

{

.pa_start =TI814X_GPIO3_BASE,

.pa_end = TI814X_GPIO3_BASE + SZ_4K - 1,

.flags = ADDR_MAP_ON_INIT | ADDR_TYPE_RT,

},

};

static struct omap_hwmod_ocp_if ti814x_l4_slow__gpio4 = {

.master =&ti816x_l4_slow_hwmod,

.slave =&ti814x_gpio4_hwmod,

.addr = ti814x_gpio4_addrs,

.addr_cnt = ARRAY_SIZE(ti814x_gpio4_addrs),

.user =OCP_USER_MPU | OCP_USER_SDMA,

};

/* gpio4 slave ports */

static struct omap_hwmod_ocp_if *ti814x_gpio4_slaves[] = {

&ti814x_l4_slow__gpio4,

};

static struct omap_hwmod ti814x_gpio4_hwmod = {

.name ="gpio4",

.class =&ti81xx_gpio_hwmod_class,

.mpu_irqs = ti814x_gpio4_irqs,

.mpu_irqs_cnt = ARRAY_SIZE(ti814x_gpio4_irqs),

.main_clk = "gpio4_ick",

.prcm= {

.omap4 = {

.clkctrl_reg= TI81XX_CM_ALWON_GPIO_1_CLKCTRL,

},

},

.opt_clks = gpio4_opt_clks,

.opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),

.dev_attr = &gpio_dev_attr,

.slaves =ti814x_gpio4_slaves,

.slaves_cnt = ARRAY_SIZE(ti814x_gpio4_slaves),

.omap_chip = OMAP_CHIP_INIT(CHIP_IS_TI814X |CHIP_IS_DM385 |

CHIP_IS_TI811X),

#if defined(CONFIG_MACH_DM385IPNC) ||defined(CONFIG_MACH_TI8148IPNC)

.flags =HWMOD_INIT_NO_RESET,

#endif

};

static __initdata struct omap_hwmod *ti81xx_hwmods[] = {

。。。。。。

&ti81xx_gpio1_hwmod,

&ti81xx_gpio2_hwmod,

&ti814x_gpio3_hwmod,

&ti814x_gpio4_hwmod,

&ti814x_gpio5_hwmod,

&ti814x_gpio6_hwmod,

&ti81xx_usbss_hwmod,

&ti81xx_elm_hwmod,

NULL,

};

int __init ti81xx_hwmod_init(void)

{

returnomap_hwmod_init(ti81xx_hwmods);//注册到omap_hwmod_list列表中

}

Arch/arm/mach-omap2/io.c

void __init omap2_init_common_infrastructure(void)

{

。。。。。。

}else if (cpu_is_ti81xx()) {

ti81xx_powerdomains_init();

omap2_clockdomains_init();

ti81xx_hwmod_init();

}

。。。。。。

Arch/arm/mach-omap2/board-ti8148ipnc.c

static void __init ti8148_ipnc_init_irq(void)

{

omap2_init_common_infrastructure();

omap2_init_common_devices(NULL,NULL);

omap_init_irq();

gpmc_init();

}

Arch/arm/mach-omap2/board-ti8148ipnc.c

MACHINE_START(TI8148IPNC,"ti8148ipnc")

/*Maintainer: Texas Instruments */

.boot_params = 0x80000100,

.map_io =ti8148_ipnc_map_io,

.reserve = ti81xx_reserve,

.init_irq = ti8148_ipnc_init_irq,

.init_machine = ti8148_ipnc_init,

.timer =&omap_timer,

MACHINE_END

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。