openharmony hdf框架gslx680触摸驱动移植
openharmony提供了hdf的驱动框架,今天以gslx680触摸驱动的例子记录一下
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_GSL3670";
serviceName = "hdf_touch_gsl3670_service";
deviceMatchAttr = "touch_gsl3670_config";
}
}
然后加入针对触摸板硬件连接的信息。
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 = 1280;
solutionY = 800;
devName = "main_touch";
}
// Hi3516DV300-Runhe gt911--5p5 & 4p0
busConfig {
// 0:i2c 1:spi
busType = 0;
busNum = 1;
clkGpio = 86;
dataGpio = 87;
i2cClkIomux = [0x114f0048, 0x403];
i2cDataIomux = [0x114f004c, 0x403];
}
pinConfig {
rstGpio = 14;
intGpio = 13;
rstRegCfg = [0x112f0094, 0x400];
intRegCfg = [0x112f0098, 0x400];
}
// Hi3516DV300-Ruishi gt911--7p0
/*
busConfig {
// 0:i2c 1:spi
busType = 0;
busNum = 6;
clkGpio = 26;
dataGpio = 27;
i2cClkIomux = [0x114f0048, 0x403];
i2cDataIomux = [0x114f004c, 0x403];
}
pinConfig {
rstGpio = 13;
intGpio = 12;
rstRegCfg = [0x10ff0030, 0x400];
intRegCfg = [0x10ff002C, 0x400];
}
*/
// Hi3516DV300-Demo board: ft6336--2p35
/*
busConfig {
// 0:i2c 1:spi
busType = 0;
busNum = 3;
clkGpio = 2;
dataGpio = 1;
i2cClkIomux = [0x112f0090, 0x5f1];
i2cDataIomux = [0x112f008c, 0x5f1];
}
pinConfig {
rstGpio = 3;
intGpio = 4;
rstRegCfg = [0x0, 0x0];
intRegCfg = [0x112f0098, 0x5f0];
}
*/
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 = "gsl3670";
vendorName = "zsj";
chipInfo = "AAAA11222"; // 4-ProjectName, 2-TP IC, 3-TP Module
/* 0:i2c 1:spi*/
busType = 0;
deviceAddr = 0x40;
/* 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]
<type> 0:none 1:vcc-1.8v 2:vci-3.3v 3:reset 4:int
<status> 0:off or low 1:on or high 2:no ops
<dir> 0:input 1:output 2:no ops
<delay> 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 = "touch_gsl3670_config";
chipInfo = "ZIDN45100"; // 4-ProjectName, 2-TP IC, 3-TP Module
chipVersion = 0; //parse point by TypeA
}
match_attr = "touch_gsl3670_config";与 deviceMatchAttr = "touch_gsl3670_config";需要匹配上
hdf中关于触摸的kconfig和Makefile文件。
openharmony/drivers/adapter/khdf/linux/model/input
hdf触摸驱动源文件。
openharmony/drivers/framework/model/input/driver/touchscreen
之后就是驱动的移植了,需要按照hdf框架进行移植
static int32_t ChipDetect(ChipDevice *device)
{
int ret;
struct i2c_client *client;
printk("lhs ------ChipDetect------\n");
init_chip(device, client);
check_mem_data(device, client);
(void)ChipInit(device);
(void)ChipResume(device);
(void)ChipSuspend(device);
HDF_LOGE("%s: ChipDetect, end ret = %d", __func__, ret);
return HDF_SUCCESS;
}
#define GT_CLEAN_DATA_LEN 3
#define GT_CLEAN_DATA_LEN 3
static int ChipCleanBuffer(InputI2cClient *i2cClient)
{
int32_t ret;
uint8_t writeBuf[GT_CLEAN_DATA_LEN];
ret = InputI2cWrite(i2cClient, writeBuf, GT_CLEAN_DATA_LEN);
if (ret != HDF_SUCCESS) {
HDF_LOGE("%s: InputI2cWrite failed, ret = %d", __func__, ret);
}
return ret;
}
更多推荐
所有评论(0)