/*
 *  vrc4173.h, Include file for NEC VRC4173.
 *
 *  Copyright (C) 2000  Michael R. McDonald
 *  Copyright (C) 2001-2003 Montavista Software Inc.
 *    Author: Yoichi Yuasa <yyuasa@mvista.com, or source@mvista.com>
 *  Copyright (C) 2004  Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
 *  Copyright (C) 2005 Ralf Baechle (ralf@linux-mips.org)
 *
 *  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
 */
#ifndef __NEC_VRC4173_H
#define __NEC_VRC4173_H

#include <asm/io.h>

/*
 * PCI I/O accesses
 */
#ifdef CONFIG_VRC4173

extern unsigned long vrc4173_io_offset;

#define set_vrc4173_io_offset(offset)	do { vrc4173_io_offset = (offset); } while (0)

#define vrc4173_outb(val,port)		outb((val), vrc4173_io_offset+(port))
#define vrc4173_outw(val,port)		outw((val), vrc4173_io_offset+(port))
#define vrc4173_outl(val,port)		outl((val), vrc4173_io_offset+(port))
#define vrc4173_outb_p(val,port)	outb_p((val), vrc4173_io_offset+(port))
#define vrc4173_outw_p(val,port)	outw_p((val), vrc4173_io_offset+(port))
#define vrc4173_outl_p(val,port)	outl_p((val), vrc4173_io_offset+(port))

#define vrc4173_inb(port)		inb(vrc4173_io_offset+(port))
#define vrc4173_inw(port)		inw(vrc4173_io_offset+(port))
#define vrc4173_inl(port)		inl(vrc4173_io_offset+(port))
#define vrc4173_inb_p(port)		inb_p(vrc4173_io_offset+(port))
#define vrc4173_inw_p(port)		inw_p(vrc4173_io_offset+(port))
#define vrc4173_inl_p(port)		inl_p(vrc4173_io_offset+(port))

#define vrc4173_outsb(port,addr,count)	outsb(vrc4173_io_offset+(port),(addr),(count))
#define vrc4173_outsw(port,addr,count)	outsw(vrc4173_io_offset+(port),(addr),(count))
#define vrc4173_outsl(port,addr,count)	outsl(vrc4173_io_offset+(port),(addr),(count))

#define vrc4173_insb(port,addr,count)	insb(vrc4173_io_offset+(port),(addr),(count))
#define vrc4173_insw(port,addr,count)	insw(vrc4173_io_offset+(port),(addr),(count))
#define vrc4173_insl(port,addr,count)	insl(vrc4173_io_offset+(port),(addr),(count))

#else

#define set_vrc4173_io_offset(offset)	do {} while (0)

#define vrc4173_outb(val,port)		do {} while (0)
#define vrc4173_outw(val,port)		do {} while (0)
#define vrc4173_outl(val,port)		do {} while (0)
#define vrc4173_outb_p(val,port)	do {} while (0)
#define vrc4173_outw_p(val,port)	do {} while (0)
#define vrc4173_outl_p(val,port)	do {} while (0)

#define vrc4173_inb(port)		0
#define vrc4173_inw(port)		0
#define vrc4173_inl(port)		0
#define vrc4173_inb_p(port)		0
#define vrc4173_inw_p(port)		0
#define vrc4173_inl_p(port)		0

#define vrc4173_outsb(port,addr,count)	do {} while (0)
#define vrc4173_outsw(port,addr,count)	do {} while (0)
#define vrc4173_outsl(port,addr,count)	do {} while (0)

#define vrc4173_insb(port,addr,count)	do {} while (0)
#define vrc4173_insw(port,addr,count)	do {} while (0)
#define vrc4173_insl(port,addr,count)	do {} while (0)

#endif

/*
 * Clock Mask Unit
 */
typedef enum vrc4173_clock {
	VRC4173_PIU_CLOCK,
	VRC4173_KIU_CLOCK,
	VRC4173_AIU_CLOCK,
	VRC4173_PS2_CH1_CLOCK,
	VRC4173_PS2_CH2_CLOCK,
	VRC4173_USBU_PCI_CLOCK,
	VRC4173_CARDU1_PCI_CLOCK,
	VRC4173_CARDU2_PCI_CLOCK,
	VRC4173_AC97U_PCI_CLOCK,
	VRC4173_USBU_48MHz_CLOCK,
	VRC4173_EXT_48MHz_CLOCK,
	VRC4173_48MHz_CLOCK,
} vrc4173_clock_t;

#ifdef CONFIG_VRC4173

extern void vrc4173_supply_clock(vrc4173_clock_t clock);
extern void vrc4173_mask_clock(vrc4173_clock_t clock);

#else

static inline void vrc4173_supply_clock(vrc4173_clock_t clock) {}
static inline void vrc4173_mask_clock(vrc4173_clock_t clock) {}

#endif

/*
 * Interupt Control Unit
 */

#define VRC4173_PIUINT_COMMAND		0x0040
#define VRC4173_PIUINT_DATA		0x0020
#define VRC4173_PIUINT_PAGE1		0x0010
#define VRC4173_PIUINT_PAGE0		0x0008
#define VRC4173_PIUINT_DATALOST		0x0004
#define VRC4173_PIUINT_STATUSCHANGE	0x0001

#ifdef CONFIG_VRC4173

extern void vrc4173_enable_piuint(uint16_t mask);
extern void vrc4173_disable_piuint(uint16_t mask);

#else

static inline void vrc4173_enable_piuint(uint16_t mask) {}
static inline void vrc4173_disable_piuint(uint16_t mask) {}

#endif

#define VRC4173_AIUINT_INPUT_DMAEND	0x0800
#define VRC4173_AIUINT_INPUT_DMAHALT	0x0400
#define VRC4173_AIUINT_INPUT_DATALOST	0x0200
#define VRC4173_AIUINT_INPUT_DATA	0x0100
#define VRC4173_AIUINT_OUTPUT_DMAEND	0x0008
#define VRC4173_AIUINT_OUTPUT_DMAHALT	0x0004
#define VRC4173_AIUINT_OUTPUT_NODATA	0x0002

#ifdef CONFIG_VRC4173

extern void vrc4173_enable_aiuint(uint16_t mask);
extern void vrc4173_disable_aiuint(uint16_t mask);

#else

static inline void vrc4173_enable_aiuint(uint16_t mask) {}
static inline void vrc4173_disable_aiuint(uint16_t mask) {}

#endif

#define VRC4173_KIUINT_DATALOST		0x0004
#define VRC4173_KIUINT_DATAREADY	0x0002
#define VRC4173_KIUINT_SCAN		0x0001

#ifdef CONFIG_VRC4173

extern void vrc4173_enable_kiuint(uint16_t mask);
extern void vrc4173_disable_kiuint(uint16_t mask);

#else

static inline void vrc4173_enable_kiuint(uint16_t mask) {}
static inline void vrc4173_disable_kiuint(uint16_t mask) {}

#endif

/*
 * General-Purpose I/O Unit
 */
typedef enum vrc4173_function {
	PS2_CHANNEL1,
	PS2_CHANNEL2,
	TOUCHPANEL,
	KEYBOARD_8SCANLINES,
	KEYBOARD_10SCANLINES,
	KEYBOARD_12SCANLINES,
	GPIO_0_15PINS,
	GPIO_16_20PINS,
} vrc4173_function_t;

#ifdef CONFIG_VRC4173

extern void vrc4173_select_function(vrc4173_function_t function);

#else

static inline void vrc4173_select_function(vrc4173_function_t function) {}

#endif

#endif /* __NEC_VRC4173_H */
