openharmony提供了hdf的驱动框架,今天以gt911触摸驱动的例子记录一下。首先hdf要加载进Linux的driver中,在Linux源码/driver/hdf目录有如下文件。
framwork和khdf两个软链接文件一定要链接成功。
在hdf的设备树中加入gt911的文件信息
/home/xu/openharmony/vendor/hihope/rk3568/hdf_config/khdf/device_info/device_info.hcs
device_touch_chip :: device {
device0 :: deviceNode {
policy = 0;
priority = 130;
preload = 0;
permission = 0660;
moduleName = "HDF_TOUCH_GT911";
serviceName = "hdf_touch_gt911_service";
deviceMatchAttr = "zsj_gt911_5p5";
}
然后加入针对触摸板硬件连接的信息。
/home/xu/openharmony/vendor/hihope/rk3568/hdf_config/khdf/input/input_config.hcs
root {
input_config {
touchConfig {
touch0 {
boardConfig {
match_attr = "touch_device1";
inputAttr {
/* 0:touch 1:key 2:keyboard 3:mouse 4:button 5:crown 6:encoder */
inputType = 0;
solutionX = 1024;
solutionY = 600;
devName = "main_touch";
}
// Hi3516DV300-Runhe gt911--5p5 & 4p0
busConfig {
// 0:i2c 1:spi
busType = 0;
busNum = 1;
clkGpio = 11;
dataGpio = 12;
i2cClkIomux = [0xfdd60000, 0x100];
i2cDataIomux = [0xfdd60000, 0x100];
}
pinConfig {
rstGpio = 20;
intGpio = 13;
rstRegCfg = [0xfdd60000, 0x100];
intRegCfg = [0xfdd60000, 0x100];
}
powerConfig {
/* 0:unused 1:ldo 2:gpio 3:pmic */
vccType = 2;
vccNum = 20; // gpio20
vccValue = 1800;
vciType = 1;
vciNum = 12; // ldo12
vciValue = 3300;
}
featureConfig {
capacitanceTest = 0;
gestureMode = 0;
gloverMOde = 0;
coverMode = 0;
chargerMode = 0;
knuckleMode = 0;
}
}
chipConfig {
template touchChip {
match_attr = "";
chipName = "gt911";
vendorName = "zsj";
chipInfo = "AAAA11222"; // 4-ProjectName, 2-TP IC, 3-TP Module
/* 0:i2c 1:spi*/
busType = 0;
deviceAddr = 0x5D;
/* 0:None 1:Rising 2:Failing 4:High-level 8:Low-level */
irqFlag = 2;
maxSpeed = 400;
chipVersion = 0; //parse Coord TypeA
powerSequence {
/* [type, status, dir , delay]
0:none 1:vcc-1.8v 2:vci-3.3v 3:reset 4:int
0:off or low 1:on or high 2:no ops
0:input 1:output 2:no ops
meanings delay xms, 20: delay 20ms
*/
powerOnSeq = [4, 0, 1, 5,
3, 0, 1, 10,
3, 1, 1, 60,
4, 2, 0, 50];
suspendSeq = [3, 0, 2, 10];
resumeSeq = [3, 1, 2, 10];
powerOffSeq = [3, 0, 2, 10,
1, 0, 2, 20];
}
}
chip0 :: touchChip {
match_attr = "zsj_gt911_5p5";
chipInfo = "ZIDN45100"; // 4-ProjectName, 2-TP IC, 3-TP Module
chipVersion = 0; //parse point by TypeA
}
}
hdf中关于触摸的kconfig和Makefile文件。
/home/xu/openharmony/drivers/adapter/khdf/linux/model/input
hdf触摸驱动源文件。
/home/xu/openharmony/drivers/framework/model/input/driver/touchscreen
之后就是驱动的移植了,和Linux很类似,只是架构中调用的函数不同。也可以在以上目录中添加自己的驱动。