/* i2c_dw_registers.h - array access for I2C Design Ware registers */

/*
 * Copyright (c) 2015 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#ifndef __DRIVERS_I2C_DW_REGISTERS_H
#define __DRIVERS_I2C_DW_REGISTERS_H

#ifdef __cplusplus
extern "C" {
#endif

/*  IC_CON bits */
#define IC_CON_TX_INTR_MODE			(1 << 8)
#define IC_CON_STOP_DET_IFADDR			(1 << 7)
#define IC_CON_SLAVE_DISABLE			(1 << 6)
#define IC_CON_RESTART_EN			(1 << 5)
#define IC_CON_10BIT_ADDR_MASTER		(1 << 4)
#define IC_CON_10BIT_ADDR_SLAVE			(1 << 3)
#define IC_CON_SPEED_MASK			(0x3 << 1)
#define IC_CON_MASTER_MODE			(1 << 0)

union ic_con_register {
	u16_t                raw;
	struct {
		u16_t         master_mode : 1 __packed;
		u16_t         speed : 2 __packed;
		u16_t         addr_slave_10bit : 1 __packed;
		u16_t         addr_master_10bit : 1 __packed;
		u16_t         restart_en : 1 __packed;
		u16_t         slave_disable : 1 __packed;
		u16_t         stop_det : 1 __packed;
		u16_t         tx_empty_ctl : 1 __packed;
		u16_t         rx_fifo_full : 1 __packed;
	} bits;
};


/* IC_DATA_CMD bits */
#define IC_DATA_CMD_DAT_MASK		0xFF
#define IC_DATA_CMD_CMD			(1 << 8)
#define IC_DATA_CMD_STOP		(1 << 9)
#define IC_DATA_CMD_RESTART		(1 << 10)

union ic_data_cmd_register {
	u16_t                raw;
	struct {
	       u16_t         dat : 8 __packed;
	       u16_t         cmd : 1 __packed;
	       u16_t         stop : 1 __packed;
	       u16_t         restart : 1 __packed;
	       u16_t         reserved : 4 __packed;
	} bits;
};

/* IC_ENABLE register bits */
#define IC_ENABLE_ENABLE		(1 << 0)
#define IC_ENABLE_ABORT			(1 << 1)

union ic_enable_register {
	u16_t		raw;
	struct {
		u16_t	enable : 1 __packed;
		u16_t	abort : 1 __packed;
		u16_t	reserved : 13 __packed;
	} bits;
};


/* DesignWare Interrupt bits positions */
#define DW_INTR_STAT_RX_UNDER		(1 << 0)
#define DW_INTR_STAT_RX_OVER		(1 << 1)
#define DW_INTR_STAT_RX_FULL		(1 << 2)
#define DW_INTR_STAT_TX_OVER		(1 << 3)
#define DW_INTR_STAT_TX_EMPTY		(1 << 4)
#define DW_INTR_STAT_RD_REQ		(1 << 5)
#define DW_INTR_STAT_TX_ABRT		(1 << 6)
#define DW_INTR_STAT_RX_DONE		(1 << 7)
#define DW_INTR_STAT_ACTIVITY		(1 << 8)
#define DW_INTR_STAT_STOP_DET		(1 << 9)
#define DW_INTR_STAT_START_DET		(1 << 10)
#define DW_INTR_STAT_GEN_CALL		(1 << 11)
#define DW_INTR_STAT_RESTART_DET	(1 << 12)
#define DW_INTR_STAT_MST_ON_HOLD	(1 << 13)


union ic_interrupt_register {
	u16_t			raw;
	struct {
		u16_t	rx_under : 1 __packed;
		u16_t	rx_over : 1 __packed;
		u16_t	rx_full : 1 __packed;
		u16_t	tx_over : 1 __packed;
		u16_t	tx_empty : 1 __packed;
		u16_t	rd_req : 1 __packed;
		u16_t	tx_abrt : 1 __packed;
		u16_t	rx_done : 1 __packed;
		u16_t	activity : 1 __packed;
		u16_t	stop_det : 1 __packed;
		u16_t	start_det : 1 __packed;
		u16_t	gen_call : 1 __packed;
		u16_t	restart_det : 1 __packed;
		u16_t	mst_on_hold : 1 __packed;
		u16_t	reserved : 2 __packed;
	} bits;
};


/* IC_TAR */
union ic_tar_register {
	u16_t		raw;
	struct {
		u16_t	ic_tar : 9 __packed;
		u16_t	gc_or_start : 1 __packed;
		u16_t	special : 1 __packed;
		u16_t	ic_10bitaddr_master : 1 __packed;
		u16_t	reserved : 3 __packed;
	} bits;
};


/* IC_SAR */
union ic_sar_register {
	u16_t		raw;
	struct {
		u16_t	ic_sar : 9 __packed;
		u16_t	reserved : 6 __packed;
	} bits;
};


/* IC_STATUS */
union ic_status_register {
	u32_t		raw;
	struct {
		u32_t	activity : 1 __packed;
		u32_t	tfnf : 1 __packed;
		u32_t	tfe : 1 __packed;
		u32_t	rfne : 1 __packed;
		u32_t	rff : 1 __packed;
		u32_t	mst_activity : 1 __packed;
		u32_t	slv_activity : 1 __packed;
		u32_t	reserved : 24 __packed;
	} bits;
};


union ic_comp_param_1_register {
	u32_t			raw;
	struct {
		u32_t		apb_data_width : 2 __packed;
		u32_t		max_speed_mode : 2 __packed;
		u32_t		hc_count_values : 1 __packed;
		u32_t		intr_io : 1 __packed;
		u32_t		has_dma : 1 __packed;
		u32_t		add_encoded_params : 1 __packed;
		u32_t		rx_buffer_depth : 8 __packed;
		u32_t		tx_buffer_depth : 8 __packed;
		u32_t		reserved : 7 __packed;
	} bits;
};


/*
 * instantiate this like:
 *  volatile struct i2c_dw_registers *regs = (struct i2c_dw_regs *)0x80000000;
 *
 *  If this is being set as a global, use the following change to avoid the
 *  base pointer from being reloaded after function calls:
 *  volatile struct i2c_dw_regs* const *regs = (struct i2c_dw_regs*)0x80000000;
 *
 *  This will allow access to the registers like so:
 *  x = regs->ctrlreg;
 *  regs->ctrlreg = newval;
 */
struct i2c_dw_registers {
	union ic_con_register ic_con;	/* offset 0x00 */
	u16_t dummy1;
	union ic_tar_register ic_tar;	/* offset 0x04 */
	u16_t dummy2;
	union ic_sar_register ic_sar;	/* offset 0x08 */
	u16_t dummy3;
	u16_t ic_hs_maddr;		/* offset 0x0C */
	u16_t dummy4;
	union ic_data_cmd_register ic_data_cmd;		/* offset 0x10 */
	u16_t dummy5;
	u16_t ic_ss_scl_hcnt;	/* offset 0x14 */
	u16_t dummy6;
	u16_t ic_ss_scl_lcnt;	/* offset 0x18 */
	u16_t dummy7;
	u16_t ic_fs_scl_hcnt;	/* offset 0x1C */
	u16_t dummy8;
	u16_t ic_fs_scl_lcnt;	/* offset 0x20 */
	u16_t dummy9;
	u16_t ic_hs_scl_hcnt;	/* offset 0x24 */
	u16_t dummy10;
	u16_t ic_hs_scl_lcnt;	/* offset 0x28 */
	u16_t dummy11;
	union ic_interrupt_register ic_intr_stat;	/* offset 0x2C */
	u16_t dummy12;
	union ic_interrupt_register ic_intr_mask;	/* offset 0x30 */
	u16_t dummy13;
	union ic_interrupt_register ic_raw_intr_stat;	/* offset 0x34 */
	u16_t dummy14;
	u16_t ic_rx_tl;		/* offset 0x38 */
	u16_t dummy15;
	u16_t ic_tx_tl;		/* offset 0x3C */
	u16_t dummy16;
	u16_t ic_clr_intr;		/* offset 0x40 */
	u16_t dummy17;
	u16_t ic_clr_rx_under;	/* offset 0x44 */
	u16_t dummy18;
	u16_t ic_clr_rx_over;	/* offset 0x48 */
	u16_t dummy19;
	u16_t ic_clr_tx_over;	/* offset 0x4C */
	u16_t dummy20;
	u16_t ic_clr_rd_req;		/* offset 0x50 */
	u16_t dummy21;
	u16_t ic_clr_tx_abrt;	/* offset 0x54 */
	u16_t dummy22;
	u16_t ic_clr_rx_done;	/* offset 0x58 */
	u16_t dummy23;
	u16_t ic_clr_activity;	/* offset 0x5C */
	u16_t dummy24;
	u16_t ic_clr_stop_det;	/* offset 0x60 */
	u16_t dummy25;
	u16_t ic_clr_start_det;	/* offset 0x64 */
	u16_t dummy26;
	u16_t ic_clr_gen_call;	/* offset 0x68 */
	u16_t dummy27;
	union ic_enable_register ic_enable;	/* offset 0x6c */
	u16_t dummy28;
	union ic_status_register ic_status;	/* offset 0x70 */
	u32_t ic_txflr;		/* offset 0x74 */
	u32_t ic_rxflr;		/* offset 0x78 */
	u32_t ic_sda_hold;		/* offset 0x7C */
	u32_t ic_tx_abrt_source;	/* offset 0x80 */
	u32_t ic_slv_data_nack_only; /* offset 0x84 */
	u32_t ic_dma_cr;		/* offset 0x88 */
	u32_t ic_dma_tdlr;		/* offset 0x8C */
	u32_t ic_dma_rdlr;		/* offset 0x90 */
	u32_t ic_sda_setup;		/* offset 0x94 */
	u32_t ic_ack_general_call;	/* offset 0x98 */
	u32_t ic_enable_status;	/* offset 0x9C */
	u32_t ic_fs_spklen;		/* offset 0xA0 */
	u32_t ic_hs_spklen;		/* offset 0xA4 */
	u16_t ic_clr_restart_det;	/* offset 0xA8 */
	u8_t	 filler[74];
	union ic_comp_param_1_register ic_comp_param_1;	/* offset 0xF4 */
	u32_t ic_comp_version;	/* offset 0xF8 */
	u32_t ic_comp_type;		/* offset 0xFC */
};

#ifdef __cplusplus
}
#endif

#endif /* __DRIVERS_I2C_DW_REGISTERS_H */
