mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
spi: stm32: disable device mode with st,stm32f4-spi compatible
STM32 SPI driver is not capable to handle device mode with stm32f4 soc. Stop probing if this case happens. Signed-off-by: Valentin Caron <valentin.caron@foss.st.com> Link: https://lore.kernel.org/r/20230706081342.468090-1-valentin.caron@foss.st.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
06c2afb862
commit
fee681646f
1 changed files with 10 additions and 3 deletions
|
@ -238,6 +238,7 @@ struct stm32_spi;
|
||||||
* @baud_rate_div_min: minimum baud rate divisor
|
* @baud_rate_div_min: minimum baud rate divisor
|
||||||
* @baud_rate_div_max: maximum baud rate divisor
|
* @baud_rate_div_max: maximum baud rate divisor
|
||||||
* @has_fifo: boolean to know if fifo is used for driver
|
* @has_fifo: boolean to know if fifo is used for driver
|
||||||
|
* @has_device_mode: is this compatible capable to switch on device mode
|
||||||
* @flags: compatible specific SPI controller flags used at registration time
|
* @flags: compatible specific SPI controller flags used at registration time
|
||||||
*/
|
*/
|
||||||
struct stm32_spi_cfg {
|
struct stm32_spi_cfg {
|
||||||
|
@ -259,6 +260,7 @@ struct stm32_spi_cfg {
|
||||||
unsigned int baud_rate_div_min;
|
unsigned int baud_rate_div_min;
|
||||||
unsigned int baud_rate_div_max;
|
unsigned int baud_rate_div_max;
|
||||||
bool has_fifo;
|
bool has_fifo;
|
||||||
|
bool has_device_mode;
|
||||||
u16 flags;
|
u16 flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1750,6 +1752,7 @@ static const struct stm32_spi_cfg stm32f4_spi_cfg = {
|
||||||
.baud_rate_div_min = STM32F4_SPI_BR_DIV_MIN,
|
.baud_rate_div_min = STM32F4_SPI_BR_DIV_MIN,
|
||||||
.baud_rate_div_max = STM32F4_SPI_BR_DIV_MAX,
|
.baud_rate_div_max = STM32F4_SPI_BR_DIV_MAX,
|
||||||
.has_fifo = false,
|
.has_fifo = false,
|
||||||
|
.has_device_mode = false,
|
||||||
.flags = SPI_MASTER_MUST_TX,
|
.flags = SPI_MASTER_MUST_TX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1774,6 +1777,7 @@ static const struct stm32_spi_cfg stm32h7_spi_cfg = {
|
||||||
.baud_rate_div_min = STM32H7_SPI_MBR_DIV_MIN,
|
.baud_rate_div_min = STM32H7_SPI_MBR_DIV_MIN,
|
||||||
.baud_rate_div_max = STM32H7_SPI_MBR_DIV_MAX,
|
.baud_rate_div_max = STM32H7_SPI_MBR_DIV_MAX,
|
||||||
.has_fifo = true,
|
.has_fifo = true,
|
||||||
|
.has_device_mode = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct of_device_id stm32_spi_of_match[] = {
|
static const struct of_device_id stm32_spi_of_match[] = {
|
||||||
|
@ -1798,8 +1802,13 @@ static int stm32_spi_probe(struct platform_device *pdev)
|
||||||
struct device_node *np = pdev->dev.of_node;
|
struct device_node *np = pdev->dev.of_node;
|
||||||
bool device_mode;
|
bool device_mode;
|
||||||
int ret;
|
int ret;
|
||||||
|
const struct stm32_spi_cfg *cfg = of_device_get_match_data(&pdev->dev);
|
||||||
|
|
||||||
device_mode = of_property_read_bool(np, "spi-slave");
|
device_mode = of_property_read_bool(np, "spi-slave");
|
||||||
|
if (!cfg->has_device_mode && device_mode) {
|
||||||
|
dev_err(&pdev->dev, "spi-slave not supported\n");
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
|
|
||||||
if (device_mode)
|
if (device_mode)
|
||||||
ctrl = devm_spi_alloc_slave(&pdev->dev, sizeof(struct stm32_spi));
|
ctrl = devm_spi_alloc_slave(&pdev->dev, sizeof(struct stm32_spi));
|
||||||
|
@ -1817,9 +1826,7 @@ static int stm32_spi_probe(struct platform_device *pdev)
|
||||||
spi->device_mode = device_mode;
|
spi->device_mode = device_mode;
|
||||||
spin_lock_init(&spi->lock);
|
spin_lock_init(&spi->lock);
|
||||||
|
|
||||||
spi->cfg = (const struct stm32_spi_cfg *)
|
spi->cfg = cfg;
|
||||||
of_match_device(pdev->dev.driver->of_match_table,
|
|
||||||
&pdev->dev)->data;
|
|
||||||
|
|
||||||
spi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
spi->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
|
||||||
if (IS_ERR(spi->base))
|
if (IS_ERR(spi->base))
|
||||||
|
|
Loading…
Add table
Reference in a new issue