diff options
Diffstat (limited to 'drivers/spi/spi-fsl-espi.c')
| -rw-r--r-- | drivers/spi/spi-fsl-espi.c | 11 | 
1 files changed, 8 insertions, 3 deletions
| diff --git a/drivers/spi/spi-fsl-espi.c b/drivers/spi/spi-fsl-espi.c index a9593f9691ec..239f0362df61 100644 --- a/drivers/spi/spi-fsl-espi.c +++ b/drivers/spi/spi-fsl-espi.c @@ -55,9 +55,10 @@  #define CSMODE_CG(x)		((x) << 3)  #define FSL_ESPI_FIFO_SIZE	32 +#define FSL_ESPI_RXTHR		15  /* Default mode/csmode for eSPI controller */ -#define SPMODE_INIT_VAL (SPMODE_TXTHR(4) | SPMODE_RXTHR(3)) +#define SPMODE_INIT_VAL (SPMODE_TXTHR(4) | SPMODE_RXTHR(FSL_ESPI_RXTHR))  #define CSMODE_INIT_VAL (CSMODE_POL_1 | CSMODE_BEF(0) \  		| CSMODE_AFT(0) | CSMODE_CG(1)) @@ -263,6 +264,7 @@ static void fsl_espi_setup_transfer(struct spi_device *spi,  static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t)  {  	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); +	u32 mask;  	int ret;  	mpc8xxx_spi->rx_len = t->len; @@ -277,8 +279,11 @@ static int fsl_espi_bufs(struct spi_device *spi, struct spi_transfer *t)  	fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPCOM,  		(SPCOM_CS(spi->chip_select) | SPCOM_TRANLEN(t->len - 1))); -	/* enable rx ints */ -	fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, SPIM_RNE); +	/* enable interrupts */ +	mask = SPIM_DON; +	if (mpc8xxx_spi->rx_len > FSL_ESPI_FIFO_SIZE) +		mask |= SPIM_RXT; +	fsl_espi_write_reg(mpc8xxx_spi, ESPI_SPIM, mask);  	/* Prevent filling the fifo from getting interrupted */  	spin_lock_irq(&mpc8xxx_spi->lock); | 
