struct opp_table **required_opp_tables;
        struct device **genpd_virt_devs = NULL;
        struct device_node *required_np, *np;
-       int count, i;
+       int count, count_pd, i;
 
        /* Traversing the first OPP node is all we need */
        np = of_get_next_available_child(opp_np, NULL);
        if (!count)
                goto put_np;
 
-       if (count > 1) {
+       /*
+        * Check the number of power-domains to know if we need to deal
+        * with virtual devices. In some cases we have devices with multiple
+        * power domains but with only one of them being scalable, hence
+        * 'count' could be 1, but we still have to deal with multiple genpds
+        * and virtual devices.
+        */
+       count_pd = of_count_phandle_with_args(dev->of_node, "power-domains",
+                                             "#power-domain-cells");
+       if (!count_pd)
+               goto put_np;
+
+       if (count_pd > 1) {
                genpd_virt_devs = kcalloc(count, sizeof(*genpd_virt_devs),
                                        GFP_KERNEL);
                if (!genpd_virt_devs)