speed patch

This is a patch by Benjamin Herrenschmidt, I just put it here because I had to collect it from two pieces:

http://lists.debian.org/debian-powerpc/2005/03/msg00554.html http://article.gmane.org/gmane.linux.debian.ports.powerpc/27133

--- linux-work.orig/arch/ppc/platforms/pmac_cpufreq.c   2005-03-13 18:23:11.000000000 +1100
+++ linux-work/arch/ppc/platforms/pmac_cpufreq.c        2005-03-14 13:32:36.000000000 +1100
@@ -464,20 +464,22 @@
        u32 *reg;
        struct cpufreq_driver *driver = &pmac_cpufreq_driver;

-       /* OF only reports the high frequency */
-       hi_freq = cur_freq;
-       low_freq = cur_freq/2;
-       driver->get = dfs_get_cpu_speed;
-       cur_freq = driver->get(0);
-
+       /* Look for voltage GPIO */
        volt_gpio_np = of_find_node_by_name(NULL, "cpu-vcore-select");
+       if (volt_gpio_np)
+               voltage_gpio = read_gpio(volt_gpio_np);
        if (!volt_gpio_np){
                printk(KERN_ERR "cpufreq: missing cpu-vcore-select gpio\n");
                return 1;
        }

-       reg = (u32 *)get_property(volt_gpio_np, "reg", NULL);
-       voltage_gpio = *reg;
+       /* OF only reports the high frequency */
+       hi_freq = cur_freq;
+       low_freq = cur_freq/2;
+
+       /* Read actual frequency from CPU */
+       driver->get = dfs_get_cpu_speed;
+       cur_freq = driver->get(0);
        set_speed_proc = dfs_set_cpu_speed;

        return 0;
@@ -492,7 +494,7 @@
  *  - iBook2 500/600 (PMU based, 400Mhz & 500/600Mhz)
  *  - iBook2 700 (CPU based, 400Mhz & 700Mhz, support low voltage)
  *  - Recent MacRISC3 laptops
- *  - iBook G4s and PowerBook G4s with 7447A CPUs
+ *  - All new machines with 7447A CPUs
  */
 static int __init pmac_cpufreq_setup(void)
 {
@@ -513,11 +515,10 @@
                goto out;
        cur_freq = (*value) / 1000;

-       /*  Check for 7447A based iBook G4 or PowerBook */
-       if (machine_is_compatible("PowerBook6,5") ||
-           machine_is_compatible("PowerBook6,4") ||
-           machine_is_compatible("PowerBook5,5") ||
-           machine_is_compatible("PowerBook5,4")) {
+       /*  Check for 7447A based MacRISC3 */
+       if (machine_is_compatible("MacRISC3") &&
+           get_property(cpunode, "dynamic-power-step", NULL) &&
+           PVR_VER(mfspr(SPRN_PVR)) == 0x8003) {
                pmac_cpufreq_init_7447A(cpunode);
        /* Check for other MacRISC3 machines */
        } else if (machine_is_compatible("PowerBook3,4") ||