Applied. Thanks, --Scott
Thomas Chou wrote: > This patch adds the driver of altera spi controller, which is also > used as epcs/spi flash controller. > > With the spi_flash driver, they can replace the epcs driver at > cpu/nios2/epcs.c. > > Signed-off-by: Thomas Chou <tho...@wytron.com.tw> > --- > drivers/spi/Makefile | 1 + > drivers/spi/altera_spi.c | 81 > ++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 82 insertions(+), 0 deletions(-) > create mode 100644 drivers/spi/altera_spi.c > > diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile > index f112ed0..dfcbb8b 100644 > --- a/drivers/spi/Makefile > +++ b/drivers/spi/Makefile > @@ -25,6 +25,7 @@ include $(TOPDIR)/config.mk > > LIB := $(obj)libspi.a > > +COBJS-$(CONFIG_ALTERA_SPI) += altera_spi.o > COBJS-$(CONFIG_ATMEL_DATAFLASH_SPI) += atmel_dataflash_spi.o > COBJS-$(CONFIG_ATMEL_SPI) += atmel_spi.o > COBJS-$(CONFIG_BFIN_SPI) += bfin_spi.o > diff --git a/drivers/spi/altera_spi.c b/drivers/spi/altera_spi.c > new file mode 100644 > index 0000000..7a021d0 > --- /dev/null > +++ b/drivers/spi/altera_spi.c > @@ -0,0 +1,81 @@ > +/* > + * Altera SPI driver > + * > + * Copyright (C) 2010 Thomas Chou <tho...@wytron.com.tw> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > +#include <common.h> > +#include <malloc.h> > +#include <spi.h> > +#include <asm/io.h> > +#include <nios2-io.h> > + > +static nios_spi_t *nios_spi = (nios_spi_t *)CONFIG_SYS_SPI_BASE; > + > +void spi_init (void) > +{ > + /* empty read buffer */ > + if (readl (&nios_spi->status) & NIOS_SPI_RRDY) > + readl (&nios_spi->rxdata); > + return; > +} > + > +struct spi_slave *spi_setup_slave (unsigned int bus, unsigned int cs, > + unsigned int max_hz, unsigned int mode) > +{ > + struct spi_slave *slave; > + > + slave = malloc (sizeof(struct spi_slave)); > + if (!slave) > + return NULL; > + > + slave->bus = bus; > + slave->cs = cs; > + > + return slave; > +} > + > +void spi_free_slave (struct spi_slave *slave) > +{ > + free (slave); > +} > + > +int spi_claim_bus (struct spi_slave *slave) > +{ > + return 0; > +} > + > +void spi_release_bus (struct spi_slave *slave) > +{ > + return; > +} > + > +int spi_xfer (struct spi_slave *slave, unsigned int bitlen, const void *dout, > + void *din, unsigned long flags) > +{ > + int i, iter = bitlen >> 3; > + const uchar *txp = dout; > + uchar *rxp = din; > + uchar d; > + > + if (flags & SPI_XFER_BEGIN) { > + writel (1 << slave->cs, &nios_spi->slaveselect); > + writel (NIOS_SPI_SSO, &nios_spi->control); > + } > + > + for (i = 0; i < iter; i++) { > + writel (txp ? txp[i] : 0, &nios_spi->txdata); > + while (!(readl (&nios_spi->status) & NIOS_SPI_RRDY)) > + ; > + d = readl (&nios_spi->rxdata); > + if (rxp) > + rxp[i] = d; > + } > + if (flags & SPI_XFER_END) > + writel (0, &nios_spi->control); > + > + return 0; > +} _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot