@ -1,7 +1,7 @@
/*
* SH SPI driver
*
* Copyright ( C ) 2011 Renesas Solutions Corp .
* Copyright ( C ) 2011 - 2012 Renesas Solutions Corp .
*
* 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
@ -82,6 +82,19 @@ void spi_init(void)
{
}
static void sh_spi_set_cs ( struct sh_spi * ss , unsigned int cs )
{
unsigned long val = 0 ;
if ( cs & 0x01 )
val | = SH_SPI_SSS0 ;
if ( cs & 0x02 )
val | = SH_SPI_SSS1 ;
sh_spi_clear_bit ( SH_SPI_SSS0 | SH_SPI_SSS1 , & ss - > regs - > cr4 ) ;
sh_spi_set_bit ( val , & ss - > regs - > cr4 ) ;
}
struct spi_slave * spi_setup_slave ( unsigned int bus , unsigned int cs ,
unsigned int max_hz , unsigned int mode )
{
@ -104,6 +117,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
sh_spi_write ( 0x00 , & ss - > regs - > cr1 ) ;
/* CR3 init */
sh_spi_write ( 0x00 , & ss - > regs - > cr3 ) ;
sh_spi_set_cs ( ss , cs ) ;
clear_fifo ( ss ) ;
@ -242,8 +256,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
int spi_cs_is_valid ( unsigned int bus , unsigned int cs )
{
/* This driver supports "bus = 0" and "cs = 0" only. */
if ( ! bus & & ! cs )
if ( ! bus & & cs < SH_SPI_NUM_CS )
return 1 ;
else
return 0 ;