.. | .. |
---|
42 | 42 | |
---|
43 | 43 | struct st_rng_data { |
---|
44 | 44 | void __iomem *base; |
---|
45 | | - struct clk *clk; |
---|
46 | 45 | struct hwrng ops; |
---|
47 | 46 | }; |
---|
48 | 47 | |
---|
.. | .. |
---|
85 | 84 | if (IS_ERR(base)) |
---|
86 | 85 | return PTR_ERR(base); |
---|
87 | 86 | |
---|
88 | | - clk = devm_clk_get(&pdev->dev, NULL); |
---|
| 87 | + clk = devm_clk_get_enabled(&pdev->dev, NULL); |
---|
89 | 88 | if (IS_ERR(clk)) |
---|
90 | 89 | return PTR_ERR(clk); |
---|
91 | | - |
---|
92 | | - ret = clk_prepare_enable(clk); |
---|
93 | | - if (ret) |
---|
94 | | - return ret; |
---|
95 | 90 | |
---|
96 | 91 | ddata->ops.priv = (unsigned long)ddata; |
---|
97 | 92 | ddata->ops.read = st_rng_read; |
---|
98 | 93 | ddata->ops.name = pdev->name; |
---|
99 | 94 | ddata->base = base; |
---|
100 | | - ddata->clk = clk; |
---|
101 | | - |
---|
102 | | - dev_set_drvdata(&pdev->dev, ddata); |
---|
103 | 95 | |
---|
104 | 96 | ret = devm_hwrng_register(&pdev->dev, &ddata->ops); |
---|
105 | 97 | if (ret) { |
---|
106 | 98 | dev_err(&pdev->dev, "Failed to register HW RNG\n"); |
---|
107 | | - clk_disable_unprepare(clk); |
---|
108 | 99 | return ret; |
---|
109 | 100 | } |
---|
110 | 101 | |
---|
111 | 102 | dev_info(&pdev->dev, "Successfully registered HW RNG\n"); |
---|
112 | | - |
---|
113 | | - return 0; |
---|
114 | | -} |
---|
115 | | - |
---|
116 | | -static int st_rng_remove(struct platform_device *pdev) |
---|
117 | | -{ |
---|
118 | | - struct st_rng_data *ddata = dev_get_drvdata(&pdev->dev); |
---|
119 | | - |
---|
120 | | - clk_disable_unprepare(ddata->clk); |
---|
121 | 103 | |
---|
122 | 104 | return 0; |
---|
123 | 105 | } |
---|
.. | .. |
---|
134 | 116 | .of_match_table = of_match_ptr(st_rng_match), |
---|
135 | 117 | }, |
---|
136 | 118 | .probe = st_rng_probe, |
---|
137 | | - .remove = st_rng_remove |
---|
138 | 119 | }; |
---|
139 | 120 | |
---|
140 | 121 | module_platform_driver(st_rng_driver); |
---|