--- h4000_batt-orig.c	2007-01-29 21:55:30.000000000 +0300
+++ h4000_batt.c	2007-02-28 10:03:22.000000000 +0300
@@ -16,6 +16,9 @@
 #include <linux/soc/asic3_base.h>
 #include <linux/platform_device.h>
 #include <linux/battery.h>
+#include <linux/leds.h>
+#include <asm/hardware/asic3_leds.h>
+
 
 #include <asm/mach-types.h>
 #include <asm/arch/hardware.h>
@@ -150,6 +153,34 @@
     .get_voltage        = backup_get_voltage,
 };
 
+DEFINE_LED_TRIGGER(charging_trig);
+DEFINE_LED_TRIGGER(chargefull_trig);
+
+
+static void
+set_leds(int ac_status, int Current, int battery_life,int battery_status) //Set LED states 
+{
+//    printk("LED: status:%d Current:%d life:%d ; status: %d \n",ac_status,Current,battery_life,battery_status);
+    if (ac_status == APM_AC_ONLINE) {
+        /* check battery status update LEDs. LEDs are off when on battery */
+        if (battery_status!=APM_BATTERY_STATUS_CHARGING ) {
+
+            /* Green LED on solid, red off */
+            led_trigger_event(chargefull_trig, LED_FULL);
+            led_trigger_event(charging_trig, LED_OFF);
+        } else {
+            /* Red LED blinking, green off */
+            led_trigger_event(chargefull_trig, LED_OFF);
+            led_trigger_event(charging_trig, LED_FULL);
+        } 
+    } else {
+        /* No charging power is applied; both LEDs off */
+        led_trigger_event(chargefull_trig, LED_OFF);
+        led_trigger_event(charging_trig, LED_OFF);
+    }
+}
+
+
 static int h4000_get_sample(int source)
 {
         int sample, mux_b = 0, mux_d = 0;
@@ -231,6 +262,8 @@
 	/* Consider one "percent" per minute, which is shot in the sky. */
 	info->time = battery_power;
 	info->units = APM_UNITS_MINS;
+	/* We should call set_leds much often, in timer or callback function,not only on getting apm state */
+	set_leds(info->ac_line_status,  0 , info->battery_life,info->battery_status);
 }
 
 static int h4000_batt_probe(struct platform_device *dev)
@@ -270,6 +303,11 @@
 {
 	if (!machine_is_h4000())
 		return -ENODEV;
+        /* Initializing LED triggers, solid for chargefull, blinking for charging */
+	led_trigger_register_simple("h4000-chargefull", &chargefull_trig);
+	led_trigger_register_asic3_timer("h4000-charging", &charging_trig);
+	led_trigger_event(chargefull_trig, LED_OFF);
+	led_trigger_event(charging_trig, LED_OFF);
 
 	return platform_driver_register(&h4000_batt_driver);
 }
@@ -277,7 +315,11 @@
 static void __exit h4000_batt_exit(void)
 {
 	del_timer_sync(&timer_bat);
+	led_trigger_unregister_simple(chargefull_trig);
+        led_trigger_unregister_asic3_timer(charging_trig);
+
 	platform_driver_unregister(&h4000_batt_driver);
+
 }
 
 module_init(h4000_batt_init)

