1 /* 2 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 3 * 4 * HDF is dual licensed: you can use it either under the terms of 5 * the GPL, or the BSD license, at your option. 6 * See the LICENSE file in the root of this repository for complete details. 7 */ 8 9 #ifndef INPUT_GONFIG_H 10 #define INPUT_GONFIG_H 11 12 #include "hdf_types.h" 13 #include "device_resource_if.h" 14 15 #define REG_CONFIG_LEN 2 16 17 typedef struct { 18 uint8_t devType; 19 const char *devName; 20 uint32_t resolutionX; 21 uint32_t resolutionY; 22 } BoardAttrCfg; 23 24 typedef struct { 25 uint8_t busNum; 26 uint16_t clkGpio; 27 uint16_t dataGpio; 28 uint32_t i2cClkReg[REG_CONFIG_LEN]; 29 uint32_t i2cDataReg[REG_CONFIG_LEN]; 30 } BoardI2cCfg; 31 32 typedef struct { 33 uint8_t busNum; 34 uint16_t clkGpio; 35 uint16_t csGpio; 36 uint16_t misoGpio; 37 uint16_t mosiGpio; 38 uint32_t spiClkReg[REG_CONFIG_LEN]; 39 uint32_t spiCsReg[REG_CONFIG_LEN]; 40 uint32_t spiMisoReg[REG_CONFIG_LEN]; 41 uint32_t spiMosiReg[REG_CONFIG_LEN]; 42 } BoardSpiCfg; 43 44 typedef struct { 45 uint8_t busType; 46 union { 47 BoardI2cCfg i2c; 48 BoardSpiCfg spi; 49 }; 50 } BoardBusCfg; 51 52 typedef struct { 53 uint16_t rstGpio; 54 uint16_t intGpio; 55 uint32_t rstPinReg[REG_CONFIG_LEN]; 56 uint32_t intPinReg[REG_CONFIG_LEN]; 57 } BoardPinCfg; 58 59 typedef struct { 60 uint16_t pwrType; 61 uint16_t pwrNum; 62 uint32_t pwrValue; 63 } PwrDesc; 64 65 typedef struct { 66 PwrDesc vcc; 67 PwrDesc vci; 68 } BoardPwrCfg; 69 70 typedef struct { 71 uint8_t capacitanceTest; 72 uint8_t gestureMode; 73 uint8_t gloverMOde; 74 uint8_t coverMode; 75 uint8_t chargeMode; 76 uint8_t knuckleMode; 77 } BoardFeatureCfg; 78 79 typedef struct { 80 const struct DeviceResourceNode *boardNode; 81 BoardAttrCfg attr; 82 BoardBusCfg bus; 83 BoardPinCfg pins; 84 BoardPwrCfg power; 85 BoardFeatureCfg feature; 86 } TouchBoardCfg; 87 88 typedef struct { 89 uint32_t *buf; 90 uint32_t count; 91 } SeqArray; 92 93 typedef struct { 94 SeqArray pwrOn; 95 SeqArray pwrOff; 96 SeqArray resume; 97 SeqArray suspend; 98 } ChipPwrSeq; 99 100 typedef struct { 101 uint16_t irqFlag; 102 uint8_t wordMode; // 0, 1 , 2, 3 polar & phase 103 uint8_t commMode; // 2:DMA 1:polling 0:interrupt 104 uint32_t maxSpeed; 105 uint32_t csSetupTime; 106 uint32_t csHoldTime; 107 uint32_t csRecoveryTime; 108 } ChipSpiCfg; 109 110 typedef struct { 111 uint16_t irqFlag; 112 uint32_t commAddr; // i2c device addr 113 uint32_t maxSpeed; 114 } ChipI2cCfg; 115 116 typedef struct { 117 uint8_t busType; 118 union { 119 ChipI2cCfg chipI2c; 120 ChipSpiCfg chipSpi; 121 }; 122 } ChipBusCfg; 123 124 typedef struct { 125 const struct DeviceResourceNode *chipNode; 126 const char *chipName; 127 const char *vendorName; 128 const char *chipInfo; 129 uint16_t chipVersion; 130 ChipBusCfg bus; 131 ChipPwrSeq pwrSeq; 132 } TouchChipCfg; 133 134 typedef struct { 135 struct HdfDeviceObject *hdfKeyDev; 136 const char *keyName; 137 uint8_t devType; 138 uint16_t gpioNum; 139 uint16_t irqFlag; 140 uint32_t debounceTime; 141 } KeyChipCfg; 142 143 typedef struct { 144 struct HdfDeviceObject *hdfEncoderDev; 145 uint8_t devType; 146 uint16_t gpioClk; 147 uint16_t gpioData; 148 uint16_t gpioSW; 149 } EncoderCfg; 150 151 typedef struct { 152 struct HdfDeviceObject *hdfInfraredDev; 153 const char *infraredName; 154 uint8_t devType; 155 uint16_t gpioNum; 156 uint16_t irqFlag; 157 } InfraredCfg; 158 159 int32_t ParseTouchBoardConfig(const struct DeviceResourceNode *node, TouchBoardCfg *config); 160 int32_t ParseTouchChipConfig(const struct DeviceResourceNode *node, TouchChipCfg *config); 161 int32_t ParseKeyConfig(const struct DeviceResourceNode *node, KeyChipCfg *config); 162 int32_t ParseEncoderConfig(const struct DeviceResourceNode *node, EncoderCfg *config); 163 int32_t ParseInfraredConfig(const struct DeviceResourceNode *node, InfraredCfg *config); 164 165 #endif