From 28a3cb3ca3cb7ad36b137d8eaae408948e9815b5 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Tue, 24 Oct 2006 18:05:05 +0000
Subject: [PATCH] add fix for samsung flash chips

SVN-Revision: 5284
---
 .../patches/007-samsung_flash.patch           | 38 +++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 target/linux/generic-2.6/patches/007-samsung_flash.patch

diff --git a/target/linux/generic-2.6/patches/007-samsung_flash.patch b/target/linux/generic-2.6/patches/007-samsung_flash.patch
new file mode 100644
index 0000000000..93e371fa92
--- /dev/null
+++ b/target/linux/generic-2.6/patches/007-samsung_flash.patch
@@ -0,0 +1,38 @@
+--- linux.old/drivers/mtd/chips/cfi_cmdset_0002.c	2006-10-23 21:14:11.618024794 +0200
++++ linux.dev/drivers/mtd/chips/cfi_cmdset_0002.c	2006-10-24 07:47:52.267007586 +0200
+@@ -49,6 +49,7 @@
+ #define MANUFACTURER_SST	0x00BF
+ #define SST49LF004B	        0x0060
+ #define SST49LF008A		0x005a
++#define MANUFACTURER_SAMSUNG	0x00ec
+ 
+ static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
+ static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
+@@ -254,13 +255,20 @@
+ 		}
+ 
+ 		if (extp->MajorVersion != '1' ||
+-		    (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
+-			printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
+-			       "version %c.%c.\n",  extp->MajorVersion,
+-			       extp->MinorVersion);
+-			kfree(extp);
+-			kfree(mtd);
+-			return NULL;
++		    (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
++		        if (cfi->mfr == MANUFACTURER_SAMSUNG &&
++			    (extp->MajorVersion == '3' && extp->MinorVersion == '3')) {
++			    printk(KERN_NOTICE "  Newer Samsung flash detected, "
++			           "should be compatibile with Amd/Fujitsu.\n");
++		        }
++		        else {
++			    printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
++			           "version %c.%c.\n",  extp->MajorVersion,
++			           extp->MinorVersion);
++			    kfree(extp);
++			    kfree(mtd);
++			    return NULL;
++		        }
+ 		}
+ 
+ 		/* Install our own private info structure */
-- 
2.30.2