/*-------------------------------------------------------------------------*/
/*!
 * \file	FOO.h
 * \brief
 *
 * File:	FOO.h
 *
 * Purpose:
 *
 */
/*-------------------------------------------------------------------------*/
#ifndef _FOO_
#define _FOO_

/* Defines */

#define UNLOAD_THREADS	0x00000008

/* IOCTL codes */
#define SET_DATA_FILTER 0x00000001


/* Hardware defines */

#if (CARD_ENGINE_LHA400_10 || CARD_ENGINE_LHA404_11)

#define GPIO_BASE	0x80000E00
#define GPIO_SIZE	0x84

#define INTYPE1		0x80000E4C
#define INTYPE2		0x80000E50
#define GPIODB		0x80000E64
#define FEOI		0x80000E54
#define INTEN		0x80000E58


/* GPIO Register Structures */
typedef struct
{
volatile unsigned long  pad;
volatile unsigned long	pbd;
volatile unsigned long	pcd;
volatile unsigned long	pdd;
volatile unsigned long	padd;
volatile unsigned long	pbdd;
volatile unsigned long	pcdd;
volatile unsigned long	pddd;
volatile unsigned long	ped;
volatile unsigned long	pedd;
volatile unsigned long	kbdctl;
volatile unsigned long	pinmux;
volatile unsigned long	pfd;
volatile unsigned long	pfdd;
volatile unsigned long	pgd;
volatile unsigned long	pgdd;
volatile unsigned long	phd;
volatile unsigned long	phdd;
volatile unsigned long	reserved1;
volatile unsigned long	inttype1;
volatile unsigned long	inttype2;
volatile unsigned long	gpiofeoi;
volatile unsigned long	gpiointen;
volatile unsigned long	intstatus;
volatile unsigned long	rawintstatus;
volatile unsigned long	gpiodb;
volatile unsigned long	papd;
volatile unsigned long	pbpd;
volatile unsigned long	pcpd;
volatile unsigned long	pdpd;
volatile unsigned long	pepd;
volatile unsigned long	pfpd;
volatile unsigned long	pgpd;
volatile unsigned long	phpd;
} GPIOREGS;

#endif /* closes #if (CARD_ENGINE...) */

#if CARD_ENGINE_PXA270_10

typedef struct
{
	volatile unsigned long gplr0;
	volatile unsigned long gplr1;
	volatile unsigned long gplr2;
	volatile unsigned long gpdr0;
	volatile unsigned long gpdr1;
	volatile unsigned long gpdr2;
	volatile unsigned long gpsr0;
	volatile unsigned long gpsr1;
	volatile unsigned long gpsr2;
	volatile unsigned long gpcr0;
	volatile unsigned long gpcr1;
	volatile unsigned long gpcr2;
	volatile unsigned long grer0;
	volatile unsigned long grer1;
	volatile unsigned long grer2;
	volatile unsigned long gfer0;
	volatile unsigned long gfer1;
	volatile unsigned long gfer2;
	volatile unsigned long gedr0;
	volatile unsigned long gedr1;
	volatile unsigned long gedr2;
	volatile unsigned long gafr0_l;
	volatile unsigned long gafr0_u;
	volatile unsigned long gafr1_l;
	volatile unsigned long gafr1_u;
	volatile unsigned long gafr2_l;
	volatile unsigned long gafr2_u;
	volatile unsigned long gafr3_l;
	volatile unsigned long gafr3_u; /* 0x70 */
	volatile unsigned long rsvrd_1[0x23];
	volatile unsigned long gplr3;
	volatile unsigned long rsvrd_2[2];
	volatile unsigned long gpdr3;
	volatile unsigned long rsvrd_3[2];
	volatile unsigned long gpsr3;
	volatile unsigned long rsvrd_4[2];
	volatile unsigned long gpcr3;
	volatile unsigned long rsvrd_5[2];
	volatile unsigned long grer3;
	volatile unsigned long rsvrd_6[2];
	volatile unsigned long gfer3;
	volatile unsigned long rsvrd_7[2];
	volatile unsigned long gedr3;
	/**/
} GPIOREGS;

#define PXA270_MEM_MAP_PERIPH  (0x40000000)
#define GPIO_OFFSET   (0x00E00000)
#define GPIO_BASE     (PXA270_MEM_MAP_PERIPH + GPIO_OFFSET)
#define GPIO_SIZE	0x90

/* Bit definitions for General-Purpose I/O (GPIO) Controller: */
/* Definitions for IRQA-D included only */

#define DEF_GPDR0_PS027    0x08000000
#define DEF_GPDR0_PS022    0x00400000
#define DEF_GPDR0_PS012    0x00001000
#define DEF_GPDR3_PS099    0x00000008

#define DEF_GPSR0_PS027    0x08000000
#define DEF_GPSR0_PS022    0x00400000
#define DEF_GPSR0_PS012    0x00001000
#define DEF_GPSR3_PS099    0x00000008

#define DEF_GPCR0_PS027    0x08000000
#define DEF_GPCR0_PS022    0x00400000
#define DEF_GPCR0_PS012    0x00001000
#define DEF_GPCR3_PS099    0x00000008

#define DEF_GFER0_PS027    0x08000000
#define DEF_GFER0_PS022    0x00400000
#define DEF_GFER0_PS012    0x00001000
#define DEF_GFER3_PS099    0x00000008

#define DEF_GEDR0_PS027    0x08000000
#define DEF_GEDR0_PS022    0x00400000
#define DEF_GEDR0_PS012    0x00001000
#define DEF_GEDR3_PS099    0x00000008

#define DEF_GAFR0L_AF012(x) (((x)&0x00000003)<<24)
#define DEF_GAFR0U_AF027(x) (((x)&0x00000003)<<22)
#define DEF_GAFR0U_AF022(x) (((x)&0x00000003)<<12)
#define DEF_GAFR3L_AF099(x) (((x)&0x00000003)<<6)

#endif

#endif /* closes #ifndef _FOO_ */
