LCM driver 的命名规则

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          命名规则为: 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的修改

<< 为了使 `fallback` 到通用 LCM 驱动的逻辑生效,我们需要明确地将其插入到原代码的一个合理位置。结合之前的上下文分析,以下是具体的建议和解释。 --- ### **原始代码回顾** 以下是原来的代码框架: ```c disp_lcm_handle* disp_lcm_probe(char* plcm_name, LCM_INTERFACE_ID lcm_id) { DISPFUNC(); bool isLCMFound = false; bool isLCMConnected = false; unsigned int lcm_cnt = 0; /* Step 1: Update LCM list based on DTS configuration */ void *lk_drv_fdt = get_lk_overlayed_dtb(); lcm_cnt = update_lcm_list_by_dts(lk_drv_fdt); if (lcm_cnt == 0) { DISPMSG("not found any lcm drv name from dts\n"); } else { lcm_count = lcm_cnt; for(int k = 0; k < _lcm_count(); k++) { LCM_DRIVER *lcm_drv = lcm_driver_list[k]; if (lcm_drv && lcm_drv->name) DISPMSG("dump dts lcm drv name: %s\n", lcm_drv->name); } } #if defined(MTK_LCM_DEVICE_TREE_SUPPORT) bool isLCMDtFound = false; if (check_lcm_node_from_DT() == 0) { lcm_drv = &lcm_common_drv; isLCMFound = true; isLCMDtFound = true; } else #endif // TODO: Insert fallback logic here! } ``` --- ### **插入位置与原因** 我们希望在以下条件下执行回退逻辑: 1. 当未能通过 Device Tree 正常匹配到任何符合条件的 LCM 驱动程序 (`isLCMFound == false`)。 2. 或者即使启用了 `MTK_LCM_DEVICE_TREE_SUPPORT`,但仍未找到合法的 DT 节点 (`isLCMDtFound == false`)。 因此,最合理的插入点是:**紧随现有的条件判断之后**,即放在 `#else` 分支结束的地方。 完整修改后的代码如下: ```c disp_lcm_handle* disp_lcm_probe(char* plcm_name, LCM_INTERFACE_ID lcm_id) { DISPFUNC(); bool isLCMFound = false; bool isLCMConnected = false; unsigned int lcm_cnt = 0; LCM_DRIVER *lcm_drv = NULL; LCM_PARAMS *lcm_param = NULL; disp_lcm_handle *plcm = NULL; /* Step 1: Update LCM list based on DTS configuration */ void *lk_drv_fdt = get_lk_overlayed_dtb(); lcm_cnt = update_lcm_list_by_dts(lk_drv_fdt); if (lcm_cnt == 0) { DISPMSG("not found any lcm drv name from dts\n"); } else { lcm_count = lcm_cnt; for(int k = 0; k < _lcm_count(); k++) { LCM_DRIVER *lcm_drv = lcm_driver_list[k]; if (lcm_drv && lcm_drv->name) DISPMSG("dump dts lcm drv name: %s\n", lcm_drv->name); } } #if defined(MTK_LCM_DEVICE_TREE_SUPPORT) bool isLCMDtFound = false; if (check_lcm_node_from_DT() == 0) { lcm_drv = &lcm_common_drv; isLCMFound = true; isLCMDtFound = true; } else { isLCMFound = false; // 明确标记未找到匹配项 isLCMDtFound = false; } #endif /* Add the fallback mechanism here */ if (!isLCMFound || !isLCMDtFound) { // Fallback to a generic driver when no match is detected. lcm_drv = &generic_lcm_driver; DISPMSG("Fallback to generic LCM driver.\n"); // Ensure basic flags are set properly so further code works correctly isLCMFound = true; // Mark as resolved via fallback path isLCMDtFound = true; // Same treatment for compatibility reasons } return plcm; // Continue with normal initialization flow... } ``` --- ### **重要细节说明** 1. **为何需要设置 `isLCMFound` 和 `isLCMDtFound`?** - 设置这两个布尔值为真是为了防止后续代码因它们仍保持假而导致异常行为。 - 即便使用了通用驱动,也需要模拟成已经成功完成了探测动作。 2. **关于 `&generic_lcm_driver` 的声明问题** - 必须提前定义好一个名为 `generic_lcm_driver` 的全局静态变量,代表一种最低限度运作的基本液晶屏控制器实现。 - 示例结构体原型可能是这样: ```c static const LCM_DRIVER generic_lcm_driver = { .name = "generic", .init = generic_init, .suspend = generic_suspend, .resume = generic_resume, ... }; ``` 3. **其他注意事项** - 插入这一段后,请测试各种边界情况(如完全无匹配、仅部分匹配等),验证整个流程的一致性和健壮性。 --- ### **总结** 经过上述改动,我们可以优雅地处理那些因为更换屏幕或其他因素导致无法准确匹配的情况,同时保留对传统路径的良好支持。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值