
/*
 * arch/arm/include/asm/arch-gxtvbb/i2c.h
 *
 * Copyright (C) 2015 Amlogic, Inc. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
*/

#ifndef __AML_MACH_I2C__
#define __AML_MACH_I2C__

#include <asm/io.h>
#include <asm/arch/secure_apb.h>

/**
 * struct i2c_msg - an I2C transaction segment beginning with START
 * @addr: Slave address, either seven or ten bits.  When this is a ten
 *	bit address, I2C_M_TEN must be set in @flags and the adapter
 *	must support I2C_FUNC_10BIT_ADDR.
 * @flags: I2C_M_RD is handled by all adapters.  No other flags may be
 *	provided unless the adapter exported the relevant I2C_FUNC_*
 *	flags through i2c_check_functionality().
 * @len: Number of data bytes in @buf being read from or written to the
 *	I2C slave address.  For read transactions where I2C_M_RECV_LEN
 *	is set, the caller guarantees that this buffer can hold up to
 *	32 bytes in addition to the initial length byte sent by the
 *	slave (plus, if used, the SMBus PEC); and this value will be
 *	incremented by the number of block data bytes received.
 * @buf: The buffer into which data is read, or from which it's written.
 *
 * An i2c_msg is the low level representation of one segment of an I2C
 * transaction.  It is visible to drivers in the @i2c_transfer() procedure,
 * to userspace from i2c-dev, and to I2C adapter drivers through the
 * @i2c_adapter.@master_xfer() method.
 *
 * Except when I2C "protocol mangling" is used, all I2C adapters implement
 * the standard rules for I2C transactions.  Each transaction begins with a
 * START.  That is followed by the slave address, and a bit encoding read
 * versus write.  Then follow all the data bytes, possibly including a byte
 * with SMBus PEC.  The transfer terminates with a NAK, or when all those
 * bytes have been transferred and ACKed.  If this is the last message in a
 * group, it is followed by a STOP.  Otherwise it is followed by the next
 * @i2c_msg transaction segment, beginning with a (repeated) START.
 *
 * Alternatively, when the adapter supports I2C_FUNC_PROTOCOL_MANGLING then
 * passing certain @flags may have changed those standard protocol behaviors.
 * Those flags are only for use with broken/nonconforming slaves, and with
 * adapters which are known to support the specific mangling options they
 * need (one or more of IGNORE_NAK, NO_RD_ACK, NOSTART, and REV_DIR_ADDR).
 */
struct i2c_msg {
	__u16 addr;	/* slave address			*/
	__u16 flags;
#define I2C_M_TEN		0x0010	/* this is a ten bit chip address */
#define I2C_M_RD		0x0001	/* read data, from slave to master */
#define I2C_M_NOSTART		0x4000	/* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_REV_DIR_ADDR	0x2000	/* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_IGNORE_NAK	0x1000	/* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_NO_RD_ACK		0x0800	/* if I2C_FUNC_PROTOCOL_MANGLING */
#define I2C_M_RECV_LEN		0x0400	/* length will be first received byte */
	__u16 len;		/* msg length				*/
	__u8 *buf;		/* pointer to msg data			*/
};

#define MESON_I2C_MASTER_AO_START	(AO_I2C_M_0_CONTROL_REG)
//#define MESON_I2C_MASTER_AO_END		(0xc810051c+5)

#define MESON_I2C_MASTER_A_START	CBUS_REG_ADDR(I2C_M_0_CONTROL_REG)
#define MESON_I2C_MASTER_A_END		(CBUS_REG_ADDR(I2C_M_0_RDATA_REG1+1)-1)

#define MESON_I2C_MASTER_B_START	CBUS_REG_ADDR(I2C_M_1_CONTROL_REG)
#define MESON_I2C_MASTER_B_END		(CBUS_REG_ADDR(I2C_M_1_RDATA_REG1+1)-1)

#define MESON_I2C_MASTER_C_START	CBUS_REG_ADDR(I2C_M_2_CONTROL_REG)
#define MESON_I2C_MASTER_C_END		(CBUS_REG_ADDR(I2C_M_2_RDATA_REG1+1)-1)

#define MESON_I2C_MASTER_D_START	CBUS_REG_ADDR(I2C_M_3_CONTROL_REG)
#define MESON_I2C_MASTER_D_END		(CBUS_REG_ADDR(I2C_M_3_RDATA_REG1+1)-1)

#define MESON_I2C_SLAVE_START		CBUS_REG_ADDR(I2C_S_CONTROL_REG)
#define MESON_I2C_SLAVE_END			(CBUS_REG_ADDR(I2C_S_CNTL1_REG+1)-1)


#define AML_I2C_MASTER_AO			0
#define AML_I2C_MASTER_A			1
#define AML_I2C_MASTER_B 			2
#define AML_I2C_MASTER_C 			3
#define AML_I2C_MASTER_D 			4


#define AML_I2C_SLAVE_ADDR			0x6c

/*M1 i2c pinmux
 *       I/O			I2C_MASTER_A		I2C_MASTER_B		I2C_SLAVE
 * GPIO_JTAG_TMS	SCK_A REG1[12]							SCK_A REG1[13]
 * GPIO_JTAG_TDI		SDA_A REG1[12]							SDA_A REG1[13]
 * GPIO_JTAG_TCK						SCK_B REG1[16]		SCK_A REG1[17]
 * GPIO_JTAG_TDO						SDA_B REG1[20]		SDA_A REG1[21]
 * GPIOB_0								SCK_B REG2[5]		SCK_A REG2[6]
 * GPIOB_1								SDA_B REG2[2]		SDA_A REG2[3]
 * GPIOB_2			SCK_A REGS[13]							SCK_A REG2[14]
 * GPIOB_3			SDA_A REG2[9]							SDA_A REG2[10]
 * GPIOC_13								SCK_B REG3[28]		SCK_A REG3[29]
 * GPIOC_14								SDA_B REG3[25]		SDA_A REG3[26]
 * GPIOC_21			SCK_A REG7[9]							SCK_A REG7[10]
 * GPIOC_22			SDA_A REG7[6]							SDA_A REG7[7]
 * GPIOE_16								SCK_B REG5[27]		SCK_A REG5[28]
 * GPIOE_17								SDA_B REG5[25]		SDA_A REG5[26]
*/




/* I2C_EE_M0 GPIOC_5/6 */
#define MESON_I2C_EE_M0_SDA_GPIOC_5_REG		(PERIPHS_PIN_MUX_9)
#define MESON_I2C_EE_M0_SDA_GPIOC_5_MASK	(0xF << 20)
#define MESON_I2C_EE_M0_SDA_GPIOC_5_BIT		(0x3 << 20)

#define MESON_I2C_EE_M0_SCL_GPIOC_5_REG		(PERIPHS_PIN_MUX_9)
#define MESON_I2C_EE_M0_SCL_GPIOC_5_MASK	(0xF << 24)
#define MESON_I2C_EE_M0_SCL_GPIOC_5_BIT		(0x3 << 24)

/* I2C_EE_M1 GPIOX_10/11 */
#define MESON_I2C_EE_M1_SDA_GPIOX_10_REG	(PERIPHS_PIN_MUX_4)
#define MESON_I2C_EE_M1_SDA_GPIOX_10_MASK	(0xF << 8)
#define MESON_I2C_EE_M1_SDA_GPIOX_10_BIT	(0x5 << 8)

#define MESON_I2C_EE_M1_SCL_GPIOX_11_REG	(PERIPHS_PIN_MUX_4)
#define MESON_I2C_EE_M1_SCL_GPIOX_11_MASK	(0xF << 12)
#define MESON_I2C_EE_M1_SCL_GPIOX_11_BIT	(0x5 << 12)

/* I2C_EE_M2 GPIOX_17/18 */
#define MESON_I2C_EE_M2_SDA_GPIOX_17_REG	(PERIPHS_PIN_MUX_5)
#define MESON_I2C_EE_M2_SDA_GPIOX_17_MASK	(0xF << 4)
#define MESON_I2C_EE_M2_SDA_GPIOX_17_BIT	(0x1 << 4)

#define MESON_I2C_EE_M2_SCL_GPIOX_18_REG	(PERIPHS_PIN_MUX_5)
#define MESON_I2C_EE_M2_SCL_GPIOX_18_MASK	(0xF << 8)
#define MESON_I2C_EE_M2_SCL_GPIOX_18_BIT	(0x1 << 8)

/* I2C_EE_M3 GPIOH_0/1 */
#define MESON_I2C_EE_M3_SDA_GPIOH_0_REG		(PERIPHS_PIN_MUX_B)
#define MESON_I2C_EE_M3_SDA_GPIOH_0_MASK	(0xF << 0)
#define MESON_I2C_EE_M3_SDA_GPIOH_0_BIT		(0x2 << 0)

#define MESON_I2C_EE_M3_SCL_GPIOH_1_REG		(PERIPHS_PIN_MUX_B)
#define MESON_I2C_EE_M3_SCL_GPIOH_1_MASK	(0xF << 4)
#define MESON_I2C_EE_M3_SCL_GPIOH_1_BIT		(0x2 << 4)

/* I2C_EE_M1 GPIOH_2/3 */
#define MESON_I2C_EE_M1_SDA_GPIOH_2_REG		(PERIPHS_PIN_MUX_B)
#define MESON_I2C_EE_M1_SDA_GPIOH_2_MASK	(0xF << 8)
#define MESON_I2C_EE_M1_SDA_GPIOH_2_BIT		(0x2 << 8)

#define MESON_I2C_EE_M1_SCL_GPIOH_3_REG		(PERIPHS_PIN_MUX_B)
#define MESON_I2C_EE_M1_SCL_GPIOH_3_MASK	(0xF << 12)
#define MESON_I2C_EE_M1_SCL_GPIOH_3_BIT		(0x2 << 12)

/* I2C_EE_M1 GPIOH_6/7 */
#define MESON_I2C_EE_M1_SDA_GPIOH_6_REG		(PERIPHS_PIN_MUX_B)
#define MESON_I2C_EE_M1_SDA_GPIOH_6_MASK	(0xF << 24)
#define MESON_I2C_EE_M1_SDA_GPIOH_6_BIT		(0x4 << 24)

#define MESON_I2C_EE_M1_SCL_GPIOH_7_REG		(PERIPHS_PIN_MUX_B)
#define MESON_I2C_EE_M1_SCL_GPIOH_7_MASK	(0xF << 28)
#define MESON_I2C_EE_M1_SCL_GPIOH_7_BIT		(0x4 << 28)

/* I2C_EE_M0 GPIOZ_0/1 */
#define MESON_I2C_EE_M0_SDA_GPIOZ_0_REG		(PERIPHS_PIN_MUX_6)
#define MESON_I2C_EE_M0_SDA_GPIOZ_0_MASK	(0xF << 0)
#define MESON_I2C_EE_M0_SDA_GPIOZ_0_BIT		(0x4 << 0)

#define MESON_I2C_EE_M0_SCL_GPIOZ_1_REG		(PERIPHS_PIN_MUX_6)
#define MESON_I2C_EE_M0_SCL_GPIOZ_1_MASK	(0xF << 4)
#define MESON_I2C_EE_M0_SCL_GPIOZ_1_BIT		(0x4 << 4)

/* I2C_EE_M0 GPIOZ_7/8 */
#define MESON_I2C_EE_M0_SDA_GPIOZ_7_REG		(PERIPHS_PIN_MUX_6)
#define MESON_I2C_EE_M0_SDA_GPIOZ_7_MASK	(0xF << 28)
#define MESON_I2C_EE_M0_SDA_GPIOZ_7_BIT		(0x7 << 28)

#define MESON_I2C_EE_M0_SCL_GPIOZ_8_REG	(PERIPHS_PIN_MUX_7)
#define MESON_I2C_EE_M0_SCL_GPIOZ_8_MASK	(0xF << 0)
#define MESON_I2C_EE_M0_SCL_GPIOZ_8_BIT		(0x7 << 0)

/* I2C_EE_M2 GPIOZ_14/15 */
#define MESON_I2C_EE_M2_SDA_GPIOZ_14_REG	(PERIPHS_PIN_MUX_7)
#define MESON_I2C_EE_M2_SDA_GPIOZ_14_MASK	(0xF << 24)
#define MESON_I2C_EE_M2_SDA_GPIOZ_14_BIT	(0x3 << 24)

#define MESON_I2C_EE_M2_SCL_GPIOZ_15_REG	(PERIPHS_PIN_MUX_7)
#define MESON_I2C_EE_M2_SCL_GPIOZ_15_MASK	(0xF << 28)
#define MESON_I2C_EE_M2_SCL_GPIOZ_15_BIT	(0x3 << 28)

/* I2C_EE_M3 GPIOA_14/15 */
#define MESON_I2C_EE_M3_SDA_GPIOA_14_REG	(PERIPHS_PIN_MUX_E)
#define MESON_I2C_EE_M3_SDA_GPIOA_14_MASK	(0xF << 24)
#define MESON_I2C_EE_M3_SDA_GPIOA_14_BIT	(0x2 << 24)

#define MESON_I2C_EE_M3_SCL_GPIOA_15_REG	(PERIPHS_PIN_MUX_E)
#define MESON_I2C_EE_M3_SCL_GPIOA_15_MASK	(0xF << 28)
#define MESON_I2C_EE_M3_SCL_GPIOA_15_BIT	(0x2 << 28)

/* I2C_AO_M0 GPIOAO_2/3 */
#define MESON_I2C_AO_M0_SDA_GPIOAO_2_REG	(P_AO_RTI_PINMUX_REG0)
#define MESON_I2C_AO_M0_SDA_GPIOAO_2_MASK	(0xF << 8)
#define MESON_I2C_AO_M0_SDA_GPIOAO_2_BIT	(0x1 << 8)

#define MESON_I2C_AO_M0_SCL_GPIOAO_3_REG	(P_AO_RTI_PINMUX_REG0)
#define MESON_I2C_AO_M0_SCL_GPIOAO_3_MASK	(0xF << 12)
#define MESON_I2C_AO_M0_SCL_GPIOAO_3_BIT	(0x1 << 12)

/* I2C_AO_M0 GPIOE_0/1 */
#define MESON_I2C_AO_M0_SDA_GPIOE_2_REG		(P_AO_RTI_PINMUX_REG1)
#define MESON_I2C_AO_M0_SDA_GPIOE_2_MASK	(0xF << 16)
#define MESON_I2C_AO_M0_SDA_GPIOE_2_BIT		(0x4 << 16)

#define MESON_I2C_AO_M0_SCL_GPIOE_3_REG		(P_AO_RTI_PINMUX_REG1)
#define MESON_I2C_AO_M0_SCL_GPIOE_3_MASK	(0xF << 20)
#define MESON_I2C_AO_M0_SCL_GPIOE_3_BIT		(0x4 << 20)

/* I2C_AO_S0 GPIOAO_2/3 */
#define MESON_I2C_AO_S0_SDA_GPIOAO_2_REG	(P_AO_RTI_PINMUX_REG0)
#define MESON_I2C_AO_S0_SDA_GPIOAO_2_MASK	(0xF << 8)
#define MESON_I2C_AO_S0_SDA_GPIOAO_2_BIT	(0x3 << 8)

#define MESON_I2C_AO_S0_SCL_GPIOAO_3_REG	(P_AO_RTI_PINMUX_REG0)
#define MESON_I2C_AO_S0_SCL_GPIOAO_3_MASK	(0xF << 12)
#define MESON_I2C_AO_S0_SCL_GPIOAO_3_BIT	(0x3 << 12)



#define AML_I2C_SPPED_50K			50000
#define AML_I2C_SPPED_100K			100000
#define AML_I2C_SPPED_200K			200000
#define AML_I2C_SPPED_300K			300000
#define AML_I2C_SPPED_400K			400000

struct aml_pinmux_reg_bit {
	unsigned long	scl_reg;
	unsigned long	sda_reg;
	unsigned int  scl_bit;
	unsigned int  sda_bit;
#ifdef CONFIG_SYS_I2C_AML_HAS_MASK
	unsigned int scl_mask;
	unsigned int sda_mask;
#endif
};

struct aml_i2c_platform{
	unsigned int		slave_addr;/*7bit addr*/
	unsigned int 		wait_count;/*i2c wait ack timeout =
											wait_count * wait_ack_interval */
	unsigned int 		wait_ack_interval;
	unsigned int 		wait_read_interval;
	unsigned int 		wait_xfer_interval;
	unsigned int 		master_no;
	unsigned int		use_pio;/*0: hardware i2c, 1: manual pio i2c*/
	unsigned int		master_i2c_speed;

	/* only need 1 i2c master to comunicate with several devices,
	  * should I prepare 2 master interface to use simultaneously?*/
	struct resource	* resource;
	struct aml_pinmux_reg_bit master_ao_pinmux;
	struct aml_pinmux_reg_bit master_a_pinmux;
	struct aml_pinmux_reg_bit master_b_pinmux;
	struct aml_pinmux_reg_bit master_c_pinmux;
	struct aml_pinmux_reg_bit master_d_pinmux;

	struct aml_pinmux_reg_bit slave_reg_bit;
};

/**************i2c software gpio***************/

#define MESON_I2C_PREG_GPIOC_OE			CBUS_REG_ADDR(PREG_FGPIO_EN_N)
#define MESON_I2C_PREG_GPIOC_OUTLVL		CBUS_REG_ADDR(PREG_FGPIO_O)
#define MESON_I2C_PREG_GPIOC_INLVL		CBUS_REG_ADDR(PREG_FGPIO_I)

#define MESON_I2C_PREG_GPIOE_OE			CBUS_REG_ADDR(PREG_HGPIO_EN_N)
#define MESON_I2C_PREG_GPIOE_OUTLVL		CBUS_REG_ADDR(PREG_HGPIO_O)
#define MESON_I2C_PREG_GPIOE_INLVL		CBUS_REG_ADDR(PREG_HGPIO_I)

#define MESON_I2C_PREG_GPIOA_OE			CBUS_REG_ADDR(PREG_EGPIO_EN_N)
#define MESON_I2C_PREG_GPIOA_OUTLVL		CBUS_REG_ADDR(PREG_EGPIO_O)
#define MESON_I2C_PREG_GPIOA_INLVL		CBUS_REG_ADDR(PREG_EGPIO_I)

struct aml_sw_i2c_pins
{
	unsigned int scl_reg_out;
	unsigned int scl_reg_in;
	unsigned int scl_bit;
	unsigned int scl_oe;
	unsigned int sda_reg_out;
	unsigned int sda_reg_in;
	unsigned int sda_bit;
	unsigned int sda_oe;
};


struct aml_sw_i2c_platform {
	struct aml_sw_i2c_pins sw_pins;

	/* local settings */
	int udelay;		/* half clock cycle time in us,
				   minimum 2 us for fast-mode I2C,
				   minimum 5 us for standard-mode I2C and SMBus,
				   maximum 50 us for SMBus */
	int timeout;		/* in jiffies */
};


#endif //__AML_MACH_I2C__


