term_adt746x: Invert bit required on this Powerbook G4

Michel Dänzer michel at daenzer.net
Wed Nov 11 01:41:15 EST 2009


[ Resending with linuxppc-dev list domain fixed ]

On Wed, 2009-11-04 at 13:23 +0100, Max Vozeler wrote: 
> I installed Ubuntu 8.10 on this Powerbook G4 ("alu" I think) 
> for a friend of mine. As soon as therm_adt746x got loaded, the 
> fan turned into a noise steam engine. 
> 
> This was on Ubuntu's 2.6.31 kernel (2.6.31-14-powerpc) which 
> includes 0512a9a8e277a9de2. I could reproduce it with latest
> mainline as well.
> 
> The effect was just as Michel described in the changelog; The
> fan was running while temps were well below any of the limits,
> and it stopped only when I set ridiculously low limits.
> 
> [ 1087.141482] adt746x: version 1 (supported)
> [ 1087.141495] adt746x: Thermostat bus: 1, address: 0x2e, limit_adjust: 0, fan_speed: -1
> [ 1087.141503] sensor 0: HDD BOTTOMSIDE
> [ 1087.141507] sensor 1: CPU TOPSIDE
> [ 1087.141512] sensor 2: GPU ON DIE
> [ 1087.161365] adt746x: ADT7460 initializing
> [ 1087.165245] adt746x: Lowering max temperatures from 73, 80, 109 to 70, 50, 70
> [ 1087.165261] adt746x: Setting speed to 0 for CPU TOPSIDE fan.
> [ 1087.166302] adt746x: Setting speed to 0 for GPU ON DIE fan.
> 
> (What "worked" was limit_adjust=-30, fan did turn off, but so did
> the Powerbook shortly after, despite being cold.)
> 
> After some poking around, in which everything seemed to be
> according to plan including write of 0 to both FAN_SPD_SET regs,
> I noticed that explicitly *setting* the invert bit as in 
> 
>  -		write_reg(th, MANUAL_MODE[fan],
>  -			(manual|MANUAL_MASK) & (~INVERT_MASK));
>  +		write_reg(th, MANUAL_MODE[fan],
>  +			(manual|MANUAL_MASK|INVERT_MASK));
> 
> seems to cure it. The fan appears to behave normally now, it
> turns on slowly when the temp limits are reached, otherwise it
> stays off. The temperature is reasonable (ie, no too hot).
> 
> So, puzzeled, I checked the spec, and it appears very clear on
> the question of invert: It should be off by default.

Right, that's what I based my patch on.

However, it sounds like your PowerBook model (mine is a PowerBook5,8) is
wired up such that the invert bit needs to be enabled. I can think of
two basic approaches for dealing with this offhand:

      * Set or clear the invert bit depending on the machine model or
        whatever is relevant. 
      * Save the bit value during initialization and preserve it
        whenever writing to the register. Or maybe even add proper
        suspend/resume hooks which save/restore all hardware state, it
        seems like it may be luck that the current code works more or
        less for suspend/resume.

I'm not too interested in working on this anymore and I definitely won't
have time this or next week, anyone feel free to take it on.


-- 
Earthling Michel Dänzer           |                http://www.vmware.com
Libre software enthusiast         |          Debian, X and DRI developer



More information about the Linuxppc-dev mailing list