本章节讲解如何移植各类器件驱动。
LCD驱动移植
移植LCD驱动的主要工作是编写一个驱动,在驱动中生成模型的实例,并完成注册。
这些LCD的驱动被放置在源码目录//drivers/hdf_core/framework/model/display/driver/panel中。
-
创建Panel驱动
创建HDF驱动,在驱动初始化中调用RegisterPanel接口注册模型实例。如:
int32_t LCDxxEntryInit(struct HdfDeviceObject *object) { struct PanelData *panel = CreateYourPanel(); // 注册模型实例 if (RegisterPanel(panel) != HDF_SUCCESS) { HDF_LOGE("%s: RegisterPanel failed", __func__); return HDF_FAILURE; } return HDF_SUCCESS; } struct HdfDriverEntry g_xxxxDevEntry = { .moduleVersion = 1, .moduleName = "LCD_XXXX", .Init = LCDxxEntryInit, }; HDF_INIT(g_xxxxDevEntry); -
配置加载panel驱动
产品的所有设备信息被定义在源码文件
//vendor/vendor_name/product_name/config/device_info/device_info.hcs中。修改该文件,在display的host中,名为device_lcd的device中增加配置。注意: moduleName 要与panel驱动中的moduleName相同。
root { ... display :: host { device_lcd :: device { deviceN :: deviceNode { policy = 0; priority = 100; preload = 2; moduleName = "LCD_XXXX"; } } } }
TP驱动移植
本节描述如何移植触摸屏驱动。触摸屏的器件驱动被放置在源码目录//drivers/hdf_core/framework/model/input/driver/touchscreen中。 移植触摸屏驱动主要工作是向系统注册ChipDevice模型实例。
详细的驱动开发指导,请参考 TOUCHSCREEN开发指导。
-
创建触摸屏器件驱动
在上述touchscreen目录中创建名为
touch_ic_name.c的文件。编写如下内容#include "hdf_touch.h" static int32_t HdfXXXXChipInit(struct HdfDeviceObject *device) { ChipDevice *tpImpl = CreateXXXXTpImpl(); if(RegisterChipDevice(tpImpl) != HDF_SUCCESS) { // 注册ChipDevice模型 ReleaseXXXXTpImpl(tpImpl); return HDF_FAILURE; } return HDF_SUCCESS; } struct HdfDriverEntry g_touchXXXXChipEntry = { .moduleVersion = 1, .moduleName = "HDF_TOUCH_XXXX", // 注意这里的moduleName要与后续的配置完全一致 .Init = HdfXXXXChipInit, }; HDF_INIT(g_touchXXXXChipEntry);其中ChipDevice中要实现如下方法:
方法 实现说明 int32_t (*Init)(ChipDevice *device) 实现器件初始化 int32_t (*Detect)(ChipDevice *device) 实现器件探测 int32_t (*Suspend)(ChipDevice *device) 实现器件休眠 int32_t (*Resume)(ChipDevice *device) 实现器件唤醒


1421

被折叠的 条评论
为什么被折叠?



