|  | /* | 
|  | * Copyright (c) 2020, Seagate Technology LLC | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #ifndef ZEPHYR_DRIVERS_I2C_I2C_LPC11U6X_H_ | 
|  | #define ZEPHYR_DRIVERS_I2C_I2C_LPC11U6X_H_ | 
|  |  | 
|  | #include <zephyr/drivers/pinctrl.h> | 
|  |  | 
|  | #define PINCTRL_STATE_FAST_PLUS PINCTRL_STATE_PRIV_START | 
|  |  | 
|  | #define LPC11U6X_I2C_CONTROL_AA           (1 << 2) | 
|  | #define LPC11U6X_I2C_CONTROL_SI           (1 << 3) | 
|  | #define LPC11U6X_I2C_CONTROL_STOP         (1 << 4) | 
|  | #define LPC11U6X_I2C_CONTROL_START        (1 << 5) | 
|  | #define LPC11U6X_I2C_CONTROL_I2C_EN       (1 << 6) | 
|  |  | 
|  | /* I2C controller states */ | 
|  | #define LPC11U6X_I2C_MASTER_TX_START               0x08 | 
|  | #define LPC11U6X_I2C_MASTER_TX_RESTART             0x10 | 
|  | #define LPC11U6X_I2C_MASTER_TX_ADR_ACK             0x18 | 
|  | #define LPC11U6X_I2C_MASTER_TX_ADR_NACK            0x20 | 
|  | #define LPC11U6X_I2C_MASTER_TX_DAT_ACK             0x28 | 
|  | #define LPC11U6X_I2C_MASTER_TX_DAT_NACK            0x30 | 
|  | #define LPC11U6X_I2C_MASTER_TX_ARB_LOST            0x38 | 
|  |  | 
|  | #define LPC11U6X_I2C_MASTER_RX_ADR_ACK             0x40 | 
|  | #define LPC11U6X_I2C_MASTER_RX_ADR_NACK            0x48 | 
|  | #define LPC11U6X_I2C_MASTER_RX_DAT_ACK             0x50 | 
|  | #define LPC11U6X_I2C_MASTER_RX_DAT_NACK            0x58 | 
|  |  | 
|  | #define LPC11U6X_I2C_SLAVE_RX_ADR_ACK              0x60 | 
|  | #define LPC11U6X_I2C_SLAVE_RX_ARB_LOST_ADR_ACK     0x68 | 
|  | #define LPC11U6X_I2C_SLAVE_RX_GC_ACK               0x70 | 
|  | #define LPC11U6X_I2C_SLAVE_RX_ARB_LOST_GC_ACK      0x78 | 
|  | #define LPC11U6X_I2C_SLAVE_RX_DAT_ACK              0x80 | 
|  | #define LPC11U6X_I2C_SLAVE_RX_DAT_NACK             0x88 | 
|  | #define LPC11U6X_I2C_SLAVE_RX_GC_DAT_ACK           0x90 | 
|  | #define LPC11U6X_I2C_SLAVE_RX_GC_DAT_NACK          0x98 | 
|  | #define LPC11U6X_I2C_SLAVE_RX_STOP                 0xA0 | 
|  |  | 
|  | #define LPC11U6X_I2C_SLAVE_TX_ADR_ACK              0xA8 | 
|  | #define LPC11U6X_I2C_SLAVE_TX_ARB_LOST_ADR_ACK     0xB0 | 
|  | #define LPC11U6X_I2C_SLAVE_TX_DAT_ACK              0xB8 | 
|  | #define LPC11U6X_I2C_SLAVE_TX_DAT_NACK             0xC0 | 
|  | #define LPC11U6X_I2C_SLAVE_TX_LAST_BYTE            0xC8 | 
|  |  | 
|  | /* Transfer Status */ | 
|  | #define LPC11U6X_I2C_STATUS_BUSY                   0x01 | 
|  | #define LPC11U6X_I2C_STATUS_OK                     0x02 | 
|  | #define LPC11U6X_I2C_STATUS_FAIL                   0x03 | 
|  | #define LPC11U6X_I2C_STATUS_INACTIVE               0x04 | 
|  |  | 
|  | struct lpc11u6x_i2c_regs { | 
|  | volatile uint32_t con_set;           /* Control set */ | 
|  | volatile const uint32_t stat;        /* Status */ | 
|  | volatile uint32_t dat;               /* Data */ | 
|  | volatile uint32_t addr0;             /* Slave address 0 */ | 
|  | volatile uint32_t sclh;              /* SCL Duty Cycle */ | 
|  | volatile uint32_t scll;              /* SCL Duty Cycle */ | 
|  | volatile uint32_t con_clr;           /* Control clear */ | 
|  | volatile uint32_t mm_ctrl;           /* Monitor mode control */ | 
|  | volatile uint32_t addr[3];           /* Slave address {1,2,3} */ | 
|  | volatile const uint32_t data_buffer; /* Data buffer */ | 
|  | volatile uint32_t mask[4];           /* Slave address mask */ | 
|  | }; | 
|  |  | 
|  | struct lpc11u6x_i2c_config { | 
|  | struct lpc11u6x_i2c_regs *base; | 
|  | const struct device *clock_dev; | 
|  | void (*irq_config_func)(const struct device *dev); | 
|  | uint32_t clkid; | 
|  | const struct pinctrl_dev_config *pincfg; | 
|  | }; | 
|  |  | 
|  | struct lpc11u6x_i2c_current_transfer { | 
|  | struct i2c_msg *msgs; | 
|  | uint8_t *curr_buf; | 
|  | uint8_t curr_len; | 
|  | uint8_t nr_msgs; | 
|  | uint8_t addr; | 
|  | uint8_t status; | 
|  | }; | 
|  |  | 
|  | struct lpc11u6x_i2c_data { | 
|  | struct lpc11u6x_i2c_current_transfer transfer; | 
|  | struct i2c_target_config *slave; | 
|  | struct k_sem completion; | 
|  | struct k_mutex mutex; | 
|  | }; | 
|  |  | 
|  | #endif /* ZEPHYR_DRIVERS_I2C_I2C_LPC11U6X_H_ */ |