/*******************************************************************************
** Document: w747_gpio_function.h
** Copyright (c) 2004 R&D Center, Tailyn Communication Company, Ltd.  
** Created by: Chien Chung Lo
** Date: Dec. 6, 2004
** Description: Wintegra GPIO device function.
** Version: 0.1
*******************************************************************************/

#ifndef _INCLUDE_W747_GPIO_FUNCTION
#define _INCLUDE_W747_GPIO_FUNCTION
//----------------------------------------------------------------------
#include <asm/web777.h>

//----------------------------------------------------------------------
//				DEBUG MACRO
//----------------------------------------------------------------------
#ifdef DEBUG 
#define MSG(string, args...) printk(KERN_INFO "w747 Host bus:--->" string, ##args)
#else
#define MSG(string, args...)
#endif  //endif DEBUG

//----------------------------------------------------------------------
#define W747_GPIO_REG_BASE			(WEB_SIU3_MMAP_BASE + 0x10C00)

#define W747_BRG1_REG_BASE					W747_GPIO_REG_BASE

#define W747_GPIO_GPCR_A_REG		(W747_GPIO_REG_BASE + 0x80)
#define W747_GPIO_GPDR_A_REG		(W747_GPIO_REG_BASE + 0x84)
#define W747_GPIO_GPVR_A_REG		(W747_GPIO_REG_BASE + 0x88)
#define W747_GPIO_GPCMR_A_REG		(W747_GPIO_REG_BASE + 0xF0)

#define W747_GPIO_GPCR_C_REG		(W747_GPIO_REG_BASE + 0xA0)
#define W747_GPIO_GPDR_C_REG		(W747_GPIO_REG_BASE + 0xA4)
#define W747_GPIO_GPVR_C_REG		(W747_GPIO_REG_BASE + 0xA8)
#define W747_GPIO_GPCMR_C_REG		(W747_GPIO_REG_BASE + 0x100)

#define W747_GPIO_GPCR_E_REG		(W747_GPIO_REG_BASE + 0xC0)
#define W747_GPIO_GPDR_E_REG		(W747_GPIO_REG_BASE + 0xC4)
#define W747_GPIO_GPVR_E_REG		(W747_GPIO_REG_BASE + 0xC8)
#define W747_GPIO_GPCMR_E_REG		(W747_GPIO_REG_BASE + 0x110)

//----------------------------------------------------------------------
// set gpio mode 
#define GPIO_A_SETTING			0x000FFFFF
#define GPIO_C_SETTING			0x000DFFFF
#define GPIO_E_SETTING			0xFF000000

//set dir: 0->input 1->output
#define GPIO_A_DIR			0x000FFFFF
#define GPIO_C_DIR			0x78FFFFFF
#define GPIO_E_DIR			0xFF79E79E

//----------------------------------------------------------------------
// GPIO A
#define BP_CARD_EQUIP_0			20
#define BP_CARD_EQUIP_1			21
#define BP_CARD_EQUIP_2			22
#define BP_CARD_EQUIP_3			23
#define BP_CARD_EQUIP_4			24
#define BP_HK_1				25
#define BP_HK_2				26
#define BP_HK_3				27
#define FIBRE_OPTICS_1			28
#define FIBRE_OPTICS_2			29
#define GIGA_PHY_1			30
#define GIGA_PHY_2			31

// GPIO C
#define GPIO_C_BASE			32
#define I2C_SEL				17 + GPIO_C_BASE
#define ETH_INT				20 + GPIO_C_BASE
#define BP_INT_0			21 + GPIO_C_BASE
#define BP_INT_1			22 + GPIO_C_BASE
#define BP_INT_2			23 + GPIO_C_BASE
#define BP_INT_3			24 + GPIO_C_BASE
#define BP_INT_4			25 + GPIO_C_BASE
#define ACO_BUTTON			26 + GPIO_C_BASE
#define ALARM_LED_1			27 + GPIO_C_BASE //output
#define ALARM_LED_2			28 + GPIO_C_BASE //output
#define SYSTEM_LED_1			29 + GPIO_C_BASE //output
#define SYSTEM_LED_2			30 + GPIO_C_BASE //output
#define BP_FAN_ERRSIG			31 + GPIO_C_BASE

// GPIO E
#define GPIO_E_BASE			GPIO_C_BASE + 32
#define BP_PCB_VER_0			0 + GPIO_E_BASE
#define BP_HBUS_CTRL_0			1 + GPIO_E_BASE //output
#define BP_HBUS_CTRL_1			2 + GPIO_E_BASE //output
#define BP_HBUS_CTRL_2			3 + GPIO_E_BASE //output
#define BP_HBUS_CTRL_3			4 + GPIO_E_BASE //output
#define BP_PCB_VER_1			5 + GPIO_E_BASE
#define BP_PCB_VER_2			6 + GPIO_E_BASE
#define BP_HBUS_CTRL_4			7 + GPIO_E_BASE //output
#define BP_SW_RST_0			8 + GPIO_E_BASE //output
#define BP_SW_RST_1			9 + GPIO_E_BASE //output
#define BP_SW_RST_2			10 + GPIO_E_BASE //output
#define BP_PCB_VER_3			11 + GPIO_E_BASE
#define TRUNK_VER_0			12 + GPIO_E_BASE
#define BP_SW_RST_3			13 + GPIO_E_BASE //output
#define BP_SW_RST_4			14 + GPIO_E_BASE //output
#define BP_ALARM_1			15 + GPIO_E_BASE //output
#define BP_ALARM_2			16 + GPIO_E_BASE //output
#define TRUNK_VER_1			17 + GPIO_E_BASE
#define TRUNK_VER_2			18 + GPIO_E_BASE
#define ALL_BUS_ENABLE			19 + GPIO_E_BASE //output
#define ETH_RST				20 + GPIO_E_BASE //output
#define BP_FAN_ENABLE			21 + GPIO_E_BASE //output
#define GIGA_RST			22 + GPIO_E_BASE //output
#define TRUNK_VER_3			23 + GPIO_E_BASE

#define MAX_GPIO_NUM			96

//----------------------------------------------------------------------
int gpio_set(unsigned int gpio_pin);
int gpio_clr(unsigned int gpio_pin);
int gpio_read(unsigned int gpio_pin);

//----------------------------------------------------------------------
#endif // _INCLUDE_W747_GPIO_FUNCTION


