mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-25 21:24:21 +08:00
sf: atmel: undo unification of status polling
The AT45 flashes are completely different (at the command set and status register level) from all other SPI flashes, so we can't unify their logic with common code. Signed-off-by: Mike Frysinger <vapier@gentoo.org>
This commit is contained in:
parent
192b639ecc
commit
cdb6a00fb8
@ -113,8 +113,35 @@ static const struct atmel_spi_flash_params atmel_spi_flash_table[] = {
|
||||
|
||||
static int at45_wait_ready(struct spi_flash *flash, unsigned long timeout)
|
||||
{
|
||||
return spi_flash_cmd_poll_bit(flash, timeout,
|
||||
CMD_AT45_READ_STATUS, AT45_STATUS_READY);
|
||||
struct spi_slave *spi = flash->spi;
|
||||
unsigned long timebase;
|
||||
int ret;
|
||||
u8 cmd = CMD_AT45_READ_STATUS;
|
||||
u8 status;
|
||||
|
||||
timebase = get_timer(0);
|
||||
|
||||
ret = spi_xfer(spi, 8, &cmd, NULL, SPI_XFER_BEGIN);
|
||||
if (ret)
|
||||
return -1;
|
||||
|
||||
do {
|
||||
ret = spi_xfer(spi, 8, NULL, &status, 0);
|
||||
if (ret)
|
||||
return -1;
|
||||
|
||||
if (status & AT45_STATUS_READY)
|
||||
break;
|
||||
} while (get_timer(timebase) < timeout);
|
||||
|
||||
/* Deactivate CS */
|
||||
spi_xfer(spi, 0, NULL, NULL, SPI_XFER_END);
|
||||
|
||||
if (status & AT45_STATUS_READY)
|
||||
return 0;
|
||||
|
||||
/* Timed out */
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user