{"S25FL128S_64K",  0x012018, 0x4d01,    64 * 1024,   256, RD_FULL,                   WR_QPP},
        {"S25FL256S_256K", 0x010219, 0x4d00,   256 * 1024,   128, RD_FULL,                   WR_QPP},
        {"S25FL256S_64K",  0x010219, 0x4d01,    64 * 1024,   512, RD_FULL,                   WR_QPP},
+       {"S25FS512S",      0x010220, 0x4D00,   128 * 1024,   512, RD_FULL,                   WR_QPP},
        {"S25FL512S_256K", 0x010220, 0x4d00,   256 * 1024,   256, RD_FULL,                   WR_QPP},
        {"S25FL512S_64K",  0x010220, 0x4d01,    64 * 1024,  1024, RD_FULL,                   WR_QPP},
        {"S25FL512S_512K", 0x010220, 0x4f00,   256 * 1024,   256, RD_FULL,                   WR_QPP},
 
         * sector that is not overlaid by the parameter sectors.
         * The uniform sector erase command has no effect on parameter sectors.
         */
-       if (jedec == 0x0219 && (ext_jedec & 0xff00) == 0x4d00) {
+       if ((jedec == 0x0219 || (jedec == 0x0220)) &&
+           (ext_jedec & 0xff00) == 0x4d00) {
                int ret;
                u8 id[6];
 
         * have 256b pages.
         */
        if (ext_jedec == 0x4d00) {
-               if ((jedec == 0x0215) || (jedec == 0x216))
+               if ((jedec == 0x0215) || (jedec == 0x216) || (jedec == 0x220))
                        flash->page_size = 256;
                else
                        flash->page_size = 512;