kw_spi: backup and reset the MPP of the chosen CS pin
This was not done before, and in the case of a shared pin (for MPP0 between NF_IO[2] and CSn) this could lead to problems. Signed-off-by: Valentin Longchamp <valentin.longchamp@keymile.com> cc: Holger Brunck <holger.brunck@keymile.com> cc: Prafulla Wadaskar <prafulla@marvell.com>
This commit is contained in:
parent
846836386f
commit
ca880679dd
|
|
@ -34,16 +34,14 @@
|
||||||
|
|
||||||
static struct kwspi_registers *spireg = (struct kwspi_registers *)KW_SPI_BASE;
|
static struct kwspi_registers *spireg = (struct kwspi_registers *)KW_SPI_BASE;
|
||||||
|
|
||||||
|
u32 cs_spi_mpp_back[2];
|
||||||
|
|
||||||
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)
|
||||||
{
|
{
|
||||||
struct spi_slave *slave;
|
struct spi_slave *slave;
|
||||||
u32 data;
|
u32 data;
|
||||||
u32 kwspi_mpp_config[] = {
|
u32 kwspi_mpp_config[] = { 0, 0 };
|
||||||
MPP0_GPIO,
|
|
||||||
MPP7_SPI_SCn,
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!spi_cs_is_valid(bus, cs))
|
if (!spi_cs_is_valid(bus, cs))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
@ -70,19 +68,18 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
|
||||||
|
|
||||||
/* program mpp registers to select SPI_CSn */
|
/* program mpp registers to select SPI_CSn */
|
||||||
if (cs) {
|
if (cs) {
|
||||||
kwspi_mpp_config[0] = MPP0_GPIO;
|
kwspi_mpp_config[0] = MPP7_SPI_SCn;
|
||||||
kwspi_mpp_config[1] = MPP7_SPI_SCn;
|
|
||||||
} else {
|
} else {
|
||||||
kwspi_mpp_config[0] = MPP0_SPI_SCn;
|
kwspi_mpp_config[0] = MPP0_SPI_SCn;
|
||||||
kwspi_mpp_config[1] = MPP7_GPO;
|
|
||||||
}
|
}
|
||||||
kirkwood_mpp_conf(kwspi_mpp_config);
|
kirkwood_mpp_conf(kwspi_mpp_config, cs_spi_mpp_back);
|
||||||
|
|
||||||
return slave;
|
return slave;
|
||||||
}
|
}
|
||||||
|
|
||||||
void spi_free_slave(struct spi_slave *slave)
|
void spi_free_slave(struct spi_slave *slave)
|
||||||
{
|
{
|
||||||
|
kirkwood_mpp_conf(cs_spi_mpp_back, NULL);
|
||||||
free(slave);
|
free(slave);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue