Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

spi/bcm63xx-hsspi: fix pm sleep support

Use the right CONFIG symbol to guard, properly (un)preprare clocks on
suspend/resume, and check the result of it.

Signed-off-by: Jonas Gorski <jogo@openwrt.org>
Signed-off-by: Mark Brown <broonie@linaro.org>

authored by

Jonas Gorski and committed by
Mark Brown
937ebf9c 7d255695

+11 -14
+11 -14
drivers/spi/spi-bcm63xx-hsspi.c
··· 425 425 return 0; 426 426 } 427 427 428 - #ifdef CONFIG_PM 428 + #ifdef CONFIG_PM_SLEEP 429 429 static int bcm63xx_hsspi_suspend(struct device *dev) 430 430 { 431 431 struct spi_master *master = dev_get_drvdata(dev); 432 432 struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); 433 433 434 434 spi_master_suspend(master); 435 - clk_disable(bs->clk); 435 + clk_disable_unprepare(bs->clk); 436 436 437 437 return 0; 438 438 } ··· 441 441 { 442 442 struct spi_master *master = dev_get_drvdata(dev); 443 443 struct bcm63xx_hsspi *bs = spi_master_get_devdata(master); 444 + int ret; 444 445 445 - clk_enable(bs->clk); 446 + ret = clk_prepare_enable(bs->clk); 447 + if (ret) 448 + return ret; 449 + 446 450 spi_master_resume(master); 447 451 448 452 return 0; 449 453 } 450 - 451 - static const struct dev_pm_ops bcm63xx_hsspi_pm_ops = { 452 - .suspend = bcm63xx_hsspi_suspend, 453 - .resume = bcm63xx_hsspi_resume, 454 - }; 455 - 456 - #define BCM63XX_HSSPI_PM_OPS (&bcm63xx_hsspi_pm_ops) 457 - #else 458 - #define BCM63XX_HSSPI_PM_OPS NULL 459 454 #endif 460 455 461 - 456 + static const struct dev_pm_ops bcm63xx_hsspi_pm_ops = { 457 + SET_SYSTEM_SLEEP_PM_OPS(bcm63xx_hsspi_suspend, bcm63xx_hsspi_resume) 458 + }; 462 459 463 460 static struct platform_driver bcm63xx_hsspi_driver = { 464 461 .driver = { 465 462 .name = "bcm63xx-hsspi", 466 463 .owner = THIS_MODULE, 467 - .pm = BCM63XX_HSSPI_PM_OPS, 464 + .pm = &bcm63xx_hsspi_pm_ops, 468 465 }, 469 466 .probe = bcm63xx_hsspi_probe, 470 467 .remove = bcm63xx_hsspi_remove,