@ -24,8 +24,6 @@
# define CMD_W25_DP 0xb9 /* Deep Power-down */
# define CMD_W25_RES 0xab /* Release from DP, and Read Signature */
# define WINBOND_SR_WIP (1 << 0) /* Write-in-Progress */
struct winbond_spi_flash_params {
uint16_t id ;
/* Log2 of page size in power-of-two mode */
@ -107,43 +105,6 @@ static const struct winbond_spi_flash_params winbond_spi_flash_table[] = {
} ,
} ;
static int winbond_wait_ready ( struct spi_flash * flash , unsigned long timeout )
{
struct spi_slave * spi = flash - > spi ;
unsigned long timebase ;
int ret ;
u8 status ;
u8 cmd [ 4 ] = { CMD_W25_RDSR , 0xff , 0xff , 0xff } ;
ret = spi_xfer ( spi , 32 , & cmd [ 0 ] , NULL , SPI_XFER_BEGIN ) ;
if ( ret ) {
debug ( " SF: Failed to send command %02x: %d \n " , cmd , ret ) ;
return ret ;
}
timebase = get_timer ( 0 ) ;
do {
ret = spi_xfer ( spi , 8 , NULL , & status , 0 ) ;
if ( ret ) {
debug ( " SF: Failed to get status for cmd %02x: %d \n " , cmd , ret ) ;
return - 1 ;
}
if ( ( status & WINBOND_SR_WIP ) = = 0 )
break ;
} while ( get_timer ( timebase ) < timeout ) ;
spi_xfer ( spi , 0 , NULL , NULL , SPI_XFER_END ) ;
if ( ( status & WINBOND_SR_WIP ) = = 0 )
return 0 ;
debug ( " SF: Timed out on command %02x: %d \n " , cmd , ret ) ;
/* Timed out */
return - 1 ;
}
/*
* Assemble the address part of a command for Winbond devices in
* non - power - of - two page size mode .
@ -230,11 +191,9 @@ static int winbond_write(struct spi_flash *flash,
goto out ;
}
ret = winbond_wait_ready ( flash , SPI_FLASH_PROG_TIMEOUT ) ;
if ( ret < 0 ) {
debug ( " SF: Winbond page programming timed out \n " ) ;
ret = spi_flash_cmd_wait_ready ( flash , SPI_FLASH_PROG_TIMEOUT ) ;
if ( ret )
goto out ;
}
page_addr + + ;
byte_addr = 0 ;
@ -298,11 +257,9 @@ int winbond_erase(struct spi_flash *flash, u32 offset, size_t len)
goto out ;
}
ret = winbond_wait_ready ( flash , SPI_FLASH_PAGE_ERASE_TIMEOUT ) ;
if ( ret < 0 ) {
debug ( " SF: Winbond sector erase timed out \n " ) ;
ret = spi_flash_cmd_wait_ready ( flash , SPI_FLASH_PAGE_ERASE_TIMEOUT ) ;
if ( ret )
goto out ;
}
}
debug ( " SF: Winbond: Successfully erased %u bytes @ 0x%x \n " ,