From 79f0eb05b1dafe998a908522db58f0c5fc917839 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Fri, 18 Dec 2009 17:43:31 +0000 Subject: [PATCH] --- yaml --- r: 212332 b: refs/heads/master c: 5b47bcd48b3bd53c86040321de0d348aadebed87 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/spi/spi_bfin5xx.c | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 5980981c13fa..f9758ab4d401 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 033f44bd0ebca1809e8274237a64263d909f01a7 +refs/heads/master: 5b47bcd48b3bd53c86040321de0d348aadebed87 diff --git a/trunk/drivers/spi/spi_bfin5xx.c b/trunk/drivers/spi/spi_bfin5xx.c index 830c7055f151..376f2f09e34c 100644 --- a/trunk/drivers/spi/spi_bfin5xx.c +++ b/trunk/drivers/spi/spi_bfin5xx.c @@ -972,6 +972,7 @@ static int bfin_spi_setup(struct spi_device *spi) struct bfin5xx_spi_chip *chip_info; struct slave_data *chip = NULL; struct master_data *drv_data = spi_master_get_devdata(spi->master); + u16 bfin_ctl_reg; int ret = -EINVAL; /* Only alloc (or use chip_info) on first setup */ @@ -989,6 +990,10 @@ static int bfin_spi_setup(struct spi_device *spi) chip_info = spi->controller_data; } + /* Let people set non-standard bits directly */ + bfin_ctl_reg = BIT_CTL_OPENDRAIN | BIT_CTL_EMISO | + BIT_CTL_PSSE | BIT_CTL_GM | BIT_CTL_SZ; + /* chip_info isn't always needed */ if (chip_info) { /* Make sure people stop trying to set fields via ctl_reg @@ -997,13 +1002,11 @@ static int bfin_spi_setup(struct spi_device *spi) * Not sure if a user actually needs/uses any of these, * but let's assume (for now) they do. */ - if (chip_info->ctl_reg & ~(BIT_CTL_OPENDRAIN | BIT_CTL_EMISO | \ - BIT_CTL_PSSE | BIT_CTL_GM | BIT_CTL_SZ)) { + if (chip_info->ctl_reg & ~bfin_ctl_reg) { dev_err(&spi->dev, "do not set bits in ctl_reg " "that the SPI framework manages\n"); goto error; } - chip->enable_dma = chip_info->enable_dma != 0 && drv_data->master_info->enable_dma; chip->ctl_reg = chip_info->ctl_reg; @@ -1011,6 +1014,9 @@ static int bfin_spi_setup(struct spi_device *spi) chip->idle_tx_val = chip_info->idle_tx_val; chip->pio_interrupt = chip_info->pio_interrupt; spi->bits_per_word = chip_info->bits_per_word; + } else { + /* force a default base state */ + chip->ctl_reg &= bfin_ctl_reg; } if (spi->bits_per_word != 8 && spi->bits_per_word != 16) {