diff options
Diffstat (limited to 'arch/arm/mach-sa1100/include/mach/h3600.h')
| -rw-r--r-- | arch/arm/mach-sa1100/include/mach/h3600.h | 169 | 
1 files changed, 169 insertions, 0 deletions
diff --git a/arch/arm/mach-sa1100/include/mach/h3600.h b/arch/arm/mach-sa1100/include/mach/h3600.h new file mode 100644 index 00000000000..3ca0ecf095e --- /dev/null +++ b/arch/arm/mach-sa1100/include/mach/h3600.h @@ -0,0 +1,169 @@ +/* + * + * Definitions for H3600 Handheld Computer + * + * Copyright 2000 Compaq Computer Corporation. + * + * Use consistent with the GNU GPL is permitted, + * provided that this copyright notice is + * preserved in its entirety in all copies and derived works. + * + * COMPAQ COMPUTER CORPORATION MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, + * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS + * FITNESS FOR ANY PARTICULAR PURPOSE. + * + * Author: Jamey Hicks. + * + * History: + * + * 2001-10-??	Andrew Christian   Added support for iPAQ H3800 + * + */ + +#ifndef _INCLUDE_H3600_H_ +#define _INCLUDE_H3600_H_ + +typedef int __bitwise pm_request_t; + +#define PM_SUSPEND	((__force pm_request_t) 1)	/* enter D1-D3 */ +#define PM_RESUME	((__force pm_request_t) 2)	/* enter D0 */ + +/* generalized support for H3xxx series Compaq Pocket PC's */ +#define machine_is_h3xxx() (machine_is_h3100() || machine_is_h3600() || machine_is_h3800()) + +/* Physical memory regions corresponding to chip selects */ +#define H3600_EGPIO_PHYS     (SA1100_CS5_PHYS + 0x01000000) +#define H3600_BANK_2_PHYS    SA1100_CS2_PHYS +#define H3600_BANK_4_PHYS    SA1100_CS4_PHYS + +/* Virtual memory regions corresponding to chip selects 2 & 4 (used on sleeves) */ +#define H3600_EGPIO_VIRT     0xf0000000 +#define H3600_BANK_2_VIRT    0xf1000000 +#define H3600_BANK_4_VIRT    0xf3800000 + +/* +   Machine-independent GPIO definitions +   --- these are common across all current iPAQ platforms +*/ + +#define GPIO_H3600_NPOWER_BUTTON	GPIO_GPIO (0)	/* Also known as the "off button"  */ + +#define GPIO_H3600_PCMCIA_CD1		GPIO_GPIO (10) +#define GPIO_H3600_PCMCIA_IRQ1		GPIO_GPIO (11) + +/* UDA1341 L3 Interface */ +#define GPIO_H3600_L3_DATA		GPIO_GPIO (14) +#define GPIO_H3600_L3_MODE		GPIO_GPIO (15) +#define GPIO_H3600_L3_CLOCK		GPIO_GPIO (16) + +#define GPIO_H3600_PCMCIA_CD0		GPIO_GPIO (17) +#define GPIO_H3600_SYS_CLK		GPIO_GPIO (19) +#define GPIO_H3600_PCMCIA_IRQ0		GPIO_GPIO (21) + +#define GPIO_H3600_COM_DCD		GPIO_GPIO (23) +#define GPIO_H3600_OPT_IRQ		GPIO_GPIO (24) +#define GPIO_H3600_COM_CTS		GPIO_GPIO (25) +#define GPIO_H3600_COM_RTS		GPIO_GPIO (26) + +#define IRQ_GPIO_H3600_NPOWER_BUTTON	IRQ_GPIO0 +#define IRQ_GPIO_H3600_PCMCIA_CD1	IRQ_GPIO10 +#define IRQ_GPIO_H3600_PCMCIA_IRQ1	IRQ_GPIO11 +#define IRQ_GPIO_H3600_PCMCIA_CD0	IRQ_GPIO17 +#define IRQ_GPIO_H3600_PCMCIA_IRQ0	IRQ_GPIO21 +#define IRQ_GPIO_H3600_COM_DCD		IRQ_GPIO23 +#define IRQ_GPIO_H3600_OPT_IRQ		IRQ_GPIO24 +#define IRQ_GPIO_H3600_COM_CTS		IRQ_GPIO25 + + +#ifndef __ASSEMBLY__ + +enum ipaq_egpio_type { +	IPAQ_EGPIO_LCD_POWER,	  /* Power to the LCD panel */ +	IPAQ_EGPIO_CODEC_NRESET,  /* Clear to reset the audio codec (remember to return high) */ +	IPAQ_EGPIO_AUDIO_ON,	  /* Audio power */ +	IPAQ_EGPIO_QMUTE,	  /* Audio muting */ +	IPAQ_EGPIO_OPT_NVRAM_ON,  /* Non-volatile RAM on extension sleeves (SPI interface) */ +	IPAQ_EGPIO_OPT_ON,	  /* Power to extension sleeves */ +	IPAQ_EGPIO_CARD_RESET,	  /* Reset PCMCIA cards on extension sleeve (???) */ +	IPAQ_EGPIO_OPT_RESET,	  /* Reset option pack (???) */ +	IPAQ_EGPIO_IR_ON,	  /* IR sensor/emitter power */ +	IPAQ_EGPIO_IR_FSEL,	  /* IR speed selection 1->fast, 0->slow */ +	IPAQ_EGPIO_RS232_ON,	  /* Maxim RS232 chip power */ +	IPAQ_EGPIO_VPP_ON,	  /* Turn on power to flash programming */ +	IPAQ_EGPIO_LCD_ENABLE,	  /* Enable/disable LCD controller */ +}; + +struct ipaq_model_ops { +	const char     *generic_name; +	void	      (*control)(enum ipaq_egpio_type, int); +	unsigned long (*read)(void); +	void	      (*blank_callback)(int blank); +	int	      (*pm_callback)(int req);	    /* Primary model callback */ +	int	      (*pm_callback_aux)(int req);  /* Secondary callback (used by HAL modules) */ +}; + +extern struct ipaq_model_ops ipaq_model_ops; + +static __inline__ const char * h3600_generic_name(void) +{ +	return ipaq_model_ops.generic_name; +} + +static __inline__ void assign_h3600_egpio(enum ipaq_egpio_type x, int level) +{ +	if (ipaq_model_ops.control) +		ipaq_model_ops.control(x,level); +} + +static __inline__ void clr_h3600_egpio(enum ipaq_egpio_type x) +{ +	if (ipaq_model_ops.control) +		ipaq_model_ops.control(x,0); +} + +static __inline__ void set_h3600_egpio(enum ipaq_egpio_type x) +{ +	if (ipaq_model_ops.control) +		ipaq_model_ops.control(x,1); +} + +static __inline__ unsigned long read_h3600_egpio(void) +{ +	if (ipaq_model_ops.read) +		return ipaq_model_ops.read(); +	return 0; +} + +static __inline__ int  h3600_register_blank_callback(void (*f)(int)) +{ +	ipaq_model_ops.blank_callback = f; +	return 0; +} + +static __inline__ void h3600_unregister_blank_callback(void (*f)(int)) +{ +	ipaq_model_ops.blank_callback = NULL; +} + + +static __inline__ int  h3600_register_pm_callback(int (*f)(int)) +{ +	ipaq_model_ops.pm_callback_aux = f; +	return 0; +} + +static __inline__ void h3600_unregister_pm_callback(int (*f)(int)) +{ +	ipaq_model_ops.pm_callback_aux = NULL; +} + +static __inline__ int h3600_power_management(int req) +{ +	if (ipaq_model_ops.pm_callback) +		return ipaq_model_ops.pm_callback(req); +	return 0; +} + +#endif /* ASSEMBLY */ + +#endif /* _INCLUDE_H3600_H_ */  |