diff options
author | Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> | 2012-03-05 19:27:13 +0000 |
---|---|---|
committer | Nobuhiro Iwamatsu <iwamatsu@nigauri.org> | 2012-03-26 10:09:31 +0900 |
commit | c1d4ad94170a488bc2837a8b9abc3976a71b04f4 (patch) | |
tree | 75b76afe81b0a1979e2087740fce0c9ab3fdf9a7 | |
parent | 566f63d5cfdf5e706a5f1304a475d35e71cd6065 (diff) | |
download | u-boot-c1d4ad94170a488bc2837a8b9abc3976a71b04f4.tar.gz u-boot-c1d4ad94170a488bc2837a8b9abc3976a71b04f4.tar.bz2 u-boot-c1d4ad94170a488bc2837a8b9abc3976a71b04f4.zip |
sh_spi: Add 4 chip select signals supporting
The module has 4 chip select signals. This patch supports it.
Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-rw-r--r-- | drivers/spi/sh_spi.c | 19 | ||||
-rw-r--r-- | drivers/spi/sh_spi.h | 4 |
2 files changed, 19 insertions, 4 deletions
diff --git a/drivers/spi/sh_spi.c b/drivers/spi/sh_spi.c index 78c7f1ac81..e944b23c2d 100644 --- a/drivers/spi/sh_spi.c +++ b/drivers/spi/sh_spi.c @@ -1,7 +1,7 @@ /* * SH SPI driver * - * Copyright (C) 2011 Renesas Solutions Corp. + * Copyright (C) 2011-2012 Renesas Solutions Corp. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -82,6 +82,19 @@ void spi_init(void) { } +static void sh_spi_set_cs(struct sh_spi *ss, unsigned int cs) +{ + unsigned long val = 0; + + if (cs & 0x01) + val |= SH_SPI_SSS0; + if (cs & 0x02) + val |= SH_SPI_SSS1; + + sh_spi_clear_bit(SH_SPI_SSS0 | SH_SPI_SSS1, &ss->regs->cr4); + sh_spi_set_bit(val, &ss->regs->cr4); +} + struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, unsigned int max_hz, unsigned int mode) { @@ -104,6 +117,7 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, sh_spi_write(0x00, &ss->regs->cr1); /* CR3 init */ sh_spi_write(0x00, &ss->regs->cr3); + sh_spi_set_cs(ss, cs); clear_fifo(ss); @@ -242,8 +256,7 @@ int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout, int spi_cs_is_valid(unsigned int bus, unsigned int cs) { - /* This driver supports "bus = 0" and "cs = 0" only. */ - if (!bus && !cs) + if (!bus && cs < SH_SPI_NUM_CS) return 1; else return 0; diff --git a/drivers/spi/sh_spi.h b/drivers/spi/sh_spi.h index dd8f937e48..96b4b68501 100644 --- a/drivers/spi/sh_spi.h +++ b/drivers/spi/sh_spi.h @@ -60,10 +60,12 @@ struct sh_spi_regs { #define SH_SPI_TBFI 0x40 #define SH_SPI_RBEI 0x20 #define SH_SPI_RBFI 0x10 +#define SH_SPI_SSS1 0x08 #define SH_SPI_WPABRT 0x04 -#define SH_SPI_SSS 0x01 +#define SH_SPI_SSS0 0x01 #define SH_SPI_FIFO_SIZE 32 +#define SH_SPI_NUM_CS 4 struct sh_spi { struct spi_slave slave; |