已验证 创建 2026/10/09 更新 2026/10/09

[MTK] Panel IC 色彩、色温及饱和度参数移植

一、修改概述

屏厂提供的色彩、色温及饱和度参数,本质上是通过 MIPI DSI 命令写入 Panel IC 的 Vendor Register(厂商私有寄存器),用于调整屏幕显示效果。

注意:

  • 不属于 Android 上层显示效果调整。
  • 不涉及 DRM Color Matrix(色彩矩阵)修改。
  • 需要在 LCM 初始化阶段,通过 DSI 命令写入 Panel IC。

1. 修改位置

LK 阶段:

  • 初始化数组:lcm_init_setting[]

Kernel 阶段:

  • 初始化函数:lmibe127119272_panel_init()

二、屏厂原始参数格式

1. 原始 DSI 命令

屏厂提供的参数格式如下:

MIPI_WR(0x39, 0xBD, 0x00);
MIPI_WR(0x39, 0xC1, 0x01);

MIPI_WR(0x39, 0xBD, 0x01);
MIPI_WR(0x39, 0xC1, ...);

MIPI_WR(0x39, 0xBD, 0x02);
MIPI_WR(0x39, 0xC1, ...);

MIPI_WR(0x39, 0xBD, 0x03);
MIPI_WR(0x39, 0xC1, ...);

MIPI_WR(0x39, 0xBD, 0x00);

2. 参数含义

① 0x39:MIPI DSI Packet Type

  • 表示 MIPI DSI Long Write(长包写入)。
  • 属于 DSI 数据包类型,并非 Panel IC 寄存器地址。
  • 当前 LK 和 Kernel 驱动接口已经负责封装 DSI Packet。

注意:合入驱动时,不需要将 0x39 作为寄存器数据写入。

② 0xBD:寄存器页选择

  • 用于切换 Panel IC 的寄存器页。
  • 也称为 Page Select 或 Bank Select。
  • 不同寄存器页对应不同的参数配置。

③ 0xC1:色彩参数寄存器

  • 用于写入当前寄存器页对应的色彩参数。
  • 不同寄存器页下的 0xC1 对应不同参数表。

三、DSI 命令转换规则

1. 转换原则

屏厂提供的原始命令:

MIPI_WR(0x39, 0xBD, 0x00);

实际需要写入 Panel IC 的数据为:

BD 00

因此,移植时需要去除 DSI Packet Type 0x39,保留实际的寄存器地址与参数数据。

2. 实际写入顺序

BD 00
C1 01

BD 01
C1 ...

BD 02
C1 ...

BD 03
C1 ...

BD 00

3. 注意事项

  • 必须保留 0xBD 与 0xC1 的原始写入顺序。
  • 每次写入 0xC1 前,需要先切换到对应的寄存器页。
  • 不允许只复制 0xC1 参数而忽略 0xBD。
  • 不允许将不同寄存器页的参数混合写入。
  • 参数写入完成后,需要通过 BD 00 恢复默认寄存器页。

四、LK 阶段参数移植

1. 修改位置

在 LK 驱动的 lcm_init_setting[] 初始化数组中添加屏厂提供的色彩参数。

2. 参考代码

{0xBD, 1, {0x00}},
{0xC1, 1, {0x01}},

{0xBD, 1, {0x01}},
{0xC1, 58, {...}},

{0xBD, 1, {0x02}},
{0xC1, 58, {...}},

{0xBD, 1, {0x03}},
{0xC1, 58, {...}},

{0xBD, 1, {0x00}},

3. 参数说明

LK 初始化数组格式:

{寄存器地址, 数据长度, {参数数据}},

例如:

{0xBD, 1, {0x01}},

表示切换至寄存器页 0x01。

{0xC1, 58, {...}},

表示向当前寄存器页的 0xC1 寄存器写入 58 字节参数。

注意: 58 为示例中的参数长度,实际移植时应与屏厂提供的数据长度保持一致。


五、Kernel 阶段参数移植

1. 修改位置

在 Kernel 驱动的 lmibe127119272_panel_init() 初始化函数中添加相同的色彩参数。

2. 参考代码

lmibe127119272_dcs_write_seq_static(ctx, 0xBD, 0x00);
lmibe127119272_dcs_write_seq_static(ctx, 0xC1, 0x01);

lmibe127119272_dcs_write_seq_static(ctx, 0xBD, 0x01);
lmibe127119272_dcs_write_seq_static(ctx, 0xC1, ...);

lmibe127119272_dcs_write_seq_static(ctx, 0xBD, 0x02);
lmibe127119272_dcs_write_seq_static(ctx, 0xC1, ...);

lmibe127119272_dcs_write_seq_static(ctx, 0xBD, 0x03);
lmibe127119272_dcs_write_seq_static(ctx, 0xC1, ...);

lmibe127119272_dcs_write_seq_static(ctx, 0xBD, 0x00);

3. 参数说明

Kernel DSI 写入接口:

lmibe127119272_dcs_write_seq_static(ctx, 寄存器地址, 参数数据);

例如:

lmibe127119272_dcs_write_seq_static(ctx, 0xBD, 0x01);

表示切换至寄存器页 0x01。

lmibe127119272_dcs_write_seq_static(ctx, 0xC1, ...);

表示向当前寄存器页的 0xC1 寄存器写入对应色彩参数。

注意: Kernel 与 LK 的参数内容及写入顺序需要保持一致。


六、初始化命令放置位置

1. 推荐位置

建议将屏厂提供的色彩参数放置在:

  • 原始 Panel IC 初始化参数的末尾。
  • B9 00 00 00 00 锁寄存器命令之前。
  • 0x11(Sleep Out)之前。
  • 0x29(Display On)之前。

2. 初始化顺序示例

/* 原始 Panel IC 初始化参数 */
...

/* 色彩、色温及饱和度参数 */
BD 00
C1 01

BD 01
C1 ...

BD 02
C1 ...

BD 03
C1 ...

BD 00

/* 锁定寄存器 */
B9 00 00 00 00

/* Sleep Out */
11

/* Display On */
29

注意: 以上为初始化命令的逻辑顺序示例,实际代码应使用对应 LK 或 Kernel 的 DSI 写入接口。


七、移植注意事项

  1. DSI Packet Type

    屏厂命令中的 0x39 表示 Long Write,不需要作为寄存器数据写入。

  2. 寄存器页切换

    必须按照 0xBD → 0xC1 的顺序写入,确保参数写入正确的寄存器页。

  3. 参数完整性

    不同寄存器页的 0xC1 参数必须完整保留,不能遗漏或混合。

  4. 数据长度

    LK 中 0xC1 的数据长度必须与实际参数字节数一致。

  5. LK / Kernel 一致性

    两个阶段需要写入相同的参数,避免初始化配置不一致。

  6. 恢复默认寄存器页

    全部参数写入完成后,通过 BD 00 恢复默认寄存器页。

  7. 初始化位置

    建议在锁寄存器、Sleep Out 和 Display On 命令之前完成色彩参数配置。


八、修改总结

本次色彩、色温及饱和度参数移植主要涉及两个位置:

LK:

lcm_init_setting[]

Kernel:

lmibe127119272_panel_init()

核心修改:

  • 将屏厂提供的 MIPI DSI 命令转换为当前驱动支持的写入格式。
  • 去除原始命令中的 0x39 Packet Type。
  • 保留 0xBD 寄存器页切换与 0xC1 参数写入顺序。
  • 在 LK 和 Kernel 初始化流程中添加对应参数。
  • 在锁寄存器及屏幕开启命令之前完成参数写入。

最终效果: 通过 Panel IC Vendor Register 完成屏厂色彩参数配置,不涉及 Android 上层显示效果或 DRM Color Matrix 修改。