#ifndef _SSP_H_
#define _SSP_H_

// PXA 270 Base Addresses
#define NSSP_BASE_PHYSICAL	(0x41900000)


//-------------------------------------------------------------------
typedef struct
{
    unsigned long    SSCR0;          //0x00,SSP control register 0
    unsigned long    SSCR1;          //0x04,SSP control register 1
    unsigned long    SSSR;           //0x08,SSP status register 
    unsigned long    SSITR;          //0x0C,SSP interrupt test register
    unsigned long    SSDR;           //0x10,SSP data read/write register
    unsigned long    SSPSP;          //0x2C,SSP PSP register
} SSP_REGS, *PSSP_REGS;

// SSP Control Register 0 (SSCR0)
#define SSCR0_DSS_4 	(0x3 << 0) // Data size select: 4-bit
#define SSCR0_DSS_5 	(0x4 << 0) // Data size select: 5-bit
#define SSCR0_DSS_6 	(0x5 << 0) // Data size select: 6-bit
#define SSCR0_DSS_7 	(0x6 << 0) // Data size select: 7-bit
#define SSCR0_DSS_8 	(0x7 << 0) // Data size select: 8-bit
#define SSCR0_DSS_9 	(0x8 << 0) // Data size select: 9-bit
#define SSCR0_DSS_10	(0x9 << 0) // Data size select: 10-bit
#define SSCR0_DSS_11	(0xA << 0) // Data size select: 11-bit
#define SSCR0_DSS_12	(0xB << 0) // Data size select: 12-bit
#define SSCR0_DSS_13	(0xC << 0) // Data size select: 13-bit
#define SSCR0_DSS_14	(0xD << 0) // Data size select: 14-bit
#define SSCR0_DSS_15	(0xE << 0) // Data size select: 15-bit
#define SSCR0_DSS_16	(0xF << 0) // Data size select: 16-bit
#define SSCR0_DSS_24	(0x100007 << 0) // Data size select: 24-bit

#define SSCR0_FRF_MOTOROLA	(0x0 << 4) 	// Frame format: Motorola
#define SSCR0_FRF_TI  		(0x1 << 4) 	// Frame format: Texas Instruments
#define SSCR0_FRF_NATTIONAL (0x2 << 4) 	// Frame format: National Microwire
#define SSCR0_ECS   		(0x1 << 6)  // External clock select
#define SSCR0_SSE   		(0x1 << 7)	// Synchronous serial port enable

// SSP Control Register 1 (SSCR1)
#define SSCR1_RIE   	(1 << 0)  // Receive FIFO interrupt enable
#define SSCR1_TIE   	(1 << 1)  // Transmit FIFO interrupt enable
#define SSCR1_LBM   	(1 << 2)  // Loopback mode
#define SSCR1_SPO   	(1 << 3)  // Serial clock polarity
#define SSCR1_SPH    	(1 << 4)  // Motorola SSP clock phase
#define SSCR1_MWDS    	(1 << 5)  // Microwire Transmit data size


//  SSP Status Register (SSSR)
#define SSSR_TNF    (1 << 2)  // Transmit FIFO not full
#define SSSR_RNE    (1 << 3)  // Receive FIFO not empty
#define SSSR_BSY    (1 << 4)  // SSP busy flag
#define SSSR_TFS    (1 << 5)  // Transmit FIFO service request
#define SSSR_RFS    (1 << 6)  // Receive FIFO service request
#define SSSR_ROR    (1 << 7)  // Receive FIFO overrun


#define SSPCR0_SCR			0x00000100
#define SSPSR_ROR			0x00000080
#define DEFAULT_SSPCR1		0x00000000
#define SSPCR0_SCR			0x00000100
#define SSPCR0_SSE			0x00000080
#define SIO_NSSP			0x0000009F

#endif _SSP_H_