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>
This commit is contained in:
Yoshihiro Shimoda 2012-03-05 19:27:13 +00:00 committed by Nobuhiro Iwamatsu
parent 566f63d5cf
commit c1d4ad9417
2 changed files with 19 additions and 4 deletions

View File

@ -1,7 +1,7 @@
/* /*
* SH SPI driver * 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 * 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 * 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, struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
unsigned int max_hz, unsigned int mode) 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); sh_spi_write(0x00, &ss->regs->cr1);
/* CR3 init */ /* CR3 init */
sh_spi_write(0x00, &ss->regs->cr3); sh_spi_write(0x00, &ss->regs->cr3);
sh_spi_set_cs(ss, cs);
clear_fifo(ss); 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) int spi_cs_is_valid(unsigned int bus, unsigned int cs)
{ {
/* This driver supports "bus = 0" and "cs = 0" only. */ if (!bus && cs < SH_SPI_NUM_CS)
if (!bus && !cs)
return 1; return 1;
else else
return 0; return 0;

View File

@ -60,10 +60,12 @@ struct sh_spi_regs {
#define SH_SPI_TBFI 0x40 #define SH_SPI_TBFI 0x40
#define SH_SPI_RBEI 0x20 #define SH_SPI_RBEI 0x20
#define SH_SPI_RBFI 0x10 #define SH_SPI_RBFI 0x10
#define SH_SPI_SSS1 0x08
#define SH_SPI_WPABRT 0x04 #define SH_SPI_WPABRT 0x04
#define SH_SPI_SSS 0x01 #define SH_SPI_SSS0 0x01
#define SH_SPI_FIFO_SIZE 32 #define SH_SPI_FIFO_SIZE 32
#define SH_SPI_NUM_CS 4
struct sh_spi { struct sh_spi {
struct spi_slave slave; struct spi_slave slave;