/*
 * arch/arm/mach-pxa/include/mach/poodle.h
 *
 * May be copied or modified under the terms of the GNU General Public
 * License.  See linux/COPYING for more information.
 *
 * Based on:
 *   arch/arm/mach-sa1100/include/mach/collie.h
 *
 * ChangeLog:
 *   04-06-2001 Lineo Japan, Inc.
 *   04-16-2001 SHARP Corporation
 *   Update to 2.6 John Lenz
 */
#ifndef __ASM_ARCH_POODLE_H
#define __ASM_ARCH_POODLE_H  1

#include "irqs.h" /* PXA_GPIO_TO_IRQ */

/*
 * GPIOs
 */
/* PXA GPIOs */
#define POODLE_GPIO_ON_KEY		(0)
#define POODLE_GPIO_AC_IN		(1)
#define POODLE_GPIO_CO			16
#define POODLE_GPIO_TP_INT		(5)
#define POODLE_GPIO_TP_CS		(24)
#define POODLE_GPIO_WAKEUP		(11)	/* change battery */
#define POODLE_GPIO_GA_INT		(10)
#define POODLE_GPIO_IR_ON		(22)
#define POODLE_GPIO_HP_IN		(4)
#define POODLE_GPIO_CF_IRQ		(17)
#define POODLE_GPIO_CF_CD		(14)
#define POODLE_GPIO_CF_STSCHG		(14)
#define POODLE_GPIO_SD_PWR		(33)
#define POODLE_GPIO_SD_PWR1		(3)
#define POODLE_GPIO_nSD_CLK		(6)
#define POODLE_GPIO_nSD_WP		(7)
#define POODLE_GPIO_nSD_INT		(8)
#define POODLE_GPIO_nSD_DETECT		(9)
#define POODLE_GPIO_MAIN_BAT_LOW	(13)
#define POODLE_GPIO_BAT_COVER		(13)
#define POODLE_GPIO_USB_PULLUP		(20)
#define POODLE_GPIO_ADC_TEMP_ON		(21)
#define POODLE_GPIO_BYPASS_ON		(36)
#define POODLE_GPIO_CHRG_ON		(38)
#define POODLE_GPIO_CHRG_FULL		(16)
#define POODLE_GPIO_DISCHARGE_ON        (42) /* Enable battery discharge */

/* PXA GPIOs */
#define POODLE_IRQ_GPIO_ON_KEY		PXA_GPIO_TO_IRQ(0)
#define POODLE_IRQ_GPIO_AC_IN		PXA_GPIO_TO_IRQ(1)
#define POODLE_IRQ_GPIO_HP_IN		PXA_GPIO_TO_IRQ(4)
#define POODLE_IRQ_GPIO_CO		PXA_GPIO_TO_IRQ(16)
#define POODLE_IRQ_GPIO_TP_INT		PXA_GPIO_TO_IRQ(5)
#define POODLE_IRQ_GPIO_WAKEUP		PXA_GPIO_TO_IRQ(11)
#define POODLE_IRQ_GPIO_GA_INT		PXA_GPIO_TO_IRQ(10)
#define POODLE_IRQ_GPIO_CF_IRQ		PXA_GPIO_TO_IRQ(17)
#define POODLE_IRQ_GPIO_CF_CD		PXA_GPIO_TO_IRQ(14)
#define POODLE_IRQ_GPIO_nSD_INT		PXA_GPIO_TO_IRQ(8)
#define POODLE_IRQ_GPIO_nSD_DETECT	PXA_GPIO_TO_IRQ(9)
#define POODLE_IRQ_GPIO_MAIN_BAT_LOW	PXA_GPIO_TO_IRQ(13)

/* SCOOP GPIOs */
#define POODLE_SCOOP_CHARGE_ON	SCOOP_GPCR_PA11
#define POODLE_SCOOP_CP401	SCOOP_GPCR_PA13
#define POODLE_SCOOP_VPEN	SCOOP_GPCR_PA18
#define POODLE_SCOOP_L_PCLK	SCOOP_GPCR_PA20
#define POODLE_SCOOP_L_LCLK	SCOOP_GPCR_PA21
#define POODLE_SCOOP_HS_OUT	SCOOP_GPCR_PA22

#define POODLE_SCOOP_IO_DIR	( POODLE_SCOOP_VPEN | POODLE_SCOOP_HS_OUT )
#define POODLE_SCOOP_IO_OUT	( 0 )

#define POODLE_SCOOP_GPIO_BASE	(PXA_NR_BUILTIN_GPIO)
#define POODLE_GPIO_CHARGE_ON	(POODLE_SCOOP_GPIO_BASE + 0)
#define POODLE_GPIO_CP401	(POODLE_SCOOP_GPIO_BASE + 2)
#define POODLE_GPIO_VPEN	(POODLE_SCOOP_GPIO_BASE + 7)
#define POODLE_GPIO_L_PCLK	(POODLE_SCOOP_GPIO_BASE + 9)
#define POODLE_GPIO_L_LCLK	(POODLE_SCOOP_GPIO_BASE + 10)
#define POODLE_GPIO_HS_OUT	(POODLE_SCOOP_GPIO_BASE + 11)

#define POODLE_LOCOMO_GPIO_AMP_ON      LOCOMO_GPIO(8)
#define POODLE_LOCOMO_GPIO_MUTE_L      LOCOMO_GPIO(10)
#define POODLE_LOCOMO_GPIO_MUTE_R      LOCOMO_GPIO(11)
#define POODLE_LOCOMO_GPIO_232VCC_ON   LOCOMO_GPIO(12)
#define POODLE_LOCOMO_GPIO_JK_B        LOCOMO_GPIO(13)

#define POODLE_NR_IRQS		(IRQ_BOARD_START + 4)	/* 4 for LoCoMo */

extern struct platform_device poodle_locomo_device;

#endif /* __ASM_ARCH_POODLE_H  */
