Initial Contribution
msm-2.6.38: tag AU_LINUX_ANDROID_GINGERBREAD.02.03.04.00.142
Signed-off-by: Bryan Huntsman <bryanh@codeaurora.org>
diff --git a/arch/arm/kernel/pmu.c b/arch/arm/kernel/pmu.c
index 2c79eec..a4688e8 100644
--- a/arch/arm/kernel/pmu.c
+++ b/arch/arm/kernel/pmu.c
@@ -45,16 +45,41 @@
return 0;
}
-static struct platform_driver pmu_driver = {
+static struct platform_driver cpu_pmu_driver = {
.driver = {
- .name = "arm-pmu",
+ .name = "cpu-arm-pmu",
},
.probe = pmu_device_probe,
};
+static struct platform_driver l2_pmu_driver = {
+ .driver = {
+ .name = "l2-arm-pmu",
+ },
+ .probe = pmu_device_probe,
+};
+
+static struct platform_driver *pmu_drivers[] __initdata = {
+ &cpu_pmu_driver,
+ &l2_pmu_driver,
+};
+
static int __init register_pmu_driver(void)
{
- return platform_driver_register(&pmu_driver);
+ int i;
+ int err;
+
+ for (i = 0; i < ARM_NUM_PMU_DEVICES; i++) {
+ err = platform_driver_register(pmu_drivers[i]);
+ if (err) {
+ pr_err("%s: failed to register id:%d\n", __func__, i);
+ while (--i >= 0)
+ platform_driver_unregister(pmu_drivers[i]);
+ break;
+ }
+ }
+
+ return err;
}
device_initcall(register_pmu_driver);