自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(99)
  • 收藏
  • 关注

原创 TLV320AIC3204 CODEC裸机驱动

录音到PSRAM数组,然后memory窗口导出二进制PCM数据到AUDACITY。

2025-11-19 09:54:35 202

原创 MTK Linux Charger驱动分析(十二)- mtk_battery.c

两个代码文件("mtk_battery.h" 和 "mtk_battery.c")的详细分析。这些文件是MediaTek(MTK)电池管理系统的一部分,用于管理Android/Linux内核中的电池相关功能,包括电池状态监控、充电控制、温度管理、关机条件判断等。以下列出主要函数(按文件分组)。我优先列出mtk_battery.c中的实现函数,以及mtk_battery.h中的关键声明函数。函数参数和返回值基于代码推断。总体上,这两个文件构成了MTK电池驱动的核心,支持电池计量、充电控制和系统关机保护。

2025-09-17 14:06:36 964

原创 MTK Linux Charger驱动分析(十二)- mtk_pd_adapter.c

流程图聚焦于核心函数调用,从模块初始化(mtk_pd_adapter_init)开始,覆盖探针、事件处理和适配器操作接口(adapter_ops)。由于代码复杂,流程图进行了简化,突出主要逻辑路径,忽略次要条件分支和内核框架调用(如 power_supply_set_property 的底层实现)。总体上,这是一个模块化的PD适配器驱动,与USB Type-C/PD硬件集成,支持快充协议,并与其他MTK充电模块(如mtk_charger)协作。以下列出主要函数(从代码中提取),按类别分组。

2025-09-17 10:38:55 815

原创 MTK Linux Charger驱动分析(十一)- mtk_charger.c

提供充电器设备接口(struct charger_device)。函数调用:charger_dev_set_mivr, charger_dev_enable_powerpath, charger_dev_is_powerpath_enabled, get_charger_by_name, charger_dev_enable_6pin_battery_charging。支持主/从充电器(primary_chg, secondary_chg)和分压充电器(dvchg1, dvchg2)。

2025-09-17 09:31:53 909

原创 MTK Linux Charger驱动分析(十)- mtk_pulse_charger.c、mtk_basic_charger.c和mtk_charger_algorithm_class.c

Pulse 充电并不是替代 switch/linear,而是叠加在它们之上的快充协议。Pulse 决定 “怎么跟 adapter 说话、拿到高电压”Switch / Linear 决定 “怎么把高电压转成电池能吃的电压电流”👉 所以你可以理解成:Pulse 充电 ≠ Switch/Linear,而是包含了对 Adapter 协议层的扩展,最终仍然落在 switch 或 linear charger 上实现。特性核心元件MOSFET(线性管)、运放MOSFET(高边+低边)、电感、电容。

2025-09-16 17:07:25 537

原创 MTK Linux Charger驱动分析(九)- mtk_basic_charger.c

这个文件实现了 MediaTek 平台的通用充电算法,支持多种充电场景,包括 USB 充电、Type-C/PD 快充、多充电器配置(如串联/并联)和高级功能如 JEITA 温度保护、AICL(自动输入电流限制)和动态 MIVR(最小输入电压调节)。它通过动态选择快充算法(如 PE5、PE5P、HVBP)来优化充电,支持事件通知和算法仲裁。文件强调灵活性和兼容性,适用于复杂硬件架构,与 mtk_pulse_charger.c 相比,更注重快充和多充电器支持。

2025-09-16 16:09:31 1128

原创 MTK Linux Charger驱动分析(八)- mtk_pulse_charger.c

这个文件实现了 MediaTek 平台的脉冲充电(pulse charging)算法,基于线性充电逻辑,适用于简单的充电场景。文件定义了充电状态机(enum pcharger_state_enum:CHR_CC、CHR_TOPOFF、CHR_BATFULL、CHR_ERROR),并处理充电参数调整、JEITA温度保护和错误恢复。文件强调简单性和特定充电策略,与mtk_basic_charger.c相比,缺少快充支持和多充电器配置,专注于脉冲充电的线性实现。

2025-09-16 16:05:04 961

原创 MTK Linux Charger驱动分析(七)- mtk_charger_algorithm_class.c

这个文件是 MediaTek 充电框架的核心部分,实现了充电算法的设备类(charger_algorithm_class)管理。它提供了一个抽象层,用于注册、管理和操作各种充电算法(如快充协议、线性充电等)。文件基于 Linux 内核的设备模型,使用 struct chg_alg_device 表示充电算法设备,并通过 struct chg_alg_ops 定义操作接口。下面按文件出现的顺序和逻辑分组,逐一说明函数的主要作用。以下是基于文本的调用关系图,使用缩进和箭头表示调用层次。

2025-09-16 15:52:58 871

原创 MTK Linux Charger驱动分析(六)- adapter_class.c和charger_class.c的区别和联系

目标对象:充电芯片(charger IC),通常是 PMIC 内部的 switching charger 或外置的充电管理芯片。作用:抽象了对电池充电流程相关的接口,比如:设置充电电流、电压( / )获取 ADC 信息(, , )控制安全功能(, , )控制充电模式(direct charging, OTG, HZ, etc.)这些接口基本都直接对应 charger IC 寄存器功能。class 名字:(见 )。典型注册方:, 等 charger driver 会 ,然后被上层算法调用。目标对象:外部电源

2025-09-16 15:18:47 675

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

这些是钩子,外部驱动在注册时提供实现。suspend/resume:挂起/恢复设备。get_property/get_status/get_output/get_cap:获取各种信息。set_cap/authentication/is_cc/set_wdt/enable_wdt/sync_volt/send_hardreset:设置或执行操作。

2025-09-16 14:40:26 1023

原创 MTK Linux Charger驱动分析(四) - charger_class.c

它提供了一个抽象层,允许底层硬件驱动(如 mt6375-charger.c)注册 charger_device 对象,并通过 ops(操作函数指针)暴露标准化接口。函数按出现顺序列出,忽略了导出宏(EXPORT_SYMBOL)和重复的包装函数模式(所有 charger_dev_xxx 函数都是对 ops 中对应回调的包装,如果 ops 不存在,返回 -EOPNOTSUPP)。箭头(→)表示“调用”关系,虚线(-->)表示“可选/条件调用”(如 ops 不存在时不调用)。它们是导出函数,供高层使用。

2025-09-16 13:56:44 1162

原创 MTK Linux Charger驱动分析(三) - power_supply_hwmon.c power_supply_sysfs.c

这两个文件都是Linux内核电源供应类(Power Supply Class)的辅助实现文件,位于电源供应框架中。它们分别处理硬件监控(hwmon)和sysfs接口的集成。

2025-09-15 17:58:33 949

原创 MTK Linux Charger驱动分析(二) - power_supply_core.c

的核心作用可以概括为:提供统一的电源管理框架;管理电源设备注册、属性访问、事件通知;封装sysfs 接口和 uevent 通知,屏蔽硬件细节;驱动开发者只需要实现,不关心底层通知和接口细节。简单来说,它是电源子系统的“大脑和中枢”,具体的电池/充电器只是“信息源”。

2025-09-15 17:19:08 1240 1

原创 MTK Linux Charger驱动分析(一) - 概述

MTK charger 驱动分成三层框架层(power_supply/charger_class) → MTK charger 层(mtk_charger + 算法插件) → PMIC 层(mt6360/mt6375等)你要先读框架,再读 MTK 层逻辑,最后去看具体 PMIC。区分 switch/linear charger 的关键代码在PMIC 层驱动。

2025-09-15 16:42:03 1008

原创 MTK Linux DRM分析(三十八)- MTK mtk_fenc.c mtk_sync.c

驱动用途: mtk_fence 驱动是 MediaTek 显示子系统的一部分,负责管理显示缓冲区的同步和释放。它通过 Linux 的 fence 机制(sync_timeline 和 sync_file)协调 GPU 渲染和显示硬件的操作,支持多会话、多层显示场景(如主屏幕、外部显示器、内存显示等)。该驱动与 MediaTek DRM 框架紧密集成,处理缓冲区的分配、同步、呈现和释放,同时提供调试和性能跟踪功能。主要函数概览初始化缓冲区管理fence 释放时间线管理缓存管理功能。

2025-09-04 17:07:24 889

原创 MTK Linux DRM分析(三十七)- MTK phy-mtk-hdmi.c 和 phy-mtk-hdmi-mt8173.c

HDMI PHY驱动HDMI 的物理层接口主要就是HDMI Type-A 接口(19 pin),除此之外还有 Type-B、Type-C(Mini HDMI)、Type-D(Micro HDMI)、Type-E(车载专用)。是一个通用的 HDMI PHY 驱动框架,负责平台驱动注册、设备树解析、PHY 电源管理和时钟初始化。它通过 struct mtk_hdmi_phy_conf 支持不同型号的 HDMI PHY。

2025-09-04 14:07:53 712

原创 MTK Linux DRM分析(三十六)- MTK mtk_cec.c

这个驱动代码来自 MediaTek 的 HDMI CEC (Consumer Electronics Control) 相关模块,主要针对 MT8173 芯片平台实现。CEC 是 HDMI 标准的一部分,用于允许连接的设备(如电视、音箱、播放器)通过 HDMI 线缆进行相互控制,例如一键开机、音量调节等。这个驱动不是一个完整的 CEC 协议栈实现,而是专注于 HDMI 的热插拔检测 (Hot Plug Detect, HPD) 和中断处理,似乎是作为 HDMI 子系统的辅助模块,提供连接状态变化的通知功能。

2025-09-04 10:46:42 772

原创 MTK Linux DRM分析(三十五)- MTK mtk_hdmi_ddc.c

HDMI 接口的功能引脚分类HDMI(High Definition Multimedia Interface)是一个基于 TMDS(Transition Minimized Differential Signaling)的数字音视频接口。标准Type A HDMI 接口一共有19 根引脚TMDS 差分对(传输视频和音频数据)3 组数据通道:TMDS Data2±, TMDS Data1±, TMDS Data0±1 组时钟通道:TMDS Clock±DDC 通道。

2025-09-04 10:01:38 839

原创 MTK Linux DRM分析(三十四)- MTK mtk_hdmi.c

整体结构: 这个驱动是 MediaTek MT8173 HDMI 的 DRM 桥接器实现,支持视频/音频输出、热插拔检测、EDID 读取、音频编解码等。核心是桥接器回调函数,用于 DRM 管道集成。关键组件: 寄存器操作(底层硬件控制)、音频配置(I2S/SPDIF)、DRM 桥接器/连接器、CEC HPD 处理、PHY/时钟管理。依赖: DRM 框架、PHY 子系统、CEC、I2C、设备树。

2025-09-04 09:30:36 1144

原创 MTK Linux DRM分析(三十三)- MTK mtk_mipi_tx.c

头文件,定义了 MIPI TX 驱动的接口、数据结构和寄存器宏。包含函数声明、寄存器地址定义、位域宏以及与硬件平台相关的配置。提供了对 D-PHY 和 C-PHY 的配置接口,支持不同型号的 MediaTek SoC(如 MT6983、MT6886 等)。实现文件,包含 MIPI TX 驱动的具体功能实现。提供了 PLL(锁相环)配置、数据速率计算、寄存器操作、信号控制等功能。

2025-09-03 15:21:08 958

原创 MTK Linux DRM分析(三十二)- MTK mtk_dsi.c(Part.4)

这个probe注册到 MIPI DSI 框架,成为一个 DSI host。发现下游设备(panel/bridge),建立连接关系。准备资源:时钟、寄存器、phy、irq。注册到 MTK DDP framework,成为显示管线的一个组件。兼容 LK boot 阶段的初始化,保证 DRM 驱动接手时状态正确。加入 component framework,等待mtk_drm驱动统一管理。

2025-09-03 10:42:32 1031

原创 MTK Linux DRM分析(三十一)- MTK mtk_dsi.c(Part.3)

代码主要涉及MediaTek DSI(Display Serial Interface)驱动的实现,处理显示时序、时钟设置、带宽计算、模式切换、IRQ处理等功能。函数按代码出现的顺序组织。

2025-09-03 08:42:34 885

原创 MTK Linux DRM分析(三十)- MTK mtk_dsi.c(Part.2)

函数主要涉及MediaTek DSI(显示串行接口)驱动的中断处理、电源管理、低功耗模式(ULPS)切换、显示模式切换以及DSI初始化配置。每个函数的分析将涵盖其作用、实现逻辑及在DSI驱动中的应用场景。

2025-09-02 16:57:13 836

原创 MTK Linux DRM分析(二十九)- MTK mtk_dsi.c(Part.1)

计算显示模式的垂直前肩(Vertical Front Porch, VFP),即垂直同步信号开始到显示区域开始的行数。

2025-09-02 16:38:06 750

原创 MTK Linux DRM分析(二十八)- MTK mtk_lvds.c mtk_lvds_phy.c

把DRM 的角色划分和LVDS 在 MTK 平台中的定位分开来看。结合你给的mtk_lvds.c代码,我来解释为什么它是,而不是像 DPI 那样直接是 encoder。

2025-09-02 14:43:28 762

原创 MTK Linux DRM分析(二十七)- MTK mtk_dpi.c

这段代码实现了MediaTek SoC的DPI(Display Parallel Interface)驱动,作为DRM(Direct Rendering Manager)框架的一部分。DPI是一种并行RGB显示接口,用于连接显示桥(如LVDS/DSI桥)或面板,支持RGB/YUV格式、交错/3D模式、多种位深度。在DRM中的位置:DPI作为DRM编码器(encoder)实现,桥接CRTC(Controller)和桥/连接器。编码器钩子处理模式设置、启用/禁用、原子检查。

2025-09-02 14:06:33 1079

原创 MTK Linux DRM分析(二十六)- MTK mtk_drm_ddp_xxx.c

这些函数主要用于MediaTek DRM驱动中动态管理和配置显示附加路径(addon paths),以支持高级显示功能如图像缩放(RSZ)、画面质量增强(PQ,包括HDR、AAL、TDSHP、COLOR)、写回DMA(WDMA,用于帧缓冲写回)、MML(Multimedia Layer,支持旋转、直接链接和SRAM-only模式)等。它们允许在CRTC上下文中插入/移除子路径组件,实现场景特定优化(如游戏PQ、三显模式、双管道),并通过CMDQ异步执行命令以确保高效和同步。

2025-09-02 10:53:29 862

原创 MTK Linux DRM分析(二十五)- MTK mtk_drm_fb.c mtk_drm_fbconsole.c mtk_drm_fbdev.c

modetest来自libdrm包用来枚举和测试 DRM/KMS 的 mode、connector、plane、fb# 列出所有显示资源# 列出所有可用的显示模式# 设置某个输出为指定模式并显示纯色。

2025-09-01 15:45:09 988

原创 MTK Linux DRM分析(二十四)- MTK mtk_drm_plane.c

mtk_drm_plane.h 和 mtk_drm_plane.c 两个文件,并生成基于文本的函数调用图,我将首先解析文件中的主要函数及其功能,然后根据代码中的调用关系整理出调用图。由于文件内容较长,我会专注于关键函数及其相互调用关系,并以清晰的文本形式呈现。

2025-08-29 17:19:21 1025

原创 MTK Linux DRM分析(二十三)- MTK mtk_drm_crtc.c(Part2)

CMDQ 回调: 处理触发循环、事件循环和 LCM 命令的完成,记录状态并释放资源。事件和触发循环: 管理 SODI、事件循环和触发循环,确保显示同步和低功耗优化。硬件重置: 重置 OVL 组件,记录触发计数,处理 TE 信号。: 启动和停止 CRTC,管理显示组件的初始化和清理。调试输出: 提供 CRTC 和平面信息,辅助调试。OPLUS 特性: 支持 CABC、SEED、高 PWM 等显示增强功能。MML 支持: 管理多媒体层任务的提交和停止。

2025-08-29 10:51:52 1225

原创 MTK Linux DRM分析(二十二)- MTK mtk_drm_crtc.c(Part1)

CRTC 管理: 初始化、销毁、重置 CRTC 状态。VBlank 和页面翻转: 处理显示刷新和页面翻转事件。硬件调试: 提供寄存器转储和分析功能,便于调试。IOMMU 和内存: 管理显示缓冲区的内存映射和 IOMMU 配置。CMDQ 回调: 处理异步和同步的命令队列回调,完成帧配置和资源释放。硬件配置: 配置和触发显示路径中的硬件组件。

2025-08-29 10:24:57 1097

原创 MTK Linux DRM分析(二十一)- KMS drm_vblank.c drm_vblank_work.c

drm_vblank.c 和 drm_vblank_work.c 的关系是 vblank 机制的核心实现文件。提供了 vblank 的注册、启停、计数、事件通知等主要功能。:控制 vblank reference。:用户态通过 IOCTL 等待 vblank。:驱动在中断里调用,用来通知 vblank 发生。本质上负责vblank 计数 + 中断处理 + 上层事件通知。是在atomic 模式设置和commit 提交流程中用到的异步 vblank 事件处理。它实现了。

2025-08-29 09:14:26 1181

原创 MTK Linux DRM分析(二十)- KMS drm_mm.c drm_vma_manager.c

drm_mm.c→ 最底层的线性区间分配器(显存/GTT)→ 负责 mmap 和用户态虚拟地址管理drm_gem.c→ 提供 GEM 对象管理的统一框架→ 处理 GEM buffer 跨设备共享(dma-buf)→ 把 GEM buffer 变成 framebuffer,最终输出到屏幕。

2025-08-29 08:48:05 955

原创 MTK Linux DRM分析(十九)- KMS drm_framebuffer.c

drm_framebuffer.c 是 DRM 框架中用于管理帧缓冲区的核心模块,提供创建、移除、查询和刷新帧缓冲区的功能。它通过用户空间的 ioctl 接口与内核交互,支持原子和传统模式设置,并通过引用计数和锁机制确保线程安全。函数调用图展示了主要函数之间的依赖关系,核心逻辑围绕 drm_internal_framebuffer_create 和 drm_framebuffer_remove,并通过 framebuffer_check 确保参数合法性。

2025-08-28 17:38:59 793

原创 MTK Linux DRM分析(十八)- KMS drm_gem.c drm_prime.c

drm_gem.c 是 Linux DRM (Direct Rendering Manager) 框架的核心文件之一,主要负责 GEM (Graphics Execution Manager) 模块的实现。GEM 是 DRM 用于管理图形缓冲区对象的标准接口,提供内存分配、映射、共享、同步和释放等功能。它支持设备驱动(如 Intel、AMD、MediaTek)实现自定义缓冲区管理,同时保持与用户空间(如 OpenGL、Wayland)的兼容性。

2025-08-28 16:54:36 850

原创 MTK Linux DRM分析(十七)- MTK KMS实现mtk_drm_fb.c

这个代码模块是 MediaTek DRM (Direct Rendering Manager) 驱动程序的帧缓冲区(framebuffer)管理部分,主要负责创建、管理和操作 DRM 帧缓冲区对象(drm_framebuffer)。帧缓冲区是 DRM 框架中用于存储显示内容的缓冲区,通常与 GEM 对象(mtk_drm_gem_obj)关联,支持像素格式、DMA 地址访问、fence 同步和 secure buffer(用于内容保护)。

2025-08-28 15:45:21 985

原创 MTK Linux DRM分析(十六)- MTK KMS实现mtk_drm_gem.c

这个代码模块是 MediaTek DRM (Direct Rendering Manager) 驱动程序的 GEM (Graphics Execution Manager) 部分,主要负责管理图形缓冲区对象(GEM 对象)。GEM 是 DRM 框架用于处理用户空间缓冲区分配、映射和共享的核心机制,支持 DMA 缓冲区、IOMMU(通过 M4U)、secure buffer(用于内容保护)、PRIME(DMA-BUF 共享)和 MML(Multi-Media Layer,多媒体层处理)。

2025-08-28 14:14:06 1005

原创 MTK Linux DRM分析(十五)- Mediatek KMS实现mtk_drm_plane.c

这个代码模块是 MediaTek DRM (Direct Rendering Manager) 驱动程序的一部分,主要负责处理 DRM plane(显示层)的相关功能。Plane 是 DRM 框架中的核心概念,用于表示显示叠加层(overlay),可以叠加在 CRTC(Controller)上,支持多层合成、缩放、格式转换等操作。

2025-08-28 13:54:25 1433

原创 MTK Linux DRM分析(十四)- Mediatek KMS实现mtk_drm_drv.c(Part.2)

是 MediaTek DRM 驱动中用于注册主设备并绑定子组件的关键代码。它利用 Linux 组件框架,通过设备树匹配显示模块(如 OVL、RDMA、DSI),并在所有组件就绪后调用 mtk_drm_bind 初始化 DRM 设备。这行代码确保硬件模块的模块化管理和正确初始化,是驱动探测的核心步骤。

2025-08-28 10:13:38 1216

原创 MTK Linux DRM分析(十三)- Mediatek KMS实现mtk_drm_drv.c(Part.1)

驱动初始化流程(Probe阶段)解析DT节点,映射MMIO资源(config_regs、side_config_regs等)。初始化helper_opt(DRM选项,如MMQOS支持)。获取top clk、AOD-SCP配置、电源域。迭代DT子节点,添加组件匹配(OVL、RDMA等)。注册component master(mtk_drm_ops),绑定子组件。初始化fence、debugfs、disp_plat_dbg等。启用runtime PM。这段代码就是。

2025-08-22 17:10:15 1743

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除