drivers: spi_dw: initialize all cs gpios during init
In case when we have multiple devices connected to the one SPI interface the initial state of CS gpios after MCU reset is floating and it might be low that prevents us from communicating between particular devices. Fix that by initializing all provided cs gpios and setting them as inactive. Signed-off-by: Bartosz Bilas <bartosz.bilas@hotmail.com>
This commit is contained in:
parent
37925430b1
commit
70a65b229b
1 changed files with 10 additions and 2 deletions
|
@ -258,8 +258,6 @@ static int spi_dw_configure(const struct spi_dw_config *info,
|
||||||
write_ser(1 << config->slave, info->regs);
|
write_ser(1 << config->slave, info->regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
spi_context_cs_configure(&spi->ctx);
|
|
||||||
|
|
||||||
if (spi_dw_is_slave(spi)) {
|
if (spi_dw_is_slave(spi)) {
|
||||||
LOG_DBG("Installed slave config %p:"
|
LOG_DBG("Installed slave config %p:"
|
||||||
" ws/dfs %u/%u, mode %u/%u/%u",
|
" ws/dfs %u/%u, mode %u/%u/%u",
|
||||||
|
@ -517,6 +515,7 @@ static const struct spi_driver_api dw_spi_api = {
|
||||||
|
|
||||||
int spi_dw_init(const struct device *dev)
|
int spi_dw_init(const struct device *dev)
|
||||||
{
|
{
|
||||||
|
int err;
|
||||||
const struct spi_dw_config *info = dev->config;
|
const struct spi_dw_config *info = dev->config;
|
||||||
struct spi_dw_data *spi = dev->data;
|
struct spi_dw_data *spi = dev->data;
|
||||||
|
|
||||||
|
@ -528,6 +527,11 @@ int spi_dw_init(const struct device *dev)
|
||||||
|
|
||||||
LOG_DBG("Designware SPI driver initialized on device: %p", dev);
|
LOG_DBG("Designware SPI driver initialized on device: %p", dev);
|
||||||
|
|
||||||
|
err = spi_context_cs_configure_all(&spi->ctx);
|
||||||
|
if (err < 0) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
spi_context_unlock_unconditionally(&spi->ctx);
|
spi_context_unlock_unconditionally(&spi->ctx);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -540,6 +544,7 @@ void spi_config_0_irq(void);
|
||||||
struct spi_dw_data spi_dw_data_port_0 = {
|
struct spi_dw_data spi_dw_data_port_0 = {
|
||||||
SPI_CONTEXT_INIT_LOCK(spi_dw_data_port_0, ctx),
|
SPI_CONTEXT_INIT_LOCK(spi_dw_data_port_0, ctx),
|
||||||
SPI_CONTEXT_INIT_SYNC(spi_dw_data_port_0, ctx),
|
SPI_CONTEXT_INIT_SYNC(spi_dw_data_port_0, ctx),
|
||||||
|
SPI_CONTEXT_CS_GPIOS_INITIALIZE(DT_DRV_INST(0), ctx)
|
||||||
};
|
};
|
||||||
|
|
||||||
#if DT_NODE_HAS_PROP(DT_INST_PHANDLE(0, clocks), clock_frequency)
|
#if DT_NODE_HAS_PROP(DT_INST_PHANDLE(0, clocks), clock_frequency)
|
||||||
|
@ -603,6 +608,7 @@ void spi_config_1_irq(void);
|
||||||
struct spi_dw_data spi_dw_data_port_1 = {
|
struct spi_dw_data spi_dw_data_port_1 = {
|
||||||
SPI_CONTEXT_INIT_LOCK(spi_dw_data_port_1, ctx),
|
SPI_CONTEXT_INIT_LOCK(spi_dw_data_port_1, ctx),
|
||||||
SPI_CONTEXT_INIT_SYNC(spi_dw_data_port_1, ctx),
|
SPI_CONTEXT_INIT_SYNC(spi_dw_data_port_1, ctx),
|
||||||
|
SPI_CONTEXT_CS_GPIOS_INITIALIZE(DT_DRV_INST(1), ctx)
|
||||||
};
|
};
|
||||||
|
|
||||||
#if DT_NODE_HAS_PROP(DT_INST_PHANDLE(1, clocks), clock_frequency)
|
#if DT_NODE_HAS_PROP(DT_INST_PHANDLE(1, clocks), clock_frequency)
|
||||||
|
@ -666,6 +672,7 @@ void spi_config_2_irq(void);
|
||||||
struct spi_dw_data spi_dw_data_port_2 = {
|
struct spi_dw_data spi_dw_data_port_2 = {
|
||||||
SPI_CONTEXT_INIT_LOCK(spi_dw_data_port_2, ctx),
|
SPI_CONTEXT_INIT_LOCK(spi_dw_data_port_2, ctx),
|
||||||
SPI_CONTEXT_INIT_SYNC(spi_dw_data_port_2, ctx),
|
SPI_CONTEXT_INIT_SYNC(spi_dw_data_port_2, ctx),
|
||||||
|
SPI_CONTEXT_CS_GPIOS_INITIALIZE(DT_DRV_INST(2), ctx)
|
||||||
};
|
};
|
||||||
|
|
||||||
#if DT_NODE_HAS_PROP(DT_INST_PHANDLE(2, clocks), clock_frequency)
|
#if DT_NODE_HAS_PROP(DT_INST_PHANDLE(2, clocks), clock_frequency)
|
||||||
|
@ -729,6 +736,7 @@ void spi_config_3_irq(void);
|
||||||
struct spi_dw_data spi_dw_data_port_3 = {
|
struct spi_dw_data spi_dw_data_port_3 = {
|
||||||
SPI_CONTEXT_INIT_LOCK(spi_dw_data_port_3, ctx),
|
SPI_CONTEXT_INIT_LOCK(spi_dw_data_port_3, ctx),
|
||||||
SPI_CONTEXT_INIT_SYNC(spi_dw_data_port_3, ctx),
|
SPI_CONTEXT_INIT_SYNC(spi_dw_data_port_3, ctx),
|
||||||
|
SPI_CONTEXT_CS_GPIOS_INITIALIZE(DT_DRV_INST(3), ctx)
|
||||||
};
|
};
|
||||||
|
|
||||||
#if DT_NODE_HAS_PROP(DT_INST_PHANDLE(3, clocks), clock_frequency)
|
#if DT_NODE_HAS_PROP(DT_INST_PHANDLE(3, clocks), clock_frequency)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue