Re: [U-Boot] [PATCH] spi: kirkwood_spi: implement mvebu_spi_set_mode()
On Fri, Oct 14, 2016 at 8:49 AM, Chris Packham wrote: > Set the appropriate bits in the interface config register based > on the SPI_ mode flags. > > Signed-off-by: Chris Packham > --- > > arch/arm/include/asm/arch-mvebu/spi.h | 4 > drivers/spi/kirkwood_spi.c| 13 + > 2 files changed, 17 insertions(+) > > diff --git a/arch/arm/include/asm/arch-mvebu/spi.h > b/arch/arm/include/asm/arch-mvebu/spi.h > index 78869a253d1f..3545aed17347 100644 > --- a/arch/arm/include/asm/arch-mvebu/spi.h > +++ b/arch/arm/include/asm/arch-mvebu/spi.h > @@ -52,6 +52,10 @@ struct kwspi_registers { > #define KWSPI_ADRLEN_3BYTE (2 << 8) > #define KWSPI_ADRLEN_4BYTE (3 << 8) > #define KWSPI_ADRLEN_MASK (3 << 8) > +#define KWSPI_CPOL (1 << 11) > +#define KWSPI_CPHA (1 << 12) > +#define KWSPI_TXLSBF (1 << 13) > +#define KWSPI_RXLSBF (1 << 14) > > #define KWSPI_IRQUNMASK1 /* unmask SPI interrupt */ > #define KWSPI_IRQMASK 0 /* mask SPI interrupt */ > diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c > index 6851ba942f51..69a0be9ea5b2 100644 > --- a/drivers/spi/kirkwood_spi.c > +++ b/drivers/spi/kirkwood_spi.c > @@ -271,6 +271,19 @@ static int mvebu_spi_set_speed(struct udevice *bus, uint > hz) > > static int mvebu_spi_set_mode(struct udevice *bus, uint mode) > { > + struct mvebu_spi_platdata *plat = dev_get_platdata(bus); > + struct kwspi_registers *reg = plat->spireg; > + u32 data = readl(®->cfg); Better to clear the bits(mask) on data before updating, thanks! -- Jagan Teki Free Software Engineer | www.openedev.com U-Boot, Linux | Upstream Maintainer Hyderabad, India. ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH] spi: kirkwood_spi: implement mvebu_spi_set_mode()
On 14.10.2016 05:19, Chris Packham wrote: Set the appropriate bits in the interface config register based on the SPI_ mode flags. Signed-off-by: Chris Packham Reviewed-by: Stefan Roese Thanks, Stefan ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
[U-Boot] [PATCH] spi: kirkwood_spi: implement mvebu_spi_set_mode()
Set the appropriate bits in the interface config register based on the SPI_ mode flags. Signed-off-by: Chris Packham --- arch/arm/include/asm/arch-mvebu/spi.h | 4 drivers/spi/kirkwood_spi.c| 13 + 2 files changed, 17 insertions(+) diff --git a/arch/arm/include/asm/arch-mvebu/spi.h b/arch/arm/include/asm/arch-mvebu/spi.h index 78869a253d1f..3545aed17347 100644 --- a/arch/arm/include/asm/arch-mvebu/spi.h +++ b/arch/arm/include/asm/arch-mvebu/spi.h @@ -52,6 +52,10 @@ struct kwspi_registers { #define KWSPI_ADRLEN_3BYTE (2 << 8) #define KWSPI_ADRLEN_4BYTE (3 << 8) #define KWSPI_ADRLEN_MASK (3 << 8) +#define KWSPI_CPOL (1 << 11) +#define KWSPI_CPHA (1 << 12) +#define KWSPI_TXLSBF (1 << 13) +#define KWSPI_RXLSBF (1 << 14) #define KWSPI_IRQUNMASK1 /* unmask SPI interrupt */ #define KWSPI_IRQMASK 0 /* mask SPI interrupt */ diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c index 6851ba942f51..69a0be9ea5b2 100644 --- a/drivers/spi/kirkwood_spi.c +++ b/drivers/spi/kirkwood_spi.c @@ -271,6 +271,19 @@ static int mvebu_spi_set_speed(struct udevice *bus, uint hz) static int mvebu_spi_set_mode(struct udevice *bus, uint mode) { + struct mvebu_spi_platdata *plat = dev_get_platdata(bus); + struct kwspi_registers *reg = plat->spireg; + u32 data = readl(®->cfg); + + if (mode & SPI_CPHA) + data |= KWSPI_CPHA; + if (mode & SPI_CPOL) + data |= KWSPI_CPOL; + if (mode & SPI_LSB_FIRST) + data |= (KWSPI_RXLSBF | KWSPI_TXLSBF); + + writel(data, ®->cfg); + return 0; } -- 2.10.0.479.g7c56b16 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot