diff options
Diffstat (limited to 'drivers/misc/vexpress-syscfg.c')
-rw-r--r-- | drivers/misc/vexpress-syscfg.c | 60 |
1 files changed, 13 insertions, 47 deletions
diff --git a/drivers/misc/vexpress-syscfg.c b/drivers/misc/vexpress-syscfg.c index b3a812384a6f..c344483fa7d6 100644 --- a/drivers/misc/vexpress-syscfg.c +++ b/drivers/misc/vexpress-syscfg.c | |||
@@ -145,7 +145,7 @@ static struct regmap_config vexpress_syscfg_regmap_config = { | |||
145 | static struct regmap *vexpress_syscfg_regmap_init(struct device *dev, | 145 | static struct regmap *vexpress_syscfg_regmap_init(struct device *dev, |
146 | void *context) | 146 | void *context) |
147 | { | 147 | { |
148 | struct platform_device *pdev = to_platform_device(dev); | 148 | int err; |
149 | struct vexpress_syscfg *syscfg = context; | 149 | struct vexpress_syscfg *syscfg = context; |
150 | struct vexpress_syscfg_func *func; | 150 | struct vexpress_syscfg_func *func; |
151 | struct property *prop; | 151 | struct property *prop; |
@@ -155,32 +155,18 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev, | |||
155 | u32 site, position, dcc; | 155 | u32 site, position, dcc; |
156 | int i; | 156 | int i; |
157 | 157 | ||
158 | if (dev->of_node) { | 158 | err = vexpress_config_get_topo(dev->of_node, &site, |
159 | int err = vexpress_config_get_topo(dev->of_node, &site, | ||
160 | &position, &dcc); | 159 | &position, &dcc); |
160 | if (err) | ||
161 | return ERR_PTR(err); | ||
161 | 162 | ||
162 | if (err) | 163 | prop = of_find_property(dev->of_node, |
163 | return ERR_PTR(err); | 164 | "arm,vexpress-sysreg,func", NULL); |
164 | 165 | if (!prop) | |
165 | prop = of_find_property(dev->of_node, | 166 | return ERR_PTR(-EINVAL); |
166 | "arm,vexpress-sysreg,func", NULL); | 167 | |
167 | if (!prop) | 168 | num = prop->length / sizeof(u32) / 2; |
168 | return ERR_PTR(-EINVAL); | 169 | val = prop->value; |
169 | |||
170 | num = prop->length / sizeof(u32) / 2; | ||
171 | val = prop->value; | ||
172 | } else { | ||
173 | if (pdev->num_resources != 1 || | ||
174 | pdev->resource[0].flags != IORESOURCE_BUS) | ||
175 | return ERR_PTR(-EFAULT); | ||
176 | |||
177 | site = pdev->resource[0].start; | ||
178 | if (site == VEXPRESS_SITE_MASTER) | ||
179 | site = vexpress_config_get_master(); | ||
180 | position = 0; | ||
181 | dcc = 0; | ||
182 | num = 1; | ||
183 | } | ||
184 | 170 | ||
185 | /* | 171 | /* |
186 | * "arm,vexpress-energy" function used to be described | 172 | * "arm,vexpress-energy" function used to be described |
@@ -207,13 +193,8 @@ static struct regmap *vexpress_syscfg_regmap_init(struct device *dev, | |||
207 | for (i = 0; i < num; i++) { | 193 | for (i = 0; i < num; i++) { |
208 | u32 function, device; | 194 | u32 function, device; |
209 | 195 | ||
210 | if (dev->of_node) { | 196 | function = be32_to_cpup(val++); |
211 | function = be32_to_cpup(val++); | 197 | device = be32_to_cpup(val++); |
212 | device = be32_to_cpup(val++); | ||
213 | } else { | ||
214 | function = pdev->resource[0].end; | ||
215 | device = pdev->id; | ||
216 | } | ||
217 | 198 | ||
218 | dev_dbg(dev, "func %p: %u/%u/%u/%u/%u\n", | 199 | dev_dbg(dev, "func %p: %u/%u/%u/%u/%u\n", |
219 | func, site, position, dcc, | 200 | func, site, position, dcc, |
@@ -265,17 +246,6 @@ static struct vexpress_config_bridge_ops vexpress_syscfg_bridge_ops = { | |||
265 | }; | 246 | }; |
266 | 247 | ||
267 | 248 | ||
268 | /* Non-DT hack, to be gone... */ | ||
269 | static struct device *vexpress_syscfg_bridge; | ||
270 | |||
271 | int vexpress_syscfg_device_register(struct platform_device *pdev) | ||
272 | { | ||
273 | pdev->dev.parent = vexpress_syscfg_bridge; | ||
274 | |||
275 | return platform_device_register(pdev); | ||
276 | } | ||
277 | |||
278 | |||
279 | static int vexpress_syscfg_probe(struct platform_device *pdev) | 249 | static int vexpress_syscfg_probe(struct platform_device *pdev) |
280 | { | 250 | { |
281 | struct vexpress_syscfg *syscfg; | 251 | struct vexpress_syscfg *syscfg; |
@@ -303,10 +273,6 @@ static int vexpress_syscfg_probe(struct platform_device *pdev) | |||
303 | if (IS_ERR(bridge)) | 273 | if (IS_ERR(bridge)) |
304 | return PTR_ERR(bridge); | 274 | return PTR_ERR(bridge); |
305 | 275 | ||
306 | /* Non-DT case */ | ||
307 | if (!pdev->dev.of_node) | ||
308 | vexpress_syscfg_bridge = bridge; | ||
309 | |||
310 | return 0; | 276 | return 0; |
311 | } | 277 | } |
312 | 278 | ||