diff --git a/exynos3/s5pc110/libs3cjpeg/JpegEncoder.cpp b/exynos3/s5pc110/libs3cjpeg/JpegEncoder.cpp
index d2b6a6f..96cee3d 100644
--- a/exynos3/s5pc110/libs3cjpeg/JpegEncoder.cpp
+++ b/exynos3/s5pc110/libs3cjpeg/JpegEncoder.cpp
@@ -44,8 +44,28 @@
         return;
     }
 
+    // Must be exactly 0, legacy kernel will return 1 despite
+    // the IOCTL being invalid
+    if (ioctl(mDevFd, IOCTL_JPG_GET_INFO, &mInfo) != 0) {
+#ifdef LEGACY_SUPPORT
+        ALOGW("Unable to read driver info. Using legacy values.");
+        mInfo.frame_buf_size = JPG_FRAME_BUF_SIZE;
+        mInfo.thumb_frame_buf_size = JPG_FRAME_THUMB_BUF_SIZE;
+        mInfo.stream_buf_size = JPG_STREAM_BUF_SIZE;
+        mInfo.thumb_stream_buf_size = JPG_STREAM_THUMB_BUF_SIZE;
+        mInfo.total_buf_size = JPG_TOTAL_BUF_SIZE;
+        mInfo.max_width = MAX_JPG_WIDTH;
+        mInfo.max_height = MAX_JPG_HEIGHT;
+        mInfo.max_thumb_width = MAX_JPG_THUMBNAIL_WIDTH;
+        mInfo.max_thumb_height = MAX_JPG_THUMBNAIL_HEIGHT;
+#else
+        ALOGE("Unable to read driver info.");
+        return;
+#endif
+    }
+
     mArgs.mmapped_addr = (char *)mmap(0,
-                                      JPG_TOTAL_BUF_SIZE,
+                                      mInfo.total_buf_size,
                                       PROT_READ | PROT_WRITE,
                                       MAP_SHARED,
                                       mDevFd,
@@ -82,7 +102,7 @@
 JpegEncoder::~JpegEncoder()
 {
     if (mArgs.mmapped_addr != (char*)MAP_FAILED)
-        munmap(mArgs.mmapped_addr, JPG_TOTAL_BUF_SIZE);
+        munmap(mArgs.mmapped_addr, mInfo.total_buf_size);
 
     delete mArgs.enc_param;
 
@@ -101,14 +121,14 @@
 
     switch (type) {
     case JPEG_SET_ENCODE_WIDTH:
-        if (value < 0 || value > MAX_JPG_WIDTH)
+        if (value < 0 || value > mInfo.max_width)
             ret = JPG_FAIL;
         else
             mArgs.enc_param->width = value;
         break;
 
     case JPEG_SET_ENCODE_HEIGHT:
-        if (value < 0 || value > MAX_JPG_HEIGHT)
+        if (value < 0 || value > mInfo.max_height)
             ret = JPG_FAIL;
         else
             mArgs.enc_param->height = value;
@@ -140,14 +160,14 @@
         break;
 
     case JPEG_SET_THUMBNAIL_WIDTH:
-        if (value < 0 || value > MAX_JPG_THUMBNAIL_WIDTH)
+        if (value < 0 || value > mInfo.max_thumb_width)
             ret = JPG_FAIL;
         else
             mArgs.thumb_enc_param->width = value;
         break;
 
     case JPEG_SET_THUMBNAIL_HEIGHT:
-        if (value < 0 || value > MAX_JPG_THUMBNAIL_HEIGHT)
+        if (value < 0 || value > mInfo.max_thumb_height)
             ret = JPG_FAIL;
         else
             mArgs.thumb_enc_param->height = value;
@@ -169,7 +189,7 @@
     if (!available)
         return NULL;
 
-    if (size > JPG_FRAME_BUF_SIZE) {
+    if (size > mInfo.frame_buf_size) {
         ALOGE("The buffer size requested is too large");
         return NULL;
     }
@@ -196,7 +216,7 @@
     if (!available)
         return NULL;
 
-    if (size > JPG_FRAME_THUMB_BUF_SIZE) {
+    if (size > mInfo.thumb_frame_buf_size) {
         ALOGE("The buffer size requested is too large");
         return NULL;
     }
@@ -259,7 +279,7 @@
             bufSize = EXIF_FILE_SIZE;
         }
 
-        if (mArgs.enc_param->file_size + bufSize > JPG_TOTAL_BUF_SIZE)
+        if (mArgs.enc_param->file_size + bufSize > mInfo.total_buf_size)
             return ret;
 
         exifOut = new unsigned char[bufSize];
diff --git a/exynos3/s5pc110/libs3cjpeg/JpegEncoder.h b/exynos3/s5pc110/libs3cjpeg/JpegEncoder.h
index b95b1b1..a1302fd 100644
--- a/exynos3/s5pc110/libs3cjpeg/JpegEncoder.h
+++ b/exynos3/s5pc110/libs3cjpeg/JpegEncoder.h
@@ -28,6 +28,10 @@
 #include "Exif.h"
 
 namespace android {
+
+#define LEGACY_SUPPORT
+#ifdef LEGACY_SUPPORT
+
 #define MAX_JPG_WIDTH                   800
 #define MAX_JPG_HEIGHT                  480
 #define MAX_JPG_RESOLUTION              (MAX_JPG_WIDTH * MAX_JPG_HEIGHT)
@@ -66,6 +70,7 @@
 #define IMG_MAIN_START      (JPG_STREAM_BUF_SIZE + JPG_STREAM_THUMB_BUF_SIZE)
 #define IMG_THUMB_START     (IMG_MAIN_START + JPG_FRAME_BUF_SIZE)
 /*******************************************************************************/
+#endif
 
 #define JPG_DRIVER_NAME     "/dev/s3c-jpg"
 
@@ -78,6 +83,7 @@
 #define IOCTL_JPG_GET_THUMB_FRMBUF      _IO(JPEG_IOCTL_MAGIC, 6)
 #define IOCTL_JPG_GET_PHY_FRMBUF        _IO(JPEG_IOCTL_MAGIC, 7)
 #define IOCTL_JPG_GET_PHY_THUMB_FRMBUF  _IO(JPEG_IOCTL_MAGIC, 8)
+#define IOCTL_JPG_GET_INFO              _IO(JPEG_IOCTL_MAGIC, 9)
 
 typedef enum {
     JPEG_SET_ENCODE_WIDTH,
@@ -181,6 +187,18 @@
     jpg_enc_proc_param  *thumb_enc_param;
 } jpg_args;
 
+typedef struct {
+    unsigned int     frame_buf_size;
+    unsigned int     thumb_frame_buf_size;
+    unsigned int     stream_buf_size;
+    unsigned int     thumb_stream_buf_size;
+    unsigned int     total_buf_size;
+    int     max_width;
+    int     max_height;
+    int     max_thumb_width;
+    int     max_thumb_height;
+} jpg_info;
+
 class JpegEncoder {
 public:
     JpegEncoder();
@@ -232,6 +250,7 @@
                                  unsigned char *start);
     int mDevFd;
     jpg_args mArgs;
+    jpg_info mInfo;
 
     bool available;
 
