/*
 *  Copyright (c) 2013 Qualcomm Atheros, Inc.
 *
 *  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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

/*
 * Atheros USB Controller Defines
 */

#ifndef __LINUX_ATH_DEFS_H
#define __LINUX_ATH_DEFS_H

#include <linux/platform_device.h>
#include <atheros.h>
#include <linux/proc_fs.h>
#include <linux/delay.h>

#include <linux/usb.h>
#include <linux/usb/otg.h>

/*
 * USB Registers
 */
struct ath_usb {
	__u32 	usbcmd,		/* Command register */
		usbsts,		/* Status register */
		usbintr,	/* Interrupt enable */
		usbfrmindx,	/* Frame index */
		ctrldssegment,	/* 4G segment selector */
		devaddr,	/* Device Address */
		ep_list_addr,	/* Endpoint List Address */
		reserved,
		burst_size,	/* Setting the burst size*/
		tx_filltuning,
		tx_ttfilltuning,
		reserved0[5],
		configflag,	/* Configured Flag register */
		portscx[8],	/* Port Status/Control x, x = 1..8 */
		otgsc,
		usbmode,	/* USB Host/Device mode */
		ep_setup_stat,	/* Endpoint Setup Status */
		ep_prime,	/* Endpoint Initialize */
		ep_flush,	/* Endpoint De-initialize */
		ep_status,	/* Endpoint Status */
		ep_complete,	/* Endpoint Interrupt On Complete */
		ep_ctrlx[16];	/* Endpoint Control, where x = 0.. 15 */
};

struct ath_otg_vars {
	u8	A_BUS_DROP,
		A_BUS_REQ,
		B_BUS_REQ,
		HOST_UP,
		DEVICE_UP,
		A_SRP_DET;
	u32	A_SRP_TMR;
	u8	A_DATA_PULSE_DET;
	u32	TB_SE0_SRP_TMR;
	u8	B_SE0_SRP;
	s32	OTG_INT_STATUS;
	u8	A_BUS_RESUME,
		A_BUS_SUSPEND,
		A_BUS_SUSPEND_REQ,
		A_CONN,
		B_BUS_RESUME,
		B_BUS_SUSPEND,
		B_CONN,
		A_SET_B_HNP_EN,
		B_SESS_REQ,
		B_SRP_DONE,
		B_HNP_ENABLE,
		A_CONNECTED,
		B_DISCONNECTED,
		CHECK_SESSION,
		A_SUSPEND_TIMER_ON;
	/* A device specific timers */
	u32	TA_WAIT_VRISE_TMR,
		TA_WAIT_BCON_TMR,
		TA_AIDL_BDIS_TMR,
		TA_BIDL_ADIS_TMR,
	/* B device specific timers */
		TB_DATA_PLS_TMR,
		TB_SRP_INIT_TMR,
		TB_SRP_FAIL_TMR,
		TB_VBUS_PLS_TMR,
		TB_ASE0_BRST_TMR,
		TB_A_SUSPEND_TMR,
		TB_VBUS_DSCHRG_TMR;
};

/*
 * OTG Driver Information
 */
struct ath_otg {
	struct otg_transceiver		otg;
	struct work_struct		work;
	struct ath_otg_vars		state;
	struct otg_reg __iomem		*otg_reg;
	struct device			*dev;
	spinlock_t			arlock;
	unsigned int			irqnum;
	struct ehci_caps __iomem	*cap_reg;
	struct ath_usb __iomem		*usb_reg;
	void __iomem			*reg_base;
	irqreturn_t (*udc_isr)(int, void *, struct pt_regs *r);
	void				*udc;
	u64				rsrc_start;
	u64				rsrc_len;
	u32				enabled_ints;
	u32				bVRISE_TIMEDOUT;
	struct echi_hcd			*ehci;	/* Temp Added to Test HNP */
};

/*
 * Atheros USB Debug functions
 */
#define ATH_USB_DEBUG_FUNCTION		(0x00000001)
#define ATH_USB_DEBUG_INTERRUPT		(0x00000002)
#define ATH_USB_DEBUG_ENDPOINT		(0x00000004)
#define ATH_USB_DEBUG_PORTSTATUS	(0x00000008)
#define ATH_USB_DEBUG_DEVICE		(0x00000010)
#define ATH_USB_DEBUG_MEMORY		(0x00000020)
#define ATH_USB_DEBUG_QUEUEHEAD		(0x00000040)
#define ATH_USB_DEBUG_DTD		(0x00000080)
#define ATH_USB_DEBUG_OTG		(0x00000100)


#ifdef ATH_USB_DEBUG
#define ath_usb_debug(level, format, arg...)	\
do {						\
	if (level & ath_usb_debug_level) {	\
		printk(format, ##arg);		\
	}					\
} while (0)
#else
#define ath_usb_debug(level, format, arg...)	\
	do { (void)(level); } while (0)
#endif

#define ath_usb_debug_fn(format, arg...)	\
	ath_usb_debug(ATH_USB_DEBUG_FUNCTION, format, ##arg)
#define ath_usb_debug_ep(format, arg...)	\
	ath_usb_debug(ATH_USB_DEBUG_ENDPOINT, format, ##arg)
#define ath_usb_debug_ps(format, arg...)	\
	ath_usb_debug(ATH_USB_DEBUG_PORTSTATUS, format, ##arg)
#define ath_usb_debug_int(format, arg...)	\
	ath_usb_debug(ATH_USB_DEBUG_INTERRUPT, format, ##arg)
#define ath_usb_debug_dev(format, arg...)	\
	ath_usb_debug(ATH_USB_DEBUG_DEVICE, format, ##arg)
#define ath_usb_debug_mem(format, arg...)	\
	ath_usb_debug(ATH_USB_DEBUG_MEMORY, format, ##arg)
#define ath_usb_debug_qh(format, arg...)	\
	ath_usb_debug(ATH_USB_DEBUG_QUEUEHEAD, format, ##arg)
#define ath_usb_debug_dtd(format, arg...)	\
	ath_usb_debug(ATH_USB_DEBUG_DTD, format, ##arg)
#define ath_usb_debug_otg(format, arg...)	\
	ath_usb_debug(ATH_USB_DEBUG_OTG, format, ##arg)

#define ath_usb_error		printk
#define ath_usb_warn		printk

#define ATH_MAX_CTRL_REQ 2
#define ATH_RCV_CTRL_REQ 0
#define ATH_SND_CTRL_REQ 1

/* Device/Host Capability Reg */
#define ATH_USB_NON_EHCI_DCCPARAMS		(0x124)

/* Device/Host Timer Reg */
#define ATH_USB_NON_EHCI_TIMER0LD		(0x80)
#define ATH_USB_NON_EHCI_TIMER0CTRL		(0x84)
#define ATH_USB_NON_EHCI_TIMER1LD		(0x88)
#define ATH_USB_NON_EHCI_TIMER1CTRL		(0x8C)

/* Device/Host Operational Reg (non-ehci) */
#define ATH_USB_EHCI_EXT_BURSTSZ		(0x160)
#define ATH_USB_EHCI_EXT_TTCTRL			(0x15C)
#define ATH_USB_EHCI_EXT_USBMODE		(0x1A8)
#define ATH_USB_EHCI_EXT_TXFILL			(0x164)
#define ATH_USB_EHCI_EXT_ULPI			(0x170)
#define ATH_USB_EHCI_EXT_OTGSC			(0x1A4)

#define ATH_USB_RESET_USB_HOST			(ATH_RESET_USB_HOST)
#define ATH_USB_RESET_USB_PHY			(ATH_RESET_USB_PHY)
#define ATH_USB_RESET_USBSUS_OVRIDE		(ATH_RESET_USBSUS_OVRIDE)
#define ATH_USB_USB_MODE			(ATH_USB_MODE)
#define ATH_USB_USB2_MODE                       (ATH_USB2_MODE)
#define ATH_USB_HIGH_SPEED              	(1<<27) /* This bit reads the port speed */
#define ATH_USB_SET_SERIAL_MODE         	(1<<29) /* This bit will enable the serial mode */

#define ATH_USB_RESET				(ATH_RESET_BASE + 0x1C)
#define ATH_USB2_RESET                          0xb80600c4

#define ATH_USB_USB_CONFIG			(ATH_USB_CONFIG_BASE + 0x4)
#define ATH_USB_USB_FLADJ_VAL			(ATH_USB_CONFIG_BASE)

#define ath_usb_suspend_mode			1
#if ath_usb_suspend_mode
#define ATH_USB_PWRCTL				(ATH_USB_CONFIG_BASE + 0x0)
#define ATH_USB_DEV_SUSPEND_CTRL		(ATH_USB_CONFIG_BASE + 0x8)
#define ATH_USB_SUSPEND_RESUME_CNTR		(ATH_USB_CONFIG_BASE + 0xc)
#else
#define ATH_USB_PWRCTL				(ATH_USB_EHCI_BASE + 0x0)
#define ATH_USB_DEV_SUSPEND_CTRL		(ATH_USB_EHCI_BASE + 0x8)
#define ATH_USB_SUSPEND_RESUME_CNTR		(ATH_USB_EHCI_BASE + 0xc)
#endif

#define ath_usb_reg_rmw_set(_reg,_mask)		ath_reg_rmw_set(_reg,_mask)
#define ath_usb_reg_rmw_clear(_reg,_mask)	ath_reg_rmw_clear(_reg,_mask)
#define ath_usb_reg_wr(_phys,_val)		ath_reg_wr(_phys,_val)
#define ath_usb_reg_rd(_phys)			ath_reg_rd(_phys)



/* Operational Modes */
enum ath_hc_op_modes {
	ATH_USB_OP_MODE_MPH,
	ATH_USB_OP_MODE_DEV,
	ATH_USB_OP_MODE_SPH,
	ATH_USB_OP_MODE_OTG,
};

/* Transceiver Modes */
enum ath_hc_trans {
	ATH_USB_TRANS_UTMI,
	ATH_USB_TRANS_ULPI,
	ATH_USB_TRANS_SERIAL,
};

/* USB Host selections based on IDs */
enum ath_hc_ids{
        ATH_USB_HOST0,
        ATH_USB_HOST1
};

/* OTG Status/Control Reigser Defines */
#define ATH_USB_OTGSC_IMASK	(0x5F000000)
#define ATH_USB_OTGSC_SMASK	(0x005F0000)
#define ATH_USB_OTGSC_DPIE	(0x40000000)	/* Data-line pulsing IE */
#define ATH_USB_OTGSC_1MSIE	(0x20000000)
#define ATH_USB_OTGSC_BSEIE	(0x10000000)	/* B-session end IE */
#define ATH_USB_OTGSC_BSVIE	(0x08000000)	/* B-session valid IE */
#define ATH_USB_OTGSC_ASVIE	(0x04000000)	/* A-session valid IE */
#define ATH_USB_OTGSC_AVVIE	(0x02000000)	/* A-V-bus valid IE */
#define ATH_USB_OTGSC_IDIE	(0x01000000)	/* OTG ID IE */
#define ATH_USB_OTGSC_DPIS	(0x00400000)	/* Data-line pulsing IS */
#define ATH_USB_OTGSC_1MSIS	(0x00200000)
#define ATH_USB_OTGSC_BSEIS	(0x00100000)	/* B-session end IS */
#define ATH_USB_OTGSC_BSVIS	(0x00080000)	/* B-session valid IS */
#define ATH_USB_OTGSC_ASVIS	(0x00040000)	/* A-session valid IS */
#define ATH_USB_OTGSC_AVVIS	(0x00020000)	/* A-Vbus valid IS */
#define ATH_USB_OTGSC_IDIS	(0x00010000)	/* OTG ID IS */

/* OTG status bit masks */
#define ATH_USB_OTGSC_DPS	(1 << 14)
#define ATH_USB_OTGSC_1MST	(1 << 13)
#define ATH_USB_OTGSC_BSE	(1 << 12)	/* B-session end */
#define ATH_USB_OTGSC_BSV	(1 << 11)	/* B-session valid */
#define ATH_USB_OTGSC_ASV	(1 << 10)	/* A-session valid */
#define ATH_USB_OTGSC_AVV	(1 << 9)	/* A-Vbus Valid */
#define ATH_USB_OTGSC_ID	(1 << 8)	/* OTG ID */

/* OTG control bit masks */
#define ATH_USB_OTGSC_CTL_BITS	(0x2F)
#define ATH_USB_OTGSC_HABA	(1 << 7)	/*hw assisted data pulse bits*/
#define ATH_USB_OTGSC_HADP	(1 << 6)	/*hw assisted data pulse bits*/
#define ATH_USB_OTGSC_IDPU	(1 << 5)
#define ATH_USB_OTGSC_BHEN	(1 << 5)	/* B Host Enable */
#define ATH_USB_OTGSC_DP	(1 << 4)
#define ATH_USB_OTGSC_OT	(1 << 3)
#define ATH_USB_OTGSC_HAAR	(1 << 2)
#define ATH_USB_OTGSC_VC	(1 << 1)
#define ATH_USB_OTGSC_VD	(1 << 0)

/* USB Mode register defines */
#define ATH_USB_MODE_VBPS	(1 << 5)	/* VBUS Power select */
#define ATH_USB_MODE_SDIS	(1 << 4)	/* Stream Disable */
#define ATH_USB_MODE_SLOM	(1 << 3)	/* Setup Locout Mode */
#define ATH_USB_MODE_BES	(1 << 2)	/* Big Endian Select */
#define ATH_USB_MODE_CM_IDLE	(0x00)	/* Combination Host/Device */
#define ATH_USB_MODE_CM_DEV	(0x02)	/* Device Only Mode */
#define ATH_USB_MODE_CM_HOST	(0x03)	/* Host only mode */

#define ATH_USB_SET_HOST_MODE	(ATH_USB_MODE_CM_HOST | ATH_USB_MODE_SDIS)
//#define ATH_USB_SET_DEV_MODE	(ATH_USB_MODE_CM_DEV | ATH_USB_MODE_SDIS)
#define ATH_USB_SET_DEV_MODE	(ATH_USB_MODE_CM_DEV )

void *ath_usb_get_otg (void);
u8 usb_otg_set_status (u8 componant, u8 status);

#endif /* __LINUX_ATH_DEFS_H */
