diff options
Diffstat (limited to 'drivers/firewire')
-rw-r--r-- | drivers/firewire/ohci.c | 36 |
1 files changed, 12 insertions, 24 deletions
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index 862fdf3400cf..399d5926caf7 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c @@ -2159,38 +2159,26 @@ static int configure_1394a_enhancements(struct fw_ohci *ohci) return 0; } -#define TSB41BA3D_VID 0x00080028 -#define TSB41BA3D_PID 0x00833005 - static int probe_tsb41ba3d(struct fw_ohci *ohci) { - int reg, i, vendor_id, product_id; + /* TI vendor ID = 0x080028, TSB41BA3D product ID = 0x833005 (sic) */ + static const u8 id[] = { 0x08, 0x00, 0x28, 0x83, 0x30, 0x05, }; + int reg, i; reg = read_phy_reg(ohci, 2); if (reg < 0) return reg; + if ((reg & PHY_EXTENDED_REGISTERS) != PHY_EXTENDED_REGISTERS) + return 0; - if ((reg & PHY_EXTENDED_REGISTERS) == PHY_EXTENDED_REGISTERS) { - vendor_id = 0; - for (i = 10; i < 13; i++) { - reg = read_paged_phy_reg(ohci, 1, i); - if (reg < 0) - return reg; - vendor_id = (vendor_id << 8) | reg; - } - product_id = 0; - for (i = 13; i < 16; i++) { - reg = read_paged_phy_reg(ohci, 1, i); - if (reg < 0) - return reg; - product_id = (product_id << 8) | reg; - } - - if ((vendor_id == TSB41BA3D_VID) && - (product_id == TSB41BA3D_PID)) - return 1; + for (i = ARRAY_SIZE(id) - 1; i >= 0; i--) { + reg = read_paged_phy_reg(ohci, 1, i + 10); + if (reg < 0) + return reg; + if (reg != id[i]) + return 0; } - return 0; + return 1; } static int ohci_enable(struct fw_card *card, |