How is gta01 charger ID resistor detected?

Andy Poling andy at
Mon Jan 25 21:36:28 CET 2010

I have made a couple of custom charging cables for use with my gta01 and dumb
USB chargers (selected because they were rated at least 500ma).  I made the
cables by connecting a 47K resistor between the ID pin and ground leads.

However, after struggling with constantly inability to reliably charge my
gta01 on dumb chargers, some investigation has shown that the phone (running,
at the moment, a recent git pull) is settling into trickle charge despite the
presence of the ID resistor.

What is supposed to detect the resistor?  What happens when it does?  How can
I tell if it's working?

I've modified the pcf50606 reporting in my kernel to reveal more bits of the
registers to track this down.  I've changed the charger sysfs online attribute
to use the low bit of CHGVINSTAT for bit 0 and CHGAPE for bit 1.  I've changed
the chgmod attribute to also reveal the CHGAPE and AUTOFST bits.

The first thing I noticed is that CHGVINSTAT is always set, even when there's
no charger present.  I don't know why.  That seems contrary to the pcf50606
spec.  It's possible it's a bug in my change to the driver.

But the real problem I noticed is that AUTOFST is getting cleared when a cable
with the ID resistor is connected.  Here's a log made by a shell script
monitoring changes in the values reported through sysfs as I unplugged from my
desktop and then plugged into a dumb charger with my modified cable:

Jan 24 23:47:50 neo logger: BATSTAT=Charging BATCHG=100 CHARGER=3 CHARGEMODE=15
(bits set indicate CHGAPE=1, AUTOFST=0, CHGMOD=fastcccv)
** unplugged from desktop USB **
Jan 25 03:24:02 neo logger: BATSTAT=Discharging BATCHG=100 CHARGER=3 CHARGEMODE=31
(bits set indicate CHGAPE=1, AUTOFST=1, CHGMOD=idle)
Jan 25 03:28:03 neo logger: BATSTAT=Discharging BATCHG=94 CHARGER=3 CHARGEMODE=31
** plugged into dumb charger and modified cable **
Jan 25 03:28:34 neo logger: BATSTAT=Charging BATCHG=96 CHARGER=3 CHARGEMODE=5
(bits set indicate CHGAPE=1, AUTOFST=0, CHGMOD=precharge)
Jan 25 10:53:46 neo logger: BATSTAT=Charging BATCHG=23 CHARGER=3 CHARGEMODE=5
** unplugged from dumb charger and modified cable **
Jan 25 10:54:16 neo logger: BATSTAT=Discharging BATCHG=18 CHARGER=3 CHARGEMODE=29
(bits set indicate CHGAPE=1, AUTOFST=0, CHGMOD=idle)
Jan 25 10:56:48 neo logger: BATSTAT=Discharging BATCHG=20 CHARGER=3 CHARGEMODE=29
** plugged into desktop USB **
Jan 25 10:57:18 neo logger: BATSTAT=Charging BATCHG=43 CHARGER=3 CHARGEMODE=15
(bits set indicate CHGAPE=1, AUTOFST=0, CHGMOD=fastcccv)
Jan 25 10:59:19 neo logger: BATSTAT=Charging BATCHG=56 CHARGER=3 CHARGEMODE=15

As you can see, I never get more than trickle charge when on the dumb charger
and modified cable.

Along the way I encountered several things about the pcf50606 MBC control
driver that I think can be improved/fixed.  I guess I'll take that discussion
to the openmoko kernel list.


It ain't what you don't know that gets you into trouble.
It's what you know for sure that just ain't so. - Mark Twain

More information about the community mailing list