Re: [PATCH v5 4/7] i2c: designware: introducing I2C_SLAVE definitions

From: Andy Shevchenko
Date: Wed Dec 28 2016 - 10:17:33 EST


On Wed, 2016-12-28 at 14:43 +0000, Luis Oliveira wrote:
> - Definitions were added
>
> SLAVE related definitions were added to the core of the controller.
>

Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>

> Signed-off-by: Luis Oliveira <lolivei@xxxxxxxxxxxx>
> ---
> Changes V4->V5: (Andy Shevchenko)
> - This patch just introduces SLAVE definitions (as suggested in V4)
>
> Âdrivers/i2c/busses/i2c-designware-core.h | 27
> +++++++++++++++++++++++++++
> Â1 file changed, 27 insertions(+)
>
> diff --git a/drivers/i2c/busses/i2c-designware-core.h
> b/drivers/i2c/busses/i2c-designware-core.h
> index 8bba7a37c3ce..5080f1d2d2ec 100644
> --- a/drivers/i2c/busses/i2c-designware-core.h
> +++ b/drivers/i2c/busses/i2c-designware-core.h
> @@ -36,15 +36,20 @@
> Â#define DW_IC_CON_SPEED_FAST 0x4
> Â#define DW_IC_CON_SPEED_HIGH 0x6
> Â#define DW_IC_CON_SPEED_MASK 0x6
> +#define DW_IC_CON_10BITADDR_SLAVE 0x8
> Â#define DW_IC_CON_10BITADDR_MASTER 0x10
> Â#define DW_IC_CON_RESTART_EN 0x20
> Â#define DW_IC_CON_SLAVE_DISABLE 0x40
> +#define DW_IC_CON_STOP_DET_IFADDRESSED 0x80
> +#define DW_IC_CON_TX_EMPTY_CTRL 0x100
> +#define DW_IC_CON_RX_FIFO_FULL_HLD_CTRL 0x200
> Â
> Â/*
> Â * Registers offset
> Â */
> Â#define DW_IC_CON 0x0
> Â#define DW_IC_TAR 0x4
> +#define DW_IC_SAR 0x8
> Â#define DW_IC_DATA_CMD 0x10
> Â#define DW_IC_SS_SCL_HCNT 0x14
> Â#define DW_IC_SS_SCL_LCNT 0x18
> @@ -75,6 +80,7 @@
> Â#define DW_IC_SDA_HOLD 0x7c
> Â#define DW_IC_TX_ABRT_SOURCE 0x80
> Â#define DW_IC_ENABLE_STATUS 0x9c
> +#define DW_IC_CLR_RESTART_DET 0xa8
> Â#define DW_IC_COMP_PARAM_1 0xf4
> Â#define DW_IC_COMP_VERSION 0xf8
> Â#define DW_IC_SDA_HOLD_MIN_VERS 0x3131312A
> @@ -93,15 +99,22 @@
> Â#define DW_IC_INTR_STOP_DET 0x200
> Â#define DW_IC_INTR_START_DET 0x400
> Â#define DW_IC_INTR_GEN_CALL 0x800
> +#define DW_IC_INTR_RESTART_DET 0x1000
> Â
> Â#define DW_IC_INTR_DEFAULT_MASK (DW_IC_INTR_RX_FULL |
> \
> Â ÂDW_IC_INTR_TX_ABRT | \
> Â ÂDW_IC_INTR_STOP_DET)
> Â#define DW_IC_INTR_MASTER_MASK (DW_IC_INTR_DEFAULT_MAS
> K | \
> Â ÂDW_IC_INTR_TX_EMPTY)
> +#define DW_IC_INTR_SLAVE_MASK (DW_IC_INTR_DEFAULT_MASK
> | \
> + ÂDW_IC_INTR_RX_DONE | \
> + ÂDW_IC_INTR_RX_UNDER | \
> + ÂDW_IC_INTR_RD_REQ)
> +
> Â#define DW_IC_STATUS_ACTIVITY 0x1
> Â#define DW_IC_STATUS_TFE BIT(2)
> Â#define DW_IC_STATUS_MASTER_ACTIVITY BIT(5)
> +#define DW_IC_STATUS_SLAVE_ACTIVITY BIT(6)
> Â
> Â#define DW_IC_SDA_HOLD_RX_SHIFT 16
> Â#define DW_IC_SDA_HOLD_RX_MASK GENMASK(23,
> DW_IC_SDA_HOLD_RX_SHIFT)
> @@ -123,6 +136,12 @@
> Â#define TIMEOUT 20 /* ms */
> Â
> Â/*
> + * operation modes
> + */
> +#define DW_IC_MASTER 0
> +#define DW_IC_SLAVE 1
> +
> +/*
> Â * hardware abort codes from the DW_IC_TX_ABRT_SOURCE register
> Â *
> Â * only expected abort codes are listed here
> @@ -139,6 +158,9 @@
> Â#define ABRT_10B_RD_NORSTRT 10
> Â#define ABRT_MASTER_DIS 11
> Â#define ARB_LOST 12
> +#define ABRT_SLAVE_FLUSH_TXFIFO 13
> +#define ABRT_SLAVE_ARBLOST 14
> +#define ABRT_SLAVE_RD_INTX 15
> Â
> Â#define DW_IC_TX_ABRT_7B_ADDR_NOACK (1UL <<
> ABRT_7B_ADDR_NOACK)
> Â#define DW_IC_TX_ABRT_10ADDR1_NOACK (1UL <<
> ABRT_10ADDR1_NOACK)
> @@ -151,6 +173,9 @@
> Â#define DW_IC_TX_ABRT_10B_RD_NORSTRT (1UL <<
> ABRT_10B_RD_NORSTRT)
> Â#define DW_IC_TX_ABRT_MASTER_DIS (1UL << ABRT_MASTER_DIS)
> Â#define DW_IC_TX_ARB_LOST (1UL << ARB_LOST)
> +#define DW_IC_RX_ABRT_SLAVE_RD_INTX (1UL <<
> ABRT_SLAVE_RD_INTX)
> +#define DW_IC_RX_ABRT_SLAVE_ARBLOST (1UL <<
> ABRT_SLAVE_ARBLOST)
> +#define DW_IC_RX_ABRT_SLAVE_FLUSH_TXFIFO (1UL <<
> ABRT_SLAVE_FLUSH_TXFIFO)
> Â
> Â#define DW_IC_TX_ABRT_NOACK (DW_IC_TX_ABRT_7B_ADDR_NOA
> CK | \
> Â ÂDW_IC_TX_ABRT_10ADDR1_NOACK
> | \
> @@ -206,6 +231,7 @@ struct dw_i2c_dev {
> Â void __iomem *base;
> Â struct completion cmd_complete;
> Â struct clk *clk;
> + struct i2c_client *slave;
> Â u32 (*get_clk_rate_khz) (struct
> dw_i2c_dev *dev);
> Â struct dw_pci_controller *controller;
> Â int cmd_err;
> @@ -225,6 +251,7 @@ struct dw_i2c_dev {
> Â struct i2c_adapter adapter;
> Â u32 functionality;
> Â u32 master_cfg;
> + u32 slave_cfg;
> Â unsigned int tx_fifo_depth;
> Â unsigned int rx_fifo_depth;
> Â int rx_outstanding;

--
Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx>
Intel Finland Oy