LCM driver 的命名规则

本文详细介绍了LCM Driver的命名规则及其组成部分,包括IC型号、分辨率、MIPI接口类型、SYNC模式及屏供应商等关键信息,并提供了具体实例帮助理解。

          命名规则为: LCM IC 型号_该driver支持的分辨率_MIPI接口_接口下SYNC模式_屏供应商_平台

          如:nt35590_hd720_dsi_vdo_truly

        LCM IC型号:nt35516

        该driver下屏的分辨率:hd720(1280×720)

        MIPI接口:DSI接口 (一共有三种接口:DBI(也做CPU或MCU接口)、DPI(也叫RGB接口)、DSI)

        

          接口下SYNC模式:video mode
(DSI接口有两种sync 模式:video mode和command mode,其中video mode是BB端一直刷数据到LCM,cmd mode是在有数据更新时刷数据到LCM GRAM中)
 
           屏供应商:truly (相同的LCM IC驱动不同的屏的inital code和timing会有不同,具体细节需要找屏场FAE确认)


         
            选择LCM driver,可以根据上述原则,如
         nt35516_qhd_dsi_cmd_ips9k1431
         nt35516_qhd_dsi_cmd_ipsboe
         nt35516_qhd_dsi_cmd_tft9k1342
         nt35516_qhd_dsi_vedio
 
 同样是nt35516的driver,都是qhd的分辨率,前三者是dsi cmd mode的,而分别对应不同的屏,其inital和timing不一样,最后是dsi vedio mode的driver。
 
在选择driver时可以根据最接近与项目情况的
->IC 型号 ->MIPI接口  -> sync 模式 ->分辨率 -> 平台 ->屏供应商
 
然后根据具体的LCM 进行参数、inital code 、timing的修改

<think>我们正在讨论LCM(液晶显示模块)驱动中屏幕参数的定义及获取方法。根据引用内容,LCM驱动涉及多个关键部分,包括驱动注册、参数配置、背光控制等。下面将详细解释参数定义和获取方法。 ### 1. LCM屏幕参数的定义 在LCM驱动中,屏幕参数通常通过一个名为`LCM_DRIVER`的结构体进行定义(引用[1][4])。该结构体包含屏幕初始化序列、分辨率、数据格式等关键参数。例如: ```c /* 示例LCM驱动结构体定义 (引用[1][4]) */ static struct LCM_DRIVER hx8394_dsi_hd_4line = { .name = "hx8394_dsi_hd_4line", // LCM名称 .set_util_funcs = lcm_set_util, // 设置工具函数 .get_params = lcm_get_params, // 获取参数函数 .init = lcm_init, // 初始化序列 .suspend = lcm_suspend, // 休眠函数 .resume = lcm_resume, // 唤醒函数 .compare_id = lcm_compare_id, // ID校验函数 ... }; ``` #### 关键参数说明: - **分辨率**:在`get_params`函数中定义,通常包含: ```c static void lcm_get_params(LCM_PARAMS *params) { params->width = 720; // 屏幕宽度(像素) params->height = 1280; // 屏幕高度(像素) params->dsi.mode = SYNC_PULSE_VDO_MODE; // DSI模式 ... } ``` - **初始化序列**:在`init`函数中通过发送MIPI DSI命令配置屏幕寄存器(引用[3]): ```c static void lcm_init(void) { // 发送初始化命令序列 lcm_util.send_cmd(0x11); // SLEEP OUT MDELAY(120); lcm_util.send_cmd(0x29); // DISPLAY ON ... } ``` - **背光控制**:通过PWM或GPIO控制,需在背光驱动中定义(引用[5]): ```c static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = { {"lcd-backlight", MT65XX_LED_MODE_CUST_LCM, (void *)&mtkfb_set_backlight_level}, ... }; ``` ### 2. 获取屏幕参数的方法 #### (1) 内核层直接读取 通过LCM驱动接口直接获取参数: ```c LCM_PARAMS params; lcm_driver->get_params(&params); printk("Resolution: %dx%d\n", params.width, params.height); ``` #### (2) 通过sysfs文件系统 部分参数会暴露在`/sys/class/graphics/fb0/`目录下: ```bash adb shell cat /sys/class/graphics/fb0/virtual_size # 分辨率 adb shell cat /sys/class/graphics/fb0/bits_per_pixel # 像素深度 ``` #### (3) 通过Android系统服务 使用`dumpsys display`命令获取运行时参数: ```bash adb shell dumpsys display | grep mDisplayInfo ``` 输出示例:`mDisplayInfo=1080 x 2400, 60 fps` ### 3. 参数配置流程 LCM参数配置涉及以下步骤(引用[2][3]): 1. **驱动注册**:将LCM驱动添加到`lcm_driver_list[]`(引用[1][4])。 2. **工具函数绑定**:通过`set_util_funcs`将显示底层操作函数绑定到LCM驱动(引用[2])。 3. **参数初始化**:系统启动时调用`get_params`读取分辨率等参数。 4. **屏幕初始化**:发送初始化命令序列(引用[3])。 5. **背光关联**:将背光控制函数注册到LED子系统(引用[5])。 ### 代码示例:获取分辨率 以下为内核中读取LCM分辨率的简化代码: ```c /* 在显示驱动中调用LCM的get_params */ void mtk_disp_get_lcm_params(void) { LCM_PARAMS params; if (lcm_driver && lcm_driver->get_params) { lcm_driver->get_params(&params); pr_info("LCM Resolution: %dx%d\n", params.width, params.height); } } ``` ### 总结 - **定义位置**:LCM参数主要在`LCM_DRIVER`结构体的`get_params`函数中定义。 - **关键参数**:分辨率、像素格式、时序控制、初始化序列等。 - **获取方法**: - 内核层:直接调用LCM驱动接口。 - 用户层:通过sysfs文件或`dumpsys`命令。 如需修改参数(如更换屏幕),需更新`LCM_DRIVER`中的对应配置(引用[1][3][4])[^1][^3][^4]。 §§相关问题§§ 1. 如何为新的LCM屏幕添加驱动支持? 2. 如何调试LCM初始化序列? 3. Android系统如何动态调整屏幕参数(如刷新率)? </think>### LCM Driver 屏幕参数的定义及获取方法 #### 一、屏幕参数定义 在 LCM(LCD Module)驱动中,屏幕参数主要通过 **`LCM_PARAMS` 结构体** 定义,包含以下核心参数(引用[3][4]): ```c struct LCM_PARAMS { u32 width; // 屏幕宽度(像素) u32 height; // 屏幕高度(像素) u32 physical_width; // 物理宽度(mm) u32 physical_height;// 物理高度(mm) u32 density; // 像素密度(DPI) u32 fps; // 刷新率(Hz) u32 lane_num; // MIPI DSI通道数 enum LCM_DSI_MODE mode; // 传输模式(如SYNC_PULSE_VDO_MODE) ... }; ``` **定义位置**(引用[1][4]): 1. 在 `lcm_driver` 驱动文件中(如 `hx8394_dsi_hd_4line.c`) 2. 通过 `get_params()` 函数实现参数赋值: ```c static void lcm_get_params(LCM_PARAMS *params) { params->width = 720; params->height = 1280; params->density = 320; // DPI值 params->fps = 60; ... } ``` #### 二、关键参数详解 1. **分辨率** ```c params->width = 1080; // 水平像素数 params->height = 2400; // 垂直像素数 ``` 2. **物理尺寸**(引用[3]) ```c params->physical_width = 68; // 屏幕物理宽度(mm) params->physical_height = 147;// 屏幕物理高度(mm) ``` 3. **传输配置** ```c params->lane_num = 4; // MIPI DSI 4通道 params->mode = SYNC_PULSE_VDO_MODE; // 视频流模式 ``` 4. **背光参数**(引用[5]) 通过 PWM 控制: ```c cust_led_list[0].config_data = 0x1F; // PWM占空比范围 ``` #### 三、参数获取方法 ##### 方法1:内核层直接读取 在驱动代码中调用 LCM 的 `get_params()` 函数: ```c LCM_PARAMS params; lcm_driver->get_params(&params); printk("Resolution: %dx%d\n", params.width, params.height); ``` ##### 方法2:通过 sysfs 接口 1. **分辨率**: ```bash adb shell cat /sys/class/graphics/fb0/virtual_size # 输出:1080,2400 ``` 2. **像素密度**: ```bash adb shell getprop ro.sf.lcd_density # 输出:480 ``` 3. **刷新率**: ```bash adb shell cat /sys/class/drm/card0-DSI-1/mode | grep -oP '\d+(?=\.)' # 输出:60 (Hz) ``` ##### 方法3:通过 Android 服务 使用 `dumpsys display` 获取运行时参数: ```bash adb shell dumpsys display | grep -e mWidth -e mHeight -e mRefreshRate ``` 输出示例: ``` mWidth=1080 mHeight=2400 mRefreshRate=60.0 ``` #### 四、参数初始化流程 1. **驱动注册**(引用[1][4]) 在 `mt65xx_lcm_list.c` 添加 LCM 驱动: ```c LCM_DRIVER *lcm_driver_list[] = { &hx8394_dsi_hd_4line, // 驱动结构体 ... }; ``` 2. **工具函数绑定**(引用[2]) ```c lcm->set_util_funcs(&lcm_utils); // 绑定显示底层操作 ``` 3. **参数生效** 系统启动时通过 `lcm_get_params()` 加载配置到显示框架。 #### 五、调试技巧 1. **检查参数是否生效**: ```bash adb shell dmesg | grep "lcm_get_params" ``` 2. **强制修改参数**(临时): ```bash echo 90 > /sys/class/leds/lcd-backlight/brightness # 调整背光 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值