/*
 * Queue Serial Peripheral Interface Memory Map
 *
 * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
 * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#ifndef __QSPI_H__
#define __QSPI_H__

/* QSPI module registers */
typedef struct qspi_ctrl {
	u16 mr;			/* 0x00 Mode */
	u16 res1;
	u16 dlyr;		/* 0x04 Delay */
	u16 res2;
	u16 wr;			/* 0x08 Wrap */
	u16 res3;
	u16 ir;			/* 0x0C Interrupt */
	u16 res4;
	u16 ar;			/* 0x10 Address */
	u16 res5;
	u16 dr;			/* 0x14 Data */
	u16 res6;
} qspi_t;

/* MR */
#define QSPI_QMR_MSTR			(0x8000)
#define QSPI_QMR_DOHIE			(0x4000)
#define QSPI_QMR_BITS(x)		(((x)&0x000F)<<10)
#define QSPI_QMR_BITS_MASK		(0xC3FF)
#define QSPI_QMR_BITS_8			(0x2000)
#define QSPI_QMR_BITS_9			(0x2400)
#define QSPI_QMR_BITS_10		(0x2800)
#define QSPI_QMR_BITS_11		(0x2C00)
#define QSPI_QMR_BITS_12		(0x3000)
#define QSPI_QMR_BITS_13		(0x3400)
#define QSPI_QMR_BITS_14		(0x3800)
#define QSPI_QMR_BITS_15		(0x3C00)
#define QSPI_QMR_BITS_16		(0x0000)
#define QSPI_QMR_CPOL			(0x0200)
#define QSPI_QMR_CPHA			(0x0100)
#define QSPI_QMR_BAUD(x)		((x)&0x00FF)
#define QSPI_QMR_BAUD_MASK		(0xFF00)

/* DLYR */
#define QSPI_QDLYR_SPE			(0x8000)
#define QSPI_QDLYR_QCD(x)		(((x)&0x007F)<<8)
#define QSPI_QDLYR_QCD_MASK		(0x80FF)
#define QSPI_QDLYR_DTL(x)		((x)&0x00FF)
#define QSPI_QDLYR_DTL_MASK		(0xFF00)

/* WR */
#define QSPI_QWR_HALT			(0x8000)
#define QSPI_QWR_WREN			(0x4000)
#define QSPI_QWR_WRTO			(0x2000)
#define QSPI_QWR_CSIV			(0x1000)
#define QSPI_QWR_ENDQP(x)		(((x)&0x000F)<<8)
#define QSPI_QWR_ENDQP_MASK		(0xF0FF)
#define QSPI_QWR_CPTQP(x)		(((x)&0x000F)<<4)
#define QSPI_QWR_CPTQP_MASK		(0xFF0F)
#define QSPI_QWR_NEWQP(x)		((x)&0x000F)
#define QSPI_QWR_NEWQP_MASK		(0xFFF0)

/* IR */
#define QSPI_QIR_WCEFB			(0x8000)
#define QSPI_QIR_ABRTB			(0x4000)
#define QSPI_QIR_ABRTL			(0x1000)
#define QSPI_QIR_WCEFE			(0x0800)
#define QSPI_QIR_ABRTE			(0x0400)
#define QSPI_QIR_SPIFE			(0x0100)
#define QSPI_QIR_WCEF			(0x0008)
#define QSPI_QIR_ABRT			(0x0004)
#define QSPI_QIR_SPIF			(0x0001)

/* AR */
#define QSPI_QAR_ADDR(x)		((x)&0x003F)
#define QSPI_QAR_ADDR_MASK		(0xFFC0)
#define QSPI_QAR_TRANS			(0x0000)
#define QSPI_QAR_RECV			(0x0010)
#define QSPI_QAR_CMD			(0x0020)

/* DR with RAM command word definitions */
#define QSPI_QDR_CONT			(0x8000)
#define QSPI_QDR_BITSE			(0x4000)
#define QSPI_QDR_DT			(0x2000)
#define QSPI_QDR_DSCK			(0x1000)
#define QSPI_QDR_QSPI_CS3		(0x0800)
#define QSPI_QDR_QSPI_CS2		(0x0400)
#define QSPI_QDR_QSPI_CS1		(0x0200)
#define QSPI_QDR_QSPI_CS0		(0x0100)

#endif				/* __QSPI_H__ */
