@ -95,6 +95,7 @@ struct spi_imx_data {
unsigned int spi_bus_clk ;
unsigned int bytes_per_word ;
unsigned int spi_drctl ;
unsigned int count ;
void ( * tx ) ( struct spi_imx_data * ) ;
@ -246,6 +247,7 @@ static bool spi_imx_can_dma(struct spi_master *master, struct spi_device *spi,
# define MX51_ECSPI_CTRL_XCH (1 << 2)
# define MX51_ECSPI_CTRL_SMC (1 << 3)
# define MX51_ECSPI_CTRL_MODE_MASK (0xf << 4)
# define MX51_ECSPI_CTRL_DRCTL(drctl) ((drctl) << 16)
# define MX51_ECSPI_CTRL_POSTDIV_OFFSET 8
# define MX51_ECSPI_CTRL_PREDIV_OFFSET 12
# define MX51_ECSPI_CTRL_CS(cs) ((cs) << 18)
@ -355,6 +357,12 @@ static int mx51_ecspi_config(struct spi_device *spi,
*/
ctrl | = MX51_ECSPI_CTRL_MODE_MASK ;
/*
* Enable SPI_RDY handling ( falling edge / level triggered ) .
*/
if ( spi - > mode & SPI_READY )
ctrl | = MX51_ECSPI_CTRL_DRCTL ( spi_imx - > spi_drctl ) ;
/* set clock speed */
ctrl | = mx51_ecspi_clkdiv ( spi_imx , config - > speed_hz , & clk ) ;
spi_imx - > spi_bus_clk = clk ;
@ -1173,7 +1181,7 @@ static int spi_imx_probe(struct platform_device *pdev)
struct spi_master * master ;
struct spi_imx_data * spi_imx ;
struct resource * res ;
int i , ret , irq ;
int i , ret , irq , spi_drctl ;
if ( ! np & & ! mxc_platform_info ) {
dev_err ( & pdev - > dev , " can't get the platform data \n " ) ;
@ -1181,6 +1189,12 @@ static int spi_imx_probe(struct platform_device *pdev)
}
master = spi_alloc_master ( & pdev - > dev , sizeof ( struct spi_imx_data ) ) ;
ret = of_property_read_u32 ( np , " fsl,spi-rdy-drctl " , & spi_drctl ) ;
if ( ( ret < 0 ) | | ( spi_drctl > = 0x3 ) ) {
/* '11' is reserved */
spi_drctl = 0 ;
}
if ( ! master )
return - ENOMEM ;
@ -1216,7 +1230,9 @@ static int spi_imx_probe(struct platform_device *pdev)
spi_imx - > bitbang . master - > unprepare_message = spi_imx_unprepare_message ;
spi_imx - > bitbang . master - > mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH ;
if ( is_imx35_cspi ( spi_imx ) | | is_imx51_ecspi ( spi_imx ) )
spi_imx - > bitbang . master - > mode_bits | = SPI_LOOP ;
spi_imx - > bitbang . master - > mode_bits | = SPI_LOOP | SPI_READY ;
spi_imx - > spi_drctl = spi_drctl ;
init_completion ( & spi_imx - > xfer_done ) ;