]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
sh_spi: Add 4 chip select signals supporting
authorYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Mon, 5 Mar 2012 19:27:13 +0000 (19:27 +0000)
committerNobuhiro Iwamatsu <iwamatsu@nigauri.org>
Mon, 26 Mar 2012 01:09:31 +0000 (10:09 +0900)
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>
drivers/spi/sh_spi.c
drivers/spi/sh_spi.h

index 78c7f1ac816f9cd0cbdb3b9c8f2f3aaa7b65a35d..e944b23c2df355936e724d4013bb217f185ad13a 100644 (file)
@@ -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;
index dd8f937e48950661604caafa56140188cc6b83f7..96b4b6850185a3bb8983d7331919bc4e8a994db7 100644 (file)
@@ -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;