diff options
Diffstat (limited to 'drivers/spi/spi-bfin-sport.c')
| -rw-r--r-- | drivers/spi/spi-bfin-sport.c | 21 | 
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/spi/spi-bfin-sport.c b/drivers/spi/spi-bfin-sport.c index 248a2cc671a..1fe51198a62 100644 --- a/drivers/spi/spi-bfin-sport.c +++ b/drivers/spi/spi-bfin-sport.c @@ -252,19 +252,15 @@ static void  bfin_sport_spi_restore_state(struct bfin_sport_spi_master_data *drv_data)  {  	struct bfin_sport_spi_slave_data *chip = drv_data->cur_chip; -	unsigned int bits = (drv_data->ops == &bfin_sport_transfer_ops_u8 ? 7 : 15);  	bfin_sport_spi_disable(drv_data);  	dev_dbg(drv_data->dev, "restoring spi ctl state\n");  	bfin_write(&drv_data->regs->tcr1, chip->ctl_reg); -	bfin_write(&drv_data->regs->tcr2, bits);  	bfin_write(&drv_data->regs->tclkdiv, chip->baud); -	bfin_write(&drv_data->regs->tfsdiv, bits);  	SSYNC();  	bfin_write(&drv_data->regs->rcr1, chip->ctl_reg & ~(ITCLK | ITFS)); -	bfin_write(&drv_data->regs->rcr2, bits);  	SSYNC();  	bfin_sport_spi_cs_active(chip); @@ -420,11 +416,15 @@ bfin_sport_spi_pump_transfers(unsigned long data)  	drv_data->cs_change = transfer->cs_change;  	/* Bits per word setup */ -	bits_per_word = transfer->bits_per_word ? : message->spi->bits_per_word; -	if (bits_per_word == 8) -		drv_data->ops = &bfin_sport_transfer_ops_u8; -	else +	bits_per_word = transfer->bits_per_word ? : +		message->spi->bits_per_word ? : 8; +	if (bits_per_word % 16 == 0)  		drv_data->ops = &bfin_sport_transfer_ops_u16; +	else +		drv_data->ops = &bfin_sport_transfer_ops_u8; +	bfin_write(&drv_data->regs->tcr2, bits_per_word - 1); +	bfin_write(&drv_data->regs->tfsdiv, bits_per_word - 1); +	bfin_write(&drv_data->regs->rcr2, bits_per_word - 1);  	drv_data->state = RUNNING_STATE; @@ -598,11 +598,12 @@ bfin_sport_spi_setup(struct spi_device *spi)  			}  			chip->cs_chg_udelay = chip_info->cs_chg_udelay;  			chip->idle_tx_val = chip_info->idle_tx_val; -			spi->bits_per_word = chip_info->bits_per_word;  		}  	} -	if (spi->bits_per_word != 8 && spi->bits_per_word != 16) { +	if (spi->bits_per_word % 8) { +		dev_err(&spi->dev, "%d bits_per_word is not supported\n", +				spi->bits_per_word);  		ret = -EINVAL;  		goto error;  	}  |