/*
 * 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		IRQ_GPIO(0)
#define POODLE_IRQ_GPIO_AC_IN		IRQ_GPIO(1)
#define POODLE_IRQ_GPIO_HP_IN		IRQ_GPIO(4)
#define POODLE_IRQ_GPIO_CO		IRQ_GPIO(16)
#define POODLE_IRQ_GPIO_TP_INT		IRQ_GPIO(5)
#define POODLE_IRQ_GPIO_WAKEUP		IRQ_GPIO(11)
#define POODLE_IRQ_GPIO_GA_INT		IRQ_GPIO(10)
#define POODLE_IRQ_GPIO_CF_IRQ		IRQ_GPIO(17)
#define POODLE_IRQ_GPIO_CF_CD		IRQ_GPIO(14)
#define POODLE_IRQ_GPIO_nSD_INT		IRQ_GPIO(8)
#define POODLE_IRQ_GPIO_nSD_DETECT	IRQ_GPIO(9)
#define POODLE_IRQ_GPIO_MAIN_BAT_LOW	IRQ_GPIO(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	(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  */
