aboutsummaryrefslogtreecommitdiff
path: root/drivers/spi/sh_spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/spi/sh_spi.c')
-rw-r--r--drivers/spi/sh_spi.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/spi/sh_spi.c b/drivers/spi/sh_spi.c
index 78c7f1ac816..e944b23c2df 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;