Skip to contentSkip to conversation

sh_spi: Add 4 chip select signals supporting

PATCH New Shimoda 2 participants 2 messages Mar 6, 2012 – Mar 21, 2012 SPI

lore
Share & tools
lore

Shimoda

#0 lore raw

PATCH 1/1 sh_spi: Add 4 chip select signals supporting

The module has 4 chip select signals. This patch supports it.

---
 drivers/spi/sh_spi.c |   19 ++++++++++++++++---
 drivers/spi/sh_spi.h |    4 +++-
 2 files changed, 19 insertions(+), 4 deletions(-)
drivers/spi/sh_spi.c +16 -3
index 78c7f1a..e944b23 100644
@@ -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;
drivers/spi/sh_spi.h +3 -1
index dd8f937..96b4b68 100644
@@ -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;
Signature · 1 line
1.7.1
#1 lore raw

PATCH 1/1 sh_spi: Add 4 chip select signals supporting

Applied. Thanks,

Nobuhiro

2012/3/6 Shimoda, Yoshihiro <[email protected]>:

Quoted 84 lines

The module has 4 chip select signals. This patch supports it.

---
?drivers/spi/sh_spi.c | ? 19 ++++++++++++++++--- ?drivers/spi/sh_spi.h | ? ?4 +++-
?2 files changed, 19 insertions(+), 4 deletions(-)

drivers/spi/sh_spi.c +0 -0
index 78c7f1a..e944b23 100644
@@ -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

drivers/spi/sh_spi.c +13 -0
@@ -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);

drivers/spi/sh_spi.c +1 -2
@@ -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;

drivers/spi/sh_spi.h +0 -0
index dd8f937..96b4b68 100644
@@ -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

drivers/spi/sh_spi.h +1 -1
-#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;
--
1.7.1

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Signature · 3 lines
Nobuhiro Iwamatsu
?? iwamatsu at {nigauri.org / debian.org}
?? GPG ID: 40AD1FA6