X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=drivers%2Fspi%2Fsh_spi.c;h=744afe3295aebeca01ad9e1921ce387c0c823dbb;hb=571804086fe6c85c302db72b096cd6796a653e49;hp=ba43bec8bf0ff8ecfc75ff406a6eb8f3aaffa644;hpb=fced09ae386d1aa7fcfdf9111c99da4be56e5b43;p=u-boot diff --git a/drivers/spi/sh_spi.c b/drivers/spi/sh_spi.c index ba43bec8bf..744afe3295 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) { @@ -90,12 +103,10 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, if (!spi_cs_is_valid(bus, cs)) return NULL; - ss = malloc(sizeof(struct spi_slave)); + ss = spi_alloc_slave(struct sh_spi, bus, cs); if (!ss) return NULL; - ss->slave.bus = bus; - ss->slave.cs = cs; ss->regs = (struct sh_spi_regs *)CONFIG_SH_SPI_BASE; /* SPI sycle stop */ @@ -104,6 +115,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 +254,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; @@ -258,4 +269,3 @@ void spi_cs_deactivate(struct spi_slave *slave) { } -