aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpufreq/e_powersaver.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpufreq/e_powersaver.c')
-rw-r--r--drivers/cpufreq/e_powersaver.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/cpufreq/e_powersaver.c b/drivers/cpufreq/e_powersaver.c
index 4bd6815d317b..3fffbe6025cd 100644
--- a/drivers/cpufreq/e_powersaver.c
+++ b/drivers/cpufreq/e_powersaver.c
@@ -16,6 +16,7 @@
16#include <linux/io.h> 16#include <linux/io.h>
17#include <linux/delay.h> 17#include <linux/delay.h>
18 18
19#include <asm/cpu_device_id.h>
19#include <asm/msr.h> 20#include <asm/msr.h>
20#include <asm/tsc.h> 21#include <asm/tsc.h>
21 22
@@ -437,18 +438,19 @@ static struct cpufreq_driver eps_driver = {
437 .attr = eps_attr, 438 .attr = eps_attr,
438}; 439};
439 440
441
442/* This driver will work only on Centaur C7 processors with
443 * Enhanced SpeedStep/PowerSaver registers */
444static const struct x86_cpu_id eps_cpu_id[] = {
445 { X86_VENDOR_CENTAUR, 6, X86_MODEL_ANY, X86_FEATURE_EST },
446 {}
447};
448MODULE_DEVICE_TABLE(x86cpu, eps_cpu_id);
449
440static int __init eps_init(void) 450static int __init eps_init(void)
441{ 451{
442 struct cpuinfo_x86 *c = &cpu_data(0); 452 if (!x86_match_cpu(eps_cpu_id) || boot_cpu_data.x86_model < 10)
443
444 /* This driver will work only on Centaur C7 processors with
445 * Enhanced SpeedStep/PowerSaver registers */
446 if (c->x86_vendor != X86_VENDOR_CENTAUR
447 || c->x86 != 6 || c->x86_model < 10)
448 return -ENODEV;
449 if (!cpu_has(c, X86_FEATURE_EST))
450 return -ENODEV; 453 return -ENODEV;
451
452 if (cpufreq_register_driver(&eps_driver)) 454 if (cpufreq_register_driver(&eps_driver))
453 return -EINVAL; 455 return -EINVAL;
454 return 0; 456 return 0;