summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorJohannes Stezenbach <js@sig21.net>2012-06-18 16:47:58 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2012-06-30 13:58:18 +0200
commit8f2fcf65541d911c5de0bf9fcfbfda93a20bd723 (patch)
tree21b5d9dad6eb4d7beaac1b0a82367e52d928a08e /drivers
parent99e72c8bbdbdc690025a5868d831f1fe79ad56fc (diff)
downloadbarebox-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.c12
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;