diff options
author | Chuck Ebbert <cebbert@redhat.com> | 2008-02-13 19:47:11 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2008-02-15 10:51:37 -0500 |
commit | a1a98b72dbd17e53cd92b8e78f404525ebcfd981 (patch) | |
tree | ed341912fab53a458efd23171e09acfeb8f6da29 /drivers/net | |
parent | 4a75834644ae32ded9bed14db39834d6d3bc4793 (diff) | |
download | kernel_samsung_smdk4412-a1a98b72dbd17e53cd92b8e78f404525ebcfd981.zip kernel_samsung_smdk4412-a1a98b72dbd17e53cd92b8e78f404525ebcfd981.tar.gz kernel_samsung_smdk4412-a1a98b72dbd17e53cd92b8e78f404525ebcfd981.tar.bz2 |
Fix station address detection in smc
Megahertz EM1144 PCMCIA ethernet adapter needs special handling
because it has two VERS_1 tuples and the station address is in
the second one. Conversion to generic handling of these fields
broke it. Reverting that fixes the device.
https://bugzilla.redhat.com/show_bug.cgi?id=233255
Thanks go to Jon Stanley for not giving up on this one until the
problem was found.
Signed-off-by: Chuck Ebbert <cebbert@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/pcmcia/smc91c92_cs.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c index f18eca9..250eb19 100644 --- a/drivers/net/pcmcia/smc91c92_cs.c +++ b/drivers/net/pcmcia/smc91c92_cs.c @@ -559,8 +559,16 @@ static int mhz_setup(struct pcmcia_device *link) /* Read the station address from the CIS. It is stored as the last (fourth) string in the Version 1 Version/ID tuple. */ - if (link->prod_id[3]) { - station_addr = link->prod_id[3]; + tuple->DesiredTuple = CISTPL_VERS_1; + if (first_tuple(link, tuple, parse) != CS_SUCCESS) { + rc = -1; + goto free_cfg_mem; + } + /* Ugh -- the EM1144 card has two VERS_1 tuples!?! */ + if (next_tuple(link, tuple, parse) != CS_SUCCESS) + first_tuple(link, tuple, parse); + if (parse->version_1.ns > 3) { + station_addr = parse->version_1.str + parse->version_1.ofs[3]; if (cvt_ascii_address(dev, station_addr) == 0) { rc = 0; goto free_cfg_mem; |