Commit 52439d605d6604c15954281a1d2831471dbd024c

Authored by Stephan Gatzka
Committed by Stefan Richter
1 parent badfcb2489

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) {