三、【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

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

  1. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之Pinctrl子系统和GPIO子系统的使用

    文章目录 前言 1.Pinctrl子系统 1.1.为什么有Pinctrl子系统 1.2.重要的概念 1.3.代码中怎么引用pinctrl 2.GPIO子系统 2.1.为什么有GPIO子系统 2.2.在 ...

  2. linux驱动开发篇(三)—— 总线设备驱动模型

    linux系列目录: linux基础篇(一)--GCC和Makefile编译过程 linux基础篇(二)--静态和动态链接 ARM裸机篇(一)--i.MX6ULL介绍 ARM裸机篇(二)--i.MX6 ...

  3. ESP32修改BootLoader:在boot中添加GPIO和IIC驱动方式

    ESP32修改BootLoader:在boot中添加GPIO和IIC驱动方式 1. ESP Bootloader简介 ESP32有着强大的引导加载程序(Bootloader)功能: 主要执行以下任务: ...

  4. linux驱动学习笔记(三)阻塞与非阻塞IO

    Linux驱动中阻塞与非阻塞IO 前言 阻塞 非阻塞 一.等待队列 1.等待队列头 2.等待队列 模板 二.轮询 模板 总结 前言 阻塞和非阻塞io是两种不同的设备访问方式. 阻塞 阻塞IO表示在执行 ...

  5. Linux驱动编程篇(三)——LED驱动(一)简单LED驱动

    一.LED驱动程序的实现目标及流程图 1.打开LED 2.关闭LED 二.LED驱动程序的实现部分 1.内核层LED驱动程序 2.应用层LED测试程序 三.内核层LED驱动程序的编程步骤 1.添加头文 ...

  6. Linux驱动编程 step-by-step (三) 字符设备中 重要的数据结构

    字符设备中 重要的数据结构 大部分字符驱动设计三个重要的数据结构 <linux/fs.h> struct file_operations struct file struct inode ...

  7. Linux驱动的软件架构(三):主机驱动与外设驱动分离的设计思想

    <Linux设备驱动开发详解>的学习笔记 1.主机驱动与外设驱动分离 Linux中的SPI.I2C.USB等子系统都利用了典型的把主机驱动和外设驱动分离的想法,让主机端只负责产生总线上的传 ...

  8. [ Linux驱动炼成记 ] 15 - 存储器EMMC中Ext4文件系统 中 磁盘空间占用率100%

    产品现象 : 设备(Linux 系统) 运行一段时间后,其中某一个分区 /et/config 突然占用率为100%,而实际空间可能1%都不到. 这种问题百思不得其解.谷歌/百度 所遇到的解决方案都是嵌 ...

  9. linux qt 背景图片,《转》qt中添加背景图片(stylesheet)

    摘要: QT Create中,对button或者window等部件设置背景.颜色.透明等样式时,需要用到stylesheet,可以直接在代码里写,也可以在ui设计师里通过右键change styles ...

最新文章

  1. JavaScript中的字符串操作(转)
  2. PyQt5 技巧篇-按钮竖排显示方法,Qt Designer设置按钮竖排显示。
  3. crtlc不能复制文件_ctrl+c不能复制怎么办
  4. html不用点击自动执行,页面自动执行(加载)js的几种方法
  5. SSH putty Disconnected: Server protocol violation: unexpected SSH2_MSG_UNIMPLEMENTED packet
  6. mysql备份更换存储引擎_mysql数据库innodb存储引擎备份脚本
  7. python三方库之paramiko
  8. id,rowid,rownum 区别
  9. C++并发中的条件变量 std::condition_variable
  10. 更改oracle字符集为utf_oracle字符集AL16UTF16改为ZHS16GBK
  11. [原创]Eclipse 安卓开发几个异常的处理办法
  12. Effective C++条款05:了解C++默默编写并调用哪些函数
  13. python——numpy——roll()函数
  14. msdtc.exe dll劫持
  15. 万字详文阐释程序员修炼之道
  16. 【Nand2tetris】Project02
  17. 参加计算机比赛英语,高中英语作文关于电脑比赛的
  18. Go语言学习 二十三 错误处理和运行时恐慌(Panic)
  19. 2022-2027年中国巴西鲷鱼养殖行业市场调研及未来发展趋势预测报告
  20. android 设置字体大小不随系统大小变化,App字体大小不随系统改变而改变

热门文章

  1. kernfs_addrm_start kernfs_add_one
  2. POJ - 2446 Chessboard 二分匹配+建图
  3. easy-x库graphics.h图形库安装
  4. Java编写胖老鼠的交易_猫和胖老鼠
  5. 解决:vs2013 错误 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated.
  6. php数据库字段类型,mysql 字段类型说明
  7. 神经网络输出大小(卷积层及池化层)
  8. 打印几个关键的java环境变量
  9. CDN和Web Cache领域相关的经典书籍推荐
  10. UE4场景设计学习教程