| /* i2c_dw_registers.h - array access for I2C Design Ware registers */ |
| |
| /* |
| * Copyright (c) 2015 Intel Corporation |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| #ifndef ZEPHYR_DRIVERS_I2C_I2C_DW_REGISTERS_H_ |
| #define ZEPHYR_DRIVERS_I2C_I2C_DW_REGISTERS_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* IC_CON bits */ |
| union ic_con_register { |
| uint32_t raw; |
| struct { |
| uint32_t master_mode : 1 __packed; |
| uint32_t speed : 2 __packed; |
| uint32_t addr_slave_10bit : 1 __packed; |
| uint32_t addr_master_10bit : 1 __packed; |
| uint32_t restart_en : 1 __packed; |
| uint32_t slave_disable : 1 __packed; |
| uint32_t stop_det : 1 __packed; |
| uint32_t tx_empty_ctl : 1 __packed; |
| uint32_t rx_fifo_full : 1 __packed; |
| } bits; |
| }; |
| |
| /* IC_DATA_CMD bits */ |
| #define IC_DATA_CMD_DAT_MASK 0xFF |
| #define IC_DATA_CMD_CMD BIT(8) |
| #define IC_DATA_CMD_STOP BIT(9) |
| #define IC_DATA_CMD_RESTART BIT(10) |
| |
| /* DesignWare Interrupt bits positions */ |
| #define DW_INTR_STAT_RX_UNDER BIT(0) |
| #define DW_INTR_STAT_RX_OVER BIT(1) |
| #define DW_INTR_STAT_RX_FULL BIT(2) |
| #define DW_INTR_STAT_TX_OVER BIT(3) |
| #define DW_INTR_STAT_TX_EMPTY BIT(4) |
| #define DW_INTR_STAT_RD_REQ BIT(5) |
| #define DW_INTR_STAT_TX_ABRT BIT(6) |
| #define DW_INTR_STAT_RX_DONE BIT(7) |
| #define DW_INTR_STAT_ACTIVITY BIT(8) |
| #define DW_INTR_STAT_STOP_DET BIT(9) |
| #define DW_INTR_STAT_START_DET BIT(10) |
| #define DW_INTR_STAT_GEN_CALL BIT(11) |
| #define DW_INTR_STAT_RESTART_DET BIT(12) |
| #define DW_INTR_STAT_MST_ON_HOLD BIT(13) |
| |
| #define DW_INTR_MASK_RX_UNDER BIT(0) |
| #define DW_INTR_MASK_RX_OVER BIT(1) |
| #define DW_INTR_MASK_RX_FULL BIT(2) |
| #define DW_INTR_MASK_TX_OVER BIT(3) |
| #define DW_INTR_MASK_TX_EMPTY BIT(4) |
| #define DW_INTR_MASK_RD_REQ BIT(5) |
| #define DW_INTR_MASK_TX_ABRT BIT(6) |
| #define DW_INTR_MASK_RX_DONE BIT(7) |
| #define DW_INTR_MASK_ACTIVITY BIT(8) |
| #define DW_INTR_MASK_STOP_DET BIT(9) |
| #define DW_INTR_MASK_START_DET BIT(10) |
| #define DW_INTR_MASK_GEN_CALL BIT(11) |
| #define DW_INTR_MASK_RESTART_DET BIT(12) |
| #define DW_INTR_MASK_MST_ON_HOLD BIT(13) |
| #define DW_INTR_MASK_RESET 0x000008ff |
| |
| union ic_interrupt_register { |
| uint32_t raw; |
| struct { |
| uint32_t rx_under : 1 __packed; |
| uint32_t rx_over : 1 __packed; |
| uint32_t rx_full : 1 __packed; |
| uint32_t tx_over : 1 __packed; |
| uint32_t tx_empty : 1 __packed; |
| uint32_t rd_req : 1 __packed; |
| uint32_t tx_abrt : 1 __packed; |
| uint32_t rx_done : 1 __packed; |
| uint32_t activity : 1 __packed; |
| uint32_t stop_det : 1 __packed; |
| uint32_t start_det : 1 __packed; |
| uint32_t gen_call : 1 __packed; |
| uint32_t restart_det : 1 __packed; |
| uint32_t mst_on_hold : 1 __packed; |
| uint32_t reserved : 2 __packed; |
| } bits; |
| }; |
| |
| /* IC_TAR */ |
| union ic_tar_register { |
| uint32_t raw; |
| struct { |
| uint32_t ic_tar : 10 __packed; |
| uint32_t gc_or_start : 1 __packed; |
| uint32_t special : 1 __packed; |
| uint32_t ic_10bitaddr_master : 1 __packed; |
| uint32_t reserved : 3 __packed; |
| } bits; |
| }; |
| |
| /* IC_COMP_PARAM_1 */ |
| union ic_comp_param_1_register { |
| uint32_t raw; |
| struct { |
| uint32_t apb_data_width : 2 __packed; |
| uint32_t max_speed_mode : 2 __packed; |
| uint32_t hc_count_values : 1 __packed; |
| uint32_t intr_io : 1 __packed; |
| uint32_t has_dma : 1 __packed; |
| uint32_t add_encoded_params : 1 __packed; |
| uint32_t rx_buffer_depth : 8 __packed; |
| uint32_t tx_buffer_depth : 8 __packed; |
| uint32_t reserved : 7 __packed; |
| } bits; |
| }; |
| |
| #define DW_IC_REG_CON (0x00) |
| #define DW_IC_REG_TAR (0x04) |
| #define DW_IC_REG_SAR (0x08) |
| #define DW_IC_REG_DATA_CMD (0x10) |
| #define DW_IC_REG_SS_SCL_HCNT (0x14) |
| #define DW_IC_REG_SS_SCL_LCNT (0x18) |
| #define DW_IC_REG_FS_SCL_HCNT (0x1C) |
| #define DW_IC_REG_FS_SCL_LCNT (0x20) |
| #define DW_IC_REG_HS_SCL_HCNT (0x24) |
| #define DW_IC_REG_HS_SCL_LCNT (0x28) |
| #define DW_IC_REG_INTR_STAT (0x2C) |
| #define DW_IC_REG_INTR_MASK (0x30) |
| #define DW_IC_REG_RX_TL (0x38) |
| #define DW_IC_REG_TX_TL (0x3C) |
| #define DW_IC_REG_CLR_INTR (0x40) |
| #define DW_IC_REG_CLR_RX_UNDER (0x44) |
| #define DW_IC_REG_CLR_RX_OVER (0x48) |
| #define DW_IC_REG_CLR_TX_OVER (0x4c) |
| #define DW_IC_REG_CLR_RD_REQ (0x50) |
| #define DW_IC_REG_CLR_TX_ABRT (0x54) |
| #define DW_IC_REG_CLR_RX_DONE (0x58) |
| #define DW_IC_REG_CLR_ACTIVITY (0x5c) |
| #define DW_IC_REG_CLR_STOP_DET (0x60) |
| #define DW_IC_REG_CLR_START_DET (0x64) |
| #define DW_IC_REG_CLR_GEN_CALL (0x68) |
| #define DW_IC_REG_ENABLE (0x6C) |
| #define DW_IC_REG_STATUS (0x70) |
| #define DW_IC_REG_TXFLR (0x74) |
| #define DW_IC_REG_RXFLR (0x78) |
| #define DW_IC_REG_FS_SPKLEN (0xA0) |
| #define DW_IC_REG_HS_SPKLEN (0xA4) |
| #define DW_IC_REG_COMP_PARAM_1 (0xF4) |
| #define DW_IC_REG_COMP_TYPE (0xFC) |
| |
| /* CON Bit */ |
| #define DW_IC_CON_MASTER_MODE_BIT (0) |
| |
| DEFINE_TEST_BIT_OP(con_master_mode, DW_IC_REG_CON, DW_IC_CON_MASTER_MODE_BIT) |
| DEFINE_MM_REG_WRITE(con, DW_IC_REG_CON, 32) |
| DEFINE_MM_REG_READ(con, DW_IC_REG_CON, 32) |
| |
| DEFINE_MM_REG_WRITE(cmd_data, DW_IC_REG_DATA_CMD, 32) |
| DEFINE_MM_REG_READ(cmd_data, DW_IC_REG_DATA_CMD, 32) |
| |
| DEFINE_MM_REG_WRITE(ss_scl_hcnt, DW_IC_REG_SS_SCL_HCNT, 32) |
| DEFINE_MM_REG_WRITE(ss_scl_lcnt, DW_IC_REG_SS_SCL_LCNT, 32) |
| |
| DEFINE_MM_REG_WRITE(fs_scl_hcnt, DW_IC_REG_FS_SCL_HCNT, 32) |
| DEFINE_MM_REG_WRITE(fs_scl_lcnt, DW_IC_REG_FS_SCL_LCNT, 32) |
| |
| DEFINE_MM_REG_WRITE(hs_scl_hcnt, DW_IC_REG_HS_SCL_HCNT, 32) |
| DEFINE_MM_REG_WRITE(hs_scl_lcnt, DW_IC_REG_HS_SCL_LCNT, 32) |
| |
| |
| |
| DEFINE_MM_REG_READ(intr_stat, DW_IC_REG_INTR_STAT, 32) |
| #define DW_IC_INTR_STAT_TX_ABRT_BIT (6) |
| DEFINE_TEST_BIT_OP(intr_stat_tx_abrt, DW_IC_REG_INTR_STAT, DW_IC_INTR_STAT_TX_ABRT_BIT) |
| |
| DEFINE_MM_REG_WRITE(intr_mask, DW_IC_REG_INTR_MASK, 32) |
| #define DW_IC_INTR_MASK_TX_EMPTY_BIT (4) |
| DEFINE_CLEAR_BIT_OP(intr_mask_tx_empty, DW_IC_REG_INTR_MASK, DW_IC_INTR_MASK_TX_EMPTY_BIT) |
| DEFINE_SET_BIT_OP(intr_mask_tx_empty, DW_IC_REG_INTR_MASK, DW_IC_INTR_MASK_TX_EMPTY_BIT) |
| |
| DEFINE_MM_REG_WRITE(rx_tl, DW_IC_REG_RX_TL, 32) |
| DEFINE_MM_REG_WRITE(tx_tl, DW_IC_REG_TX_TL, 32) |
| |
| DEFINE_MM_REG_READ(clr_intr, DW_IC_REG_CLR_INTR, 32) |
| DEFINE_MM_REG_READ(clr_stop_det, DW_IC_REG_CLR_STOP_DET, 32) |
| DEFINE_MM_REG_READ(clr_start_det, DW_IC_REG_CLR_START_DET, 32) |
| DEFINE_MM_REG_READ(clr_gen_call, DW_IC_REG_CLR_GEN_CALL, 32) |
| DEFINE_MM_REG_READ(clr_tx_abrt, DW_IC_REG_CLR_TX_ABRT, 32) |
| DEFINE_MM_REG_READ(clr_rx_under, DW_IC_REG_CLR_RX_UNDER, 32) |
| DEFINE_MM_REG_READ(clr_rx_over, DW_IC_REG_CLR_RX_OVER, 32) |
| DEFINE_MM_REG_READ(clr_tx_over, DW_IC_REG_CLR_TX_OVER, 32) |
| DEFINE_MM_REG_READ(clr_rx_done, DW_IC_REG_CLR_RX_DONE, 32) |
| DEFINE_MM_REG_READ(clr_rd_req, DW_IC_REG_CLR_RD_REQ, 32) |
| DEFINE_MM_REG_READ(clr_activity, DW_IC_REG_CLR_ACTIVITY, 32) |
| |
| #define DW_IC_ENABLE_EN_BIT (0) |
| DEFINE_CLEAR_BIT_OP(enable_en, DW_IC_REG_ENABLE, DW_IC_ENABLE_EN_BIT) |
| DEFINE_SET_BIT_OP(enable_en, DW_IC_REG_ENABLE, DW_IC_ENABLE_EN_BIT) |
| |
| |
| #define DW_IC_STATUS_ACTIVITY_BIT (0) |
| #define DW_IC_STATUS_TFNT_BIT (1) |
| #define DW_IC_STATUS_RFNE_BIT (3) |
| DEFINE_TEST_BIT_OP(status_activity, DW_IC_REG_STATUS, DW_IC_STATUS_ACTIVITY_BIT) |
| DEFINE_TEST_BIT_OP(status_tfnt, DW_IC_REG_STATUS, DW_IC_STATUS_TFNT_BIT) |
| DEFINE_TEST_BIT_OP(status_rfne, DW_IC_REG_STATUS, DW_IC_STATUS_RFNE_BIT) |
| |
| DEFINE_MM_REG_READ(txflr, DW_IC_REG_TXFLR, 32) |
| DEFINE_MM_REG_READ(rxflr, DW_IC_REG_RXFLR, 32) |
| |
| DEFINE_MM_REG_READ(fs_spklen, DW_IC_REG_FS_SPKLEN, 32) |
| DEFINE_MM_REG_READ(hs_spklen, DW_IC_REG_HS_SPKLEN, 32) |
| |
| DEFINE_MM_REG_READ(comp_param_1, DW_IC_REG_COMP_PARAM_1, 32) |
| DEFINE_MM_REG_READ(comp_type, DW_IC_REG_COMP_TYPE, 32) |
| DEFINE_MM_REG_READ(tar, DW_IC_REG_TAR, 32) |
| DEFINE_MM_REG_WRITE(tar, DW_IC_REG_TAR, 32) |
| DEFINE_MM_REG_WRITE(sar, DW_IC_REG_SAR, 32) |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* ZEPHYR_DRIVERS_I2C_I2C_DW_REGISTERS_H_ */ |