Skip to content

Commit 2087e85

Browse files
DhruvaG2000broonie
authored andcommitted
spi: cadence-quadspi: fix suspend-resume implementations
The cadence QSPI driver misbehaves after performing a full system suspend resume: ... spi-nor spi0.0: resume() failed ... This results in a flash connected via OSPI interface after system suspend- resume to be unusable. fix these suspend and resume functions. Fixes: 1406234 ("mtd: spi-nor: Add driver for Cadence Quad SPI Flash Controller") Signed-off-by: Dhruva Gole <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent ed5a25a commit 2087e85

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

drivers/spi/spi-cadence-quadspi.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1824,17 +1824,30 @@ static void cqspi_remove(struct platform_device *pdev)
18241824
static int cqspi_suspend(struct device *dev)
18251825
{
18261826
struct cqspi_st *cqspi = dev_get_drvdata(dev);
1827+
struct spi_master *master = dev_get_drvdata(dev);
1828+
int ret;
18271829

1830+
ret = spi_master_suspend(master);
18281831
cqspi_controller_enable(cqspi, 0);
1829-
return 0;
1832+
1833+
clk_disable_unprepare(cqspi->clk);
1834+
1835+
return ret;
18301836
}
18311837

18321838
static int cqspi_resume(struct device *dev)
18331839
{
18341840
struct cqspi_st *cqspi = dev_get_drvdata(dev);
1841+
struct spi_master *master = dev_get_drvdata(dev);
18351842

1836-
cqspi_controller_enable(cqspi, 1);
1837-
return 0;
1843+
clk_prepare_enable(cqspi->clk);
1844+
cqspi_wait_idle(cqspi);
1845+
cqspi_controller_init(cqspi);
1846+
1847+
cqspi->current_cs = -1;
1848+
cqspi->sclk = 0;
1849+
1850+
return spi_master_resume(master);
18381851
}
18391852

18401853
static const struct dev_pm_ops cqspi__dev_pm_ops = {

0 commit comments

Comments
 (0)