diff options
author | Johannes Stezenbach <js@sig21.net> | 2012-06-18 16:47:58 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2012-06-30 13:58:18 +0200 |
commit | 8f2fcf65541d911c5de0bf9fcfbfda93a20bd723 (patch) | |
tree | 21b5d9dad6eb4d7beaac1b0a82367e52d928a08e /drivers | |
parent | 99e72c8bbdbdc690025a5868d831f1fe79ad56fc (diff) | |
download | barebox-8f2fcf65541d911c5de0bf9fcfbfda93a20bd723.tar.gz barebox-8f2fcf65541d911c5de0bf9fcfbfda93a20bd723.tar.xz |
miidev: consistent md and mw on phy regs
The dump generated by "md -w -s /dev/phy0"
suggests individual registers need to be
addressed by byte offset, not by register number.
E.g. to set the autonegotiation advertisement register
for 10Mbit only, use "mw -w -d /dev/phy0 8+2 0x0061".
The current mix of offset == register number, but
count == byte count is unintuitive.
Also, to be consistent with "md" on /dev/mem, round up
the count so "8+1" also works to access one register.
However, no attempt is made to do read-modify-write
single byte writes.
Signed-off-by: Johannes Stezenbach <js@sig21.net>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/miidev.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/drivers/net/miidev.c b/drivers/net/miidev.c index 98ad790c57..1c75b873db 100644 --- a/drivers/net/miidev.c +++ b/drivers/net/miidev.c @@ -204,11 +204,11 @@ static ssize_t miidev_read(struct cdev *cdev, void *_buf, size_t count, ulong of uint16_t *buf = _buf; struct mii_device *mdev = cdev->priv; - while (i > 1) { - *buf = mii_read(mdev, mdev->address, offset); + while (i > 0) { + *buf = mii_read(mdev, mdev->address, offset / 2); buf++; i -= 2; - offset++; + offset += 2; } return count; @@ -220,11 +220,11 @@ static ssize_t miidev_write(struct cdev *cdev, const void *_buf, size_t count, u const uint16_t *buf = _buf; struct mii_device *mdev = cdev->priv; - while (i > 1) { - mii_write(mdev, mdev->address, offset, *buf); + while (i > 0) { + mii_write(mdev, mdev->address, offset / 2, *buf); buf++; i -= 2; - offset++; + offset += 2; } return count; |