mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-15 22:31:47 -04:00
spi: cadence: Probe and unbind fixes
Several fixes from Johan for issues with unbind and error handling in probe.
This commit is contained in:
@@ -741,7 +741,6 @@ static int cdns_spi_probe(struct platform_device *pdev)
|
||||
/* Set to default valid value */
|
||||
ctlr->max_speed_hz = xspi->clk_rate / 4;
|
||||
xspi->speed_hz = ctlr->max_speed_hz;
|
||||
pm_runtime_put_autosuspend(&pdev->dev);
|
||||
} else {
|
||||
ctlr->mode_bits |= SPI_NO_CS;
|
||||
ctlr->target_abort = cdns_target_abort;
|
||||
@@ -752,12 +751,17 @@ static int cdns_spi_probe(struct platform_device *pdev)
|
||||
goto clk_dis_all;
|
||||
}
|
||||
|
||||
if (!spi_controller_is_target(ctlr))
|
||||
pm_runtime_put_autosuspend(&pdev->dev);
|
||||
|
||||
return ret;
|
||||
|
||||
clk_dis_all:
|
||||
if (!spi_controller_is_target(ctlr)) {
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
pm_runtime_set_suspended(&pdev->dev);
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
pm_runtime_dont_use_autosuspend(&pdev->dev);
|
||||
}
|
||||
remove_ctlr:
|
||||
spi_controller_put(ctlr);
|
||||
@@ -776,16 +780,23 @@ static void cdns_spi_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct spi_controller *ctlr = platform_get_drvdata(pdev);
|
||||
struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
|
||||
int ret = 0;
|
||||
|
||||
if (!spi_controller_is_target(ctlr))
|
||||
ret = pm_runtime_get_sync(&pdev->dev);
|
||||
|
||||
spi_controller_get(ctlr);
|
||||
|
||||
spi_unregister_controller(ctlr);
|
||||
|
||||
cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
|
||||
if (ret >= 0)
|
||||
cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
|
||||
|
||||
if (!spi_controller_is_target(ctlr)) {
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
pm_runtime_set_suspended(&pdev->dev);
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
pm_runtime_dont_use_autosuspend(&pdev->dev);
|
||||
}
|
||||
|
||||
spi_controller_put(ctlr);
|
||||
|
||||
Reference in New Issue
Block a user