#include "core.h"
-static int sh_pfc_ioremap(struct sh_pfc *pfc)
+static int sh_pfc_ioremap(struct sh_pfc *pfc, struct platform_device *pdev)
{
+ unsigned int num_resources;
struct resource *res;
int k;
- if (!pfc->pdata->num_resources)
+ if (pdev->num_resources) {
+ num_resources = pdev->num_resources;
+ res = pdev->resource;
+ } else {
+ num_resources = pfc->pdata->num_resources;
+ res = pfc->pdata->resource;
+ }
+
+ if (num_resources == 0) {
+ pfc->num_windows = 0;
return 0;
+ }
- pfc->window = devm_kzalloc(pfc->dev, pfc->pdata->num_resources *
+ pfc->window = devm_kzalloc(pfc->dev, num_resources *
sizeof(*pfc->window), GFP_NOWAIT);
if (!pfc->window)
return -ENOMEM;
- for (k = 0; k < pfc->pdata->num_resources; k++) {
- res = pfc->pdata->resource + k;
+ pfc->num_windows = num_resources;
+
+ for (k = 0; k < num_resources; k++, res++) {
WARN_ON(resource_type(res) != IORESOURCE_MEM);
pfc->window[k].phys = res->start;
pfc->window[k].size = resource_size(res);
int k;
/* scan through physical windows and convert address */
- for (k = 0; k < pfc->pdata->num_resources; k++) {
+ for (k = 0; k < pfc->num_windows; k++) {
window = pfc->window + k;
if (address < window->phys)
pfc->pdata = pdata;
pfc->dev = &pdev->dev;
- ret = sh_pfc_ioremap(pfc);
+ ret = sh_pfc_ioremap(pfc, pdev);
if (unlikely(ret < 0))
return ret;