Found this forum and thread because of my P0480 code on my 2008... So far what I have figured out is probably a TIPM problem. Fan will not run on low speed, automatically goes to high and sets the check engine light. Fan is good, 60a fuse is good, engine temp sensor is good, fan resistor is good, both fan relays are good. Jumping the switch side of the low speed fan relay (TIPM mounted) it does work just fine on low speed. Checking power to the fan relay in the TIPM it seems like ground voltage is low, only 9.5v. Positive side is a full 12v. Other grounds located in TIPM are good and at full power.
So if you're at a dead end, do some testing at the low speed relay. Remove it and swap it with another. If no change pull it and jump the 2 switched contacts with a short piece of wire (diagram showing which pins are the switched ones is right on the relay). If the fan comes on (with key on, engine warmed up) then check the other 2 pins with a volt meter. You should have 12v. If not, check one pin on the relay connector and one of the battery posts... so meter on one of the relay power pins, other meter lead directly to battery. Then do the other pin. This will show you if it's the positive or negative relay pin that is not getting a full 12v.