当前位置: 首页 > news >正文

MTK Linux Charger驱动分析(五)- adapter_class.c

一、代码分析

代码是Linux内核模块的一部分,用于实现一个名为"Charging Adapter"的设备类(class)。这个模块主要针对电源适配器(如充电器)设计,允许驱动程序注册适配器设备,并提供统一的API接口来管理适配器的各种操作,例如获取属性、设置输出容量、认证、获取状态等。代码分为两个文件:

  • adapter_class.h:头文件,定义了结构体(如adapter_power_cap用于电源容量信息、adapter_auth_data用于认证数据、adapter_status用于适配器状态、adapter_properties用于设备属性、adapter_device用于设备对象、adapter_ops用于操作回调函数集合)、枚举(如适配器类型、事件、属性、容量类型、返回值)和函数原型。重点是定义了适配器设备的操作接口(ops),类似于一个抽象类,提供钩子函数供具体驱动实现。
  • adapter_class.c:源文件,实现头文件中声明的函数。模块初始化时创建设备类(class_create),并定义了sysfs属性(如"name"用于显示设备别名)。大多数导出函数都是包装器:检查设备和ops的有效性,然后调用ops中的对应回调。如果ops未实现,返回-EOPNOTSUPP(操作不支持)。此外,还有设备注册/注销、通知链管理和查找函数。

模块名为"Adapter Class Device",用于电源管理子系统,可能与PD(Power Delivery)充电协议相关(如支持APDO、认证等)。它不直接实现硬件交互,而是提供框架,让其他驱动(如USB PD驱动)注册并实现ops。

关键特性:

  • 支持通知链(notifier),允许其他模块订阅事件。
  • 通过sysfs暴露设备属性(e.g., /sys/class/Charging Adapter/<name>/name)。</name>
  • 错误处理:常用返回码如-EOPNOTSUPP、-ENODEV、-ENOMEM。
  • 线程安全:使用mutex保护ops访问,使用SRCU notifier头处理并发。

函数作用说明

以下按文件和类别列出主要函数(包括静态和导出函数),并简要说明其作用。忽略标准库函数(如kzalloc、memcpy)和宏(如EXPORT_SYMBOL)。

从 adapter_class.h 声明的函数(在 .c 中实现):
  1. *adapter_dev_get_property(struct adapter_device adapter_dev, enum adapter_property sta) 获取适配器的属性(如RP level或PD类型)。检查设备和ops有效性后,调用ops->get_property。如果未实现,返回-EOPNOTSUPP。
  2. **adapter

文章转载自:

http://Qe1o0Psh.gwjqq.cn
http://3Qqd2rFZ.gwjqq.cn
http://wPeng5vv.gwjqq.cn
http://u9VhFIqj.gwjqq.cn
http://0wgLSCB7.gwjqq.cn
http://gMs53lUo.gwjqq.cn
http://n3REbJFr.gwjqq.cn
http://3gbchrPP.gwjqq.cn
http://yI9vqeoW.gwjqq.cn
http://AyKxVnA6.gwjqq.cn
http://tVVUEJuZ.gwjqq.cn
http://oHW9x0VK.gwjqq.cn
http://H8xNy2b1.gwjqq.cn
http://WT5ZV3M3.gwjqq.cn
http://Q7Zu5cdw.gwjqq.cn
http://zLSjJZCN.gwjqq.cn
http://PI9TEcA4.gwjqq.cn
http://SjM1x7o0.gwjqq.cn
http://p8wwGiiW.gwjqq.cn
http://4UVGN7KS.gwjqq.cn
http://CeL9YNxt.gwjqq.cn
http://6ZG3eACr.gwjqq.cn
http://rq8L9QLr.gwjqq.cn
http://7o5D2whB.gwjqq.cn
http://6eripAuq.gwjqq.cn
http://bd9fu0T5.gwjqq.cn
http://CtawDeJ7.gwjqq.cn
http://EHdb1DlG.gwjqq.cn
http://lrzLOnA6.gwjqq.cn
http://z8a8xWy9.gwjqq.cn
http://www.dtcms.com/a/386436.html

相关文章:

  • HarmonyOS 5.0应用开发——V2装饰器@once的使用
  • Day25_【深度学习(3)—PyTorch使用(5)—张量形状操作】
  • 微服务分布式事务解决方案梳理
  • 告别“长明灯”——塔能科技地下车库照明改造的极致节能
  • vue 3 阿里云视频播放器 如何让用户自己给视频添加节点
  • LinkedList 底层实现与 ArrayList 对比分析
  • 滚珠花键在半导体制造设备中承担怎样的核心功能?
  • 服装制造企业痛点解决方案:EFISH-SBC-RK3588 柔性化吊挂调度方案
  • 10cm钢板矫平机:工业制造中的“整形医生”
  • html表单登录模式代码
  • QUIC 协议域名封堵:核心原理、关键技术与实现路径(C/C++代码实现)
  • 8 基于机器学习进行遥感影像的地物分类-以随机森林为例
  • Qt读写SQLite示例
  • Jmeter性能测试之阶梯式场景、波浪式场景、服务器监控
  • 黄昏时刻复古胶片风格人像风光摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • Django ORM多对多关系实战指南
  • 【从零开始java学习|第十七篇】面向对象进阶
  • Three.js 开发实战教程(一):环境搭建与第一个 3D 场景
  • 旅游小程序的功能优势
  • LeetCode:7.接雨水
  • Android 安卓 问题解决记录 腾讯IM和厂商离线推送问题 点击离线推送无法唤醒APP启动页但某些Service服务和Application被启动
  • 动态规划解决系列子序列问题
  • SCADE One vs Scade 6 - 标量积建模比较
  • Next.js 身份验证与授权:使用 NextAuth.js 保护你的应用
  • Spring MVC 的案例小练习
  • 贪心算法与动态规划
  • 香港期权市场的主要参与者有哪些?
  • 系统中间件与云虚拟化-serverless-基于阿里云函数计算的简单邮件发送服务设计与体验
  • 【LLM】GPT-OSS架构变化详解
  • 【开题答辩全过程】以 “寄情绿苑”绿色殡葬服务小程序的设计和实现为例,包含答辩的问题和答案