diff --git a/package/sdl/0003-add-SDL_NOKBD.patch b/package/sdl/0003-add-SDL_NOKBD.patch
new file mode 100644
index 0000000..d944555
--- /dev/null
+++ b/package/sdl/0003-add-SDL_NOKBD.patch
@@ -0,0 +1,55 @@
+diff --git a/src/video/fbcon/SDL_fbvideo.c b/src/video/fbcon/SDL_fbvideo.c
+index 5e58809..81830b6 100644
+--- a/src/video/fbcon/SDL_fbvideo.c
++++ b/src/video/fbcon/SDL_fbvideo.c
+@@ -793,9 +793,11 @@ static int FB_VideoInit(_THIS, SDL_PixelFormat *vformat)
+ 	}
+ 
+ 	/* Enable mouse and keyboard support */
+-	if ( FB_OpenKeyboard(this) < 0 ) {
+-		FB_VideoQuit(this);
+-		return(-1);
++	if (!SDL_getenv("SDL_NOKBD")){
++		if ( FB_OpenKeyboard(this) < 0 ) {
++			FB_VideoQuit(this);
++			return(-1);
++			}
+ 	}
+ 	if ( FB_OpenMouse(this) < 0 ) {
+ 		const char *sdl_nomouse;
+@@ -944,7 +946,7 @@ static SDL_Surface *FB_SetVGA16Mode(_THIS, SDL_Surface *current,
+ 
+ 	/* Set the terminal into graphics mode */
+ 	if ( FB_EnterGraphicsMode(this) < 0 ) {
+-		return(NULL);
++		if (!SDL_getenv("SDL_NOKBD")) return(NULL);
+ 	}
+ 
+ 	/* Restore the original palette */
+@@ -1009,7 +1011,7 @@ static SDL_Surface *FB_SetVideoMode(_THIS, SDL_Surface *current,
+ 
+ 	/* Set the terminal into graphics mode */
+ 	if ( FB_EnterGraphicsMode(this) < 0 ) {
+-		return(NULL);
++		if (!SDL_getenv("SDL_NOKBD")) return(NULL);
+ 	}
+ 
+ 	/* Restore the original palette */
+@@ -1919,7 +1921,7 @@ static void FB_VideoQuit(_THIS)
+ 			SDL_memcpy(flip_address[0], flip_address[1], this->screen->pitch * this->screen->h);
+ 		}
+ 
+-		if ( !dontClearPixels && this->screen->pixels && FB_InGraphicsMode(this) ) {
++		if ( (!dontClearPixels && this->screen->pixels && FB_InGraphicsMode(this)) || SDL_getenv("SDL_NOKBD") ) {
+ #if defined(__powerpc__) || defined(__ia64__)	/* SIGBUS when using SDL_memset() ?? */
+ 			Uint8 *rowp = (Uint8 *)this->screen->pixels;
+ 			int left = this->screen->pitch*this->screen->h;
+@@ -1968,7 +1970,7 @@ static void FB_VideoQuit(_THIS)
+ 		}
+ 
+ 		/* Restore the original video mode and palette */
+-		if ( FB_InGraphicsMode(this) ) {
++		if ( FB_InGraphicsMode(this) || SDL_getenv("SDL_NOKBD") ) {
+ 			FB_RestorePalette(this);
+ 			ioctl(console_fd, FBIOPUT_VSCREENINFO, &saved_vinfo);
+ 		}
diff --git a/package/sdl/0004-sdl-fbdev-blit32.patch b/package/sdl/0004-sdl-fbdev-blit32.patch
new file mode 100644
index 0000000..e06a57a
--- /dev/null
+++ b/package/sdl/0004-sdl-fbdev-blit32.patch
@@ -0,0 +1,99 @@
+diff --git a/src/video/fbcon/SDL_fbvideo.c b/src/video/fbcon/SDL_fbvideo.c
+index 81830b6..1399140 100644
+--- a/src/video/fbcon/SDL_fbvideo.c
++++ b/src/video/fbcon/SDL_fbvideo.c
+@@ -165,6 +165,10 @@ static void FB_RestorePalette(_THIS);
+ static FB_bitBlit FB_blit16;
+ static FB_bitBlit FB_blit16blocked;
+ 
++static FB_bitBlit FB_blit32;
++static FB_bitBlit FB_blit32blocked;
++
++
+ static int SDL_getpagesize(void)
+ {
+ #ifdef HAVE_GETPAGESIZE
+@@ -1119,6 +1123,10 @@ static SDL_Surface *FB_SetVideoMode(_THIS, SDL_Surface *current,
+ 			blitFunc = (rotate == FBCON_ROTATE_NONE ||
+ 					rotate == FBCON_ROTATE_UD) ?
+ 				FB_blit16 : FB_blit16blocked;
++		} else if (vinfo.bits_per_pixel == 32) {
++			blitFunc = (rotate == FBCON_ROTATE_NONE ||
++					rotate == FBCON_ROTATE_UD) ?
++				FB_blit32 : FB_blit32blocked;
+ 		} else {
+ #ifdef FBCON_DEBUG
+ 			fprintf(stderr, "Init vinfo:\n");
+@@ -1495,6 +1503,57 @@ static void FB_blit16blocked(Uint8 *byte_src_pos, int src_right_delta, int src_d
+ 	}
+ }
+ 
++static void FB_blit32(Uint8 *byte_src_pos, int src_right_delta, int src_down_delta,
++		Uint8 *byte_dst_pos, int dst_linebytes, int width, int height)
++{
++	int w;
++	Uint32 *src_pos = (Uint32 *)byte_src_pos;
++	Uint32 *dst_pos = (Uint32 *)byte_dst_pos;
++
++	while (height) {
++		Uint32 *src = src_pos;
++		Uint32 *dst = dst_pos;
++		for (w = width; w != 0; w--) {
++			*dst = *src;
++			src += src_right_delta;
++			dst++;
++		}
++		dst_pos = (Uint32 *)((Uint8 *)dst_pos + dst_linebytes);
++		src_pos += src_down_delta;
++		height--;
++	}
++}
++
++#define BLOCKSIZE_W 32
++#define BLOCKSIZE_H 32
++
++static void FB_blit32blocked(Uint8 *byte_src_pos, int src_right_delta, int src_down_delta, 
++		Uint8 *byte_dst_pos, int dst_linebytes, int width, int height)
++{
++	int w;
++	Uint32 *src_pos = (Uint32 *)byte_src_pos;
++	Uint32 *dst_pos = (Uint32 *)byte_dst_pos;
++
++	while (height > 0) {
++		Uint32 *src = src_pos;
++		Uint32 *dst = dst_pos;
++		for (w = width; w > 0; w -= BLOCKSIZE_W) {
++			FB_blit32((Uint8 *)src,
++					src_right_delta,
++					src_down_delta,
++					(Uint8 *)dst,
++					dst_linebytes,
++					min(w, BLOCKSIZE_W),
++					min(height, BLOCKSIZE_H));
++			src += src_right_delta * BLOCKSIZE_W;
++			dst += BLOCKSIZE_W;
++		}
++		dst_pos = (Uint32 *)((Uint8 *)dst_pos + dst_linebytes * BLOCKSIZE_H);
++		src_pos += src_down_delta * BLOCKSIZE_H;
++		height -= BLOCKSIZE_H;
++	}
++}
++
+ static void FB_DirectUpdate(_THIS, int numrects, SDL_Rect *rects)
+ {
+ 	int width = cache_vinfo.xres;
+@@ -1507,10 +1566,10 @@ static void FB_DirectUpdate(_THIS, int numrects, SDL_Rect *rects)
+ 		return;
+ 	}
+ 
+-	if (cache_vinfo.bits_per_pixel != 16) {
+-		SDL_SetError("Shadow copy only implemented for 16 bpp");
+-		return;
+-	}
++//	if (cache_vinfo.bits_per_pixel != 16) {
++//		SDL_SetError("Shadow copy only implemented for 16 bpp");
++//		return;
++//	}
+ 
+ 	for (i = 0; i < numrects; i++) {
+ 		int x1, y1, x2, y2;
diff --git a/package/sdl/Config.in b/package/sdl/Config.in
index 9f1e34d..65ac8a2 100644
--- a/package/sdl/Config.in
+++ b/package/sdl/Config.in
@@ -17,6 +17,10 @@ config BR2_PACKAGE_SDL_DIRECTFB
 	bool "SDL DirectFB video driver"
 	depends on BR2_PACKAGE_DIRECTFB
 
+config BR2_PACKAGE_SDL_QTOPIA
+	bool "SDL Qtopia video driver"
+	depends on BR2_PACKAGE_QT
+
 config BR2_PACKAGE_SDL_X11
 	bool "SDL X11 video driver"
 	depends on BR2_PACKAGE_XORG7
diff --git a/package/sdl/sdl.hash b/package/sdl/sdl.hash
index 2c46975..ad59b90 100644
--- a/package/sdl/sdl.hash
+++ b/package/sdl/sdl.hash
@@ -1,4 +1,2 @@
 # Locally calculated after checking pgp signature
 sha256	d6d316a793e5e348155f0dd93b979798933fb98aa1edebcc108829d6474aad00	SDL-1.2.15.tar.gz
-# Locally computed
-sha256	bb117c0fbd7f57f64170b690285d7df07c2371b578e3b3cd3aa2e1155ef461a0	COPYING
diff --git a/package/sdl/sdl.mk b/package/sdl/sdl.mk
index 7389cd3..38b4b97 100644
--- a/package/sdl/sdl.mk
+++ b/package/sdl/sdl.mk
@@ -7,10 +7,8 @@
 SDL_VERSION = 1.2.15
 SDL_SOURCE = SDL-$(SDL_VERSION).tar.gz
 SDL_SITE = http://www.libsdl.org/release
-SDL_LICENSE = LGPL-2.1+
+SDL_LICENSE = LGPLv2.1+
 SDL_LICENSE_FILES = COPYING
-SDL_CPE_ID_VENDOR = libsdl
-SDL_CPE_ID_PRODUCT = simple_directmedia_layer
 SDL_INSTALL_STAGING = YES
 
 # we're patching configure.in, but package cannot autoreconf with our version of
@@ -25,8 +23,6 @@ HOST_SDL_PRE_CONFIGURE_HOOKS += SDL_RUN_AUTOGEN
 SDL_DEPENDENCIES += host-automake host-autoconf host-libtool
 HOST_SDL_DEPENDENCIES += host-automake host-autoconf host-libtool
 
-SDL_CONF_OPTS += --enable-video-qtopia=no
-
 ifeq ($(BR2_PACKAGE_SDL_FBCON),y)
 SDL_CONF_OPTS += --enable-video-fbcon=yes
 else
@@ -41,6 +37,13 @@ else
 SDL_CONF_OPTS += --enable-video-directfb=no
 endif
 
+ifeq ($(BR2_PACKAGE_SDL_QTOPIA),y)
+SDL_CONF_OPTS += --enable-video-qtopia=yes
+SDL_DEPENDENCIES += qt
+else
+SDL_CONF_OPTS += --enable-video-qtopia=no
+endif
+
 ifeq ($(BR2_PACKAGE_SDL_X11),y)
 SDL_CONF_OPTS += --enable-video-x11=yes
 SDL_DEPENDENCIES += \
