1 /*
2  * Copyright 2022 NXP
3  * All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #include "touchpad.h"
9 #include <rtdevice.h>
10 
BOARD_Delay(uint32_t ms)11 void BOARD_Delay(uint32_t ms)
12 {
13     //VIDEO_DelayMs(ms);
14     rt_thread_mdelay(ms);
15 }
16 
BOARD_LPI2C_Init(LPI2C_Type * base,uint32_t clkSrc_Hz)17 void BOARD_LPI2C_Init(LPI2C_Type *base, uint32_t clkSrc_Hz)
18 {
19     lpi2c_master_config_t lpi2cConfig = {0};
20 
21     /*
22      * lpi2cConfig.debugEnable = false;
23      * lpi2cConfig.ignoreAck = false;
24      * lpi2cConfig.pinConfig = kLPI2C_2PinOpenDrain;
25      * lpi2cConfig.baudRate_Hz = 100000U;
26      * lpi2cConfig.busIdleTimeout_ns = 0;
27      * lpi2cConfig.pinLowTimeout_ns = 0;
28      * lpi2cConfig.sdaGlitchFilterWidth_ns = 0;
29      * lpi2cConfig.sclGlitchFilterWidth_ns = 0;
30      */
31     LPI2C_MasterGetDefaultConfig(&lpi2cConfig);
32     LPI2C_MasterInit(base, &lpi2cConfig, clkSrc_Hz);
33 }
34 
BOARD_LPI2C_Send(LPI2C_Type * base,uint8_t deviceAddress,uint32_t subAddress,uint8_t subAddressSize,uint8_t * txBuff,uint8_t txBuffSize)35 status_t BOARD_LPI2C_Send(LPI2C_Type *base,
36                           uint8_t deviceAddress,
37                           uint32_t subAddress,
38                           uint8_t subAddressSize,
39                           uint8_t *txBuff,
40                           uint8_t txBuffSize)
41 {
42     lpi2c_master_transfer_t xfer;
43 
44     xfer.flags          = kLPI2C_TransferDefaultFlag;
45     xfer.slaveAddress   = deviceAddress;
46     xfer.direction      = kLPI2C_Write;
47     xfer.subaddress     = subAddress;
48     xfer.subaddressSize = subAddressSize;
49     xfer.data           = txBuff;
50     xfer.dataSize       = txBuffSize;
51 
52     return LPI2C_MasterTransferBlocking(base, &xfer);
53 }
54 
BOARD_LPI2C_Receive(LPI2C_Type * base,uint8_t deviceAddress,uint32_t subAddress,uint8_t subAddressSize,uint8_t * rxBuff,uint8_t rxBuffSize)55 status_t BOARD_LPI2C_Receive(LPI2C_Type *base,
56                              uint8_t deviceAddress,
57                              uint32_t subAddress,
58                              uint8_t subAddressSize,
59                              uint8_t *rxBuff,
60                              uint8_t rxBuffSize)
61 {
62     lpi2c_master_transfer_t xfer;
63 
64     xfer.flags          = kLPI2C_TransferDefaultFlag;
65     xfer.slaveAddress   = deviceAddress;
66     xfer.direction      = kLPI2C_Read;
67     xfer.subaddress     = subAddress;
68     xfer.subaddressSize = subAddressSize;
69     xfer.data           = rxBuff;
70     xfer.dataSize       = rxBuffSize;
71 
72     return LPI2C_MasterTransferBlocking(base, &xfer);
73 }
74 
BOARD_LPI2C_SendSCCB(LPI2C_Type * base,uint8_t deviceAddress,uint32_t subAddress,uint8_t subAddressSize,uint8_t * txBuff,uint8_t txBuffSize)75 status_t BOARD_LPI2C_SendSCCB(LPI2C_Type *base,
76                               uint8_t deviceAddress,
77                               uint32_t subAddress,
78                               uint8_t subAddressSize,
79                               uint8_t *txBuff,
80                               uint8_t txBuffSize)
81 {
82     lpi2c_master_transfer_t xfer;
83 
84     xfer.flags          = kLPI2C_TransferDefaultFlag;
85     xfer.slaveAddress   = deviceAddress;
86     xfer.direction      = kLPI2C_Write;
87     xfer.subaddress     = subAddress;
88     xfer.subaddressSize = subAddressSize;
89     xfer.data           = txBuff;
90     xfer.dataSize       = txBuffSize;
91 
92     return LPI2C_MasterTransferBlocking(base, &xfer);
93 }
94 
BOARD_LPI2C_ReceiveSCCB(LPI2C_Type * base,uint8_t deviceAddress,uint32_t subAddress,uint8_t subAddressSize,uint8_t * rxBuff,uint8_t rxBuffSize)95 status_t BOARD_LPI2C_ReceiveSCCB(LPI2C_Type *base,
96                                  uint8_t deviceAddress,
97                                  uint32_t subAddress,
98                                  uint8_t subAddressSize,
99                                  uint8_t *rxBuff,
100                                  uint8_t rxBuffSize)
101 {
102     status_t status;
103     lpi2c_master_transfer_t xfer;
104 
105     xfer.flags          = kLPI2C_TransferDefaultFlag;
106     xfer.slaveAddress   = deviceAddress;
107     xfer.direction      = kLPI2C_Write;
108     xfer.subaddress     = subAddress;
109     xfer.subaddressSize = subAddressSize;
110     xfer.data           = NULL;
111     xfer.dataSize       = 0;
112 
113     status = LPI2C_MasterTransferBlocking(base, &xfer);
114 
115     if (kStatus_Success == status)
116     {
117         xfer.subaddressSize = 0;
118         xfer.direction      = kLPI2C_Read;
119         xfer.data           = rxBuff;
120         xfer.dataSize       = rxBuffSize;
121 
122         status = LPI2C_MasterTransferBlocking(base, &xfer);
123     }
124 
125     return status;
126 }
127 
BOARD_Touch_I2C_Send(uint8_t deviceAddress,uint32_t subAddress,uint8_t subAddressSize,const uint8_t * txBuff,uint8_t txBuffSize)128 status_t BOARD_Touch_I2C_Send(
129     uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, const uint8_t *txBuff, uint8_t txBuffSize)
130 {
131     return BOARD_LPI2C_Send(BOARD_TOUCH_I2C_BASEADDR, deviceAddress, subAddress, subAddressSize, (uint8_t *)txBuff,
132                             txBuffSize);
133 }
134 
BOARD_Touch_I2C_Receive(uint8_t deviceAddress,uint32_t subAddress,uint8_t subAddressSize,uint8_t * rxBuff,uint8_t rxBuffSize)135 status_t BOARD_Touch_I2C_Receive(
136     uint8_t deviceAddress, uint32_t subAddress, uint8_t subAddressSize, uint8_t *rxBuff, uint8_t rxBuffSize)
137 {
138     return BOARD_LPI2C_Receive(BOARD_TOUCH_I2C_BASEADDR, deviceAddress, subAddress, subAddressSize, rxBuff, rxBuffSize);
139 }
140