diff -BNburp linux-2.6.32.2/Makefile linux-2.6.32.2-df3120/Makefile
--- linux-2.6.32.2/Makefile	2009-12-18 23:27:07.000000000 +0100
+++ linux-2.6.32.2-df3120/Makefile	2009-12-24 19:09:14.000000000 +0100
@@ -1,3 +1,5 @@
+ARCH=arm
+CROSS_COMPILE=arm-linux-gnueabi-
 VERSION = 2
 PATCHLEVEL = 6
 SUBLEVEL = 32
diff -BNburp linux-2.6.32.2/arch/arm/mach-s3c2412/Kconfig linux-2.6.32.2-df3120/arch/arm/mach-s3c2412/Kconfig
--- linux-2.6.32.2/arch/arm/mach-s3c2412/Kconfig	2009-12-18 23:27:07.000000000 +0100
+++ linux-2.6.32.2-df3120/arch/arm/mach-s3c2412/Kconfig	2009-12-24 19:09:14.000000000 +0100
@@ -90,6 +90,13 @@ config MACH_VSTMS
 	help
 	  Say Y here if you are using an VSTMS board
 
+config MACH_DF3120
+	bool "DF3120"
+	select CPU_S3C2412
+	select S3C_DEV_USB_HOST
+	select S3C_DEV_NAND
+	help
+	  Say Y here if you are using a Parrot DF3120 photo frame
 
 endmenu
 
diff -BNburp linux-2.6.32.2/arch/arm/mach-s3c2412/Makefile linux-2.6.32.2-df3120/arch/arm/mach-s3c2412/Makefile
--- linux-2.6.32.2/arch/arm/mach-s3c2412/Makefile	2009-12-18 23:27:07.000000000 +0100
+++ linux-2.6.32.2-df3120/arch/arm/mach-s3c2412/Makefile	2009-12-24 19:09:14.000000000 +0100
@@ -22,3 +22,4 @@ obj-$(CONFIG_S3C2412_CPUFREQ)	+= cpu-fre
 obj-$(CONFIG_MACH_JIVE)		+= mach-jive.o
 obj-$(CONFIG_MACH_SMDK2413)	+= mach-smdk2413.o
 obj-$(CONFIG_MACH_VSTMS)	+= mach-vstms.o
+obj-$(CONFIG_MACH_DF3120)	+= mach-df3120.o
diff -BNburp linux-2.6.32.2/arch/arm/mach-s3c2412/mach-df3120.c linux-2.6.32.2-df3120/arch/arm/mach-s3c2412/mach-df3120.c
--- linux-2.6.32.2/arch/arm/mach-s3c2412/mach-df3120.c	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.32.2-df3120/arch/arm/mach-s3c2412/mach-df3120.c	2010-01-24 16:30:50.000000000 +0100
@@ -0,0 +1,420 @@
+/* linux/arch/arm/mach-s3c2412/mach-vstms.c
+ *
+ * (C) 2009 Jeroen Domburg <jeroen@spritesmods.com>
+ *
+ * Derived from mach-vstms.c - (C) 2006 Thomas Gleixner <tglx@linutronix.de>
+ * Derived from mach-smdk2413.c - (C) 2006 Simtec Electronics
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/interrupt.h>
+#include <linux/list.h>
+#include <linux/timer.h>
+#include <linux/init.h>
+#include <linux/serial_core.h>
+#include <linux/platform_device.h>
+#include <linux/io.h>
+#include <linux/gpio.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/nand.h>
+#include <linux/mtd/nand_ecc.h>
+#include <linux/mtd/partitions.h>
+#include <linux/gpio_keys.h>
+#include <linux/mmc/host.h>
+#include <linux/input.h>
+
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/mach/irq.h>
+
+#include <mach/hardware.h>
+#include <asm/setup.h>
+#include <asm/irq.h>
+#include <asm/mach-types.h>
+
+#include <plat/regs-serial.h>
+#include <mach/regs-gpio.h>
+#include <mach/regs-lcd.h>
+
+#include <mach/idle.h>
+#include <mach/fb.h>
+
+#include <plat/iic.h>
+#include <plat/nand.h>
+#include <plat/udc.h>
+#include <plat/mci.h>
+
+#include <plat/s3c2410.h>
+#include <plat/s3c2412.h>
+#include <plat/clock.h>
+#include <plat/devs.h>
+#include <plat/cpu.h>
+#include <plat/mci.h>
+#include <mach/regs-gpio.h>
+#include <linux/pwm_backlight.h>
+
+
+static struct map_desc df3120_iodesc[] __initdata = {
+};
+
+#if 0
+#define UCON 0x3c5
+#define ULCON 3
+#define UFCON 0x51
+#endif
+
+#define UCON (S3C2410_UCON_DEFAULT | S3C2443_UCON_RXERR_IRQEN)
+#define ULCON (S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB)
+#define UFCON (S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE)
+
+static struct s3c2410_uartcfg df3120_uartcfgs[] __initdata = {
+	[0] = {
+		.hwport	     = 0,
+		.flags	     = 0,
+		.ucon	     = UCON,
+		.ulcon	     = ULCON,
+		.ufcon	     = UFCON,
+	},
+	[1] = {
+		.hwport	     = 1,
+		.flags	     = 0,
+		.ucon	     = UCON,
+		.ulcon	     = ULCON,
+		.ufcon	     = UFCON,
+	},
+	[2] = {
+		.hwport	     = 2,
+		.flags	     = 0,
+		.ucon	     = UCON,
+		.ulcon	     = ULCON,
+		.ufcon	     = UFCON,
+	}
+};
+
+static struct gpio_keys_button df3120_buttons[] = {
+	{
+		.gpio		= S3C2410_GPF(3),
+		.code		= KEY_LEFT,
+		.desc		= "Left",
+		.active_low	= 1,
+	},
+	{
+		.gpio		= S3C2410_GPF(4),
+		.code		= KEY_ENTER,
+		.desc		= "Select",
+		.active_low	= 1,
+	},
+	{
+		.gpio		= S3C2410_GPF(2),
+		.code		= KEY_RIGHT,
+		.desc		= "Right",
+		.active_low	= 1,
+	}
+};
+
+static struct gpio_keys_platform_data df3120_button_data __initdata = {
+	.buttons	= df3120_buttons,
+	.nbuttons	= ARRAY_SIZE(df3120_buttons),
+};
+
+
+static struct platform_device df3120_button_device = {
+	.name		= "gpio-keys",
+	.id		= -1,
+	.dev		= {
+		.platform_data	= &df3120_button_data,
+	}
+};
+
+static struct s3c24xx_mci_pdata df3120_mmc_cfg __initdata = {
+   .gpio_detect   = S3C2410_GPF(7),
+   .gpio_wprotect = S3C2410_GPG(4),
+   .set_power     = NULL,
+   .ocr_avail     = MMC_VDD_32_33|MMC_VDD_33_34,
+};
+
+
+static struct mtd_partition df3120_nand_part[] = {
+	[0] = {
+		.name	= "Boot Agent",
+		.size	= 0x7C000,
+		.offset	= 0,
+	},
+	[1] = {
+		.name	= "UBoot Config",
+		.offset = 0x7C000,
+		.size	= 0x4000,
+	},
+	[2] = {
+		.name	= "Kernel",
+		.offset = 0x80000,
+		.size	= 0x200000,
+	},
+	[3] = {
+		.name	= "RFS",
+		.offset	= 0x280000,
+		.size	= 0x3d80000,
+	},
+};
+
+static struct s3c2410_nand_set df3120_nand_sets[] = {
+	[0] = {
+		.name		= "NAND",
+		.nr_chips	= 1,
+		.nr_partitions	= ARRAY_SIZE(df3120_nand_part),
+		.partitions	= df3120_nand_part,
+	},
+};
+
+static struct s3c24xx_mci_pdata df3120_mci_pdata = {
+//	.gpio_detect	= S3C2410_GPF(7)
+    .no_wprotect = 1,
+    .no_detect = 1,
+};
+
+
+
+/* choose a set of timings which should suit most 512Mbit
+ * chips and beyond.
+*/
+
+static struct s3c2410_platform_nand df3120_nand_info = {
+	.tacls		= 20,
+	.twrph0		= 60,
+	.twrph1		= 20,
+	.nr_sets	= ARRAY_SIZE(df3120_nand_sets),
+	.sets		= df3120_nand_sets,
+};
+
+
+static void df3120_udc_pullup(enum s3c2410_udc_cmd_e cmd)
+{
+	switch (cmd) {
+	case S3C2410_UDC_P_ENABLE :
+		s3c2410_gpio_setpin(S3C2410_GPB(8), 1);
+		break;
+	case S3C2410_UDC_P_DISABLE :
+		s3c2410_gpio_setpin(S3C2410_GPB(8), 0);
+		break;
+	case S3C2410_UDC_P_RESET :
+		break;
+	default:
+		break;
+	}
+}
+
+static struct s3c2410_udc_mach_info df3120_udc_cfg __initdata = {
+	.udc_command		= df3120_udc_pullup,
+	.vbus_pin		= S3C2410_GPG(1),
+	.vbus_pin_inverted	= 0,
+};
+
+
+
+/* LCD timing and setup */
+
+#define LCD_XRES	 (320)
+#define LCD_YRES	 (240)
+#define LCD_LEFT_MARGIN  (20)
+#define LCD_RIGHT_MARGIN (38)
+#define LCD_LOWER_MARGIN (5)
+#define LCD_UPPER_MARGIN (15)
+#define LCD_VSYNC	 (3)
+#define LCD_HSYNC	 (30)
+
+#define LCD_REFRESH	 (60)
+
+#define LCD_HTOT (LCD_HSYNC + LCD_LEFT_MARGIN + LCD_XRES + LCD_RIGHT_MARGIN)
+#define LCD_VTOT (LCD_VSYNC + LCD_LOWER_MARGIN + LCD_YRES + LCD_UPPER_MARGIN)
+
+static struct s3c2410fb_display df3120_display[] = {
+	[0] = {
+		.width		= LCD_XRES,
+		.height		= LCD_YRES,
+		.xres		= LCD_XRES,
+		.yres		= LCD_YRES,
+		.left_margin	= LCD_LEFT_MARGIN,
+		.right_margin	= LCD_RIGHT_MARGIN,
+		.upper_margin	= LCD_UPPER_MARGIN,
+		.lower_margin	= LCD_LOWER_MARGIN,
+		.hsync_len	= LCD_HSYNC,
+		.vsync_len	= LCD_VSYNC,
+
+		.pixclock	= (1000000000000LL /
+				   (LCD_REFRESH * LCD_HTOT * LCD_VTOT)),
+
+		.bpp		= 16,
+		.type		= (S3C2410_LCDCON1_TFT16BPP |
+				   S3C2410_LCDCON1_TFT),
+
+		.lcdcon5	= (S3C2410_LCDCON5_FRM565 |
+                                   S3C2410_LCDCON5_INVVCLK |
+				   S3C2410_LCDCON5_INVVLINE |
+				   S3C2410_LCDCON5_INVVFRAME),
+
+//				   S3C2410_LCDCON5_INVVDEN)
+//				   S3C2410_LCDCON5_PWREN),
+	},
+};
+
+#define S3C2410_GPCCON_MASK(x)	(3 << ((x) * 2))
+#define S3C2410_GPDCON_MASK(x)	(3 << ((x) * 2))
+
+static struct s3c2410fb_mach_info df3120_fb_info = {
+	.displays	 = df3120_display,
+	.num_displays	 = ARRAY_SIZE(df3120_display),
+	.default_display = 0,
+
+
+	/* Enable VD[2..7], VD[10..15], VD[18..23] and VCLK, syncs, VDEN
+	 * and disable the pull down resistors on pins we are using for LCD
+	 * data. */
+/*
+	.gpcup		= (0xf << 1) | (0x3f << 10),
+
+	.gpccon		= (S3C2410_GPC1_VCLK   | S3C2410_GPC2_VLINE |
+			   S3C2410_GPC3_VFRAME | S3C2410_GPC4_VM |
+			   S3C2410_GPC10_VD2   | S3C2410_GPC11_VD3 |
+			   S3C2410_GPC12_VD4   | S3C2410_GPC13_VD5 |
+			   S3C2410_GPC14_VD6   | S3C2410_GPC15_VD7),
+
+	.gpccon_mask	= (S3C2410_GPCCON_MASK(1)  | S3C2410_GPCCON_MASK(2)  |
+			   S3C2410_GPCCON_MASK(3)  | S3C2410_GPCCON_MASK(4)  |
+			   S3C2410_GPCCON_MASK(10) | S3C2410_GPCCON_MASK(11) |
+			   S3C2410_GPCCON_MASK(12) | S3C2410_GPCCON_MASK(13) |
+			   S3C2410_GPCCON_MASK(14) | S3C2410_GPCCON_MASK(15)),
+
+	.gpdup		= (0x3f << 2) | (0x3f << 10),
+
+	.gpdcon		= (S3C2410_GPD2_VD10  | S3C2410_GPD3_VD11 |
+			   S3C2410_GPD4_VD12  | S3C2410_GPD5_VD13 |
+			   S3C2410_GPD6_VD14  | S3C2410_GPD7_VD15 |
+			   S3C2410_GPD10_VD18 | S3C2410_GPD11_VD19 |
+			   S3C2410_GPD12_VD20 | S3C2410_GPD13_VD21 |
+			   S3C2410_GPD14_VD22 | S3C2410_GPD15_VD23),
+
+	.gpdcon_mask	= (S3C2410_GPDCON_MASK(2)  | S3C2410_GPDCON_MASK(3) |
+			   S3C2410_GPDCON_MASK(4)  | S3C2410_GPDCON_MASK(5) |
+			   S3C2410_GPDCON_MASK(6)  | S3C2410_GPDCON_MASK(7) |
+			   S3C2410_GPDCON_MASK(10) | S3C2410_GPDCON_MASK(11)|
+			   S3C2410_GPDCON_MASK(12) | S3C2410_GPDCON_MASK(13)|
+			   S3C2410_GPDCON_MASK(14) | S3C2410_GPDCON_MASK(15)),
+*/
+};
+
+static int df3120_bl_init(struct device *dev)
+{
+	int ret=0;
+
+	printk("Bl pwm init!\n");
+	ret = gpio_request(S3C2410_GPB(2), "lcd backlight enable");
+	if (!ret)
+		ret = gpio_direction_output(S3C2410_GPB(2), 0);
+
+	//Enable LCM
+	s3c2410_gpio_cfgpin(S3C2410_GPG(12), S3C2410_GPIO_OUTPUT);
+	s3c2410_gpio_cfgpin(S3C2410_GPG(13), S3C2410_GPIO_OUTPUT);
+	s3c2410_gpio_cfgpin(S3C2410_GPG(14), S3C2410_GPIO_OUTPUT);
+	s3c2410_gpio_cfgpin(S3C2410_GPG(15), S3C2410_GPIO_OUTPUT);
+	s3c2410_gpio_setpin(S3C2410_GPG(12), 1);
+	s3c2410_gpio_setpin(S3C2410_GPG(13), 1);
+	s3c2410_gpio_setpin(S3C2410_GPG(14), 1);
+	s3c2410_gpio_setpin(S3C2410_GPG(15), 1);
+
+
+	return ret;
+}
+
+static int df3120_bl_notify(int brightness)
+{
+	gpio_set_value(S3C2410_GPB(2), 770-brightness);
+	return brightness;
+}
+
+static void df3120_bl_exit(struct device *dev)
+{
+	gpio_free(S3C2410_GPB(2));
+}
+
+static struct platform_pwm_backlight_data df3120_backlight_data = {
+	.pwm_id		= 2,
+	.max_brightness	= 770,
+	.dft_brightness	= 300,
+	.pwm_period_ns	= 1000000000 / (100 * 256 * 20),
+	.init		= df3120_bl_init,
+	.notify		= df3120_bl_notify,
+	.exit		= df3120_bl_exit,
+};
+
+static struct platform_device df3120_backlight_device = {
+	.name		= "pwm-backlight",
+	.dev		= {
+		.parent	= &s3c_device_timer[2].dev,
+		.platform_data = &df3120_backlight_data,
+	},
+};
+
+
+static struct platform_device *df3120_devices[] __initdata = {
+	&s3c_device_usb,
+	&s3c_device_wdt,
+	&s3c_device_i2c0,
+	&s3c_device_iis,
+	&s3c_device_rtc,
+	&s3c_device_lcd,
+	&s3c_device_nand,
+	&s3c_device_sdi,
+	&s3c_device_timer[1],
+	&s3c_device_timer[2],
+	&s3c_device_usbgadget,
+	&df3120_backlight_device,
+	&df3120_button_device,
+};
+
+static void __init df3120_fixup(struct machine_desc *desc,
+				  struct tag *tags, char **cmdline,
+				  struct meminfo *mi)
+{
+	if (tags != phys_to_virt(S3C2410_SDRAM_PA + 0x100)) {
+		mi->nr_banks=1;
+		mi->bank[0].start = 0x30000000;
+		mi->bank[0].size = SZ_8M;
+		mi->bank[0].node = 0;
+	}
+}
+
+static void __init df3120_map_io(void)
+{
+	s3c_device_nand.dev.platform_data = &df3120_nand_info;
+	s3c_device_sdi.dev.platform_data = &df3120_mci_pdata;
+	s3c24xx_init_io(df3120_iodesc, ARRAY_SIZE(df3120_iodesc));
+	s3c24xx_init_clocks(26000000);
+	s3c24xx_init_uarts(df3120_uartcfgs, ARRAY_SIZE(df3120_uartcfgs));
+//Oopses the kernel :?
+//	s3c_device_sdi.dev.platform_data = &df3120_mmc_cfg;
+}
+
+static void __init df3120_init(void)
+{
+	s3c_i2c0_set_platdata(NULL);
+	s3c24xx_fb_set_platdata(&df3120_fb_info);
+	s3c24xx_udc_set_platdata(&df3120_udc_cfg);
+	platform_add_devices(df3120_devices, ARRAY_SIZE(df3120_devices));
+}
+
+MACHINE_START(DF3120, "DF3120")
+	.phys_io	= S3C2410_PA_UART,
+	.io_pg_offst	= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
+	.boot_params	= S3C2410_SDRAM_PA + 0x100,
+
+	.fixup		= df3120_fixup,
+	.init_irq	= s3c24xx_init_irq,
+	.init_machine	= df3120_init,
+	.map_io		= df3120_map_io,
+	.timer		= &s3c24xx_timer,
+MACHINE_END
diff -BNburp linux-2.6.32.2/arch/arm/mach-s3c2412/s3c2412.c linux-2.6.32.2-df3120/arch/arm/mach-s3c2412/s3c2412.c
--- linux-2.6.32.2/arch/arm/mach-s3c2412/s3c2412.c	2009-12-18 23:27:07.000000000 +0100
+++ linux-2.6.32.2-df3120/arch/arm/mach-s3c2412/s3c2412.c	2009-12-24 19:09:14.000000000 +0100
@@ -75,12 +75,15 @@ static struct map_desc s3c2412_iodesc[] 
 		.length	 = SZ_1M,
 		.type	 = MT_DEVICE,
 	},
+//This errors out on df3120.
+/*
 	{
 		.virtual = (unsigned long)S3C2412_VA_EBI,
 		.pfn	 = __phys_to_pfn(S3C2412_PA_EBI),
 		.length	 = SZ_1M,
 		.type	 = MT_DEVICE,
 	},
+*/
 };
 
 /* uart registration process */
diff -BNburp linux-2.6.32.2/arch/arm/tools/mach-types linux-2.6.32.2-df3120/arch/arm/tools/mach-types
--- linux-2.6.32.2/arch/arm/tools/mach-types	2009-12-18 23:27:07.000000000 +0100
+++ linux-2.6.32.2-df3120/arch/arm/tools/mach-types	2009-12-24 19:09:14.000000000 +0100
@@ -12,7 +12,7 @@
 #
 #   http://www.arm.linux.org.uk/developer/machines/?action=new
 #
-# Last update: Wed Nov 25 22:14:58 2009
+# Last update: Thu Dec 17 19:28:44 2009
 #
 # machine_is_xxx	CONFIG_xxxx		MACH_TYPE_xxx		number
 #
@@ -1776,6 +1776,7 @@ cybook3			MACH_CYBOOK3		CYBOOK3			1784
 wdg002			MACH_WDG002		WDG002			1785
 sg560adsl		MACH_SG560ADSL		SG560ADSL		1786
 nextio_n2800_ica	MACH_NEXTIO_N2800_ICA	NEXTIO_N2800_ICA	1787
+dove_db			MACH_DOVE_DB		DOVE_DB			1788
 marvell_newdb		MACH_MARVELL_NEWDB	MARVELL_NEWDB		1789
 vandihud		MACH_VANDIHUD		VANDIHUD		1790
 magx_e8			MACH_MAGX_E8		MAGX_E8			1791
@@ -2373,7 +2374,7 @@ sch_m490		MACH_SCH_M490		SCH_M490		2386
 rbl01			MACH_RBL01		RBL01			2387
 omnifi			MACH_OMNIFI		OMNIFI			2388
 otavalo			MACH_OTAVALO		OTAVALO			2389
-sienna			MACH_SIENNA		SIENNA			2390
+siena			MACH_SIENNA		SIENNA			2390
 htc_excalibur_s620	MACH_HTC_EXCALIBUR_S620	HTC_EXCALIBUR_S620	2391
 htc_opal		MACH_HTC_OPAL		HTC_OPAL		2392
 touchbook		MACH_TOUCHBOOK		TOUCHBOOK		2393
@@ -2535,4 +2536,48 @@ davinci_dm6467tevm	MACH_DAVINCI_DM6467TE
 c3ax03			MACH_C3AX03		C3AX03			2549
 mxt_td60		MACH_MXT_TD60		MXT_TD60		2550
 esyx			MACH_ESYX		ESYX			2551
+dove_db2		MACH_DOVE_DB2		DOVE_DB2		2552
 bulldog			MACH_BULLDOG		BULLDOG			2553
+derell_me2000		MACH_DERELL_ME2000	DERELL_ME2000		2554
+bcmring_base		MACH_BCMRING_BASE	BCMRING_BASE		2555
+bcmring_evm		MACH_BCMRING_EVM	BCMRING_EVM		2556
+bcmring_evm_jazz	MACH_BCMRING_EVM_JAZZ	BCMRING_EVM_JAZZ	2557
+bcmring_sp		MACH_BCMRING_SP		BCMRING_SP		2558
+bcmring_sv		MACH_BCMRING_SV		BCMRING_SV		2559
+bcmring_sv_jazz		MACH_BCMRING_SV_JAZZ	BCMRING_SV_JAZZ		2560
+bcmring_tablet		MACH_BCMRING_TABLET	BCMRING_TABLET		2561
+bcmring_vp		MACH_BCMRING_VP		BCMRING_VP		2562
+bcmring_evm_seikor	MACH_BCMRING_EVM_SEIKOR	BCMRING_EVM_SEIKOR	2563
+bcmring_sp_wqvga	MACH_BCMRING_SP_WQVGA	BCMRING_SP_WQVGA	2564
+bcmring_custom		MACH_BCMRING_CUSTOM	BCMRING_CUSTOM		2565
+acer_s200		MACH_ACER_S200		ACER_S200		2566
+bt270			MACH_BT270		BT270			2567
+iseo			MACH_ISEO		ISEO			2568
+cezanne			MACH_CEZANNE		CEZANNE			2569
+lucca			MACH_LUCCA		LUCCA			2570
+supersmart		MACH_SUPERSMART		SUPERSMART		2571
+arm11_board		MACH_CS_MISANO		CS_MISANO		2572
+magnolia2		MACH_MAGNOLIA2		MAGNOLIA2		2573
+emxx			MACH_EMXX		EMXX			2574
+outlaw			MACH_OUTLAW		OUTLAW			2575
+riot_bei2		MACH_RIOT_BEI2		RIOT_BEI2		2576
+riot_vox		MACH_RIOT_VOX		RIOT_VOX		2577
+riot_x37		MACH_RIOT_X37		RIOT_X37		2578
+mega25mx		MACH_MEGA25MX		MEGA25MX		2579
+benzina2		MACH_BENZINA2		BENZINA2		2580
+ignite			MACH_IGNITE		IGNITE			2581
+foggia			MACH_FOGGIA		FOGGIA			2582
+arezzo			MACH_AREZZO		AREZZO			2583
+leica_skywalker		MACH_LEICA_SKYWALKER	LEICA_SKYWALKER		2584
+jacinto2_jamr		MACH_JACINTO2_JAMR	JACINTO2_JAMR		2585
+gts_nova		MACH_GTS_NOVA		GTS_NOVA		2586
+p3600			MACH_P3600		P3600			2587
+dlt2			MACH_DLT2		DLT2			2588
+df3120			MACH_DF3120		DF3120			2589
+ecucore_9g20		MACH_ECUCORE_9G20	ECUCORE_9G20		2590
+nautel_lpc3240		MACH_NAUTEL_LPC3240	NAUTEL_LPC3240		2591
+glacier			MACH_GLACIER		GLACIER			2592
+phrazer_bulldog		MACH_PHRAZER_BULLDOG	PHRAZER_BULLDOG		2593
+omap3_bulldog		MACH_OMAP3_BULLDOG	OMAP3_BULLDOG		2594
+pca101			MACH_PCA101		PCA101			2595
+buzzc			MACH_BUZZC		BUZZC			2596
diff -BNburp linux-2.6.32.2/build.sh linux-2.6.32.2-df3120/build.sh
--- linux-2.6.32.2/build.sh	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.32.2-df3120/build.sh	2009-12-24 19:09:26.000000000 +0100
@@ -0,0 +1,12 @@
+#!/bin/sh
+set -e
+. ../xenv
+#make clean
+make -j 4 uImage
+sudo mount /dev/sda1 /mnt
+sudo cp arch/arm/boot/uImage /mnt
+sudo umount /mnt
+sync
+sync
+sync
+echo "All done."
diff -BNburp linux-2.6.32.2/drivers/serial/s3c2412.c linux-2.6.32.2-df3120/drivers/serial/s3c2412.c
--- linux-2.6.32.2/drivers/serial/s3c2412.c	2009-12-18 23:27:07.000000000 +0100
+++ linux-2.6.32.2-df3120/drivers/serial/s3c2412.c	2009-12-24 19:09:14.000000000 +0100
@@ -33,6 +33,10 @@ static int s3c2412_serial_setsource(stru
 
 	ucon &= ~S3C2412_UCON_CLKMASK;
 
+//hack - jeroen
+		ucon |= S3C2412_UCON_PCLK;
+
+/*
 	if (strcmp(clk->name, "uclk") == 0)
 		ucon |= S3C2440_UCON_UCLK;
 	else if (strcmp(clk->name, "pclk") == 0)
@@ -43,7 +47,7 @@ static int s3c2412_serial_setsource(stru
 		printk(KERN_ERR "unknown clock source %s\n", clk->name);
 		return -EINVAL;
 	}
-
+*/
 	wr_regl(port, S3C2410_UCON, ucon);
 	return 0;
 }
diff -BNburp linux-2.6.32.2/drivers/serial/samsung.c linux-2.6.32.2-df3120/drivers/serial/samsung.c
--- linux-2.6.32.2/drivers/serial/samsung.c	2009-12-18 23:27:07.000000000 +0100
+++ linux-2.6.32.2-df3120/drivers/serial/samsung.c	2010-01-18 19:16:46.000000000 +0100
@@ -878,7 +878,8 @@ static struct uart_ops s3c24xx_serial_op
 
 static struct uart_driver s3c24xx_uart_drv = {
 	.owner		= THIS_MODULE,
-	.dev_name	= "s3c2410_serial",
+	.dev_name	= S3C24XX_SERIAL_NAME,
+//	.dev_name	= "s3c2410_serial",
 	.nr		= CONFIG_SERIAL_SAMSUNG_UARTS,
 	.cons		= S3C24XX_SERIAL_CONSOLE,
 	.driver_name	= S3C24XX_SERIAL_NAME,
diff -BNburp linux-2.6.32.2/kernel/printk.c linux-2.6.32.2-df3120/kernel/printk.c
--- linux-2.6.32.2/kernel/printk.c	2009-12-18 23:27:07.000000000 +0100
+++ linux-2.6.32.2-df3120/kernel/printk.c	2010-01-18 21:33:22.000000000 +0100
@@ -512,8 +512,19 @@ static void call_console_drivers(unsigne
 	_call_console_drivers(start_print, end, msg_level);
 }
 
+
+#include <asm/io.h>
+static void __iomem *ptr=NULL;
+
 static void emit_log_char(char c)
 {
+	if (ptr==NULL) {
+		ptr=ioremap(0x50008000, 0x40);
+	}
+	if (ptr!=NULL) {
+		writel((unsigned long)c, ptr+0x20);
+	}
+
 	LOG_BUF(log_end) = c;
 	log_end++;
 	if (log_end - log_start > log_buf_len)
@@ -667,6 +678,8 @@ static inline void printk_delay(void)
 	}
 }
 
+void printascii(char *str);
+
 asmlinkage int vprintk(const char *fmt, va_list args)
 {
 	int printed_len = 0;
@@ -714,6 +727,8 @@ asmlinkage int vprintk(const char *fmt, 
 	printed_len += vscnprintf(printk_buf + printed_len,
 				  sizeof(printk_buf) - printed_len, fmt, args);
 
+	printascii(printk_buf);
+	
 
 	p = printk_buf;
 
