| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #define I2C_DW_COMP_TYPE_NUM 0x44570140 |
| #define I2C_DW_MAX_TRANSFER 64 // Local buffer for transfer and receive. Matches FIFO size |
| #define I2C_ERROR_SIGNAL ZX_USER_SIGNAL_0 |
| #define I2C_TXN_COMPLETE_SIGNAL ZX_USER_SIGNAL_1 |
| |
| #define I2C_DW_READ32(a) readl(dev->regs_iobuff.vaddr + a) |
| #define I2C_DW_WRITE32(a, v) writel(v, dev->regs_iobuff.vaddr + a) |
| |
| #define I2C_DW_MASK(start, count) (((1 << (count)) - 1) << (start)) |
| #define I2C_DW_GET_BITS32(src, start, count) ((I2C_DW_READ32(src) & I2C_DW_MASK(start, count)) >> (start)) |
| #define I2C_DW_SET_BITS32(dest, start, count, value) \ |
| I2C_DW_WRITE32(dest, (I2C_DW_READ32(dest) & ~I2C_DW_MASK(start, count)) | \ |
| (((value) << (start)) & I2C_DW_MASK(start, count))) |
| #define I2C_DW_SET_MASK(mask, start, count, value) \ |
| ((mask & ~I2C_DW_MASK(start, count)) | \ |
| (((value) << (start)) & I2C_DW_MASK(start, count))) |
| |
| #define I2C_DISABLE 0 |
| #define I2C_ENABLE 1 |
| #define I2C_STD_MODE 1 |
| #define I2C_FAST_MODE 2 |
| #define I2C_HS_MODE 3 |
| #define I2C_7BIT_ADDR 0 |
| #define I2C_10BIT_ADDR 0 |
| #define I2C_ACTIVE 1 |
| |
| /* DesignWare I2C Resiter Offset*/ |
| #define DW_I2C_CON 0x0 /* I2C Control */ |
| #define DW_I2C_TAR 0x4 /* I2C Target Address */ |
| #define DW_I2C_SAR 0x8 /* I2C Slave Address */ |
| #define DW_I2C_HS_MADDR 0xc /* I2C HS Master Mode Code Address */ |
| #define DW_I2C_DATA_CMD 0x10 /* I2C Rx/Tx Data Buffer and Command */ |
| #define DW_I2C_SS_SCL_HCNT 0x14 /* SS I2C Clock SCL High Count */ |
| #define DW_I2C_UFM_SCL_HCNT 0x14 /* UFS I2C Clock SCL High Count */ |
| #define DW_I2C_SS_SCL_LCNT 0x18 /* SS I2C Clock SCL Low Count */ |
| #define DW_I2C_UFM_SCL_LCNT 0x18 /* UFS I2C Clock SCL Low Count */ |
| #define DW_I2C_FS_SCL_HCNT 0x1c /* Fast Mode I2C Clock SCL High Cnt */ |
| #define DW_I2C_UFM_TBUF_CNT 0x1c /* UFS mode TBuf Idle Count */ |
| #define DW_I2C_FS_SCL_LCNT 0x20 /* Fast Mode I2C Clock SCL Low Cnt */ |
| #define DW_I2C_HS_SCL_HCNT 0x24 /* High Speed I2C Clock SCL High Cnt */ |
| #define DW_I2C_HS_SCL_LCNT 0x28 /* High Speed I2C Clock SCL Low Cnt */ |
| #define DW_I2C_INTR_STAT 0x2c /* I2C Interrupt Status */ |
| #define DW_I2C_INTR_MASK 0x30 /* I2C Interrupt Mask */ |
| #define DW_I2C_RAW_INTR_STAT 0x34 /* I2C Raw Interrupt Status */ |
| #define DW_I2C_RX_TL 0x38 /* I2C Receive FIFO Threshold */ |
| #define DW_I2C_TX_TL 0x3c /* I2C Transmit FIFO Threshold */ |
| #define DW_I2C_CLR_INTR 0x40 /* Clear Combined and Individual Intr */ |
| #define DW_I2C_CLR_RX_UNDER 0x44 /* Clear RX_UNDER Interrupt */ |
| #define DW_I2C_CLR_RX_OVER 0x48 /* Clear RX_OVER Interrupt */ |
| #define DW_I2C_CLR_TX_OVER 0x4c /* Clear TX_OVER Interrupt */ |
| #define DW_I2C_CLR_RD_REQ 0x50 /* Clear RD_REQ Interrupt */ |
| #define DW_I2C_CLR_TX_ABRT 0x54 /* Clear TX_ABRT Interrupt */ |
| #define DW_I2C_CLR_RX_DONE 0x58 /* Clear RX_DONE Interrupt */ |
| #define DW_I2C_CLR_ACTIVITY 0x5c /* Clear ACTIVITY Interrupt */ |
| #define DW_I2C_CLR_STOP_DET 0x60 /* Clear STOP_DET Interrupt */ |
| #define DW_I2C_CLR_START_DET 0x64 /* Clear START_DET Interrupt */ |
| #define DW_I2C_CLR_GEN_CALL 0x68 /* Clear GEN_CALL Interrupt */ |
| #define DW_I2C_ENABLE 0x6c /* I2C Enable */ |
| #define DW_I2C_STATUS 0x70 /* I2C Status */ |
| #define DW_I2C_TXFLR 0x74 /* I2C Transmit FIFO Level */ |
| #define DW_I2C_RXFLR 0x78 /* I2C Receive FIFO Level */ |
| #define DW_I2C_SDA_HOLD 0x7c /* I2C SDA Hold Time Length */ |
| #define DW_I2C_TX_ABRT_SOURCE 0x80 /* I2C Transmit Abort Source */ |
| #define DW_I2C_SLV_DATA_NACK_ONLY 0x84 /* Generate Slave Data NACK */ |
| #define DW_I2C_DMA_CR 0x88 /* DMA Control */ |
| #define DW_I2C_DMA_TDLR 0x8c /* DMA Transmit Data Level */ |
| #define DW_I2C_DMA_RDLR 0x90 /* I2C Receive Data Level */ |
| #define DW_I2C_SDA_SETUP 0x94 /* I2C SDA Setup */ |
| #define DW_I2C_ACK_GENERAL_CALL 0x98 /* I2C ACK General Call */ |
| #define DW_I2C_ENABLE_STATUS 0x9c /* I2C Enable Status */ |
| #define DW_I2C_FS_SPKLEN 0xa0 /* I2C SS, FS spike suppression limit */ |
| #define DW_I2C_UFM_SPKLEN 0xa0 /* I2C UFM spike suppression limit */ |
| #define DW_I2C_HS_SPKLEN 0xa4 /* I2C HS spike suppression limit */ |
| #define DW_I2C_CLR_RESTART_DET 0xa8 /* Clear RESTART_DET Interrupt */ |
| #define DW_I2C_SCL_STUCK_AT_LOW_TIMEOUT 0xac /* I2C SCL Stuck at Low Timeout */ |
| #define DW_I2C_SDA_STUCK_AT_LOW_TIMEOUT 0xb0 /* I2C SDA Stuck at Low Timeout */ |
| #define DW_I2C_CLR_SCL_STUCK_DET 0xb4 /* Clear SCL Stuck at Low Detect Intr */ |
| #define DW_I2C_DEVICE_ID 0xb8 /* I2C Device-ID */ |
| #define DW_I2C_SMBUS_CLK_LOW_SEXT 0xbc /* SMBus Slave Clock Extend Timeout */ |
| #define DW_I2C_SMBUS_CLK_LOW_MEXT 0xc0 /* SMBus Master Clock Extend Timeout */ |
| #define DW_I2C_SMBUS_THIGH_MAX_IDLE_COUNT 0xc4 /* SMBus Master High MAX Bus-idle cnt */ |
| #define DW_I2C_SMBUS_INTR_STAT 0xc8 /* SMBUS Interrupt Status */ |
| #define DW_I2C_SMBUS_INTR_MASK 0xcc /* SMBus Interrupt Mask */ |
| #define DW_I2C_SMBUS_RAW_INTR_STAT 0xd0 /* SMBus Raw Interrupt Status */ |
| #define DW_I2C_CLR_SMBUS_INTR 0xd4 /* SMBus Clear Interrupt */ |
| #define DW_I2C_OPTIONAL_SAR 0xd8 /* I2C Optional Slave Address */ |
| #define DW_I2C_SMBUS_UDID_LSB 0xdc /* SMBUS ARP UDID LSB */ |
| #define DW_I2C_COMP_PARAM_1 0xf4 /* Component Parameter */ |
| #define DW_I2C_COMP_VERSION 0xf8 /* I2C Component Version */ |
| #define DW_I2C_COMP_TYPE 0xfc |
| |
| |
| /* DW_I2C_CON Bit Definitions */ |
| #define DW_I2C_CON_MASTER_MODE_START 0 |
| #define DW_I2C_CON_MASTER_MODE_BITS 1 |
| #define DW_I2C_CON_SPEED_START 1 |
| #define DW_I2C_CON_SPEED_BITS 2 |
| #define DW_I2C_CON_10BITADDRSLAVE_START 3 |
| #define DW_I2C_CON_10BITADDRSLAVE_BITS 1 |
| #define DW_I2C_CON_10BITADDRMASTER_START 4 |
| #define DW_I2C_CON_10BITADDRMASTER_BITS 1 |
| #define DW_I2C_CON_RESTART_EN_START 5 |
| #define DW_I2C_CON_RESTART_EN_BITS 1 |
| #define DW_I2C_CON_SLAVE_DIS_START 6 |
| #define DW_I2C_CON_SLAVE_DIS_BITS 1 |
| #define DW_I2C_CON_TX_EMPTY_CTRL_START 8 |
| #define DW_I2C_CON_TX_EMPTY_CTRL_BITS 1 |
| |
| /* DW_I2C_TAR Bit Definitions */ |
| #define DW_I2C_TAR_TAR_START 0 |
| #define DW_I2C_TAR_TAR_BITS 10 |
| #define DW_I2C_TAR_10BIT_START 12 |
| #define DW_I2C_TAR_10BIT_BITS 1 |
| |
| /* DW_I2C_DATA_CMD_DAT Bit Definitions */ |
| #define DW_I2C_DATA_CMD_DAT_START 0 |
| #define DW_I2C_DATA_CMD_DAT_BITS 8 |
| #define DW_I2C_DATA_CMD_CMD_START 8 |
| #define DW_I2C_DATA_CMD_CMD_BITS 1 |
| #define DW_I2C_DATA_CMD_STOP_START 9 |
| #define DW_I2C_DATA_CMD_STOP_BITS 1 |
| #define DW_I2C_DATA_CMD_RESTART_START 10 |
| #define DW_I2C_DATA_CMD_RESTART_BITS 1 |
| #define DW_I2C_DATA_CMD_FRST_DAT_BYTE_START 11 |
| #define DW_I2C_DATA_CMD_FRST_DAT_BYTE_BITS 1 |
| |
| /* DW_I2C_SS/FS_SCL Bit Definitions */ |
| #define DW_I2C_SS_SCL_HCNT_START 0 |
| #define DW_I2C_SS_SCL_HCNT_BITS 16 |
| #define DW_I2C_SS_SCL_LCNT_START 0 |
| #define DW_I2C_SS_SCL_LCNT_BITS 16 |
| #define DW_I2C_FS_SCL_HCNT_START 0 |
| #define DW_I2C_FS_SCL_HCNT_BITS 16 |
| #define DW_I2C_FS_SCL_LCNT_START 0 |
| #define DW_I2C_FS_SCL_LCNT_BITS 16 |
| |
| /* DW_I2C_INTR Bit Definitions */ |
| #define DW_I2C_INTR_SCL_STUCK_LOW (0x4000) |
| #define DW_I2C_INTR_MSTR_ON_HOLD (0x2000) |
| #define DW_I2C_INTR_RESTART_DET (0x1000) |
| #define DW_I2C_INTR_GEN_CALL (0x0800) |
| #define DW_I2C_INTR_START_DET (0x0400) |
| #define DW_I2C_INTR_STOP_DET (0x0200) |
| #define DW_I2C_INTR_ACTIVITY (0x0100) |
| #define DW_I2C_INTR_RX_DONE (0x0080) |
| #define DW_I2C_INTR_TX_ABRT (0x0040) |
| #define DW_I2C_INTR_RD_REQ (0x0020) |
| #define DW_I2C_INTR_TX_EMPTY (0x0010) |
| #define DW_I2C_INTR_TX_OVER (0x0008) |
| #define DW_I2C_INTR_RX_FULL (0x0004) |
| #define DW_I2C_INTR_RX_OVER (0x0002) |
| #define DW_I2C_INTR_RX_UNDER (0x0001) |
| #define DW_I2C_INTR_DEFAULT_INTR_MASK (DW_I2C_INTR_RX_FULL | \ |
| DW_I2C_INTR_TX_ABRT | \ |
| DW_I2C_INTR_STOP_DET | \ |
| DW_I2C_INTR_TX_EMPTY) |
| |
| #define DW_I2C_INTR_READ_INTR_MASK (DW_I2C_INTR_RX_FULL | \ |
| DW_I2C_INTR_TX_ABRT | \ |
| DW_I2C_INTR_STOP_DET ) |
| |
| /* DW_I2C_RX/TX_TL Bit Definitions */ |
| #define DW_I2C_RX_TL_START 0 |
| #define DW_I2C_RX_TL_BITS 8 |
| #define DW_I2C_TX_TL_START 0 |
| #define DW_I2C_TX_TL_BITS 8 |
| |
| /* DW_I2C_ENABLE Bit Definitions */ |
| #define DW_I2C_ENABLE_ENABLE_START 0 |
| #define DW_I2C_ENABLE_ENABLE_BITS 1 |
| |
| /* DW_I2C_STATUS Bit Definitions */ |
| #define DW_I2C_STATUS_ACTIVITY_START 0 |
| #define DW_I2C_STATUS_ACTIVITY_BITS 1 |
| |
| /* DW_I2C_ENABLE_STATUS Bit Definitions */ |
| #define DW_I2C_ENABLE_STATUS_EN_START 0 |
| #define DW_I2C_ENABLE_STATUS_EN_BITS 1 |
| |
| /* DW_I2C_COMP_PARAM_1 Bit Definitions */ |
| #define DW_I2C_COMP_PARAM_1_RXFIFOSZ_START 8 |
| #define DW_I2C_COMP_PARAM_1_RXFIFOSZ_BITS 8 |
| #define DW_I2C_COMP_PARAM_1_TXFIFOSZ_START 16 |
| #define DW_I2C_COMP_PARAM_1_TXFIFOSZ_BITS 8 |