forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-10-09 05e59e5fb0064c97a1c10921ecd549f2d4a58565
kernel/drivers/char/hw_random/iproc-rng200.c
....@@ -181,7 +181,6 @@
181181 static int iproc_rng200_probe(struct platform_device *pdev)
182182 {
183183 struct iproc_rng200_dev *priv;
184
- struct resource *res;
185184 struct device *dev = &pdev->dev;
186185 int ret;
187186
....@@ -190,22 +189,18 @@
190189 return -ENOMEM;
191190
192191 /* Map peripheral */
193
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
194
- if (!res) {
195
- dev_err(dev, "failed to get rng resources\n");
196
- return -EINVAL;
197
- }
198
-
199
- priv->base = devm_ioremap_resource(dev, res);
192
+ priv->base = devm_platform_ioremap_resource(pdev, 0);
200193 if (IS_ERR(priv->base)) {
201194 dev_err(dev, "failed to remap rng regs\n");
202195 return PTR_ERR(priv->base);
203196 }
204197
205
- priv->rng.name = "iproc-rng200",
206
- priv->rng.read = iproc_rng200_read,
207
- priv->rng.init = iproc_rng200_init,
208
- priv->rng.cleanup = iproc_rng200_cleanup,
198
+ dev_set_drvdata(dev, priv);
199
+
200
+ priv->rng.name = "iproc-rng200";
201
+ priv->rng.read = iproc_rng200_read;
202
+ priv->rng.init = iproc_rng200_init;
203
+ priv->rng.cleanup = iproc_rng200_cleanup;
209204
210205 /* Register driver */
211206 ret = devm_hwrng_register(dev, &priv->rng);
....@@ -219,7 +214,31 @@
219214 return 0;
220215 }
221216
217
+static int __maybe_unused iproc_rng200_suspend(struct device *dev)
218
+{
219
+ struct iproc_rng200_dev *priv = dev_get_drvdata(dev);
220
+
221
+ iproc_rng200_cleanup(&priv->rng);
222
+
223
+ return 0;
224
+}
225
+
226
+static int __maybe_unused iproc_rng200_resume(struct device *dev)
227
+{
228
+ struct iproc_rng200_dev *priv = dev_get_drvdata(dev);
229
+
230
+ iproc_rng200_init(&priv->rng);
231
+
232
+ return 0;
233
+}
234
+
235
+static const struct dev_pm_ops iproc_rng200_pm_ops = {
236
+ SET_SYSTEM_SLEEP_PM_OPS(iproc_rng200_suspend, iproc_rng200_resume)
237
+};
238
+
222239 static const struct of_device_id iproc_rng200_of_match[] = {
240
+ { .compatible = "brcm,bcm2711-rng200", },
241
+ { .compatible = "brcm,bcm7211-rng200", },
223242 { .compatible = "brcm,bcm7278-rng200", },
224243 { .compatible = "brcm,iproc-rng200", },
225244 {},
....@@ -230,6 +249,7 @@
230249 .driver = {
231250 .name = "iproc-rng200",
232251 .of_match_table = iproc_rng200_of_match,
252
+ .pm = &iproc_rng200_pm_ops,
233253 },
234254 .probe = iproc_rng200_probe,
235255 };