From e4a11b6a774e96bfb429480c780fdc9ac1d13a06 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Mon, 25 Jul 2005 14:30:02 +0000 Subject: [PATCH] When reading PHY regs over the i2c bus, the turnaround ACK bit is read one clock edge too late. This bit is driven low by slave (as any other input data bits from slave) when the clock is LOW. The current code did read the bit after the clock was driven high again. From OpenBSD (from FreeBSD). Another small change git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13822 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/drivers/network/wb840/interface.c | 2 +- src/add-ons/kernel/drivers/network/wb840/wb840.c | 6 ++---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/add-ons/kernel/drivers/network/wb840/interface.c b/src/add-ons/kernel/drivers/network/wb840/interface.c index d54cc7b990..a2905aea3d 100644 --- a/src/add-ons/kernel/drivers/network/wb840/interface.c +++ b/src/add-ons/kernel/drivers/network/wb840/interface.c @@ -130,9 +130,9 @@ wb_mii_readreg(wb_device *device, wb_mii_frame *frame) /* Check for ack */ SIO_CLR(WB_SIO_MII_CLK); MII_DELAY(device); + ack = read32(device->reg_base + WB_SIO) & WB_SIO_MII_DATAOUT; SIO_SET(WB_SIO_MII_CLK); MII_DELAY(device); - ack = read32(device->reg_base + WB_SIO) & WB_SIO_MII_DATAOUT; SIO_CLR(WB_SIO_MII_CLK); MII_DELAY(device); SIO_SET(WB_SIO_MII_CLK); diff --git a/src/add-ons/kernel/drivers/network/wb840/wb840.c b/src/add-ons/kernel/drivers/network/wb840/wb840.c index bd2b96736a..aaa1f858a5 100644 --- a/src/add-ons/kernel/drivers/network/wb840/wb840.c +++ b/src/add-ons/kernel/drivers/network/wb840/wb840.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2003-2004 +/* Copyright (c) 2003-2005 * Stefano Ceccherini . All rights reserved. * This file is released under the MIT license */ @@ -293,9 +293,7 @@ wb_set_rx_filter(wb_device *device) { // TODO: Basically we just config the filter to accept broadcasts // packets. We'll need also to configure it to multicast. - int32 rxFilter = read32(device->reg_base + WB_NETCFG); - - write32(device->reg_base + WB_NETCFG, rxFilter | WB_NETCFG_RX_BROAD); + WB_SETBIT(device->reg_base + WB_NETCFG, WB_NETCFG_RX_BROAD); }