[Linux 基础] -- Linux 内核中的 MFD 子系统
一、MFD全称
Multi-function Device:多功能设备
二、为何会出现 MFD 子系统
由于出现了一类具有多种功能的外围设备或 cpu 内部集成的硬件模块
三、有哪些多功能设备
3.1、PMIC:电源管理芯片
da9063:调节器,led控制器,看门狗,实时时钟控制器,温度传感器,震动马达驱动,长按关机功能(ON key)
max77843:调节器,充电器,燃油表,触觉反馈,led控制器,micro USB 接口控制器
wm831x:调节器,时钟,实时时钟控制器,看门狗,触摸控制器,温度传感器,背光控制器,状态led控制器,GPIO,长按关机功能(ON key),ADC
其他:甚至具有 codec 功能
3.2、atmel-hlcdc:显示控制器和背光 pwm
3.3、Diolan DLN2:USB 转 I2C,SPI 和 GPIO 控制器
3.4、Realtek PCI-E 读卡器:SD/MMC 和记忆棒读取器
四、MFD 子系统解决的主要问题
在不同的内核子系统中注册这些驱动。特别是外部外围设备仅仅由一个结构体 struct device(或是指定 i2c_client 或 spi_device)呈现
五、MFD 子系统的有点有哪些
1、允许在多个子系统中注册相同的设备
2、MFD 驱动必须能复用总线(主要是关于锁的处理)和处理中断请求
3、处理时钟
4、需要配置 IP
5、允许驱动重用,多个多功能设备重用其他子系统中的驱动
六、MFD 提供的 API
int mfd_add_devices(struct device *parent, int id, const struct mfd_cell *cells, int n_devs, struct resource *mem_base, int irq_base, struct irq_domain *irq_domain);extern void mfd_remove_devices(struct device *parent);
七、 MFD 提供的结构体
struct mfd_cell {const char *name;int id;/* refcounting for multiple drivers to use a single cell */atomic_t *usage_count;int (*enable)(struct platform_device *dev);int (*disable)(struct platform_device *dev);int (*suspend)(struct platform_device *dev);int (*resume)(struct platform_device *dev);/* platform data passed to the sub devices drivers */void *platform_data;size_t pdata_size;/* device properties passed to the sub devices drivers */struct property_entry *properties;/* * Device Tree compatible string* See: Documentation/devicetree/usage-model.txt Chapter 2.2 for details*/const char *of_compatible;/* Matches ACPI */const struct mfd_cell_acpi_match *acpi_match;/* * These resources can be specified relative to the parent device.* For accessing hardware you should use resources from the platform dev*/int num_resources;const struct resource *resources;/* don't check for resource conflicts */bool ignore_resource_conflicts;/* * Disable runtime PM callbacks for this subdevice - see* pm_runtime_no_callbacks().*/bool pm_runtime_no_callbacks;/* A list of regulator supplies that should be mapped to the MFD* device rather than the child device when requested*/const char * const *parent_supplies;int num_parent_supplies;
};
[Linux 基础] -- Linux 内核中的 MFD 子系统相关推荐
- linux内核驱动子系统,linux内核中的MFD子系统
分析用的内核版本为5.1.3 1.MFD全称 Multi-function Device,多功能设备 2. 为何会出现MFD子系统 由于出现了一类具有多种功能的外围设备或cpu内部集成的硬件模块 3. ...
- linux 驱动 include .h 路径 control,linux内核中的MFD子系统
分析用的内核版本为5.1.3 1.MFD全称 Multi-function Device,多功能设备 2. 为何会出现MFD子系统 由于出现了一类具有多种功能的外围设备或cpu内部集成的硬件模块 3. ...
- Linux 2.6内核中新的锁机制--RCU [转]
2005 年 7 月 01 日 本文详细地介绍了 Linux 2.6 内核中新的锁机制 RCU(Read-Copy Update) 的实现机制,使用要求与典型应用. 一. 引言 众所周知,为了保护共享 ...
- linux英伟达显卡内核不匹配,硬核观察|Linus 破例在 Linux 5.11 内核中允许英伟达显卡驱动加塞...
Linus 破例在 Linux 5.11 内核中允许英伟达显卡驱动加塞 据 cnbeta 报道,曾因闭源驱动对英伟达爆粗口的 Linus Torvalds,刚刚宣布了 Linux 5.11 内核版本的 ...
- Linux 2.6内核中新的锁机制--RCU
转载自: Linux 2.6内核中新的锁机制--RCU 一. 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种 ...
- 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结
20155301 滕树晨linux基础--linux进程间通信(IPC)机制总结 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在 ...
- linux基础——linux进程间通信(IPC)机制总结
原 linux基础--linux进程间通信(IPC)机制总结 2016年07月23日 21:33:12 yexz 阅读数:18224更多 <div class="tags-box sp ...
- 视频教程-赵强老师:大数据从入门到精通(1)Linux基础-Linux
赵强老师:大数据从入门到精通(1)Linux基础 毕业于清华大学,拥有超过13年的工作经验. Oracle认证讲师,拥有6年以上授课经验.精通Oracle数据库.中间(Weblogic)和大数据Had ...
- [Linux 基础] -- Linux input 子系统要点总结
输入设备的主要工作过程 动作产生(按键.触屏 ....)-- 产生中断 -- 读取数据(键值.坐标 ....)-- 将数据传递给应用程序. 事件的处理 input device 向上报告--input ...
最新文章
- ClassLoader知识收集
- 获取本地公网ip_本地与远程linux服务器之间传输数据
- 树莓派 之 Screen
- ESP-TOUCH编码规则及解码
- SAP的成本中心与利润中心的关系
- 【Linux】一步一步学Linux——mv命令(30)
- 我的世界服务器破坏方块有延迟,问一下我的世界游戏方块不会被破坏的指令以及指令适用于游戏的版本
我记得在服务器上和单机上好像有不同的指令...
- html5 选择列表,Html5添加基于列表的选择美化插件教程
- java 状态模式 同步_JAVA设计模式之状态模式
- c++初始化成员列表_C++ 类构造函数初始化列表
- python xlrd读取excel慢_python操作Excel读写--使用xlrd
- Spring mvc 文件上传
- C 库函数 - abs()
- Pytorch——过拟合
- 错误代码:1120 当前Hsql数据库已被另一线程锁定
- 电子测量——用C语言设计测量数据误差处理的通用程序
- Linux命令之rz命令与sz命令
- Negotiation - 04
- Beautify Panel 2 for Mac(PS人像磨皮美容插件)中文版
- 【实例学模式】一针见血装饰器模式
热门文章
- 酒店预定android代码,毕业设计(论文)-基于Android的酒店预定系统设计(全套源代码).doc...
- 基于simulink平台的非线性模型预测控制算法实现代码,无人驾驶运动控制
- 基于Java的动漫网站的设计与实现
- 【英语:基础进阶_核心词汇扩充】E3.常见词根拓词
- WIFI学习五(STA与AP,基于MT7682)
- 四种经典的拉格朗日函数(Augmented Lagrangian Function)
- 再谈Delphi vs VC++(非常精彩)
- python 拼多多_拼多多2018校招编程题汇总 Python实现
- 解决No ULINK2/ME Device found问题
- 【Docker】【MySQL】MySQL一直在重启,且一直重启失败