]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/soc/dove/pmu.c
Merge tag 'topic/drm-misc-2016-02-12' into drm-intel-next-queued
[mirror_ubuntu-bionic-kernel.git] / drivers / soc / dove / pmu.c
index abd087917f807e03a466337a0fcf26cfd3499243..039374e9fdc03038159a685eb7ee49e83d9c2a28 100644 (file)
@@ -305,6 +305,49 @@ static int __init dove_init_pmu_irq(struct pmu_data *pmu, int irq)
        return 0;
 }
 
+int __init dove_init_pmu_legacy(const struct dove_pmu_initdata *initdata)
+{
+       const struct dove_pmu_domain_initdata *domain_initdata;
+       struct pmu_data *pmu;
+       int ret;
+
+       pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
+       if (!pmu)
+               return -ENOMEM;
+
+       spin_lock_init(&pmu->lock);
+       pmu->pmc_base = initdata->pmc_base;
+       pmu->pmu_base = initdata->pmu_base;
+
+       pmu_reset_init(pmu);
+       for (domain_initdata = initdata->domains; domain_initdata->name;
+            domain_initdata++) {
+               struct pmu_domain *domain;
+
+               domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+               if (domain) {
+                       domain->pmu = pmu;
+                       domain->pwr_mask = domain_initdata->pwr_mask;
+                       domain->rst_mask = domain_initdata->rst_mask;
+                       domain->iso_mask = domain_initdata->iso_mask;
+                       domain->base.name = domain_initdata->name;
+
+                       __pmu_domain_register(domain, NULL);
+               }
+       }
+
+       ret = dove_init_pmu_irq(pmu, initdata->irq);
+       if (ret)
+               pr_err("dove_init_pmu_irq() failed: %d\n", ret);
+
+       if (pmu->irq_domain)
+               irq_domain_associate_many(pmu->irq_domain,
+                                         initdata->irq_domain_start,
+                                         0, NR_PMU_IRQS);
+
+       return 0;
+}
+
 /*
  * pmu: power-manager@d0000 {
  *     compatible = "marvell,dove-pmu";