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