diff options
author | Antoine Tenart <antoine.tenart@free-electrons.com> | 2015-05-15 18:53:44 -0400 |
---|---|---|
committer | Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com> | 2015-05-18 11:52:42 -0400 |
commit | bfff6296180c56ccaf4ac36808440f8849aad7c1 (patch) | |
tree | bf6131cc7fdaeaf85a74a79febbf673e4a0a3de0 /drivers/reset/reset-berlin.c | |
parent | 432257287c01a7f8bd40c443959ebf9e846852f0 (diff) |
reset: berlin: drop arch_initcall initialization
With proper platform driver probing for berlin reset driver, drop the
arch_initcall workaround.
Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com>
Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Diffstat (limited to 'drivers/reset/reset-berlin.c')
-rw-r--r-- | drivers/reset/reset-berlin.c | 71 |
1 files changed, 1 insertions, 70 deletions
diff --git a/drivers/reset/reset-berlin.c b/drivers/reset/reset-berlin.c index d43bc163dd02..3c922d37255c 100644 --- a/drivers/reset/reset-berlin.c +++ b/drivers/reset/reset-berlin.c | |||
@@ -27,8 +27,6 @@ | |||
27 | container_of((p), struct berlin_reset_priv, rcdev) | 27 | container_of((p), struct berlin_reset_priv, rcdev) |
28 | 28 | ||
29 | struct berlin_reset_priv { | 29 | struct berlin_reset_priv { |
30 | void __iomem *base; | ||
31 | unsigned int size; | ||
32 | struct regmap *regmap; | 30 | struct regmap *regmap; |
33 | struct reset_controller_dev rcdev; | 31 | struct reset_controller_dev rcdev; |
34 | }; | 32 | }; |
@@ -40,10 +38,7 @@ static int berlin_reset_reset(struct reset_controller_dev *rcdev, | |||
40 | int offset = id >> 8; | 38 | int offset = id >> 8; |
41 | int mask = BIT(id & 0x1f); | 39 | int mask = BIT(id & 0x1f); |
42 | 40 | ||
43 | if (priv->regmap) | 41 | regmap_write(priv->regmap, offset, mask); |
44 | regmap_write(priv->regmap, offset, mask); | ||
45 | else | ||
46 | writel(mask, priv->base + offset); | ||
47 | 42 | ||
48 | /* let the reset be effective */ | 43 | /* let the reset be effective */ |
49 | udelay(10); | 44 | udelay(10); |
@@ -58,7 +53,6 @@ static struct reset_control_ops berlin_reset_ops = { | |||
58 | static int berlin_reset_xlate(struct reset_controller_dev *rcdev, | 53 | static int berlin_reset_xlate(struct reset_controller_dev *rcdev, |
59 | const struct of_phandle_args *reset_spec) | 54 | const struct of_phandle_args *reset_spec) |
60 | { | 55 | { |
61 | struct berlin_reset_priv *priv = to_berlin_reset_priv(rcdev); | ||
62 | unsigned offset, bit; | 56 | unsigned offset, bit; |
63 | 57 | ||
64 | if (WARN_ON(reset_spec->args_count != rcdev->of_reset_n_cells)) | 58 | if (WARN_ON(reset_spec->args_count != rcdev->of_reset_n_cells)) |
@@ -67,9 +61,6 @@ static int berlin_reset_xlate(struct reset_controller_dev *rcdev, | |||
67 | offset = reset_spec->args[0]; | 61 | offset = reset_spec->args[0]; |
68 | bit = reset_spec->args[1]; | 62 | bit = reset_spec->args[1]; |
69 | 63 | ||
70 | if (offset >= priv->size) | ||
71 | return -EINVAL; | ||
72 | |||
73 | if (bit >= BERLIN_MAX_RESETS) | 64 | if (bit >= BERLIN_MAX_RESETS) |
74 | return -EINVAL; | 65 | return -EINVAL; |
75 | 66 | ||
@@ -120,63 +111,3 @@ MODULE_AUTHOR("Antoine Tenart <antoine.tenart@free-electrons.com>"); | |||
120 | MODULE_AUTHOR("Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>"); | 111 | MODULE_AUTHOR("Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>"); |
121 | MODULE_DESCRIPTION("Marvell Berlin reset driver"); | 112 | MODULE_DESCRIPTION("Marvell Berlin reset driver"); |
122 | MODULE_LICENSE("GPL"); | 113 | MODULE_LICENSE("GPL"); |
123 | |||
124 | static int __berlin_reset_init(struct device_node *np) | ||
125 | { | ||
126 | struct berlin_reset_priv *priv; | ||
127 | struct resource res; | ||
128 | resource_size_t size; | ||
129 | int ret; | ||
130 | |||
131 | priv = kzalloc(sizeof(*priv), GFP_KERNEL); | ||
132 | if (!priv) | ||
133 | return -ENOMEM; | ||
134 | |||
135 | ret = of_address_to_resource(np, 0, &res); | ||
136 | if (ret) | ||
137 | goto err; | ||
138 | |||
139 | size = resource_size(&res); | ||
140 | priv->base = ioremap(res.start, size); | ||
141 | if (!priv->base) { | ||
142 | ret = -ENOMEM; | ||
143 | goto err; | ||
144 | } | ||
145 | priv->size = size; | ||
146 | |||
147 | priv->rcdev.owner = THIS_MODULE; | ||
148 | priv->rcdev.ops = &berlin_reset_ops; | ||
149 | priv->rcdev.of_node = np; | ||
150 | priv->rcdev.of_reset_n_cells = 2; | ||
151 | priv->rcdev.of_xlate = berlin_reset_xlate; | ||
152 | |||
153 | reset_controller_register(&priv->rcdev); | ||
154 | |||
155 | return 0; | ||
156 | |||
157 | err: | ||
158 | kfree(priv); | ||
159 | return ret; | ||
160 | } | ||
161 | |||
162 | static const struct of_device_id berlin_reset_of_match[] __initconst = { | ||
163 | { .compatible = "marvell,berlin2-chip-ctrl" }, | ||
164 | { .compatible = "marvell,berlin2cd-chip-ctrl" }, | ||
165 | { .compatible = "marvell,berlin2q-chip-ctrl" }, | ||
166 | { }, | ||
167 | }; | ||
168 | |||
169 | static int __init berlin_reset_init(void) | ||
170 | { | ||
171 | struct device_node *np; | ||
172 | int ret; | ||
173 | |||
174 | for_each_matching_node(np, berlin_reset_of_match) { | ||
175 | ret = __berlin_reset_init(np); | ||
176 | if (ret) | ||
177 | return ret; | ||
178 | } | ||
179 | |||
180 | return 0; | ||
181 | } | ||
182 | arch_initcall(berlin_reset_init); | ||