/*
 * include/asm-arm/arch-imx/spi_imx.h
 *
 * Copyright (C) 2006 SWAPP
 *	Andrea Paterniani <a.paterniani@swapp-eng.it>
 *
 * Initial version inspired by:
 *	linux-2.6.17-rc3-mm1/include/asm-arm/arch-pxa/pxa2xx_spi.h
 *
 * 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., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#ifndef SPI_IMX_H_
#define SPI_IMX_H_


/*-------------------------------------------------------------------------*/
/**
 * struct spi_imx_master - device.platform_data for SPI controller devices.
 * @num_chipselect: chipselects are used to distinguish individual
 *	SPI slaves, and are numbered from zero to num_chipselects - 1.
 *	each slave has a chipselect signal, but it's common that not
 *	every chipselect is connected to a slave.
 * @enable_dma: if true enables DMA driven transfers.
*/
struct spi_imx_master {
	u8 num_chipselect;
	u8 enable_dma:1;
};
/*-------------------------------------------------------------------------*/


/*-------------------------------------------------------------------------*/
/**
 * struct spi_imx_chip - spi_board_info.controller_data for SPI
 * slave devices, copied to spi_device.controller_data.
 * @enable_loopback : used for test purpouse to internally connect RX and TX
 *	sections.
 * @enable_dma : enables dma transfer (provided that controller driver has
 *	dma enabled too).
 * @ins_ss_pulse : enable /SS pulse insertion between SPI burst.
 * @bclk_wait : number of bclk waits between each bits_per_word SPI burst.
 * @cs_control : function pointer to board-specific function to assert/deassert
 *	I/O port to control HW generation of devices chip-select.
*/
struct spi_imx_chip {
	u8	enable_loopback:1;
	u8	enable_dma:1;
	u8	ins_ss_pulse:1;
	u16	bclk_wait:15;
	void (*cs_control)(u32 control);
};

/* Chip-select state */
#define SPI_CS_ASSERT			(1 << 0)
#define SPI_CS_DEASSERT			(1 << 1)
/*-------------------------------------------------------------------------*/


#endif /* SPI_IMX_H_*/
