diff options
Diffstat (limited to 'drivers/char/hw_random/iproc-rng200.c')
| -rw-r--r-- | drivers/char/hw_random/iproc-rng200.c | 28 | 
1 files changed, 26 insertions, 2 deletions
diff --git a/drivers/char/hw_random/iproc-rng200.c b/drivers/char/hw_random/iproc-rng200.c index 06bc060534d8..440fe28bddc0 100644 --- a/drivers/char/hw_random/iproc-rng200.c +++ b/drivers/char/hw_random/iproc-rng200.c @@ -12,8 +12,7 @@  #include <linux/io.h>  #include <linux/kernel.h>  #include <linux/module.h> -#include <linux/of_address.h> -#include <linux/of_platform.h> +#include <linux/mod_devicetable.h>  #include <linux/platform_device.h>  #include <linux/delay.h> @@ -182,6 +181,8 @@ static int iproc_rng200_probe(struct platform_device *pdev)  		return PTR_ERR(priv->base);  	} +	dev_set_drvdata(dev, priv); +  	priv->rng.name = "iproc-rng200";  	priv->rng.read = iproc_rng200_read;  	priv->rng.init = iproc_rng200_init; @@ -199,6 +200,28 @@ static int iproc_rng200_probe(struct platform_device *pdev)  	return 0;  } +static int __maybe_unused iproc_rng200_suspend(struct device *dev) +{ +	struct iproc_rng200_dev *priv = dev_get_drvdata(dev); + +	iproc_rng200_cleanup(&priv->rng); + +	return 0; +} + +static int __maybe_unused iproc_rng200_resume(struct device *dev) +{ +	struct iproc_rng200_dev *priv =  dev_get_drvdata(dev); + +	iproc_rng200_init(&priv->rng); + +	return 0; +} + +static const struct dev_pm_ops iproc_rng200_pm_ops = { +	SET_SYSTEM_SLEEP_PM_OPS(iproc_rng200_suspend, iproc_rng200_resume) +}; +  static const struct of_device_id iproc_rng200_of_match[] = {  	{ .compatible = "brcm,bcm2711-rng200", },  	{ .compatible = "brcm,bcm7211-rng200", }, @@ -212,6 +235,7 @@ static struct platform_driver iproc_rng200_driver = {  	.driver = {  		.name		= "iproc-rng200",  		.of_match_table = iproc_rng200_of_match, +		.pm		= &iproc_rng200_pm_ops,  	},  	.probe		= iproc_rng200_probe,  };  | 
