# Openmoko Charger (id pin had 47Kohm resistance) 851mA (max currently
# supported by kernel).
-SUBSYSTEM=="power_supply", ACTION=="change", DEVPATH=="*power_supply/twl4030_usb" ATTRS{1-0048/twl4030_usb/id}=="floating", ATTR{../../max_current}="500000"
-SUBSYSTEM=="power_supply", ACTION=="change", DEVPATH=="*power_supply/twl4030_usb" ATTRS{1-0048/twl4030_usb/id}=="102k", ATTR{../../max_current}="851000"
+SUBSYSTEM=="power_supply", ACTION=="change", DEVPATH=="*power_supply/twl4030_usb", GOTO="twl4030_usb"
+GOTO="end"
+
+LABEL="twl4030_usb"
+# need to wait a moment before 'vbus' is valid :-(
+PROGRAM=="/bin/sleep 2"
+ATTRS{1-0048/twl4030_usb/vbus} == "off", GOTO="off"
+# power is present
+ATTRS{1-0048/twl4030_usb/id}=="floating", ATTR{../../max_current}="500000"
+ATTRS{1-0048/twl4030_usb/id}=="102k", ATTR{../../max_current}="851000"
+
+ATTR{online}=="1", GOTO="charging"
+# not charging
+RUN+="/bin/sh -c 'cd /sys/class/leds/gta04:red:power; echo none > trigger; echo 0 > brightness'"
+RUN+="/bin/sh -c 'cd /sys/class/leds/gta04:green:power; echo timer > trigger; echo 500 > delay_on; echo 2500 > delay_off'"
+GOTO="end"
+LABEL="charging"
+RUN+="/bin/sh -c 'cd /sys/class/leds/gta04:green:power; echo none > trigger; echo 0 > brightness'"
+RUN+="/bin/sh -c 'cd /sys/class/leds/gta04:red:power; echo timer > trigger; echo 500 > delay_on; echo 2500 > delay_off'"
+
+GOTO="end"
+LABEL="off"
+# no power present"
+RUN+="/bin/sh -c 'cd /sys/class/leds/gta04:red:power; echo none > trigger; echo 0 > brightness'"
+RUN+="/bin/sh -c 'cd /sys/class/leds/gta04:green:power; echo none > trigger; echo 0 > brightness'"
+
+LABEL="end"