Skip to contentSkip to conversation

net: mdio-gpio: Allow for unspecified bus id

PATCH Applied Bert Vermeulen 3 participants 6 messages May 8, 2015 – May 10, 2015

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 net: mdio-gpio: Allow for unspecified bus id

When the bus id was supplied via a struct platform_device, the driver wasn't handling -1 to mean an unspecified id of the only instance of this driver, as the platform spec requires.

---
 drivers/net/phy/mdio-gpio.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/phy/mdio-gpio.c +4 -1
index f5cddf5..7bd90db 100644
@@ -165,7 +165,10 @@ static struct mii_bus *mdio_gpio_bus_init(struct device *dev,
 		if (!new_bus->irq[i])
 			new_bus->irq[i] = PHY_POLL;
 
-	snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	if (bus_id != -1)
+		snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	else
+		strncpy(new_bus->id, "gpio", MII_BUS_ID_SIZE);
 
 	if (devm_gpio_request(dev, bitbang->mdc, "mdc"))
 		goto out_free_bus;
Signature · 1 line
1.9.1
maintainer
#1 lore raw
Quoted 14 lines · Bert Vermeulen

When the bus id was supplied via a struct platform_device, the driver wasn't handling -1 to mean an unspecified id of the only instance of this driver, as the platform spec requires.

---
 drivers/net/phy/mdio-gpio.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/phy/mdio-gpio.c +0 -0
index f5cddf5..7bd90db 100644

drivers/net/phy/mdio-gpio.c static struct mii_bus *mdio_gpio_bus_init(struct device *dev, · line 171

Quoted 8 lines
drivers/net/phy/mdio-gpio.c +4 -1
@@ -165,7 +165,10 @@ static struct mii_bus *mdio_gpio_bus_init(struct device *dev,
 		if (!new_bus->irq[i])
 			new_bus->irq[i] = PHY_POLL;
 
-	snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	if (bus_id != -1)
+		snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	else
+		strncpy(new_bus->id, "gpio", MII_BUS_ID_SIZE);

Hi Bert

What happens if there are multiple platform_device's with -1? You should probably be using use idr_alloc().

Andrew

#2 lore raw
Quoted 26 lines · Andrew Lunn
Quoted 14 lines · Bert Vermeulen

When the bus id was supplied via a struct platform_device, the driver wasn't handling -1 to mean an unspecified id of the only instance of this driver, as the platform spec requires.

---
 drivers/net/phy/mdio-gpio.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/phy/mdio-gpio.c +0 -0
index f5cddf5..7bd90db 100644

drivers/net/phy/mdio-gpio.c static struct mii_bus *mdio_gpio_bus_init(struct device *dev, · line 171

Quoted 8 lines
drivers/net/phy/mdio-gpio.c +4 -1
@@ -165,7 +165,10 @@ static struct mii_bus *mdio_gpio_bus_init(struct device *dev,
 		if (!new_bus->irq[i])
 			new_bus->irq[i] = PHY_POLL;
 
-	snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	if (bus_id != -1)
+		snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	else
+		strncpy(new_bus->id, "gpio", MII_BUS_ID_SIZE);

Hi Bert

Quoted 2 lines

What happens if there are multiple platform_device's with -1? You should probably be using use idr_alloc().

It's an instance id per driver, not globally, and -1 specifically means it's the only instance. From Documentation/driver-model/platform.txt:

Quoted 4 lines

These are concatenated, so name/id "serial"/0 indicates bus_id "serial.0", and "serial/3" indicates bus_id "serial.3"; both would use the platform_driver named "serial". While "my_rtc"/-1 would be bus_id "my_rtc" (no instance id) and use the platform_driver called "my_rtc".

Signature · 1 line
Bert Vermeulen        [email protected]          email/xmpp
maintainer
#3 lore raw
Quoted 8 lines
Quoted 8 lines

drivers/net/phy/mdio-gpio.c static struct mii_bus *mdio_gpio_bus_init(struct device *dev, · line 171

Quoted 5 lines
drivers/net/phy/mdio-gpio.c +4 -1
-	snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	if (bus_id != -1)
+		snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	else
+		strncpy(new_bus->id, "gpio", MII_BUS_ID_SIZE);

Hi Bert

Quoted 5 lines
Quoted 2 lines

What happens if there are multiple platform_device's with -1? You should probably be using use idr_alloc().

It's an instance id per driver, not globally, and -1 specifically means it's the only instance. From Documentation/driver-model/platform.txt:

Ah, did not know there can only be one with -1. I've used i2c where this does not apply when registering adaptors. It will allocate a unique id to each added with id = -1.

Andrew

maintainer Reviewed-by on v1 1/1
#4 lore raw
In reply to Bert Vermeulen
Quoted 16 lines · Bert Vermeulen

When the bus id was supplied via a struct platform_device, the driver wasn't handling -1 to mean an unspecified id of the only instance of this driver, as the platform spec requires.

---
 drivers/net/phy/mdio-gpio.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
drivers/net/phy/mdio-gpio.c +0 -0
index f5cddf5..7bd90db 100644
@@ -165,7 +165,10 @@ static struct mii_bus *mdio_gpio_bus_init(struct device *dev,
 		if (!new_bus->irq[i])

drivers/net/phy/mdio-gpio.c static struct mii_bus *mdio_gpio_bus_init(struct device *dev, · line 174

Quoted 10 lines
drivers/net/phy/mdio-gpio.c +4 -1
 			new_bus->irq[i] = PHY_POLL;
 
-	snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	if (bus_id != -1)
+		snprintf(new_bus->id, MII_BUS_ID_SIZE, "gpio-%x", bus_id);
+	else
+		strncpy(new_bus->id, "gpio", MII_BUS_ID_SIZE);
 
 	if (devm_gpio_request(dev, bitbang->mdc, "mdc"))
 		goto out_free_bus;

Andrew