charger: wakeup and start booting if TA is out while charging/sleeping.
authorMyungJoo Ham <MyungJoo.Ham@samsung.com>
Wed, 10 Feb 2010 02:48:15 +0000 (11:48 +0900)
committerMyungJoo Ham <MyungJoo.Ham@samsung.com>
Wed, 10 Feb 2010 02:48:15 +0000 (11:48 +0900)
board/samsung/universal/gpio_setting.h
board/samsung/universal/universal.c

index 7e5d098..016f90e 100644 (file)
@@ -236,7 +236,7 @@ static struct gpio_powermode aquila_powerdown_modes[] = {
 static struct gpio_external aquila_external_powerdown_modes[] = {
        {       /* S5PC110_GPIO_H0_OFFSET */
                CON_OUTPUT(0) | CON_INPUT(1) | CON_OUTPUT(2) | CON_OUTPUT(3) |
-               CON_OUTPUT(4) | CON_OUTPUT(5) | CON_INPUT(6) | CON_INPUT(7),
+               CON_OUTPUT(4) | CON_OUTPUT(5) | CON_INPUT(6) | CON_IRQ(7),
                DAT_SET(0) | DAT_CLEAR(2) | DAT_CLEAR(3) |
                DAT_CLEAR(4) | DAT_CLEAR(5),
                PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) |
@@ -426,7 +426,7 @@ static struct gpio_powermode aries_powerdown_modes[] = {
 static struct gpio_external aries_external_powerdown_modes[] = {
        {       /* S5PC110(ARIES)_GPIO_H0_OFFSET */
                CON_OUTPUT(0) | CON_INPUT(1) | CON_OUTPUT(2) | CON_OUTPUT(3) |
-               CON_OUTPUT(4) | CON_OUTPUT(5) | CON_INPUT(6) | CON_INPUT(7),
+               CON_OUTPUT(4) | CON_OUTPUT(5) | CON_INPUT(6) | CON_IRQ(7),
                DAT_SET(0) | DAT_CLEAR(2) | DAT_CLEAR(3) |
                DAT_CLEAR(4) | DAT_CLEAR(5),
                PULL_DIS(0) | PULL_DIS(1) | PULL_DIS(2) | PULL_DIS(3) |
index 53a7b7d..f054609 100644 (file)
@@ -997,6 +997,24 @@ static int max8998_power_key(void)
        return 0;
 }
 
+static int max8998_has_ext_power_source(void)
+{
+       unsigned char addr, val[2];
+       i2c_set_bus_num(I2C_PMIC);
+       addr = 0xCC >> 1;
+       if (i2c_probe(addr)) {
+               printf("Can't found max8998\n");
+               return 0;
+       }
+
+       /* Accessing STATUS2 register */
+       i2c_read(addr, 0x09, 1, val, 1);
+       if (val[0] & (1 << 5))
+               return 1;
+
+       return 0;
+}
+
 extern void lcd_display_clear(void);
 extern int lcd_display_bitmap(ulong bmp_image, int x, int y);
 
@@ -1021,7 +1039,9 @@ static void into_charge_mode(void)
 
        i2c_read(addr, 0x0C, 1, val, 1);
        val[0] &= ~(0x7 << 0);
+       val[0] &= ~(0x7 << 5);
        val[0] |= 5;            /* 600mA */
+       val[0] |= (3 << 5); /* Stop at 150mA(25%) */
        i2c_write(addr, 0x0C, 1, val, 1);
 
 #ifdef CONFIG_S5PC1XXFB
@@ -1048,8 +1068,9 @@ static void into_charge_mode(void)
                        for (k = 0; k < 10; k++)
                                if (max8998_power_key()) {
                                        lcd_display_clear();
-                                       /* FIXME don't use static function */
-                                       /* draw_samsung_logo(lcd_base); */
+                                       return;
+                               } else if (!max8998_has_ext_power_source()) {
+                                       lcd_display_clear();
                                        return;
                                } else
                                        udelay(100 * 1000);