[qspi]修复qspi配置未生效问题
This commit is contained in:
parent
0c000b403f
commit
02eaf76d7b
|
@ -184,6 +184,9 @@ rt_err_t rt_spi_bus_attach_device_cspin(struct rt_spi_device *device,
|
||||||
rt_base_t cs_pin,
|
rt_base_t cs_pin,
|
||||||
void *user_data);
|
void *user_data);
|
||||||
|
|
||||||
|
/* re-configure SPI bus */
|
||||||
|
rt_err_t rt_spi_bus_configure(struct rt_spi_device *device);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This function takes SPI bus.
|
* This function takes SPI bus.
|
||||||
*
|
*
|
||||||
|
|
|
@ -15,21 +15,27 @@ rt_err_t rt_qspi_configure(struct rt_qspi_device *device, struct rt_qspi_configu
|
||||||
RT_ASSERT(device != RT_NULL);
|
RT_ASSERT(device != RT_NULL);
|
||||||
RT_ASSERT(cfg != RT_NULL);
|
RT_ASSERT(cfg != RT_NULL);
|
||||||
|
|
||||||
struct rt_qspi_device *qspi_device = (struct rt_qspi_device *)device;
|
/* If the configurations are the same, we don't need to set again. */
|
||||||
rt_err_t result = RT_EOK;
|
if (device->config.medium_size == cfg->medium_size &&
|
||||||
|
device->config.ddr_mode == cfg->ddr_mode &&
|
||||||
|
device->config.qspi_dl_width == cfg->qspi_dl_width &&
|
||||||
|
device->config.parent.data_width == cfg->parent.data_width &&
|
||||||
|
device->config.parent.mode == (cfg->parent.mode & RT_SPI_MODE_MASK) &&
|
||||||
|
device->config.parent.max_hz == cfg->parent.max_hz)
|
||||||
|
{
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
/* copy configuration items */
|
/* copy configuration items */
|
||||||
qspi_device->config.parent.mode = cfg->parent.mode;
|
device->config.parent.mode = cfg->parent.mode;
|
||||||
qspi_device->config.parent.max_hz = cfg->parent.max_hz;
|
device->config.parent.max_hz = cfg->parent.max_hz;
|
||||||
qspi_device->config.parent.data_width = cfg->parent.data_width;
|
device->config.parent.data_width = cfg->parent.data_width;
|
||||||
qspi_device->config.parent.reserved = cfg->parent.reserved;
|
device->config.parent.reserved = cfg->parent.reserved;
|
||||||
qspi_device->config.medium_size = cfg->medium_size;
|
device->config.medium_size = cfg->medium_size;
|
||||||
qspi_device->config.ddr_mode = cfg->ddr_mode;
|
device->config.ddr_mode = cfg->ddr_mode;
|
||||||
qspi_device->config.qspi_dl_width = cfg->qspi_dl_width;
|
device->config.qspi_dl_width = cfg->qspi_dl_width;
|
||||||
|
|
||||||
result = rt_spi_configure(&device->parent, &cfg->parent);
|
return rt_spi_bus_configure(&device->parent);
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_err_t rt_qspi_bus_register(struct rt_spi_bus *bus, const char *name, const struct rt_spi_ops *ops)
|
rt_err_t rt_qspi_bus_register(struct rt_spi_bus *bus, const char *name, const struct rt_spi_ops *ops)
|
||||||
|
|
|
@ -87,26 +87,10 @@ rt_err_t rt_spi_bus_attach_device(struct rt_spi_device *device,
|
||||||
return rt_spi_bus_attach_device_cspin(device, name, bus_name, PIN_NONE, user_data);
|
return rt_spi_bus_attach_device_cspin(device, name, bus_name, PIN_NONE, user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
rt_err_t rt_spi_configure(struct rt_spi_device *device,
|
rt_err_t rt_spi_bus_configure(struct rt_spi_device *device)
|
||||||
struct rt_spi_configuration *cfg)
|
|
||||||
{
|
{
|
||||||
rt_err_t result = -RT_ERROR;
|
rt_err_t result = -RT_ERROR;
|
||||||
|
|
||||||
RT_ASSERT(device != RT_NULL);
|
|
||||||
|
|
||||||
/* If the configurations are the same, we don't need to set again. */
|
|
||||||
if(device->config.data_width == cfg->data_width &&
|
|
||||||
device->config.mode == (cfg->mode & RT_SPI_MODE_MASK) &&
|
|
||||||
device->config.max_hz == cfg->max_hz)
|
|
||||||
{
|
|
||||||
return RT_EOK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set configuration */
|
|
||||||
device->config.data_width = cfg->data_width;
|
|
||||||
device->config.mode = cfg->mode & RT_SPI_MODE_MASK;
|
|
||||||
device->config.max_hz = cfg->max_hz;
|
|
||||||
|
|
||||||
/* reset the CS pin */
|
/* reset the CS pin */
|
||||||
if (device->cs_pin != PIN_NONE)
|
if (device->cs_pin != PIN_NONE)
|
||||||
{
|
{
|
||||||
|
@ -144,6 +128,28 @@ rt_err_t rt_spi_configure(struct rt_spi_device *device,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rt_err_t rt_spi_configure(struct rt_spi_device *device,
|
||||||
|
struct rt_spi_configuration *cfg)
|
||||||
|
{
|
||||||
|
RT_ASSERT(device != RT_NULL);
|
||||||
|
RT_ASSERT(cfg != RT_NULL);
|
||||||
|
|
||||||
|
/* If the configurations are the same, we don't need to set again. */
|
||||||
|
if (device->config.data_width == cfg->data_width &&
|
||||||
|
device->config.mode == (cfg->mode & RT_SPI_MODE_MASK) &&
|
||||||
|
device->config.max_hz == cfg->max_hz)
|
||||||
|
{
|
||||||
|
return RT_EOK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set configuration */
|
||||||
|
device->config.data_width = cfg->data_width;
|
||||||
|
device->config.mode = cfg->mode & RT_SPI_MODE_MASK;
|
||||||
|
device->config.max_hz = cfg->max_hz;
|
||||||
|
|
||||||
|
return rt_spi_bus_configure(device);
|
||||||
|
}
|
||||||
|
|
||||||
rt_err_t rt_spi_send_then_send(struct rt_spi_device *device,
|
rt_err_t rt_spi_send_then_send(struct rt_spi_device *device,
|
||||||
const void *send_buf1,
|
const void *send_buf1,
|
||||||
rt_size_t send_length1,
|
rt_size_t send_length1,
|
||||||
|
|
Loading…
Reference in New Issue