Excellent! Thanks heaps to Ben, Paul and Rob. Here are some notes from testing on my 12" iBook G4 1GHz. Some of it just confirms what others have already written.
DRI and backlight work fine. On-board ethernet is fine, and can be unplugged/plugged-in during sleep with no problems. I confirm the XV corruption, mplayer plays fine before sleep, but the screen is green when playing movies after a resume. If I tell mplayer to not use Xv, the movies are okay. I can confirm that if sleep is invoked by closing the lid, then opening the lid causes the machine to wake up and then immediately go back to sleep. But if sleep is invoked by using the power button, then you close the lid while the machine is asleep, opening the lid wakes it up correctly. ALSA has some kind of issue where an app which is playing sound will freeze after resume. After restarting the application, sound is okay. Also ALSA will not recognise if the headphones are unplugged/plugged-in during sleep. The linux-wlan-ng drivers for my USB DWL-122 don't work across a sleep, but they don't seem to interfere with resume. At one point when I was trying this, I started a sleep, then the keyboard stopped producing input, but the trackpad still worked. After unplugging the DWL-122, the iBook went to sleep. Then on resume, the keyboard input I had typed before came out. So maybe the linux-wlan or USB drivers were holding things up after the keyboard was shutdown but before the trackpad was? Also, this patch will stop the "cpufreq: resume failed to assert current frequency is what timing core thinks it is" complaint on 7447A based machines. cheers, John --- linux/arch/ppc/platforms/pmac_cpufreq.c.orig 2004-11-20 03:29:42.000000000 +1030 +++ linux/arch/ppc/platforms/pmac_cpufreq.c 2004-11-20 03:38:57.000000000 +1030 @@ -456,18 +456,25 @@ return 0; } +static unsigned int __pmac pmac_cpufreq_get_7447A(unsigned int cpu) +{ + if (mfspr(HID1) & HID1_DFS) + return low_freq; + else + return hi_freq; +} + static int __pmac pmac_cpufreq_init_7447A(struct device_node *cpunode) { struct device_node *volt_gpio_np; u32 *reg; + struct cpufreq_driver *driver = &pmac_cpufreq_driver; /* OF only reports the high frequency */ hi_freq = cur_freq; low_freq = cur_freq/2; - if (mfspr(HID1) & HID1_DFS) - cur_freq = low_freq; - else - cur_freq = hi_freq; + driver->get = pmac_cpufreq_get_7447A; + cur_freq = driver->get(0); volt_gpio_np = of_find_node_by_name(NULL, "cpu-vcore-select"); if (!volt_gpio_np){
pgp7xAU2MttLB.pgp
Description: PGP signature