fix samsung flash patch after r21408, thanks to Matthias Buecher (#7348)
[openwrt/openwrt.git] / target / linux / generic-2.6 / patches-2.6.34 / 089-mtd-samsung-flash.patch
index 4d1072cd4c4a97c469e1a27f9a352d5f74f1bbb8..46923358b31c0ac8f195c9dcbca795c92000225a 100644 (file)
@@ -1,11 +1,37 @@
 --- a/drivers/mtd/chips/cfi_cmdset_0002.c
 +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -374,7 +374,7 @@ struct mtd_info *cfi_cmdset_0002(struct
+@@ -327,9 +327,32 @@ static void cfi_fixup_major_minor(struct
+ {
+       // manufacturers defined in include/linux/mtd/cfi.h
  
-               cfi_fixup_major_minor(cfi, extp);
+-      if (cfi->mfr == CFI_MFR_SAMSUNG && cfi->id == 0x257e &&
+-          extp->MajorVersion == '0')
++      if (cfi->mfr == CFI_MFR_SAMSUNG &&
++          extp->MajorVersion == '0') {
++              printk("  Fixed Samsung's Amd/Fujitsu Extended Query version from %c.%c",
++                     extp->MajorVersion, extp->MinorVersion);
++
+               extp->MajorVersion = '1';
++              extp->MinorVersion = '0';
++
++              printk(" to %c.%c.\n",
++                     extp->MajorVersion, extp->MinorVersion);
++      }
++
++      if (cfi->mfr == CFI_MFR_SAMSUNG &&
++          extp->MajorVersion == '3' && extp->MinorVersion == '3') {
++              printk(KERN_NOTICE "  Newer Samsung flash detected, "
++                     "should be compatibile with Amd/Fujitsu.\n");
++
++              printk("  Fixed Samsung's Amd/Fujitsu Extended Query version from %c.%c",
++                     extp->MajorVersion, extp->MinorVersion);
++
++              extp->MajorVersion = '1';       // set to 1.3 (last defined version)
++              extp->MinorVersion = '3';
++
++              printk(" to %c.%c.\n",
++                     extp->MajorVersion, extp->MinorVersion);
++      }
+ }
  
--              if (extp->MajorVersion != '1' ||
-+              if (extp->MajorVersion < '0' || extp->MajorVersion > '3' ||
-                   (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
-                       if (cfi->mfr == MANUFACTURER_SAMSUNG &&
-                           (extp->MajorVersion == '3' && extp->MinorVersion == '3')) {
+ struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary)