Hardware Abstraction Layer for FreeRTOS
i2c_prv.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Author: Andreas Werner <kernel@andy89.org>
4  * Date: 2018
5  */
6 #ifndef I2C_PRV_
7 #define I2C_PRV_
8 #ifndef I2C_PRV
9 # error "Never include this file out of a I2C driver"
10 #endif
11 #include <FreeRTOS.h>
12 #include <semphr.h>
13 #include <stdint.h>
14 #include <stdbool.h>
15 #include <hal.h>
16 #define I2C_ALREDY_INITED 1
17 int32_t i2c_genericInit(struct i2c *i2c);
18 #ifdef CONFIG_I2C_THREAD_SAVE
19 # define i2c_lock(u, w, e) HAL_LOCK(u, w, e)
20 # define i2c_unlock(u, e) HAL_UNLOCK(u, e)
21 #else
22 # define i2c_lock(u, w, e)
23 # define i2c_unlock(u, e)
24 #endif
25 #define I2C_ADDDEV(ns, p) HAL_ADDDEV(i2c, ns, p)
27 #define I2C_GET_DEV(index) HAL_GET_DEV(i2c, index)
28 #ifndef CONFIG_I2C_MULTI
29 # define I2C_OPS(ns)
30 # define I2C_INIT_DEV(ns)
31 # define I2C_INIT(ns, index, mode) struct i2c *i2c_init(uint32_t index, enum i2c_mode mode)
32 # define I2C_DEINIT(ns, i) int32_t i2c_deinit(struct i2c *i)
33 # define I2C_SEND(ns, i, id, data, len, waittime) int32_t i2c_send(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len, TickType_t waittime)
34 # define I2C_RECV(ns, i, id, data, len, waittime) int32_t i2c_recv(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len, TickType_t waittime)
35 # define I2C_TRANSFER(ns, i, id, sendData, sendLen, recvData, recvLen, waittime) int32_t i2c_transfer(struct i2c *i, uint16_t id, uint8_t *sendData, uint32_t sendLen, uint8_t *recvData, uint32_t recvLen, TickType_t waittime)
36 # define I2C_SEND_ISR(ns, i, id, data, len) int32_t i2c_sendISR(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len)
37 # define I2C_RECV_ISR(ns, i, id, data, len) int32_t i2c_recvISR(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len)
38 # define I2C_TRANSFER_ISR(ns, i, id, sendData, sendLen, recvData, recvLen) int32_t i2c_transferISR(struct i2c *i, uint16_t id, uint8_t *sendData, uint32_t sendLen, uint8_t *recvData, uint32_t recvLen)
39 #else
40 # define I2C_OPS(ns) const struct i2c_ops ns##_i2c_ops = { \
41  .i2c_init = &ns##_i2c_init,\
42  .i2c_deinit = &ns##_i2c_deinit,\
43  .i2c_send = &ns##_i2c_send, \
44  .i2c_recv = &ns##_i2c_recv, \
45  .i2c_transfer = &ns##_i2c_transfer, \
46  .i2c_sendISR = &ns##_i2c_sendISR, \
47  .i2c_recvISR = &ns##_i2c_recvISR, \
48  .i2c_transferISR = &ns##_i2c_transferISR, \
49 }
50 # define I2C_INIT_DEV(ns) .gen.ops = &ns##_i2c_ops,
51 # define I2C_INIT(ns, index, mode) struct i2c *ns##_i2c_init(uint32_t index, enum i2c_mode mode)
52 # define I2C_DEINIT(ns, i) int32_t ns##_i2c_deinit(struct i2c *i)
53 # define I2C_SEND(ns, i, id, data, len, waittime) int32_t ns##_i2c_send(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len, TickType_t waittime)
54 # define I2C_RECV(ns, i, id, data, len, waittime) int32_t ns##_i2c_recv(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len, TickType_t waittime)
55 # define I2C_TRANSFER(ns, i, id, sendData, sendLen, recvData, recvLen, waittime) int32_t ns##_i2c_transfer(struct i2c *i, uint16_t id, uint8_t *sendData, uint32_t sendLen, uint8_t *recvData, uint32_t recvLen, TickType_t waittime)
56 # define I2C_SEND_ISR(ns, i, id, data, len) int32_t ns##_i2c_sendISR(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len)
57 # define I2C_RECV_ISR(ns, i, id, data, len) int32_t ns##_i2c_recvISR(struct i2c *i, uint16_t id, uint8_t *data, uint32_t len)
58 # define I2C_TRANSFER_ISR(ns, i, id, sendData, sendLen, recvData, recvLen) int32_t ns##_i2c_transferISR(struct i2c *i, uint16_t id, uint8_t *sendData, uint32_t sendLen, uint8_t *recvData, uint32_t recvLen)
59 #endif
60 #endif
61 
hal.h
i2c_genericInit
int32_t i2c_genericInit(struct i2c *i2c)
HAL_DEFINE_GLOBAL_ARRAY
HAL_DEFINE_GLOBAL_ARRAY(i2c)