diff options
author | Andrey Smirnov <andrew.smirnov@gmail.com> | 2016-06-01 21:58:42 -0700 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2016-06-03 09:14:14 +0200 |
commit | 81f2d33a830a4be7e6ea8f3c33c17de1539da8cd (patch) | |
tree | b05853425fb7dc63e05c17e656d34be2b946556c /drivers/net | |
parent | 8ba2db7646b0d962173417dca1bd8117900b48ce (diff) | |
download | barebox-81f2d33a830a4be7e6ea8f3c33c17de1539da8cd.tar.gz barebox-81f2d33a830a4be7e6ea8f3c33c17de1539da8cd.tar.xz |
e1000: Consolidate SPI EEPROM init code
All of the chips that bitbang SPI to access EEPROM appear to be
configured in the same way, so move common code into a separate
function and make use of it.
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/e1000/eeprom.c | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/drivers/net/e1000/eeprom.c b/drivers/net/e1000/eeprom.c index 55a8f96501..89514ebbeb 100644 --- a/drivers/net/e1000/eeprom.c +++ b/drivers/net/e1000/eeprom.c @@ -260,6 +260,22 @@ static int32_t e1000_acquire_eeprom(struct e1000_hw *hw) return E1000_SUCCESS; } +static void e1000_eeprom_uses_spi(struct e1000_eeprom_info *eeprom, + uint32_t eecd) +{ + eeprom->type = e1000_eeprom_spi; + eeprom->opcode_bits = 8; + eeprom->delay_usec = 1; + if (eecd & E1000_EECD_ADDR_BITS) { + eeprom->address_bits = 16; + } else { + eeprom->address_bits = 8; + } + + eeprom->use_eerd = false; +} + + /****************************************************************************** * Sets up eeprom variables in the hw struct. Must be called after mac_type * is configured. Additionally, if this is ICH8, the flash controller GbE @@ -312,13 +328,7 @@ int32_t e1000_init_eeprom_params(struct e1000_hw *hw) case e1000_82547: case e1000_82547_rev_2: if (eecd & E1000_EECD_TYPE) { - eeprom->type = e1000_eeprom_spi; - eeprom->opcode_bits = 8; - eeprom->delay_usec = 1; - if (eecd & E1000_EECD_ADDR_BITS) - eeprom->address_bits = 16; - else - eeprom->address_bits = 8; + e1000_eeprom_uses_spi(eeprom, eecd); } else { eeprom->type = e1000_eeprom_microwire; eeprom->opcode_bits = 3; @@ -335,27 +345,13 @@ int32_t e1000_init_eeprom_params(struct e1000_hw *hw) break; case e1000_82571: case e1000_82572: - eeprom->type = e1000_eeprom_spi; - eeprom->opcode_bits = 8; - eeprom->delay_usec = 1; - if (eecd & E1000_EECD_ADDR_BITS) - eeprom->address_bits = 16; - else - eeprom->address_bits = 8; - - eeprom->use_eerd = false; + e1000_eeprom_uses_spi(eeprom, eecd); break; case e1000_82573: case e1000_82574: - eeprom->type = e1000_eeprom_spi; - eeprom->opcode_bits = 8; - eeprom->delay_usec = 1; - if (eecd & E1000_EECD_ADDR_BITS) - eeprom->address_bits = 16; - else - eeprom->address_bits = 8; - - if (e1000_is_onboard_nvm_eeprom(hw) == false) { + if (e1000_is_onboard_nvm_eeprom(hw)) { + e1000_eeprom_uses_spi(eeprom, eecd); + } else { eeprom->use_eerd = true; eeprom->type = e1000_eeprom_flash; |