
I2C驱动学习
文章平均质量分 73
Android系统攻城狮
《Android系统多媒体进阶实战》一书作者
展开
-
Linux驱动之文件系统
module是加载的模块列表。可以看到kernfs_open_file结构体是挂在seq_file结构体的private指针下的,现在可以梳理下这三者之间的关系,file结构体的private_data指向seq_file,seq_file的private指向kernfs_open_file,这样他们就都联系起来的,当然这里是分析特定文件系统下的实现,在其他情况下可以指向其他数据结构。在这里,对seq_open()的调用采用我们之前创建的seq_operations结构,并设置为遍历虚拟文件。转载 2023-02-19 21:08:20 · 873 阅读 · 0 评论 -
Linux驱动之设备树
补充:标签是标记节点的方法,可以用唯一的名称来标识节点,在dt编译器编译过程中,dt编译器将该名称转换为唯一的32位值,之后可以使用标签引用节点,因为标签对于节点是唯一的。节点的属性和子节点(如果有)在 FDT_END_NODE 之前表示,因此这些子节点的 FDT_BEGIN_NODE 和 FDT_END_NODE 标记嵌套在父节点的标记中。应存在以将文件标识为版本 1 DTS(没有此标记的 dts 文件将被 dtc 视为处于过时的版本 0 中,除了其他小的但不兼容的更改之外,它使用不同的整数格式)。转载 2023-02-19 20:58:42 · 616 阅读 · 0 评论 -
Linux驱动之IIC子系统
每个soc内部都有自己的iic控制器,一般会有多个iic控制器,i2c_adapter结构体就是用于描述iic控制器的结构体(就是iic controler),结构体里的nr用于表述该控制器是第几个控制器例如iic-0,iic-1等这里面有一个最重要的结构就是i2c_algorithm,该结构是具体controler的实际iic传输实现,对于不同的平台iic的内部设计一般是不同的,那么通过该结构来提供统一的接口给其他模块调用,而具体的差异由具体的平台实现自己的i2c_algorithm。转载 2023-02-19 20:53:07 · 1975 阅读 · 0 评论 -
Linux驱动之Input子系统
2、遍历input_dev_list链表,针对input_dev_list上每一个input_dev,均与注册的input_device进行匹配检测,若匹配检测成功,则调用input_handler->connect接口,进行input_handler与input_device的绑定(通过调用input_register_handle实现,也可以理解为在input_handler、input_device上完成input_handler、input_device的事件消息的订阅操作)。转载 2023-02-19 20:43:26 · 424 阅读 · 0 评论 -
Linux驱动之GPIO子系统
这里要注意N-MOS管,当设定输出的值为高电平的时候,N-MOS管处于关闭状态,此时I/O口的电平就不会由输出的高低电平决定,而是由I/O口外部的上拉或者下拉决定;当设定输出的值为低电平的时候,N-MOS管处于开启状态,此时I/O口的电平就是低电平。硬件层之上是soc原厂提供的gpio controller驱动这部分提供了具体soc的pin脚的描述和控制接口,在这之上是gpiolib层为其他驱动程序提供统一的接口来配置和控制gpio,再往上就是其他驱动程序使用gpio的接口完成他们想要的工作。转载 2023-02-19 20:22:54 · 1303 阅读 · 0 评论 -
Linux驱动之Pinctrl子系统
然后每个状态下就是配置信息,这些配置信息来自上面介绍的pinctrl_maps结构体中的数据。在前面提到了client里会通过设备树获得一个个的pinctrl_maps结构,而该结构是要根pin controller里的pin之间建立联系的,因为不同的soc pin脚的设计都是不一样的,其配置方法也不一样,而在控制器初始化阶段需要解析出该控制器所使用的pin脚然后与controller提供的pin脚建立联系通过controller的pin或group操作函数集来操作具体的pin配置为想要的功能。转载 2023-02-19 20:08:53 · 3213 阅读 · 0 评论 -
Linux驱动之Regulator子系统
该数据结构描述regulator device的约束信息,包括输出电压范围、输出电流范围、regulator device支持的模式(fast、normal、idle、standby等)、regulator device支持的操作模式,包括change volt、change current、change bypass mode等、regulator device支持的suspend 状态下的输出控制(如在suspend to disk状态下的输出控制等)。在这一章中将介绍regulator的内部实现。转载 2023-02-19 20:01:49 · 2650 阅读 · 0 评论 -
Linux驱动之Framebuffer子系统
其注册位置在fbmem_init函数里,其实现逻辑是,对于fb设备驱动程序,驱动开发人员的工作就是分配注册一个fb_info结构体,每个结构体有不同的次设备号,以fb_open为例,这个函数会通过次设备号获得fb_info结构体,然后调用该fb_info结构体的fb_ops的fb_open函数,其他函数的实现与此类似。这是一个有趣的选择。每个颜色部分(红色、绿色、蓝色、透明度)使用 16 位进行通信,以支持所有现有硬件,驱动程序执行将其应用于硬件所需的所有计算(将其舍入到更少的位,可能会丢弃透明度)。转载 2023-02-19 19:48:33 · 2140 阅读 · 0 评论 -
Linux驱动Regmap子系统
该结构主要提供的功能有:缓存区和缓存操作、异步读写链表和队列操作、读写权限管理(那些地址的寄存器是可读的、那些地址范围是可写的以及哪些地址范围是可读写的)、读写页的支持及访问操作(某些设备是按页访问操作的)以及对寄存器和值的格式化操作等。其实到这里regmap的主体结构和实现就大概清楚了,至于其具体的实现细节像页的访问操作,缓存的操作权限的管理感兴趣的可以去driver/base/regmap/目录下去看源码,我也没去详细了解具体的实现过程,只是梳理了一下regmap的大致实现过程。转载 2023-02-19 19:33:50 · 310 阅读 · 0 评论 -
I2C之snd_soc_write()/i2c_transfer()/regmap_write()区别
一.snd_soc_write()流程1.kernel/include/sound/soc.h/* SoC Audio Codec device */<1>.struct snd_soc_codec { const struct snd_soc_codec_driver *driver; struct snd_soc_component component;};<2>.snd soc componentstruct snd_soc_componen...原创 2022-05-17 17:05:40 · 1505 阅读 · 1 评论 -
Linux之读写I2C设备I2C_RDWR用法(八)
i2c注册设备知识点: kernel/msm-4.9/drivers/i2c/i2c-dev.c为每个i2c设备创建设节点,所以我们不用创建。 /dev/i2c-0是在注册i2c-dev.c后产生的,代表一个可操作的适配器。 如果不使用i2c-dev.c的方式,就没有,也不需要这个节点。 需要找到你要操作的i2c设备在哪一根i2c总线上,如/dev/i2c-2上挂着,找到i2c设备地址,...原创 2019-02-18 16:06:09 · 9380 阅读 · 1 评论 -
linux I2C驱动4种读写方法
From一:读写/dev/i2c-x设备结点/dev/i2c-x设备结点对应的驱动文件为内核目录drivers/i2c下自带的i2c-dev.c文件,通读此文件可以发现它的工作流程。1、通过register_chrdev注册字符设备结点2、通过class_create在sysfs下创建对应的class结点3、利用bus_register_nofifier对I2C总线添加通知链,...原创 2019-02-16 19:19:17 · 6057 阅读 · 0 评论 -
Linux音频驱动开发概括
原址1.嵌入式音频系统硬件连接下图所示的嵌入式设备使用IIS将音频数据发送给编解码器。对编解码器的I/O寄存器的编程通过IIC总线进行。2.音频体系结构-ALSAALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了a...转载 2018-11-13 16:46:53 · 1688 阅读 · 0 评论 -
命令行读写i2c寄存器操作(二)
写命令格式: 寄存器地址 长度 数据 读命令格式: # echo “寄存器地址” > getreg # cat getreg 1.使能寄存器 # adb shell "echo "0x01,0x01,{0xff}" > /sys/bus/i2c/devices/1-20/setreg" 2.禁掉寄存器 # adb ...原创 2017-07-14 19:08:13 · 8360 阅读 · 0 评论 -
I2C driver编写常用接口
1.struct i2c_driver:描述从设备驱动的一个对象2.struct i2c_client:作用是描述一个从设备信息,不需要自己创建由adapter创建(内部创建的时候调用的是:struct i2c_client *i2c_new_device(struct i2c_adapter * adap,structi2c_board_info const * info);),其中str...原创 2018-11-05 11:12:23 · 525 阅读 · 0 评论