Commit 52439d605d6604c15954281a1d2831471dbd024c
Committed by
Stefan Richter
1 parent
badfcb2489
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
firewire: ohci: get IR bit from TSB41BA3D phy
In case of a self constructed selfID packet this patch correctly determines the information if the TSB41BA3D phy initiated a bus reset. Signed-off-by: Stephan Gatzka <stephan.gatzka@gmail.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Showing 1 changed file with 27 additions and 1 deletions Side-by-side Diff
drivers/firewire/ohci.c
... | ... | @@ -1777,11 +1777,35 @@ |
1777 | 1777 | return i; |
1778 | 1778 | } |
1779 | 1779 | |
1780 | +static int initiated_reset(struct fw_ohci *ohci) | |
1781 | +{ | |
1782 | + int reg; | |
1783 | + int ret = 0; | |
1784 | + | |
1785 | + mutex_lock(&ohci->phy_reg_mutex); | |
1786 | + reg = write_phy_reg(ohci, 7, 0xe0); /* Select page 7 */ | |
1787 | + if (reg >= 0) { | |
1788 | + reg = read_phy_reg(ohci, 8); | |
1789 | + reg |= 0x40; | |
1790 | + reg = write_phy_reg(ohci, 8, reg); /* set PMODE bit */ | |
1791 | + if (reg >= 0) { | |
1792 | + reg = read_phy_reg(ohci, 12); /* read register 12 */ | |
1793 | + if (reg >= 0) { | |
1794 | + if ((reg & 0x08) == 0x08) { | |
1795 | + /* bit 3 indicates "initiated reset" */ | |
1796 | + ret = 0x2; | |
1797 | + } | |
1798 | + } | |
1799 | + } | |
1800 | + } | |
1801 | + mutex_unlock(&ohci->phy_reg_mutex); | |
1802 | + return ret; | |
1803 | +} | |
1804 | + | |
1780 | 1805 | /* |
1781 | 1806 | * TI TSB82AA2B and TSB12LV26 do not receive the selfID of a locally |
1782 | 1807 | * attached TSB41BA3D phy; see http://www.ti.com/litv/pdf/sllz059. |
1783 | 1808 | * Construct the selfID from phy register contents. |
1784 | - * FIXME: How to determine the selfID.i flag? | |
1785 | 1809 | */ |
1786 | 1810 | static int find_and_insert_self_id(struct fw_ohci *ohci, int self_id_count) |
1787 | 1811 | { |
... | ... | @@ -1813,6 +1837,8 @@ |
1813 | 1837 | return status; |
1814 | 1838 | self_id |= ((status & 0x3) << (6 - (i * 2))); |
1815 | 1839 | } |
1840 | + | |
1841 | + self_id |= initiated_reset(ohci); | |
1816 | 1842 | |
1817 | 1843 | pos = get_self_id_pos(ohci, self_id, self_id_count); |
1818 | 1844 | if (pos >= 0) { |