diff options
Diffstat (limited to 'drivers/mtd/spi')
| -rw-r--r-- | drivers/mtd/spi/spansion.c | 9 | ||||
| -rw-r--r-- | drivers/mtd/spi/spi_flash.c | 14 | ||||
| -rw-r--r-- | drivers/mtd/spi/winbond.c | 28 | 
3 files changed, 37 insertions, 14 deletions
| diff --git a/drivers/mtd/spi/spansion.c b/drivers/mtd/spi/spansion.c index dad30b54c..b3ef90f13 100644 --- a/drivers/mtd/spi/spansion.c +++ b/drivers/mtd/spi/spansion.c @@ -90,6 +90,13 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {  		.name = "S25FL032P",  	},  	{ +		.idcode1 = 0x0216, +		.idcode2 = 0x4d00, +		.pages_per_sector = 256, +		.nr_sectors = 128, +		.name = "S25FL064P", +	}, +	{  		.idcode1 = 0x2018,  		.idcode2 = 0x4d01,  		.pages_per_sector = 256, @@ -101,7 +108,7 @@ static const struct spansion_spi_flash_params spansion_spi_flash_table[] = {  		.idcode2 = 0x4d01,  		.pages_per_sector = 256,  		.nr_sectors = 512, -		.name = "S25FL256S", +		.name = "S25FL256S_64K",  	},  }; diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c index 6507aa34b..9991d47a4 100644 --- a/drivers/mtd/spi/spi_flash.c +++ b/drivers/mtd/spi/spi_flash.c @@ -124,9 +124,6 @@ int spi_flash_cmd_write_multi(struct spi_flash *flash, u32 offset,  		}  	} -	debug("SF: program %s %zu bytes @ %#x\n", -	      ret ? "failure" : "success", len, offset); -  	spi_release_bus(flash->spi);  	return ret;  } @@ -150,8 +147,10 @@ int spi_flash_cmd_read_fast(struct spi_flash *flash, u32 offset,  	u8 cmd[5];  	/* Handle memory-mapped SPI */ -	if (flash->memory_map) +	if (flash->memory_map) {  		memcpy(data, flash->memory_map + offset, len); +		return 0; +	}  	cmd[0] = CMD_READ_ARRAY_FAST;  	spi_flash_addr(offset, cmd); @@ -205,7 +204,7 @@ int spi_flash_cmd_wait_ready(struct spi_flash *flash, unsigned long timeout)  int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len)  { -	u32 start, end, erase_size; +	u32 end, erase_size;  	int ret;  	u8 cmd[4]; @@ -225,8 +224,7 @@ int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len)  		cmd[0] = CMD_ERASE_4K;  	else  		cmd[0] = CMD_ERASE_64K; -	start = offset; -	end = start + len; +	end = offset + len;  	while (offset < end) {  		spi_flash_addr(offset, cmd); @@ -248,8 +246,6 @@ int spi_flash_cmd_erase(struct spi_flash *flash, u32 offset, size_t len)  			goto out;  	} -	debug("SF: Successfully erased %zu bytes @ %#x\n", len, start); -   out:  	spi_release_bus(flash->spi);  	return ret; diff --git a/drivers/mtd/spi/winbond.c b/drivers/mtd/spi/winbond.c index 27162091c..845780849 100644 --- a/drivers/mtd/spi/winbond.c +++ b/drivers/mtd/spi/winbond.c @@ -18,6 +18,21 @@ struct winbond_spi_flash_params {  static const struct winbond_spi_flash_params winbond_spi_flash_table[] = {  	{ +		.id			= 0x2014, +		.nr_blocks		= 16, +		.name			= "W25P80", +	}, +	{ +		.id			= 0x2015, +		.nr_blocks		= 32, +		.name			= "W25P16", +	}, +	{ +		.id			= 0x2016, +		.nr_blocks		= 64, +		.name			= "W25P32", +	}, +	{  		.id			= 0x3013,  		.nr_blocks		= 8,  		.name			= "W25X40", @@ -63,13 +78,18 @@ static const struct winbond_spi_flash_params winbond_spi_flash_table[] = {  		.name			= "W25Q128",  	},  	{ +		.id			= 0x4019, +		.nr_blocks		= 512, +		.name			= "W25Q256", +	}, +	{  		.id			= 0x5014, -		.nr_blocks		= 128, -		.name			= "W25Q80", +		.nr_blocks		= 16, +		.name			= "W25Q80BW",  	},  	{  		.id			= 0x6016, -		.nr_blocks		= 512, +		.nr_blocks		= 64,  		.name			= "W25Q32DW",  	},  	{ @@ -104,7 +124,7 @@ struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode)  	}  	flash->page_size = 256; -	flash->sector_size = 4096; +	flash->sector_size = (idcode[1] == 0x20) ? 65536 : 4096;  	flash->size = 4096 * 16 * params->nr_blocks;  	return flash; |