@ -103,6 +103,9 @@ struct mcspi {
} ;
struct omap3_spi_priv {
# ifndef CONFIG_DM_SPI
struct spi_slave slave ;
# endif
struct mcspi * regs ;
unsigned int cs ;
unsigned int freq ;
@ -454,16 +457,9 @@ static void _omap3_spi_claim_bus(struct omap3_spi_priv *priv)
# ifndef CONFIG_DM_SPI
struct omap3_spi_slave {
struct spi_slave slave ;
struct omap3_spi_priv spi_priv ;
} ;
struct omap3_spi_priv * priv ;
static inline struct omap3_spi_slave * to_omap3_spi ( struct spi_slave * slave )
static inline struct omap3_spi_priv * to_omap3_spi ( struct spi_slave * slave )
{
return container_of ( slave , struct omap3_spi_slave , slave ) ;
return container_of ( slave , struct omap3_spi_priv , slave ) ;
}
void spi_init ( void )
@ -473,13 +469,15 @@ void spi_init(void)
void spi_free_slave ( struct spi_slave * slave )
{
struct omap3_spi_slave * ds = to_omap3_spi ( slave ) ;
struct omap3_spi_priv * priv = to_omap3_spi ( slave ) ;
free ( ds ) ;
free ( priv ) ;
}
int spi_claim_bus ( struct spi_slave * slave )
{
struct omap3_spi_priv * priv = to_omap3_spi ( slave ) ;
_omap3_spi_claim_bus ( priv ) ;
_omap3_spi_set_wordlen ( priv ) ;
_omap3_spi_set_mode ( priv ) ;
@ -490,6 +488,8 @@ int spi_claim_bus(struct spi_slave *slave)
void spi_release_bus ( struct spi_slave * slave )
{
struct omap3_spi_priv * priv = to_omap3_spi ( slave ) ;
/* Reset the SPI hardware */
spi_reset ( priv - > regs ) ;
}
@ -497,7 +497,7 @@ void spi_release_bus(struct spi_slave *slave)
struct spi_slave * spi_setup_slave ( unsigned int bus , unsigned int cs ,
unsigned int max_hz , unsigned int mode )
{
struct omap3_spi_slave * ds ;
struct omap3_spi_priv * priv ;
struct mcspi * regs ;
/*
@ -551,29 +551,31 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
return NULL ;
}
ds = spi_alloc_slave ( struct omap3_spi_slave , bus , cs ) ;
if ( ! ds ) {
priv = spi_alloc_slave ( struct omap3_spi_priv , bus , cs ) ;
if ( ! priv ) {
printf ( " SPI error: malloc of SPI structure failed \n " ) ;
return NULL ;
}
priv = & ds - > spi_priv ;
priv - > regs = regs ;
priv - > cs = cs ;
priv - > freq = max_hz ;
priv - > mode = mode ;
priv - > wordlen = ds - > slave . wordlen ;
priv - > wordlen = priv - > slave . wordlen ;
# ifdef CONFIG_OMAP3_SPI_D0_D1_SWAPPED
priv - > pin_dir = MCSPI_PINDIR_D0_OUT_D1_IN ;
# endif
return & ds - > slave ;
return & priv - > slave ;
}
int spi_xfer ( struct spi_slave * slave , unsigned int bitlen ,
const void * dout , void * din , unsigned long flags )
{ return _spi_xfer ( priv , bitlen , dout , din , flags ) ; }
{
struct omap3_spi_priv * priv = to_omap3_spi ( slave ) ;
return _spi_xfer ( priv , bitlen , dout , din , flags ) ;
}
# else