90 lines
2.5 KiB
Diff
90 lines
2.5 KiB
Diff
--- linux-2.4.30.old/drivers/net/b44.c 2005-05-01 23:30:22.000000000 +0400
|
|
+++ linux-2.4.30/drivers/net/b44.c 2005-05-10 16:51:24.410654488 +0400
|
|
@@ -343,17 +343,14 @@
|
|
bw32(B44_IMASK, bp->imask);
|
|
}
|
|
|
|
-static int b44_readphy(struct b44 *bp, int reg, u32 *val)
|
|
+static int __b44_readphy(struct b44 *bp, int phy_addr, int reg, u32 *val)
|
|
{
|
|
int err;
|
|
|
|
- if (bp->phy_addr == B44_PHY_ADDR_NO_PHY)
|
|
- return 0;
|
|
-
|
|
bw32(B44_EMAC_ISTAT, EMAC_INT_MII);
|
|
bw32(B44_MDIO_DATA, (MDIO_DATA_SB_START |
|
|
(MDIO_OP_READ << MDIO_DATA_OP_SHIFT) |
|
|
- (bp->phy_addr << MDIO_DATA_PMD_SHIFT) |
|
|
+ (phy_addr << MDIO_DATA_PMD_SHIFT) |
|
|
(reg << MDIO_DATA_RA_SHIFT) |
|
|
(MDIO_TA_VALID << MDIO_DATA_TA_SHIFT)));
|
|
err = b44_wait_bit(bp, B44_EMAC_ISTAT, EMAC_INT_MII, 100, 0);
|
|
@@ -362,21 +359,34 @@
|
|
return err;
|
|
}
|
|
|
|
-static int b44_writephy(struct b44 *bp, int reg, u32 val)
|
|
+static int b44_readphy(struct b44 *bp, int reg, u32 *val)
|
|
{
|
|
if (bp->phy_addr == B44_PHY_ADDR_NO_PHY)
|
|
return 0;
|
|
|
|
+ return __b44_readphy(bp, bp->phy_addr, reg, val);
|
|
+}
|
|
+
|
|
+static int __b44_writephy(struct b44 *bp, int phy_addr, int reg, u32 val)
|
|
+{
|
|
bw32(B44_EMAC_ISTAT, EMAC_INT_MII);
|
|
bw32(B44_MDIO_DATA, (MDIO_DATA_SB_START |
|
|
(MDIO_OP_WRITE << MDIO_DATA_OP_SHIFT) |
|
|
- (bp->phy_addr << MDIO_DATA_PMD_SHIFT) |
|
|
+ (phy_addr << MDIO_DATA_PMD_SHIFT) |
|
|
(reg << MDIO_DATA_RA_SHIFT) |
|
|
(MDIO_TA_VALID << MDIO_DATA_TA_SHIFT) |
|
|
(val & MDIO_DATA_DATA)));
|
|
return b44_wait_bit(bp, B44_EMAC_ISTAT, EMAC_INT_MII, 100, 0);
|
|
}
|
|
|
|
+static int b44_writephy(struct b44 *bp, int reg, u32 val)
|
|
+{
|
|
+ if (bp->phy_addr == B44_PHY_ADDR_NO_PHY)
|
|
+ return 0;
|
|
+
|
|
+ return __b44_writephy(bp, bp->phy_addr, reg, val);
|
|
+}
|
|
+
|
|
static int b44_phy_reset(struct b44 *bp)
|
|
{
|
|
u32 val;
|
|
@@ -1701,7 +1711,7 @@
|
|
u32 mii_regval;
|
|
|
|
spin_lock_irq(&bp->lock);
|
|
- err = b44_readphy(bp, data->reg_num & 0x1f, &mii_regval);
|
|
+ err = __b44_readphy(bp, data->phy_id & 0x1f, data->reg_num & 0x1f, &mii_regval);
|
|
spin_unlock_irq(&bp->lock);
|
|
|
|
data->val_out = mii_regval;
|
|
@@ -1714,7 +1724,7 @@
|
|
return -EPERM;
|
|
|
|
spin_lock_irq(&bp->lock);
|
|
- err = b44_writephy(bp, data->reg_num & 0x1f, data->val_in);
|
|
+ err = __b44_writephy(bp, data->phy_id & 0x1f, data->reg_num & 0x1f, data->val_in);
|
|
spin_unlock_irq(&bp->lock);
|
|
|
|
return err;
|
|
@@ -1919,6 +1929,11 @@
|
|
printk("%2.2x%c", dev->dev_addr[i],
|
|
i == 5 ? '\n' : ':');
|
|
|
|
+ /* Initialize phy */
|
|
+ spin_lock_irq(&bp->lock);
|
|
+ b44_chip_reset(bp);
|
|
+ spin_unlock_irq(&bp->lock);
|
|
+
|
|
return 0;
|
|
|
|
err_out_iounmap:
|