diff --git a/arch/arm/mach-s3c6410/clock.c b/arch/arm/mach-s3c6410/clock.c
index 1268a73..46eea87 100644
--- a/arch/arm/mach-s3c6410/clock.c
+++ b/arch/arm/mach-s3c6410/clock.c
@@ -56,7 +56,7 @@
 #include <asm/arch/regs-usb-otg-hs.h>
 #endif
 
-#define HCLK_GATING_ON_LIST	/*S3C_CLKCON_HCLK_BUS |*/ S3C_CLKCON_HCLK_DDR1 | S3C_CLKCON_HCLK_DDR0 |\
+#define HCLK_GATING_ON_LIST	S3C_CLKCON_HCLK_BUS | S3C_CLKCON_HCLK_DDR1 | S3C_CLKCON_HCLK_DDR0 |\
 				S3C_CLKCON_HCLK_MEM1 | S3C_CLKCON_HCLK_MEM0 | S3C_CLKCON_HCLK_DMA0 |\
 				S3C_CLKCON_HCLK_DMA1 | S3C_CLKCON_HCLK_INTC | S3C_CLKCON_HCLK_LCD |\
 				S3C_CLKCON_HCLK_DHOST | S3C_CLKCON_HCLK_POST0 | S3C_CLKCON_HCLK_MFC
diff --git a/arch/arm/mach-s3c6410/mach-smdk6410.c b/arch/arm/mach-s3c6410/mach-smdk6410.c
index f8eeba2..78c86ca 100644
--- a/arch/arm/mach-s3c6410/mach-smdk6410.c
+++ b/arch/arm/mach-s3c6410/mach-smdk6410.c
@@ -289,168 +289,40 @@ static struct platform_device s3c_device_dm9000 = {
 	.resource	= dm9000_resources,
 };
 #endif
-/////////////////////////////////////////////////////HHTECH wk////////////////
-/*
- * GPIO Buttons
- */
-#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
-//static struct gpio_keys_button hhmid_buttons[] __initdata = {
-static struct gpio_keys_button hhmid_buttons[] = {
-#if defined (CONFIG_LCD_4)
-        {
-                .gpio           = S3C_GPN2,			//32*16 + 2
-                .code		= 196,
-                .desc           = "Button 0",
-                .active_low     = 1,
-                .debounce_interval = 5,
-        },
-	{
-                .gpio           = S3C_GPN12,
-                .code		= 197,
-                .desc           = "Button 3",
-                .active_low     = 1,
-                .debounce_interval = 5,
-        },
-	{
-                .gpio           = S3C_GPN15,
-                .code		= 195,
-                .desc           = "Button 4",
-                .active_low     = 1,
-                .debounce_interval = 5,
-        },
-#else
-	{
-                .gpio           = S3C_GPN4,
-                .code		= KEY_F7,
-                .desc           = "Button 0",
-                .active_low     = 1,
-                .debounce_interval = 5,
-        },
-	{
-                .gpio           = S3C_GPN3,
-                .code		= KEY_F8,
-                .desc           = "Button 1",
-                .active_low     = 1,
-                .debounce_interval = 5,
-        },
-        {
-                .gpio           = S3C_GPN2,			//32*16 + 2
-                .code		= KEY_F6,
-                .desc           = "Button 2",
-                .active_low     = 1,
-                .debounce_interval = 5,
-        },
-        {
-                .gpio           = S3C_GPN15,
-                .code		= KEY_ENTER,
-                .desc           = "Button 3",
-                .active_low     = 1,
-                .debounce_interval = 5,
-        },
-	{
-                .gpio           = S3C_GPN12,
-                .code		= KEY_ESC,
-                .desc           = "Button 4",
-                .active_low     = 1,
-                .debounce_interval = 5,
-        },
-#endif
-};
-
-//static struct gpio_keys_platform_data hhmid_button_data __initdata = {
-static struct gpio_keys_platform_data hhmid_button_data  = {
-        .buttons        = hhmid_buttons,
-        .nbuttons       = ARRAY_SIZE(hhmid_buttons),
-};
-
-static struct platform_device hhmid_button_device  = {
-        .name           = "gpio-keys",
-        .id             = 0,
-        .num_resources  = 0,
-        .dev            = {
-                .platform_data  = &hhmid_button_data,
-        }
-};
-
-//*************************************************************************************
-static struct gpio_keys_button hhmid_buttons_2[] = {
-	{
-                .gpio           = S3C_GPL14,
-                .code		= KEY_POWER,
-                .desc           = "Button 5",
-                .active_low     = 1,
-                .debounce_interval = 5,
-        },
-
-};
-static struct gpio_keys_platform_data hhmid_button_data_2  = {
-        .buttons        = hhmid_buttons_2,
-        .nbuttons       = ARRAY_SIZE(hhmid_buttons_2),
-	.rep = 1,
-};
-
-static struct platform_device hhmid_button_device_2  = {
-        .name           = "gpio-keys",
-        .id             = 1,
-        .num_resources  = 0,
-        .dev            = {
-                .platform_data  = &hhmid_button_data_2,
-        }
-};
-#endif
-/* HHTECH wk */
 
 /* Add devices as drivers are integrated */
 static struct platform_device *smdk6410_devices[] __initdata = {
 	&s3c_device_rtc,
-	&s3c_device_ac97,
-	&s3c_device_iis,
-	&s3c_device_ts,
-	&s3c_device_adc,
+	//&s3c_device_ac97,
+	//&s3c_device_iis,
+	//&s3c_device_ts,
+	//&s3c_device_adc,
 	&s3c64xx_device_i2c0,
 	&s3c64xx_device_i2c1,
-	&hhmid_button_device,
-	&hhmid_button_device_2,
 	&s3c_gpio,
 	&s3c_device_usb,
 	&s3c_device_usbgadget,
 	&s3c_device_usb_otghcd,
-	&s3c_device_tvenc,
-	&s3c_device_tvscaler,
-	&s3c_device_hsmmc1, /* INAND initialize before SD card */
 	&s3c_device_hsmmc0,
+	&s3c_device_hsmmc1, 
 	&s3c_device_hsmmc2,
-	&s3c_device_wdt,
-	&s3c_device_jpeg,
-	&s3c_device_vpp,
-	&s3c_device_ide,
+	//&s3c_device_wdt,
+	//&s3c_device_jpeg,
 	&s3c_device_spi0,
 	&s3c_device_spi1,
-	&s3c_device_g2d,
-	&s3c_device_keypad,
-	&s3c_device_smc911x,
-	&s3c_device_camif,
-	&s3c_device_mfc,
-	&s3c_device_g3d,
-	&s3c_device_rotator,
+	//&s3c_device_g2d,
+	//&s3c_device_camif,
+	//&s3c_device_mfc,
+	//&s3c_device_g3d,
+	//&s3c_device_rotator,
 #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
-//	&s3c_device_dm9000,
+	&s3c_device_dm9000,
 #endif
 };
 
 static void s3c6410_power_off(void)
 {
-	int dc_status = 0;
-#if defined (CONFIG_LCD_4)
-	dc_status = gpio_get_value(GPIO_DC_DETE);
-#else
-	dc_status = !gpio_get_value(GPIO_DC_DETE);
-#endif
-
-	if(dc_status)
-	    machine_restart(NULL);
-	else
-	    gpio_direction_output(S3C_GPK15, 1);
+    machine_restart(NULL);
 }
 
 static void __init smdk6410_map_io(void)
@@ -576,7 +448,7 @@ static void smdk6410_set_qos(void)
 
 static void __init smdk6410_machine_init (void)
 {
-	smdk6410_smc911x_set();
+	//smdk6410_smc911x_set();
 
 	s3c_i2c0_set_platdata(NULL);
 	s3c_i2c1_set_platdata(NULL);
@@ -585,15 +457,16 @@ static void __init smdk6410_machine_init (void)
 	i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
 
 	platform_add_devices(smdk6410_devices, ARRAY_SIZE(smdk6410_devices));
+    /*
 
 	if(is_smdk6430()) {
 		platform_device_del(&s3c_device_mfc);
 		platform_device_del(&s3c_device_g3d);
 	}
-
+*/
 	smdk_machine_init();
-	smdk6410_hsmmc_init();
-	smdk6410_set_qos();
+	//smdk6410_hsmmc_init();
+	//smdk6410_set_qos();
 }
 
 #if !defined(CONFIG_MACH_SMDK6430)
@@ -1029,6 +902,14 @@ unsigned int s3c_adc_convert(void __iomem *reg_base,unsigned int s3c_adc_port)
 
 	udelay(10);
 
+	unsigned int adc_return;
+	unsigned long data0;
+	unsigned long data1;
+
+	writel(readl(reg_base+S3C2410_ADCCON)|S3C2410_ADCCON_SELMUX(s3c_adc_port), reg_base+S3C2410_ADCCON);
+
+	udelay(10);
+
 	writel(readl(reg_base+S3C2410_ADCCON)|S3C2410_ADCCON_ENABLE_START, reg_base+S3C2410_ADCCON);
 
        do {
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
index ecdea3c..1f54096 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -1055,18 +1055,4 @@ config S3C_MEM
 
 	  If unsure, say Y.
 
-choice
-	prompt "HHTECH MID GPIO"
-	help
-	    Select LCD either  4.3''  or 7 ''
-    config LCD_4
-	bool "Support for 4.3 inch LCD"
-	help
-	    for HHTECH 4.3 inch, provide sysfs interface to APP
-    config LCD_7
-	bool "Support for 7 inch LCD"
-	help
-	    for HHTECH 7 inch LCD
-endchoice
 endmenu
-
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
index aa93ba4..a489e1a 100644
--- a/drivers/net/dm9000.c
+++ b/drivers/net/dm9000.c
@@ -82,7 +82,7 @@
 
 #define DM9000_TIMER_WUT  jiffies+(HZ*2)	/* timer wakeup time : 2 second */
 
-#define DM9000_DEBUG 0
+#define DM9000_DEBUG 2
 
 #if DM9000_DEBUG > 2
 #define PRINTK3(args...)  printk(CARDNAME ": " args)
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 31888dc..5ebcbe6 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -297,7 +297,7 @@ config USB_GADGET_S3C_HS
 
 config USB_GADGET_S3C_OTGD_HS
         boolean "S3C USB OTG controller"
-        depends on PLAT_S3C64XX #&& !(USB_S3C_OTG_HOST)	# XXX: mhfan
+        depends on PLAT_S3C64XX && !(USB_S3C_OTG_HOST)
         select USB_GADGET_SELECTED
 	select USB_GADGET_DUALSPEED
         help
diff --git a/drivers/usb/host/ohci-s3c2410.c b/drivers/usb/host/ohci-s3c2410.c
index c3401db..64c44d7 100644
--- a/drivers/usb/host/ohci-s3c2410.c
+++ b/drivers/usb/host/ohci-s3c2410.c
@@ -35,11 +35,8 @@
 static struct clk *clk;
 static struct clk *usb_clk;
 
-#if defined (CONFIG_LCD_7)
 #undef	USB_HOST_PORT2_EN
-#else
-#define	USB_HOST_PORT2_EN
-#endif
+//#define	USB_HOST_PORT2_EN
 
 #if defined(CONFIG_PLAT_S3C64XX)
 #define S3C_USB_CLKSRC_EPLL	0
diff --git a/drivers/usb/host/s3c-otg/s3c-otg-isr.c b/drivers/usb/host/s3c-otg/s3c-otg-isr.c
index ba2c359..f3dd855 100644
--- a/drivers/usb/host/s3c-otg/s3c-otg-isr.c
+++ b/drivers/usb/host/s3c-otg/s3c-otg-isr.c
@@ -51,7 +51,7 @@ extern int		suspend_yet;
 extern struct work_struct port_work;
 extern struct work_struct disconnect_work;
 
-__inline__ void otg_handle_interrupt(void)
+void otg_handle_interrupt(void)
 {
 	gintsts_t	clearIntr = {.d32 = 0};
 	gintsts_t	gintsts = {.d32 = 0};
diff --git a/drivers/usb/host/s3c-otg/s3c-otg-isr.h b/drivers/usb/host/s3c-otg/s3c-otg-isr.h
index 2d30c44..655b9b6 100644
--- a/drivers/usb/host/s3c-otg/s3c-otg-isr.h
+++ b/drivers/usb/host/s3c-otg/s3c-otg-isr.h
@@ -45,7 +45,7 @@ extern "C"
 #include "s3c-otg-roothub.h"
 #include "s3c-otg-oci.h"
 
-__inline__ void otg_handle_interrupt(void);
+void otg_handle_interrupt(void);
 
 void process_port_intr(void);
 
diff --git a/drivers/usb/host/s3c-otg/s3c-otg-roothub.h b/drivers/usb/host/s3c-otg/s3c-otg-roothub.h
index 036d4be..308022d 100644
--- a/drivers/usb/host/s3c-otg/s3c-otg-roothub.h
+++ b/drivers/usb/host/s3c-otg/s3c-otg-roothub.h
@@ -61,13 +61,13 @@ typedef union _port_flags_t
 
 
 
-__inline__ int root_hub_feature(const u8 port,
+int root_hub_feature(const u8 port,
 				const u16 typeReq,
 				const u16 feature,
 				void	*buf
 				);
 
-__inline__	int get_otg_port_status(const u8 port,	
+int get_otg_port_status(const u8 port,	
 					char *status);
 
 int reset_and_enable_port(const u8 port);
diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
index ae66ace..dd4f93c 100644
--- a/drivers/video/Kconfig
+++ b/drivers/video/Kconfig
@@ -231,6 +231,11 @@ config FB_S3C_LTS222QV
 	---help---
 	TBA
 
+config FB_S3C_B089AW01
+	bool "B089AW01"
+	---help---
+	TBA
+
 config FB_S3C_A070VW04
 	bool "A070VW04"
 	---help---
diff --git a/drivers/video/s3c/Makefile b/drivers/video/s3c/Makefile
index cb6c218..54593ca 100644
--- a/drivers/video/s3c/Makefile
+++ b/drivers/video/s3c/Makefile
@@ -11,4 +11,5 @@ obj-$(CONFIG_FB_S3C_LTV350QV)	+= s3cfb_ltv350qv.o
 obj-$(CONFIG_FB_S3C_LTE480WV)	+= s3cfb_lte480wv.o
 obj-$(CONFIG_FB_S3C_A070VW04)	+= s3cfb_a070vw04.o
 obj-$(CONFIG_FB_S3C_TD043MTEX)	+= s3cfb_td043mtex.o
+obj-$(CONFIG_FB_S3C_B089AW01)	+= s3cfb_b089aw01.o
 
diff --git a/drivers/video/s3c/s3cfb_b089aw01.c b/drivers/video/s3c/s3cfb_b089aw01.c
new file mode 100644
index 0000000..1f8b9b7
--- /dev/null
+++ b/drivers/video/s3c/s3cfb_b089aw01.c
@@ -0,0 +1,263 @@
+/*
+ * drivers/video/s3c/s3cfb_b089aw01.c
+ *
+ * $Id: s3cfb_b089aw01.c,v 1.12 2008/06/05 02:13:24 jsgood Exp $
+ *
+ * Copyright (C) 2008 Jinsung Yang <jsgood.yang@samsung.com>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file COPYING in the main directory of this archive for
+ * more details.
+ *
+ *	S3C Frame Buffer Driver
+ *	based on skeletonfb.c, sa1100fb.h, s3c2410fb.c
+ */
+
+#include <linux/wait.h>
+#include <linux/fb.h>
+#include <linux/delay.h>
+#include <linux/platform_device.h>
+
+#include <asm/arch/regs-gpio.h>
+#include <asm/arch/regs-lcd.h>
+
+#include "s3cfb.h"
+#include <asm-arm/arch-s3c2410/gpio.h>
+
+#define S3C_FB_HFP   100            /* front porch */
+#define S3C_FB_HSW   1              /* Hsync width */
+#define S3C_FB_HBP   40             /* Back porch */
+
+#define S3C_FB_VFP   20              /* front porch */
+#define S3C_FB_VSW   2               /* Vsync width */
+#define S3C_FB_VBP   9 		     /* Back porch */ 
+
+#define S3C_FB_HRES		1024	/* horizon pixel  x resolition */
+#define S3C_FB_VRES		600	/* line cnt       y resolution */
+
+#define S3C_FB_HRES_VIRTUAL	1024	/* horizon pixel  x resolition */
+#define S3C_FB_VRES_VIRTUAL	600	/* line cnt       y resolution */
+
+#define S3C_FB_HRES_OSD		1024	/* horizon pixel  x resolition */
+#define S3C_FB_VRES_OSD		600	/* line cnt       y resolution */
+
+#define S3C_FB_VFRAME_FREQ     	60	/* frame rate freq */
+
+#define S3C_FB_PIXEL_CLOCK	(S3C_FB_VFRAME_FREQ * (S3C_FB_HFP + S3C_FB_HSW + S3C_FB_HBP + S3C_FB_HRES) * (S3C_FB_VFP + S3C_FB_VSW + S3C_FB_VBP + S3C_FB_VRES))
+
+#define LCD_SCEN    S3C_GPM0
+#define LCD_SCL	    S3C_GPM1
+#define LCD_SDA	    S3C_GPM2
+
+static void set_lcd_power(int val)
+{
+    if(val > 0) {
+	/* Display On */
+	s3cfb_init_hw();
+        s3cfb_start_lcd();
+    } else {
+	/* Direct Off */
+	s3cfb_stop_lcd();
+    }
+}
+
+#define WAITTIME    (10 * HZ / 1000)    // 10ms
+static int old_display_brightness = S3C_FB_MIN_BACKLIGHT_LEVEL;
+
+static void __set_brightness(int val)
+{
+    int channel = 1;  // must use channel-1
+    int usec = 0;       // don't care value 
+    unsigned long tcnt=1000;
+    unsigned long tcmp=0;
+
+    if(val == S3C_FB_MAX_BACKLIGHT_LEVEL)
+	gpio_direction_output(S3C_GPF15, 0);
+    else if(val == S3C_FB_MIN_BACKLIGHT_LEVEL)
+	gpio_direction_output(S3C_GPF15, 1);
+    else {
+	tcmp = val * 10;
+#if defined(CONFIG_S3C6410_PWM) && defined(CONFIG_PWM)
+	s3c6410_timer_setup (channel, usec, tcnt, tcmp);
+#endif
+    }
+}
+
+static void set_brightness(int val)
+{
+	int old_val = old_display_brightness;
+
+	if(val < 0) val = 0;
+	if(val > S3C_FB_MAX_BACKLIGHT_LEVEL) val = S3C_FB_MAX_BACKLIGHT_LEVEL;
+
+	if(val > old_val) {
+	    while((++old_val) < val) {
+		__set_brightness(old_val);
+		set_current_state(TASK_INTERRUPTIBLE);
+		schedule_timeout(WAITTIME); 
+	    }
+	} else {
+	    while((--old_val) > val) {
+		__set_brightness(old_val);
+		set_current_state(TASK_INTERRUPTIBLE);
+		schedule_timeout(WAITTIME);
+	    }
+	}
+
+	__set_brightness(val);
+	old_display_brightness = val;	
+}
+
+static void set_backlight_power(int val)
+{
+    if(val > 0)
+	__set_brightness(old_display_brightness);
+    else
+	__set_brightness(S3C_FB_MIN_BACKLIGHT_LEVEL);
+}
+
+static void s3cfb_set_fimd_info(void)
+{
+	s3c_fimd.vidcon1 = S3C_VIDCON1_IHSYNC_NORMAL | S3C_VIDCON1_IVSYNC_NORMAL | S3C_VIDCON1_IVDEN_NORMAL | S3C_VIDCON1_IVCLK_RISE_EDGE; 
+	s3c_fimd.vidtcon0 = S3C_VIDTCON0_VBPD(S3C_FB_VBP - 1) | S3C_VIDTCON0_VFPD(S3C_FB_VFP - 1) | S3C_VIDTCON0_VSPW(S3C_FB_VSW - 1);
+	s3c_fimd.vidtcon1 = S3C_VIDTCON1_HBPD(S3C_FB_HBP - 1) | S3C_VIDTCON1_HFPD(S3C_FB_HFP - 1) | S3C_VIDTCON1_HSPW(S3C_FB_HSW - 1);
+	s3c_fimd.vidtcon2 = S3C_VIDTCON2_LINEVAL(S3C_FB_VRES - 1) | S3C_VIDTCON2_HOZVAL(S3C_FB_HRES - 1);
+
+	s3c_fimd.vidosd0a = S3C_VIDOSDxA_OSD_LTX_F(0) | S3C_VIDOSDxA_OSD_LTY_F(0);
+	s3c_fimd.vidosd0b = S3C_VIDOSDxB_OSD_RBX_F(S3C_FB_HRES - 1) | S3C_VIDOSDxB_OSD_RBY_F(S3C_FB_VRES - 1);
+
+	s3c_fimd.vidosd1a = S3C_VIDOSDxA_OSD_LTX_F(0) | S3C_VIDOSDxA_OSD_LTY_F(0);
+	s3c_fimd.vidosd1b = S3C_VIDOSDxB_OSD_RBX_F(S3C_FB_HRES_OSD - 1) | S3C_VIDOSDxB_OSD_RBY_F(S3C_FB_VRES_OSD - 1);
+
+	s3c_fimd.width = S3C_FB_HRES;
+	s3c_fimd.height = S3C_FB_VRES;
+	s3c_fimd.xres = S3C_FB_HRES;
+	s3c_fimd.yres = S3C_FB_VRES;
+
+#if defined(CONFIG_FB_S3C_VIRTUAL_SCREEN)
+	s3c_fimd.xres_virtual = S3C_FB_HRES_VIRTUAL;
+	s3c_fimd.yres_virtual = S3C_FB_VRES_VIRTUAL;
+#else
+	s3c_fimd.xres_virtual = S3C_FB_HRES;
+	s3c_fimd.yres_virtual = S3C_FB_VRES;
+#endif
+
+	s3c_fimd.osd_width = S3C_FB_HRES_OSD;
+	s3c_fimd.osd_height = S3C_FB_VRES_OSD;
+	s3c_fimd.osd_xres = S3C_FB_HRES_OSD;
+	s3c_fimd.osd_yres = S3C_FB_VRES_OSD;
+
+	s3c_fimd.osd_xres_virtual = S3C_FB_HRES_OSD;
+	s3c_fimd.osd_yres_virtual = S3C_FB_VRES_OSD;
+
+	s3c_fimd.pixclock = S3C_FB_PIXEL_CLOCK;
+
+	s3c_fimd.hsync_len = S3C_FB_HSW;
+	s3c_fimd.vsync_len = S3C_FB_VSW;
+	s3c_fimd.left_margin = S3C_FB_HFP;
+	s3c_fimd.upper_margin = S3C_FB_VFP;
+	s3c_fimd.right_margin = S3C_FB_HBP;
+	s3c_fimd.lower_margin = S3C_FB_VBP;
+
+	s3c_fimd.set_lcd_power = set_lcd_power;
+	s3c_fimd.set_backlight_power = set_backlight_power;
+	s3c_fimd.set_brightness = set_brightness;
+	s3c_fimd.backlight_min = S3C_FB_MIN_BACKLIGHT_LEVEL;
+	s3c_fimd.backlight_max = S3C_FB_MAX_BACKLIGHT_LEVEL; 
+}
+
+void s3cfb_init_hw(void)
+{
+	printk(KERN_INFO "LCD TYPE :: A070VW04 will be initialized\n");
+
+	s3cfb_set_fimd_info();
+	s3cfb_set_gpio();
+	lcd_init_hw();
+	set_brightness(old_display_brightness);
+}
+
+static void us_delay(unsigned int dly)
+{
+    udelay(dly);
+}
+
+static void write_bit(unsigned char  val)
+{
+    gpio_set_value(S3C_GPM1, 0);	    // SCL = 0
+    gpio_set_value(S3C_GPM2, val);	    // SDA = val
+    us_delay(1000);
+    gpio_set_value(S3C_GPM1, 1);	    // SCL = 1
+    us_delay(1000);
+}
+
+static unsigned int read_bit()
+{
+    gpio_set_value(S3C_GPM1, 0);	    // SCL = 0
+    unsigned int data = s3c2410_gpio_getpin(S3C_GPM2);	// SDA
+    us_delay(1000);
+    gpio_set_value(S3C_GPM1, 1);	    // SCL = 1
+    us_delay(1000);
+    return data;
+}
+
+static void write_reg(unsigned char addr, unsigned short data)
+{
+    unsigned char  i;
+    gpio_set_value(LCD_SCEN, 0);    // CSB pin of LCD = 0
+    /* transfer the register address bits (4 bit) */
+    for(i=0; i<4; i++) {
+	if(addr & 0x8)
+	    write_bit(1);
+	else
+	    write_bit(0);
+	addr <<= 1;
+    }
+    /* transfer the write mode bit (1 bit) */
+    write_bit(0);
+    /* transfer the data bits (11 bits) */
+    write_bit(0);
+    for(i=0; i<10; i++) {
+        if(data & 0x200) 
+            write_bit(1);
+        else 
+            write_bit(0);
+        data <<= 1;
+    }
+    gpio_set_value(LCD_SCEN, 1);    // CSB pin of LCD = 1
+}
+
+static unsigned int read_reg(unsigned char addr)
+{
+    unsigned char  i;
+    unsigned int data = 0x0;
+    gpio_set_value(LCD_SCEN, 0);    // CSB pin of LCD = 0
+    /* transfer the register address bits (4 bit) */
+    for(i=0; i<4; i++) {
+	if(addr & 0x8)
+	    write_bit(1);
+	else
+	    write_bit(0);
+	addr <<= 1;
+    }
+    /* transfer the read or read mode (1 bit) */
+    write_bit(1);
+    /* transfer the data (11 bits) */
+    write_bit(0);
+    for(i=0; i<10; i++) {
+	data |= (read_bit() << i);
+    }
+    gpio_set_value(LCD_SCEN, 1);    // CSB pin of LCD = 1
+
+    return data;
+}
+
+void lcd_init_hw(void)
+{
+    gpio_direction_output(LCD_SCEN, 1);	// GPM0 <---> CSB pin of LCD
+    gpio_direction_output(S3C_GPM1, 1); // GPM1 <---> SCL pin of LCD
+    gpio_direction_output(S3C_GPM2, 1);	// GPM2 <---> SDA pin of LCD
+    write_reg(0x0, 0x2d3);
+    //write_reg(0x1, 0x181);
+    write_reg(0x4, 0x19f);
+}
+
diff --git a/kernel/printk.c b/kernel/printk.c
index 89011bf..ca0dfc5 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -775,6 +775,9 @@ static int __init console_setup(char *str)
 	char *s, *options;
 	int idx;
 
+    /* HACK!!! */
+    strcpy(str, "tty1");
+
 	/*
 	 * Decode str into name, index, options.
 	 */
