Skip to content

Commit cf2c3ec

Browse files
Patrice Chotardbroonie
authored andcommitted
spi: stm32-ospi: Make usage of reset_control_acquire/release() API
As ospi reset is consumed by both OMM and OSPI drivers, use the reset acquire/release mechanism which ensure exclusive reset usage. This avoid to call reset_control_get/put() in OMM driver each time we need to reset OSPI children and guarantee the reset line stays deasserted. During resume, OMM driver takes temporarily control of reset. Fixes: 79b8a70 ("spi: stm32: Add OSPI driver") Signed-off-by: Patrice Chotard <[email protected]> Reviewed-by: Philipp Zabel <[email protected]> Link: https://patch.msgid.link/20250609-b4-upstream_ospi_reset_update-v6-1-5b602b567e8a@foss.st.com Signed-off-by: Mark Brown <[email protected]>
1 parent e51a086 commit cf2c3ec

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

drivers/spi/spi-stm32-ospi.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,7 @@ static int stm32_ospi_get_resources(struct platform_device *pdev)
804804
return ret;
805805
}
806806

807-
ospi->rstc = devm_reset_control_array_get_exclusive(dev);
807+
ospi->rstc = devm_reset_control_array_get_exclusive_released(dev);
808808
if (IS_ERR(ospi->rstc))
809809
return dev_err_probe(dev, PTR_ERR(ospi->rstc),
810810
"Can't get reset\n");
@@ -936,11 +936,13 @@ static int stm32_ospi_probe(struct platform_device *pdev)
936936
if (ret < 0)
937937
goto err_pm_enable;
938938

939-
if (ospi->rstc) {
940-
reset_control_assert(ospi->rstc);
941-
udelay(2);
942-
reset_control_deassert(ospi->rstc);
943-
}
939+
ret = reset_control_acquire(ospi->rstc);
940+
if (ret)
941+
return dev_err_probe(dev, ret, "Can not acquire reset %d\n", ret);
942+
943+
reset_control_assert(ospi->rstc);
944+
udelay(2);
945+
reset_control_deassert(ospi->rstc);
944946

945947
ret = spi_register_controller(ctrl);
946948
if (ret) {
@@ -987,6 +989,8 @@ static void stm32_ospi_remove(struct platform_device *pdev)
987989
if (ospi->dma_chrx)
988990
dma_release_channel(ospi->dma_chrx);
989991

992+
reset_control_release(ospi->rstc);
993+
990994
pm_runtime_put_sync_suspend(ospi->dev);
991995
pm_runtime_force_suspend(ospi->dev);
992996
}
@@ -997,6 +1001,8 @@ static int __maybe_unused stm32_ospi_suspend(struct device *dev)
9971001

9981002
pinctrl_pm_select_sleep_state(dev);
9991003

1004+
reset_control_release(ospi->rstc);
1005+
10001006
return pm_runtime_force_suspend(ospi->dev);
10011007
}
10021008

@@ -1016,6 +1022,12 @@ static int __maybe_unused stm32_ospi_resume(struct device *dev)
10161022
if (ret < 0)
10171023
return ret;
10181024

1025+
ret = reset_control_acquire(ospi->rstc);
1026+
if (ret) {
1027+
dev_err(dev, "Can not acquire reset\n");
1028+
return ret;
1029+
}
1030+
10191031
writel_relaxed(ospi->cr_reg, regs_base + OSPI_CR);
10201032
writel_relaxed(ospi->dcr_reg, regs_base + OSPI_DCR1);
10211033
pm_runtime_mark_last_busy(ospi->dev);

0 commit comments

Comments
 (0)