Skip to content

Commit

Permalink
spi: davinci: enable and power-up SPI only when required
Browse files Browse the repository at this point in the history
Enable SPI only when active transfers are in progress. Keep
it in local low power when not in use.

Signed-off-by: Brian Niebuhr <bniebuhr@efjohnson.com>
Tested-By: Michael Williamson <michael.williamson@criticallink.com>
Signed-off-by: Sekhar Nori <nsekhar@ti.com>
  • Loading branch information
Brian Niebuhr authored and Sekhar Nori committed Nov 18, 2010
1 parent 3409e40 commit 3f27b57
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions drivers/spi/davinci_spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@
#define SPIFMT_WDELAY_SHIFT 24
#define SPIFMT_PRESCALE_SHIFT 8


/* SPIPC0 */
#define SPIPC0_DIFUN_MASK BIT(11) /* MISO */
#define SPIPC0_DOFUN_MASK BIT(10) /* MOSI */
Expand All @@ -67,6 +66,7 @@
/* SPIGCR1 */
#define SPIGCR1_CLKMOD_MASK BIT(1)
#define SPIGCR1_MASTER_MASK BIT(0)
#define SPIGCR1_POWERDOWN_MASK BIT(8)
#define SPIGCR1_LOOPBACK_MASK BIT(16)
#define SPIGCR1_SPIENA_MASK BIT(24)

Expand Down Expand Up @@ -556,7 +556,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)

data1_reg_val = ioread32(davinci_spi->base + SPIDAT1);

/* Enable SPI */
clear_io_bits(davinci_spi->base + SPIGCR1, SPIGCR1_POWERDOWN_MASK);
set_io_bits(davinci_spi->base + SPIGCR1, SPIGCR1_SPIENA_MASK);

INIT_COMPLETION(davinci_spi->done);
Expand Down Expand Up @@ -693,6 +693,9 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
clear_io_bits(davinci_spi->base + SPIINT, SPIINT_DMA_REQ_EN);
}

clear_io_bits(davinci_spi->base + SPIGCR1, SPIGCR1_SPIENA_MASK);
set_io_bits(davinci_spi->base + SPIGCR1, SPIGCR1_POWERDOWN_MASK);

/*
* Check for bit error, desync error,parity error,timeout error and
* receive overflow errors
Expand Down Expand Up @@ -937,6 +940,7 @@ static int davinci_spi_probe(struct platform_device *pdev)
/* master mode default */
set_io_bits(davinci_spi->base + SPIGCR1, SPIGCR1_CLKMOD_MASK);
set_io_bits(davinci_spi->base + SPIGCR1, SPIGCR1_MASTER_MASK);
set_io_bits(davinci_spi->base + SPIGCR1, SPIGCR1_POWERDOWN_MASK);

ret = spi_bitbang_start(&davinci_spi->bitbang);
if (ret)
Expand Down

0 comments on commit 3f27b57

Please sign in to comment.