aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2015-10-02 19:24:25 -0400
committerDaniel Lezcano <daniel.lezcano@linaro.org>2015-10-23 06:40:47 -0400
commitda1a64f80d8946d51744e48d0ba138c1b17a4852 (patch)
treea600ba1f86e0ec4aef234d618862bc6375189681
parent7379047d5585187d1288486d4627873170d0005a (diff)
cpuidle: mvebu: clean up multiple platform drivers
There's no need to use multiple platform drivers, especially when we want to do something different in the probe, but we still use a common probe function. We can use the platform ID system to only register one platform driver, but have it match several devices, and give us the CPU idle driver via the ID's driver_data. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
-rw-r--r--drivers/cpuidle/cpuidle-mvebu-v7.c45
1 files changed, 20 insertions, 25 deletions
diff --git a/drivers/cpuidle/cpuidle-mvebu-v7.c b/drivers/cpuidle/cpuidle-mvebu-v7.c
index 980151f34707..facd7d3e57dc 100644
--- a/drivers/cpuidle/cpuidle-mvebu-v7.c
+++ b/drivers/cpuidle/cpuidle-mvebu-v7.c
@@ -99,44 +99,39 @@ static struct cpuidle_driver armada38x_idle_driver = {
99 99
100static int mvebu_v7_cpuidle_probe(struct platform_device *pdev) 100static int mvebu_v7_cpuidle_probe(struct platform_device *pdev)
101{ 101{
102 mvebu_v7_cpu_suspend = pdev->dev.platform_data; 102 const struct platform_device_id *id = pdev->id_entry;
103 103
104 if (!strcmp(pdev->dev.driver->name, "cpuidle-armada-xp")) 104 if (!id)
105 return cpuidle_register(&armadaxp_idle_driver, NULL);
106 else if (!strcmp(pdev->dev.driver->name, "cpuidle-armada-370"))
107 return cpuidle_register(&armada370_idle_driver, NULL);
108 else if (!strcmp(pdev->dev.driver->name, "cpuidle-armada-38x"))
109 return cpuidle_register(&armada38x_idle_driver, NULL);
110 else
111 return -EINVAL; 105 return -EINVAL;
112}
113 106
114static struct platform_driver armadaxp_cpuidle_plat_driver = { 107 mvebu_v7_cpu_suspend = pdev->dev.platform_data;
115 .driver = {
116 .name = "cpuidle-armada-xp",
117 },
118 .probe = mvebu_v7_cpuidle_probe,
119};
120 108
121module_platform_driver(armadaxp_cpuidle_plat_driver); 109 return cpuidle_register((struct cpuidle_driver *)id->driver_data, NULL);
110}
122 111
123static struct platform_driver armada370_cpuidle_plat_driver = { 112static const struct platform_device_id mvebu_cpuidle_ids[] = {
124 .driver = { 113 {
114 .name = "cpuidle-armada-xp",
115 .driver_data = (unsigned long)&armadaxp_idle_driver,
116 }, {
125 .name = "cpuidle-armada-370", 117 .name = "cpuidle-armada-370",
118 .driver_data = (unsigned long)&armada370_idle_driver,
119 }, {
120 .name = "cpuidle-armada-38x",
121 .driver_data = (unsigned long)&armada38x_idle_driver,
126 }, 122 },
127 .probe = mvebu_v7_cpuidle_probe, 123 {}
128}; 124};
129 125
130module_platform_driver(armada370_cpuidle_plat_driver); 126static struct platform_driver mvebu_cpuidle_driver = {
131 127 .probe = mvebu_v7_cpuidle_probe,
132static struct platform_driver armada38x_cpuidle_plat_driver = {
133 .driver = { 128 .driver = {
134 .name = "cpuidle-armada-38x", 129 .name = "cpuidle-mbevu",
135 }, 130 },
136 .probe = mvebu_v7_cpuidle_probe, 131 .id_table = mvebu_cpuidle_ids,
137}; 132};
138 133
139module_platform_driver(armada38x_cpuidle_plat_driver); 134module_platform_driver(mvebu_cpuidle_driver);
140 135
141MODULE_AUTHOR("Gregory CLEMENT <gregory.clement@free-electrons.com>"); 136MODULE_AUTHOR("Gregory CLEMENT <gregory.clement@free-electrons.com>");
142MODULE_DESCRIPTION("Marvell EBU v7 cpuidle driver"); 137MODULE_DESCRIPTION("Marvell EBU v7 cpuidle driver");