diff mbox

[U-Boot,RFC] smc911x: enable mii commands

Message ID COM-EXC-01HkikieqXI00002a53@com-exc-01.comelit.it
State Not Applicable
Headers show

Commit Message

Luca Ceresoli June 30, 2011, 2:02 p.m. UTC
Signed-off-by: Luca Ceresoli <luca.ceresoli@comelit.it>
---
This patch is my implementation of the same functionality that Helmut's patch
implements. I'm sending it as a reference for him to look at the error
checking code and possibly merge it into his own patch.

 drivers/net/smc911x.c |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

Comments

Helmut Raiger July 4, 2011, 9:41 a.m. UTC | #1
On 06/30/2011 04:02 PM, Luca Ceresoli wrote:
> +static int smc911x_miiphy_read_byname(char *devname, unsigned char addr,
> +				      unsigned char reg, unsigned short *value)
> +{
> +	struct eth_device *dev;
> +
> +	if (devname == NULL)
> +		return -1;
> +
> +	dev = eth_get_dev_by_name(devname);
You're right. eth_get_dev_by_name() is not safe for devname == NULL as 
it uses strcmp().
Best would be to fix this there, I'll adjust my patch accordingly.

> +
> +	if (dev == NULL) {
> +		printf(DRIVERNAME ": device %s not found\n", devname);
> +		return -1;
> +	}

None of the other drivers in drivers/net add this kind of verbosity, so 
I tend to leave it at that.

Helmut





--
Scanned by MailScanner.
diff mbox

Patch

diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index aeafeba..d946fd4 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -82,6 +82,42 @@  static int smc911x_miiphy_write(struct eth_device *dev,
 	return 0;
 }
 
+static int smc911x_miiphy_read_byname(char *devname, unsigned char addr,
+				      unsigned char reg, unsigned short *value)
+{
+	struct eth_device *dev;
+
+	if (devname == NULL)
+		return -1;
+
+	dev = eth_get_dev_by_name(devname);
+
+	if (dev == NULL) {
+		printf(DRIVERNAME ": device %s not found\n", devname);
+		return -1;
+	}
+
+	return smc911x_miiphy_read(dev, addr, reg, value);
+}
+
+static int smc911x_miiphy_write_byname(char *devname, unsigned char addr,
+				       unsigned char reg, unsigned short value)
+{
+	struct eth_device *dev;
+
+	if (devname == NULL)
+		return -1;
+
+	dev = eth_get_dev_by_name(devname);
+
+	if (dev == NULL) {
+		printf(DRIVERNAME ": device %s not found\n", devname);
+		return -1;
+	}
+
+	return smc911x_miiphy_write(dev, addr, reg, value);
+}
+
 static int smc911x_phy_reset(struct eth_device *dev)
 {
 	u32 reg;
@@ -273,5 +309,10 @@  int smc911x_initialize(u8 dev_num, int base_addr)
 	sprintf(dev->name, "%s-%hu", DRIVERNAME, dev_num);
 
 	eth_register(dev);
+
+#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
+	miiphy_register(dev->name, smc911x_miiphy_read_byname, smc911x_miiphy_write_byname);
+#endif
+
 	return 1;
 }