summaryrefslogtreecommitdiffstats
path: root/spi.c
diff options
context:
space:
mode:
authorCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-07-22 20:09:28 +0000
committerCarl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>2009-07-22 20:09:28 +0000
commitfcbdbbc0d4da0b600556d51cd048e01b3a19d582 (patch)
tree099011a8ff4fd1dd7e773dcdc7dfe440a0ca9cc4 /spi.c
parent02487aa4edfc832b27afcd850cbfbe499fa09c35 (diff)
downloadflashrom-fcbdbbc0d4da0b600556d51cd048e01b3a19d582.tar.gz
flashrom-fcbdbbc0d4da0b600556d51cd048e01b3a19d582.tar.bz2
flashrom-fcbdbbc0d4da0b600556d51cd048e01b3a19d582.zip
Convert SPI write status register to multicommand infrastructure
Corresponding to flashrom svn r658. Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> Acked-by: Stefan Reinauer <stepan@coresystems.de>
Diffstat (limited to 'spi.c')
-rw-r--r--spi.c50
1 files changed, 24 insertions, 26 deletions
diff --git a/spi.c b/spi.c
index 3a3c77a00..09cfc9073 100644
--- a/spi.c
+++ b/spi.c
@@ -754,21 +754,7 @@ int spi_write_status_enable(void)
result = spi_send_command(sizeof(cmd), JEDEC_EWSR_INSIZE, cmd, NULL);
if (result)
- printf_debug("%s failed", __func__);
- if (result == SPI_INVALID_OPCODE) {
- switch (spi_controller) {
- case SPI_CONTROLLER_ICH7:
- case SPI_CONTROLLER_ICH9:
- case SPI_CONTROLLER_VIA:
- printf_debug(" due to SPI master limitation, ignoring"
- " and hoping it will be run as PREOP\n");
- return 0;
- default:
- break;
- }
- }
- if (result)
- printf_debug("\n");
+ printf_debug("%s failed\n", __func__);
return result;
}
@@ -779,11 +765,30 @@ int spi_write_status_enable(void)
*/
int spi_write_status_register(int status)
{
- const unsigned char cmd[JEDEC_WRSR_OUTSIZE] =
- { JEDEC_WRSR, (unsigned char)status };
+ int result;
+ struct spi_command spicommands[] = {
+ {
+ .writecnt = JEDEC_EWSR_OUTSIZE,
+ .writearr = (const unsigned char[]){ JEDEC_EWSR },
+ .readcnt = 0,
+ .readarr = NULL,
+ }, {
+ .writecnt = JEDEC_WRSR_OUTSIZE,
+ .writearr = (const unsigned char[]){ JEDEC_WRSR, (unsigned char) status },
+ .readcnt = 0,
+ .readarr = NULL,
+ }, {
+ .writecnt = 0,
+ .writearr = NULL,
+ .readcnt = 0,
+ .readarr = NULL,
+ }};
- /* Send WRSR (Write Status Register) */
- return spi_send_command(sizeof(cmd), 0, cmd, NULL);
+ result = spi_send_multicommand(spicommands);
+ if (result) {
+ printf_debug("%s failed during command execution\n", __func__);
+ }
+ return result;
}
int spi_byte_program(int addr, uint8_t byte)
@@ -810,7 +815,6 @@ int spi_byte_program(int addr, uint8_t byte)
result = spi_send_multicommand(spicommands);
if (result) {
printf_debug("%s failed during command execution\n", __func__);
- return result;
}
return result;
}
@@ -857,7 +861,6 @@ int spi_nbyte_program(int address, uint8_t *bytes, int len)
result = spi_send_multicommand(spicommands);
if (result) {
printf_debug("%s failed during command execution\n", __func__);
- return result;
}
return result;
}
@@ -871,11 +874,6 @@ int spi_disable_blockprotect(void)
/* If there is block protection in effect, unprotect it first. */
if ((status & 0x3c) != 0) {
printf_debug("Some block protection in effect, disabling\n");
- result = spi_write_status_enable();
- if (result) {
- printf_debug("spi_write_status_enable failed\n");
- return result;
- }
result = spi_write_status_register(status & ~0x3c);
if (result) {
printf_debug("spi_write_status_register failed\n");