s5pc110: universal: change board name from "Neptune" to "Limo SDK"
[kernel/u-boot.git] / board / samsung / universal / universal.c
index 9ae3f8d..b1c23b2 100644 (file)
@@ -185,7 +185,6 @@ enum {
 
        MACH_PSEUDO_END,
 
-       MACH_AQUILA     = 2646,
        MACH_KESSLER    = 3102,
 };
 
@@ -210,64 +209,75 @@ static int c110_machine_id(void)
        return gd->bd->bi_arch_number - C110_MACH_START;
 }
 
-static int machine_is_aquila(void)
+static int mach_is_aquila(void)
 {
-       return (gd->bd->bi_arch_number == MACH_AQUILA);
+       return gd->bd->bi_arch_number == MACH_TYPE_AQUILA;
 }
 
-static int machine_is_tickertape(void)
+static int mach_is_tickertape(void)
 {
        return c110_machine_id() == MACH_TICKERTAPE;
 }
 
-static int machine_is_geminus(void)
+static int mach_is_geminus(void)
 {
        return c110_machine_id() == MACH_GEMINUS;
 }
 
-static int machine_is_cypress(void)
+static int mach_is_cypress(void)
 {
        return c110_machine_id() == MACH_CYPRESS;
 }
 
 static int board_is_limo_universal(void)
 {
-       return machine_is_aquila() && (board_rev & LIMO_UNIVERSAL_BOARD);
+       return mach_is_aquila() && (board_rev & LIMO_UNIVERSAL_BOARD);
 }
 
 static int board_is_limo_real(void)
 {
-       return machine_is_aquila() && (board_rev & LIMO_REAL_BOARD);
+       return mach_is_aquila() && (board_rev & LIMO_REAL_BOARD);
+}
+
+static int board_is_bamboo(void)
+{
+       return mach_is_aquila() && (board_rev & BAMBOO_BOARD);
 }
 
 static int board_is_media(void)
 {
-       return machine_is_aquila() && (board_rev & MEDIA_BOARD);
+       return mach_is_aquila() && (board_rev & MEDIA_BOARD);
 }
 
 static int board_is_j1b2(void)
 {
-       return machine_is_aquila() && (board_rev & J1_B2_BOARD);
+       return mach_is_aquila() && (board_rev & J1_B2_BOARD);
 }
 
 /* Kessler */
-static int machine_is_kessler(void)
+static int mach_is_kessler(void)
 {
        return gd->bd->bi_arch_number == MACH_KESSLER;
 }
 
 static int board_is_neptune(void)
 {
-       return machine_is_kessler() && (board_rev & NEPTUNE_BOARD);
+       return mach_is_kessler() && (board_rev & NEPTUNE_BOARD);
+}
+
+static int board_is_s1(void)
+{
+       return mach_is_kessler() && (board_rev & S1_BOARD);
 }
 
 /* DLNA Dongle */
-static int machine_is_wmg160(void)
+static int mach_is_wmg160(void)
 {
        return c110_machine_id() == MACH_WMG160;
 }
 
 static void check_battery(int mode);
+static void check_micro_usb(int intr);
 
 void i2c_init_board(void)
 {
@@ -279,13 +289,13 @@ void i2c_init_board(void)
 
        num_bus = ARRAY_SIZE(i2c_gpio);
 
-       if (machine_is_aquila()) {
+       if (mach_is_aquila()) {
                i2c_gpio[I2C_GPIO6].bus->gpio_base = 0;
                i2c_gpio[I2C_GPIO7].bus->gpio_base = 0;
-       } else if (machine_is_kessler()) {
+       } else if (mach_is_kessler()) {
                i2c_gpio[I2C_GPIO7].bus->gpio_base =
                        (unsigned int)&gpio->gpio_mp0_5;
-       } else if (machine_is_cypress()) {
+       } else if (mach_is_cypress()) {
                i2c_gpio[I2C_GPIO7].bus = &i2c_cypress_gpio7;
                i2c_gpio[I2C_GPIO7].bus->gpio_base =
                        (unsigned int)&gpio->gpio_mp0_5;
@@ -301,6 +311,8 @@ void i2c_init_board(void)
 
        i2c_gpio_init(i2c_gpio, num_bus, I2C_PMIC);
 
+       /* Reset on fsa9480 early */
+       check_micro_usb(1);
        /* Reset on max17040 early */
        if (battery_soc == 0)
                check_battery(1);
@@ -362,7 +374,7 @@ static const char *board_name[] = {
        "P1P2",         /* Don't remove it */
        "Geminus",
        "Cypress",
-       "Neptune",
+       "Limo SDK",
 };
 
 enum {
@@ -380,7 +392,7 @@ static char *display_features(int board, int board_rev)
        char *buf = feature_buffer;
        char *name = NULL;
 
-       if (board == MACH_AQUILA) {
+       if (board == MACH_TYPE_AQUILA) {
                if (board_rev & SPLIT_SCREEN_FEATURE)
                        name = "SplitScreen";
                if (board_rev & J1_B2_BOARD)
@@ -396,7 +408,7 @@ static char *display_features(int board, int board_rev)
                        name = "Bamboo";
        } else if (board == MACH_KESSLER) {
                if (board_rev & NEPTUNE_BOARD)
-                       name = "Neptune";
+                       name = "Limo SDK";
                if (board_rev & S1_BOARD)
                        name = "S1";
        }
@@ -408,7 +420,7 @@ static char *display_features(int board, int board_rev)
 
 static char *get_board_name(int board)
 {
-       if (board == MACH_AQUILA)
+       if (board == MACH_TYPE_AQUILA)
                return "Aquila";
        else if (board == MACH_KESSLER)
                return "Kessler";
@@ -419,7 +431,7 @@ static char *get_board_name(int board)
 
 static void check_board_revision(int board, int rev)
 {
-       if (board == MACH_AQUILA) {
+       if (board == MACH_TYPE_AQUILA) {
                /* Limo Real or Universal */
                if (rev & LIMO_UNIVERSAL_BOARD)
                        board_rev &= ~J1_B2_BOARD;
@@ -517,7 +529,7 @@ static void check_hw_revision(void)
 
                /* C110 Aquila */
                if (gpio_get_value(&gpio->gpio_j1, 4) == 0) {
-                       board = MACH_AQUILA;
+                       board = MACH_TYPE_AQUILA;
                        board_rev |= J1_B2_BOARD;
 
                        gpio_set_pull(&gpio->gpio_j2, 6, GPIO_PULL_NONE);
@@ -540,13 +552,13 @@ static void check_hw_revision(void)
 
                /* Workaround: C110 Aquila Rev0.6 */
                if (board_rev == 6) {
-                       board = MACH_AQUILA;
+                       board = MACH_TYPE_AQUILA;
                        board_rev |= LIMO_REAL_BOARD;
                }
 
                /* C110 Aquila Bamboo */
                if (gpio_get_value(&gpio->gpio_j2, 0) == 1) {
-                       board = MACH_AQUILA;
+                       board = MACH_TYPE_AQUILA;
                        board_rev |= BAMBOO_BOARD;
                }
 
@@ -663,33 +675,41 @@ static void show_hw_revision(void)
                }
        }
 
-       if (machine_is_kessler() || machine_is_aquila())
+       if (mach_is_kessler() || mach_is_aquila())
                board = gd->bd->bi_arch_number;
        else if (cpu_is_s5pc110())
                board = gd->bd->bi_arch_number - C110_MACH_START;
        else
                board = gd->bd->bi_arch_number - C100_MACH_START;
 
-
        check_board_revision(board, board_rev);
 
        /* Set CPU Revision */
-       if (machine_is_aquila()) {
+       if (mach_is_aquila()) {
                if (board_is_limo_real()) {
                        if ((board_rev & 0xf) < 8)
                                s5pc1xx_set_cpu_rev(0);
                }
-       } else if (machine_is_kessler()) {
-               s5pc1xx_set_cpu_rev(1);
-       } else if (machine_is_geminus()) {
+               else if (board_is_bamboo())
+                       s5pc1xx_set_cpu_rev(0);
+       } else if (mach_is_kessler()) {
+               if (board_is_neptune() && hwrevision(2))
+                       s5pc1xx_set_cpu_rev(2); /* EVT1-Fused */
+               else
+                       s5pc1xx_set_cpu_rev(1);
+       } else if (mach_is_geminus()) {
                if ((board_rev & 0xf) < 1)
                        s5pc1xx_set_cpu_rev(0);
-       } else if (machine_is_cypress()) {
+       } else if (mach_is_cypress()) {
                s5pc1xx_set_cpu_rev(1);
        } else {
                s5pc1xx_set_cpu_rev(0);
        }
 
+       if (cpu_is_s5pc110())
+               writel(0xc1100000 | (0xffff & (s5pc1xx_get_cpu_rev() ? 1 : 0)),
+                               S5PC110_INFORM3);
+
        empty_device_info_buffer();
        dprintf("HW Revision:\t%x (%s%s) %s\n",
                board_rev, get_board_name(board),
@@ -704,11 +724,11 @@ static void check_auto_burn(void)
        char buf[64];
 
        if (readl(magic_base) == 0x426f6f74) {  /* ASICC: Boot */
-               printf("Auto burning bootloader\n");
+               puts("Auto burning bootloader\n");
                count += sprintf(buf + count, "run updateb; ");
        }
        if (readl(magic_base + 0x04) == 0x4b65726e) {   /* ASICC: Kern */
-               printf("Auto burning kernel\n");
+               puts("Auto burning kernel\n");
                count += sprintf(buf + count, "run updatek; ");
        }
 
@@ -816,7 +836,7 @@ static void check_keypad(void)
        unsigned int i;
        unsigned int auto_download = 0;
 
-       if (machine_is_wmg160())
+       if (mach_is_wmg160())
                return;
 
        if (cpu_is_s5pc100()) {
@@ -883,20 +903,24 @@ static void check_keypad(void)
        /* KEYIFCOL reg clear */
        writel(0, reg + S5PC1XX_KEYIFCOL_OFFSET);
 
-       if (machine_is_aquila() || machine_is_kessler()) {
+       if (mach_is_aquila() || mach_is_kessler()) {
                /* volume down */
                if (row_state[1] & 0x2)
                        display_info = 1;
-               if (board_is_neptune()) {
+               if (board_is_neptune() && hwrevision(0)) {
                        /* home & volume down */
                        if ((row_state[1] & 0x1) && (row_state[1] & 0x2))
                                auto_download = 1;
+               } else if (board_is_neptune() && hwrevision(2)) {
+                       /* cam full shot & volume down */
+                       if ((row_state[1] & 0x6) && (row_state[2] & 0x4))
+                               auto_download = 1;
                } else {
                        /* cam full shot & volume down */
                        if ((row_state[0] & 0x1) && (row_state[1] & 0x2))
                                auto_download = 1;
                }
-       } else if (machine_is_geminus())
+       } else if (mach_is_geminus())
                /* volume down & home */
                if ((row_state[1] & 0x2) && (row_state[2] & 0x1))
                        auto_download = 1;
@@ -912,21 +936,21 @@ static void check_battery(int mode)
 
        i2c_set_bus_num(I2C_GPIO3);
 
-       if (machine_is_aquila()) {
+       if (mach_is_aquila()) {
                if (board_is_j1b2())
                        return;
-       } else if (machine_is_kessler()) {
+       } else if (mach_is_kessler()) {
                i2c_set_bus_num(I2C_GPIO7);
-       } else if (machine_is_cypress()) {
+       } else if (mach_is_cypress()) {
                i2c_set_bus_num(I2C_GPIO7);
-       } else if (machine_is_geminus()) {
+       } else if (mach_is_geminus()) {
                if (hwrevision(1))
                        i2c_set_bus_num(I2C_GPIO7);
        } else
                return;
 
        if (i2c_probe(addr)) {
-               printf("Can't found max17040 fuel gauge\n");
+               puts("Can't found max17040 fuel gauge\n");
                return;
        }
 
@@ -964,7 +988,7 @@ static void check_mhl(void)
 
        /* set usb path */
        if (i2c_probe(addr)) {
-               printf("Can't found MHL Chip\n");
+               puts("Can't found MHL Chip\n");
                return;
        }
 
@@ -994,7 +1018,7 @@ static int max8998_probe(void)
        i2c_set_bus_num(I2C_PMIC);
 
        if (i2c_probe(addr)) {
-               printf("Can't found max8998\n");
+               puts("Can't found max8998\n");
                return 1;
        }
 
@@ -1128,20 +1152,20 @@ static unsigned short get_adc_value(int channel)
        char buf[64];
        unsigned int loop = 0;
 
-       if (machine_is_kessler())
+       if (mach_is_kessler())
                ldonum = 4;
-       else if (machine_is_geminus())
+       else if (mach_is_geminus())
                ldonum = 4;
-       else if (machine_is_wmg160())
+       else if (mach_is_wmg160())
                ldonum = 4;
-       else if (machine_is_cypress())
+       else if (mach_is_cypress())
                ldonum = 8;
-       else if (machine_is_tickertape())
+       else if (mach_is_tickertape())
                ldonum = 8;
-       else if (machine_is_aquila())
+       else if (mach_is_aquila())
                ldonum = 8;
        /*
-       else if (machine_is_p1p2())
+       else if (mach_is_p1p2())
                ldonum = 4;
        */
 
@@ -1159,7 +1183,7 @@ static unsigned short get_adc_value(int channel)
        do {
                udelay(1);
                reg = readl(&adc->adccon);
-       } while (!reg & (1 << 15) && loop++ < 1000);
+       } while (!(reg & (1 << 15)) && (loop++ < 1000));
 
        ret = readl(&adc->adcdat0) & 0xFFF;
        sprintf(buf, "pmic ldo %d off", ldonum);
@@ -1170,7 +1194,7 @@ static unsigned short get_adc_value(int channel)
 
 static int adc_get_average_ambient_temperature(void)
 {
-       if (machine_is_kessler()) {
+       if (mach_is_kessler()) {
                unsigned short min = USHRT_MAX;
                unsigned short max = 0;
                unsigned int sum = 0;
@@ -1238,7 +1262,7 @@ static void charger_en(int enable)
                return;
 
        if (!enable) {
-               printf("Disable the charger.\n");
+               puts("Disable the charger.\n");
                i2c_read(addr, 0x0D, 1, val, 1);
                val[0] &= ~(0x1);
                val[0] |= 0x1;
@@ -1280,7 +1304,7 @@ static void into_charge_mode(void)
 
        max8998_clear_interrupt();
 
-       printf("Charge Mode\n");
+       puts("Charge Mode\n");
        charger_en(charger_speed);
 
 #ifdef CONFIG_S5PC1XXFB
@@ -1318,10 +1342,11 @@ static void into_charge_mode(void)
                }
        }
        exit_font();
-#endif
+
        /* Disable the display to prevent flickering */
        /* TODO: how to reenable the display later? */
        lcd_power_on(0);
+#endif
 
        do {
                struct s5pc110_rtc *rtc = (struct s5pc110_rtc *)S5PC110_RTC_BASE;
@@ -1374,7 +1399,7 @@ static void into_charge_mode(void)
                                wakeup_stat = do_sleep(&ctt, 0, 1, argv);
                        }
                } else {
-                       printf("\n\n\nERROR: this is not S5PC110.\n\n\n");
+                       puts("\n\n\nERROR: this is not S5PC110.\n\n\n");
                        return;
                }
 
@@ -1415,10 +1440,24 @@ static void into_charge_mode(void)
 
        } while (wakeup_stat == 0x04); /* RTC TICK */
 
+#ifdef CONFIG_S5PC1XXFB
 restore_screen:
        /* TODO: Reenable logo display (not working yet) */
        lcd_power_on(1);
        drv_lcd_init_resume();
+#endif
+}
+
+#define S5PC110_RST_STAT       0xE010A000
+
+#define SWRESET                        (1 << 3)
+#define WDTRESET               (1 << 2)
+#define WARMRESET              (1 << 1)
+#define EXTRESET               (1 << 0)
+
+static int get_reset_status(void)
+{
+       return readl(S5PC110_RST_STAT) & 0xf;
 }
 
 static int fsa9480_probe(void)
@@ -1435,19 +1474,19 @@ static int fsa9480_probe(void)
 
        i2c_set_bus_num(I2C_PMIC);
 
-       if (machine_is_kessler()) {
+       if (mach_is_kessler()) {
                i2c_set_bus_num(I2C_GPIO6);
-       } else if (machine_is_cypress()) {
+       } else if (mach_is_cypress()) {
                i2c_set_bus_num(I2C_GPIO6);
-       } else if (machine_is_geminus()) {
+       } else if (mach_is_geminus()) {
                if (hwrevision(1))
                        i2c_set_bus_num(I2C_GPIO6);
-       } else if (machine_is_wmg160()) {
+       } else if (mach_is_wmg160()) {
                i2c_set_bus_num(I2C_GPIO6);
        }
 
        if (i2c_probe(addr)) {
-               printf("Can't found fsa9480\n");
+               puts("Can't found fsa9480\n");
                return 1;
        }
 
@@ -1469,7 +1508,7 @@ static void check_micro_usb(int intr)
        /* Clear Interrupt */
        if (intr) {
                i2c_read(addr, 0x03, 1, val, 2);
-               udelay(500 * 1000);
+               return;
        }
 
        /* Read Device Type 1 */
@@ -1500,15 +1539,19 @@ static void check_micro_usb(int intr)
                        charger_en(0);
        }
 
-       /* If Factory Mode is Boot ON-USB, go to download mode */
-       i2c_read(addr, 0x07, 1, val, 1);
+       /* If reset status is watchdog reset then skip it */
+       if (!(get_reset_status() & WDTRESET)) {
+               /* If Factory Mode is Boot ON-USB, go to download mode */
+               i2c_read(addr, 0x07, 1, val, 1);
 
 #define FSA_ADC_FAC_USB_OFF    0x18
 #define FSA_ADC_FAC_USB_ON     0x19
 #define FSA_ADC_FAC_UART       0x1d
 
-       if (val[0] == FSA_ADC_FAC_USB_ON || val[0] == FSA_ADC_FAC_USB_OFF)
-               setenv("bootcmd", "usbdown");
+               if (val[0] == FSA_ADC_FAC_USB_ON ||
+                       val[0] == FSA_ADC_FAC_USB_OFF)
+                       setenv("bootcmd", "usbdown");
+       }
 
        path = getenv("usb");
 
@@ -1587,7 +1630,7 @@ static void init_pmic(void)
        val[0] &= ~(MAX8998_LDO10 | MAX8998_LDO11 |
                        MAX8998_LDO12 | MAX8998_LDO13);
 
-       if (machine_is_kessler())
+       if (mach_is_kessler())
                val[0] |= MAX8998_LDO7;         /* LDO7: VLCD_1.8V */
 
        i2c_write(addr, MAX8998_REG_ONOFF2, 1, val, 1);
@@ -1601,7 +1644,7 @@ static void init_pmic(void)
        val[0] &= ~(MAX8998_LDO14 | MAX8998_LDO15 |
                        MAX8998_LDO16 | MAX8998_LDO17);
 
-       if (machine_is_kessler())
+       if (mach_is_kessler())
                val[0] |= MAX8998_LDO17;        /* LDO17: VCC_3.0V_LCD */
 
        i2c_write(addr, MAX8998_REG_ONOFF3, 1, val, 1);
@@ -1624,20 +1667,20 @@ static void setup_power_down_mode_registers(void)
                return;
 
        /* Only Limo real and kessler supports worked for sleep currnet */
-       if (machine_is_aquila()) {
+       if (mach_is_aquila()) {
                if (board_is_limo_real())
                        /* Support */;
                else
                        return;
-       } else if (machine_is_kessler()) {
+       } else if (mach_is_kessler()) {
                /* Support */;
-       } else if (machine_is_geminus()) {
+       } else if (mach_is_geminus()) {
                /* Support */;
        } else {
                return;
        }
 
-       if (machine_is_aquila()) {
+       if (mach_is_aquila()) {
                /* Aquila rev 0.8 or lower */
                p = aquila_powerdown_modes;
                ge = aquila_external_powerdown_modes;
@@ -1645,7 +1688,7 @@ static void setup_power_down_mode_registers(void)
                n_p = ARRAY_SIZE(aquila_powerdown_modes);
                n_ge = ARRAY_SIZE(aquila_external_powerdown_modes);
                n_mr = ARRAY_SIZE(aquila_mirror_powerdown_mode);
-       } else if (machine_is_kessler()) {
+       } else if (mach_is_kessler()) {
                /* Aquila rev 0.9 */
                p = kessler_powerdown_modes;
                ge = kessler_external_powerdown_modes;
@@ -1653,7 +1696,7 @@ static void setup_power_down_mode_registers(void)
                n_p = ARRAY_SIZE(kessler_powerdown_modes);
                n_ge = ARRAY_SIZE(kessler_external_powerdown_modes);
                n_mr = ARRAY_SIZE(kessler_mirror_powerdown_mode);
-       } else if (machine_is_geminus()) {
+       } else if (mach_is_geminus()) {
                if (hwrevision(1)) {
                        /* Same as Aquila rev 0.9 */
 #if 0
@@ -1771,9 +1814,9 @@ void lcd_cfg_gpio(void)
        gpio_cfg_pin(&gpio_base->gpio_j1, 3, GPIO_OUTPUT);
 
        /* LCD_BACKLIGHT_EN */
-       if (machine_is_geminus())
+       if (mach_is_geminus())
                gpio_cfg_pin(&gpio_base->gpio_mp0_5, 0, GPIO_OUTPUT);
-       if (board_is_neptune()) {
+       if (board_is_neptune() && hwrevision(0)) {
                gpio_cfg_pin(&gpio_base->gpio_mp0_4, 4, GPIO_OUTPUT);
                gpio_direction_output(&gpio_base->gpio_mp0_4, 4, 0);
        }
@@ -1787,7 +1830,7 @@ void lcd_cfg_gpio(void)
        gpio_cfg_pin(&gpio_base->gpio_mp0_4, 2, GPIO_INPUT);
        gpio_cfg_pin(&gpio_base->gpio_mp0_4, 3, GPIO_OUTPUT);
 
-       if (machine_is_aquila() || machine_is_kessler()) {
+       if (mach_is_aquila() || mach_is_kessler()) {
                spi_pd.cs_bank = &gpio_base->gpio_mp0_1;
                spi_pd.cs_num = 1;
                spi_pd.clk_bank = &gpio_base->gpio_mp0_4;
@@ -1797,7 +1840,7 @@ void lcd_cfg_gpio(void)
                spi_pd.so_bank = &gpio_base->gpio_mp0_4;
                spi_pd.so_num = 2;
 
-               if (board_is_neptune())
+               if (board_is_neptune() && hwrevision(0))
                        s6d16a0x_set_platform_data(&spi_pd);
                else {
                        s6e63m0_set_platform_data(&spi_pd);
@@ -1806,7 +1849,7 @@ void lcd_cfg_gpio(void)
                }
        }
 
-       if (machine_is_cypress()) {
+       if (mach_is_cypress()) {
 #if 0          /* universal cypress */
                /* FLCD_CS */
                gpio_cfg_pin(&gpio_base->gpio_mp0_1, 0, GPIO_OUTPUT);
@@ -1858,14 +1901,14 @@ void backlight_on(unsigned int onoff)
        struct s5pc110_gpio *gpio = (struct s5pc110_gpio *) S5PC110_GPIO_BASE;
 
        if (onoff) {
-               if (machine_is_geminus())
+               if (mach_is_geminus())
                        gpio_set_value(&gpio->gpio_mp0_5, 0, 1);
        } else {
-               if (machine_is_geminus())
+               if (mach_is_geminus())
                        gpio_set_value(&gpio->gpio_mp0_5, 0, 0);
        }
 
-       if (machine_is_kessler() && board_is_neptune()) {
+       if (mach_is_kessler() && board_is_neptune() && hwrevision(0)) {
                gpio_set_value(&gpio->gpio_mp0_4, 4, 1);
                udelay(6);
 
@@ -1874,7 +1917,7 @@ void backlight_on(unsigned int onoff)
                addr = 0x76;
                if (i2c_probe(addr)) {
                        if (i2c_probe(addr)) {
-                               printf("Can't found s6d16a0x backlight i2c\n");
+                               puts("Can't found s6d16a0x backlight i2c\n");
                                return;
                        }
                }
@@ -1895,9 +1938,9 @@ void reset_lcd(void)
 {
        struct s5pc110_gpio *gpio = (struct s5pc110_gpio *) S5PC110_GPIO_BASE;
 
-       if (machine_is_aquila() || machine_is_kessler() || machine_is_geminus())
+       if (mach_is_aquila() || mach_is_kessler() || mach_is_geminus())
                gpio_set_value(&gpio->gpio_mp0_5, 5, 1);
-       if (machine_is_cypress())
+       if (mach_is_cypress())
                gpio_set_value(&gpio->gpio_mp0_4, 5, 1);
 }
 
@@ -1906,13 +1949,13 @@ void lcd_power_on(unsigned int onoff)
        struct s5pc110_gpio *gpio = (struct s5pc110_gpio *) S5PC110_GPIO_BASE;
        if (onoff) {
                /* TSP_LDO_ON */
-               if (machine_is_aquila() || machine_is_geminus())
+               if (mach_is_aquila() || mach_is_geminus())
                        gpio_set_value(&gpio->gpio_j1, 3, 1);
 
-               if (machine_is_cypress())
+               if (mach_is_cypress())
                        gpio_set_value(&gpio->gpio_g2, 2, 1);
 
-               if (machine_is_kessler()) {
+               if (mach_is_kessler()) {
                        unsigned char addr;
                        unsigned char val[2];
                        unsigned char val2[2];
@@ -1941,13 +1984,13 @@ void lcd_power_on(unsigned int onoff)
                        i2c_write(addr, MAX8998_REG_ONOFF2, 1, val, 1);
                }
        } else {
-               if (machine_is_aquila() || machine_is_geminus())
+               if (mach_is_aquila() || mach_is_geminus())
                        gpio_set_value(&gpio->gpio_j1, 3, 0);
 
-               if (machine_is_cypress())
+               if (mach_is_cypress())
                        gpio_set_value(&gpio->gpio_g2, 2, 0);
 
-               if (machine_is_kessler()) {
+               if (mach_is_kessler()) {
                        unsigned char addr;
                        unsigned char val[2];
 
@@ -1977,7 +2020,7 @@ extern void s6d16a0x_enable_ldo(unsigned int onoff);
 
 int s5p_no_lcd_support(void)
 {
-       if (machine_is_wmg160())
+       if (mach_is_wmg160())
                return 1;
        return 0;
 }
@@ -2029,8 +2072,8 @@ void init_panel_info(vidinfo_t *vid)
        vid->vl_vbpd    = 3;
        vid->vl_vfpd    = 28;
 
-       if (machine_is_aquila() || machine_is_kessler()
-                       || machine_is_cypress()) {
+       if (mach_is_aquila() || mach_is_kessler()
+                       || mach_is_cypress()) {
                vid->cfg_gpio = lcd_cfg_gpio;
                vid->reset_lcd = reset_lcd;
                vid->backlight_on = backlight_on;
@@ -2042,7 +2085,7 @@ void init_panel_info(vidinfo_t *vid)
                vid->reset_delay = 120000;
        }
 
-       if (board_is_neptune()) {
+       if (board_is_neptune() && hwrevision(0)) {
                vid->vl_freq    = 100;
                vid->vl_col     = 320;
                vid->vl_row     = 480;
@@ -2080,7 +2123,7 @@ void init_panel_info(vidinfo_t *vid)
 
        }
 
-       if (machine_is_geminus()) {
+       if (mach_is_geminus()) {
                vid->vl_freq    = 60;
                vid->vl_col     = 1024,
                vid->vl_row     = 600,
@@ -2179,17 +2222,17 @@ int misc_init_r(void)
        /* It should be located at first */
        lcd_is_enabled = 0;
 
-       if (machine_is_aquila() || machine_is_kessler()) {
-               if (board_is_neptune())
+       if (mach_is_aquila() || mach_is_kessler()) {
+               if (board_is_neptune() && hwrevision(0))
                        setenv("lcdinfo", "lcd=s6d16a0x");
                else if (board_is_media())
                        setenv("lcdinfo", "lcd=s6e63m0");
                else
                        setenv("lcdinfo", "lcd=s6e63m0");
        }
-       if (machine_is_geminus())
+       if (mach_is_geminus())
                setenv("lcdinfo", "lcd=lms480jc01");
-       if (machine_is_cypress())
+       if (mach_is_cypress())
                setenv("lcdinfo", "lcd=s6e63m0");
 #endif
        setup_meminfo();
@@ -2230,7 +2273,7 @@ int misc_init_r(void)
        check_battery(0);
 
        /* check fsa9480 */
-       check_micro_usb(1);
+       check_micro_usb(0);
 
        return 0;
 }
@@ -2241,9 +2284,20 @@ int board_init(void)
        /* Set Initial global variables */
        s5pc110_gpio = (struct s5pc110_gpio *) S5PC110_GPIO_BASE;
 
-       gd->bd->bi_arch_number = MACH_AQUILA;
+       gd->bd->bi_arch_number = MACH_TYPE_AQUILA;
        gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
 
+#ifdef CONFIG_LCD
+       /* 
+        * set reserved memory region for framebuffer.
+        *
+        * this region wouldn't be rewrited by kernel so
+        * could avoid nosie screen filled by garbages
+        * after hibernation resume has been completed.
+        */
+       gd->fb_base = CONFIG_FB_RESERVED_MEM;
+#endif
+
        /* Check H/W Revision */
        check_hw_revision();
 
@@ -2284,16 +2338,21 @@ int dram_init(void)
                 * Aquila Rev0.5 4G3G1G
                 * Aquila Rev0.8 4G3G1G
                 * Aquila Rev0.9 4G3G1G
+                * Neptune Rev 0.2 4G3G1G
                 */
-               if (machine_is_aquila() || machine_is_kessler())
-                       if (hwrevision(5) || hwrevision(8) || hwrevision(9)) {
+               if (mach_is_aquila() || mach_is_kessler()) {
+                       if ((!board_is_neptune() && (hwrevision(5) ||
+                               hwrevision(8) || hwrevision(9))) ||
+                               (board_is_neptune() && hwrevision(2))) {
                                memconfig1 = readl(base + MEMCONFIG1_OFFSET);
 
                                sz = (memconfig1 >> 16) & 0xFF;
                                sz = ((unsigned char) ~sz) + 1;
                                sz = sz << 4;
                        }
-
+                       if (mach_is_kessler() && board_is_s1())
+                               sz = 0;
+               }
        }
        /*
         * bi_dram[1].size contains all DMC1 memory size
@@ -2330,7 +2389,7 @@ void board_sleep_init(void)
        if (max8998_probe())
                return;
 
-       if (machine_is_kessler()) {
+       if (mach_is_kessler()) {
                /* Set ONOFF1 */
                i2c_read(addr, MAX8998_REG_ONOFF1, 1, val, 1);
                saved_val[0][0] = val[0];
@@ -2434,13 +2493,13 @@ void board_sleep_resume(void)
        /* Set ONOFF4 */
        i2c_write(addr, MAX8998_REG_ONOFF3+1, 1, saved_val[3], 1);
        i2c_read(addr, MAX8998_REG_ONOFF3+1, 1, val, 1);
-       printf("Waked up.\n");
+       puts("Waked up.\n");
 
        /* check max17040 */
        check_battery(0);
 
        /* check fsa9480 */
-       check_micro_usb(1);
+       check_micro_usb(0);
 }
 
 #if defined(CONFIG_USB_GADGET_S3C_UDC_OTG)
@@ -2462,7 +2521,7 @@ static int s5pc1xx_phy_control(int on)
                                check_mhl();
                }
 
-               if (machine_is_tickertape())
+               if (mach_is_tickertape())
                        /* USB_SEL: XM0ADDR_0: MP04[0] output mode */
                        gpio_direction_output(&s5pc110_gpio->gpio_mp0_4, 0, 0);
 
@@ -2513,7 +2572,7 @@ int usb_board_init(void)
 
                /* PMIC */
                if (i2c_read(0x66, 0, 1, val, 2)) {
-                       printf("i2c_read error\n");
+                       puts("i2c_read error\n");
                        return 1;
                }
 
@@ -2521,7 +2580,7 @@ int usb_board_init(void)
                val[1] |= (1 << 5);
 
                if (i2c_write(0x66, 0, 1, val, 2)) {
-                       printf("i2c_write error\n");
+                       puts("i2c_write error\n");
                        return 1;
                }
                i2c_read(0x66, 0, 1, val, 2);
@@ -2538,7 +2597,7 @@ int usb_board_init(void)
                        check_mhl();
        }
 
-       if (machine_is_tickertape())
+       if (mach_is_tickertape())
                /* USB_SEL: XM0ADDR_0: MP04[0] output mode */
                gpio_direction_output(&s5pc110_gpio->gpio_mp0_4, 0, 0);
 
@@ -2552,7 +2611,7 @@ int usb_board_init(void)
 #ifdef CONFIG_GENERIC_MMC
 int s5p_no_mmc_support(void)
 {
-       if (machine_is_wmg160())
+       if (mach_is_wmg160())
                return 1;
        return 0;
 }
@@ -2565,10 +2624,10 @@ int board_mmc_init(bd_t *bis)
        int i;
 
        /* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */
-       if (machine_is_kessler())
+       if (mach_is_kessler())
                gpio_direction_output(&s5pc110_gpio->gpio_j2, 7, 1);
 
-       if (machine_is_wmg160())
+       if (mach_is_wmg160())
                return -1;
 
        /* MMC0 Clock source = SCLKMPLL */
@@ -2609,7 +2668,7 @@ int board_mmc_init(bd_t *bis)
                gpio_set_drv(&s5pc110_gpio->gpio_g0, i, GPIO_DRV_4X);
        }
 
-       if (machine_is_geminus()) {
+       if (mach_is_geminus()) {
                gpio_direction_output(&s5pc110_gpio->gpio_j2, 7, 1);
                gpio_set_pull(&s5pc110_gpio->gpio_j2, 7, GPIO_PULL_NONE);
        }