| .. | .. |
|---|
| 148 | 148 | { |
|---|
| 149 | 149 | struct device_node *cn, *node = pdev->dev.of_node; |
|---|
| 150 | 150 | struct cvm_mmc_host *host; |
|---|
| 151 | | - struct resource *res; |
|---|
| 152 | 151 | void __iomem *base; |
|---|
| 153 | 152 | int mmc_irq[9]; |
|---|
| 154 | 153 | int i, ret = 0; |
|---|
| .. | .. |
|---|
| 205 | 204 | |
|---|
| 206 | 205 | host->last_slot = -1; |
|---|
| 207 | 206 | |
|---|
| 208 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
|---|
| 209 | | - if (!res) { |
|---|
| 210 | | - dev_err(&pdev->dev, "Platform resource[0] is missing\n"); |
|---|
| 211 | | - return -ENXIO; |
|---|
| 212 | | - } |
|---|
| 213 | | - base = devm_ioremap_resource(&pdev->dev, res); |
|---|
| 207 | + base = devm_platform_ioremap_resource(pdev, 0); |
|---|
| 214 | 208 | if (IS_ERR(base)) |
|---|
| 215 | 209 | return PTR_ERR(base); |
|---|
| 216 | | - host->base = (void __iomem *)base; |
|---|
| 210 | + host->base = base; |
|---|
| 217 | 211 | host->reg_off = 0; |
|---|
| 218 | 212 | |
|---|
| 219 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 1); |
|---|
| 220 | | - if (!res) { |
|---|
| 221 | | - dev_err(&pdev->dev, "Platform resource[1] is missing\n"); |
|---|
| 222 | | - return -EINVAL; |
|---|
| 223 | | - } |
|---|
| 224 | | - base = devm_ioremap_resource(&pdev->dev, res); |
|---|
| 213 | + base = devm_platform_ioremap_resource(pdev, 1); |
|---|
| 225 | 214 | if (IS_ERR(base)) |
|---|
| 226 | 215 | return PTR_ERR(base); |
|---|
| 227 | | - host->dma_base = (void __iomem *)base; |
|---|
| 216 | + host->dma_base = base; |
|---|
| 228 | 217 | /* |
|---|
| 229 | 218 | * To keep the register addresses shared we intentionaly use |
|---|
| 230 | 219 | * a negative offset here, first register used on Octeon therefore |
|---|
| .. | .. |
|---|
| 288 | 277 | if (ret) { |
|---|
| 289 | 278 | dev_err(&pdev->dev, "Error populating slots\n"); |
|---|
| 290 | 279 | octeon_mmc_set_shared_power(host, 0); |
|---|
| 280 | + of_node_put(cn); |
|---|
| 291 | 281 | goto error; |
|---|
| 292 | 282 | } |
|---|
| 293 | 283 | i++; |
|---|
| .. | .. |
|---|
| 338 | 328 | .remove = octeon_mmc_remove, |
|---|
| 339 | 329 | .driver = { |
|---|
| 340 | 330 | .name = KBUILD_MODNAME, |
|---|
| 331 | + .probe_type = PROBE_PREFER_ASYNCHRONOUS, |
|---|
| 341 | 332 | .of_match_table = octeon_mmc_match, |
|---|
| 342 | 333 | }, |
|---|
| 343 | 334 | }; |
|---|