summaryrefslogtreecommitdiff
path: root/bitbang_spi.c
diff options
context:
space:
mode:
authormkarcher <mkarcher@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2011-05-11 17:07:07 +0000
committermkarcher <mkarcher@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2011-05-11 17:07:07 +0000
commit5de0d1e9392bde4665ddb6cd216400e832b8178c (patch)
tree8b556f82073e824bc1e9a4cc9547d67b1d902cee /bitbang_spi.c
parentb23440053e8b3f8fcd0e97f0dbdfb84bed0bbc5f (diff)
downloadflashrom-5de0d1e9392bde4665ddb6cd216400e832b8178c.tar.gz
kill central list of SPI programmers
Remove the array spi_programmer, replace it by dynamic registration instead. Also initially start with no busses supported, and switch to the default non-SPI only for the internal programmer. Also this patch changes the initialization for the buses_supported variable from "everything-except-SPI" to "nothing". All programmers have to set the bus type on their own, and this enables register_spi_programmer to just add the SPI both for on-board SPI interfaces (where the internal programmer already detected the other bus types), as well as for external programmers (where we have the default "none"). Signed-off-by: Michael Karcher <flashrom@mkarcher.dialup.fu-berlin.de> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@1299 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'bitbang_spi.c')
-rw-r--r--bitbang_spi.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/bitbang_spi.c b/bitbang_spi.c
index d63c769..3c718af 100644
--- a/bitbang_spi.c
+++ b/bitbang_spi.c
@@ -64,6 +64,19 @@ static void bitbang_spi_release_bus(void)
bitbang_spi_master->release_bus();
}
+static int bitbang_spi_send_command(unsigned int writecnt, unsigned int readcnt,
+ const unsigned char *writearr, unsigned char *readarr);
+
+static const struct spi_programmer spi_programmer_bitbang = {
+ .type = SPI_CONTROLLER_BITBANG,
+ .max_data_read = MAX_DATA_READ_UNLIMITED,
+ .max_data_write = MAX_DATA_WRITE_UNLIMITED,
+ .command = bitbang_spi_send_command,
+ .multicommand = default_spi_send_multicommand,
+ .read = default_spi_read,
+ .write_256 = default_spi_write_256,
+};
+
int bitbang_spi_init(const struct bitbang_spi_master *master, int halfperiod)
{
/* BITBANG_SPI_INVALID is 0, so if someone forgot to initialize ->type,
@@ -85,6 +98,8 @@ int bitbang_spi_init(const struct bitbang_spi_master *master, int halfperiod)
bitbang_spi_master = master;
bitbang_spi_half_period = halfperiod;
+ register_spi_programmer(&spi_programmer_bitbang);
+
/* FIXME: Run bitbang_spi_request_bus here or in programmer init? */
bitbang_spi_set_cs(1);
bitbang_spi_set_sck(0);
@@ -127,7 +142,7 @@ static uint8_t bitbang_spi_readwrite_byte(uint8_t val)
return ret;
}
-int bitbang_spi_send_command(unsigned int writecnt, unsigned int readcnt,
+static int bitbang_spi_send_command(unsigned int writecnt, unsigned int readcnt,
const unsigned char *writearr, unsigned char *readarr)
{
int i;