> -----Original Message----- > From: Valentin Longchamp [mailto:valentin.longch...@keymile.com] > Sent: 30 May 2012 21:12 > To: Prafulla Wadaskar > Cc: Valentin Longchamp; holger.bru...@keymile.com; u- > b...@lists.denx.de; Prafulla Wadaskar > Subject: [PATCH v2 3/4] kw_spi: support spi_claim/release_bus > functions > > These two function nows ensure that the MPP is configured correctly > for > the SPI controller before any SPI access, and restore the initial > configuration when the access is over. > > Since the used pins for the SPI controller can differ (2 possibilities > for each signal), the used pins are configured with > CONFIG_SYS_KW_SPI_MPP. > > Signed-off-by: Valentin Longchamp <valentin.longch...@keymile.com> > cc: Holger Brunck <holger.bru...@keymile.com> > cc: Prafulla Wadaskar <prafu...@marvell.com> > --- > arch/arm/include/asm/arch-kirkwood/spi.h | 11 ++++++++ > drivers/spi/kirkwood_spi.c | 38 > ++++++++++++++++++++++++++++++ > 2 files changed, 49 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/include/asm/arch-kirkwood/spi.h > b/arch/arm/include/asm/arch-kirkwood/spi.h > index 1d5043f..c79bed7 100644 > --- a/arch/arm/include/asm/arch-kirkwood/spi.h > +++ b/arch/arm/include/asm/arch-kirkwood/spi.h > @@ -37,6 +37,17 @@ struct kwspi_registers { > u32 irq_mask; /* 0x10614 */ > }; > > +/* They are used to define CONFIG_SYS_KW_SPI_MPP > + * each of the below #defines selects which mpp is > + * configured for each SPI signal in spi_claim_bus > + * bit 0: selects pin for MOSI (MPP1 if 0, MPP6 if 1) > + * bit 1: selects pin for SCK (MPP2 if 0, MPP10 if 1) > + * bit 2: selects pin for MISO (MPP3 if 0, MPP11 if 1) > + */ > +#define MOSI_MPP6 (1 << 0) > +#define SCK_MPP10 (1 << 1) > +#define MISO_MPP11 (1 << 2) > + > #define KWSPI_CLKPRESCL_MASK 0x1f > #define KWSPI_CSN_ACT 1 /* Activates serial memory interface > */ > #define KWSPI_SMEMRDY (1 << 1) /* SerMem Data xfer ready */ > diff --git a/drivers/spi/kirkwood_spi.c b/drivers/spi/kirkwood_spi.c > index 2fd89d2..a3e6b6e 100644 > --- a/drivers/spi/kirkwood_spi.c > +++ b/drivers/spi/kirkwood_spi.c > @@ -84,13 +84,51 @@ void spi_free_slave(struct spi_slave *slave) > free(slave); > } > > +#if defined(CONFIG_SYS_KW_SPI_MPP) > +u32 spi_mpp_backup[4]; > +#endif > + > int spi_claim_bus(struct spi_slave *slave) > { > +#if defined(CONFIG_SYS_KW_SPI_MPP) > + u32 config; > + u32 spi_mpp_config[4]; > + > + config = CONFIG_SYS_KW_SPI_MPP; > + > + if (config & MOSI_MPP6) > + spi_mpp_config[0] = MPP6_SPI_MOSI; > + else > + spi_mpp_config[0] = MPP1_SPI_MOSI; > + > + if (config & SCK_MPP10) > + spi_mpp_config[1] = MPP10_SPI_SCK; > + else > + spi_mpp_config[1] = MPP2_SPI_SCK; > + > + if (config & MISO_MPP11) > + spi_mpp_config[2] = MPP11_SPI_MISO; > + else > + spi_mpp_config[2] = MPP3_SPI_MISO; > + > + spi_mpp_config[3] = 0; > + spi_mpp_backup[3] = 0; > + > + /* save current mpp configuration */ > + kirkwood_mpp_read(spi_mpp_config, spi_mpp_backup); > + > + /* finally set chosen mpp spi configuration */ > + kirkwood_mpp_conf(spi_mpp_config); > +#endif > + > return 0; > } > > void spi_release_bus(struct spi_slave *slave) > { > +#if defined(CONFIG_SYS_KW_SPI_MPP) > + kirkwood_mpp_conf(spi_mpp_backup); > +#endif > } >
Acked-By: Prafulla Wadaskar <prafu...@marvell.com> One more comment: do you think we should safeguard spi_claim_bus for repeatative calls, for ex. once bus is claimed, it should be reclaimed until we release it? Regards... Prafulla . . . > #ifndef CONFIG_SPI_CS_IS_VALID > -- > 1.7.1 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot