/*
 * 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

/*
 * 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  */
