diff options
Diffstat (limited to 'drivers/net/dsa/realtek-smi.c')
| -rw-r--r-- | drivers/net/dsa/realtek-smi.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/net/dsa/realtek-smi.c b/drivers/net/dsa/realtek-smi.c index b4b839a1d095..ad41ec63cc9f 100644 --- a/drivers/net/dsa/realtek-smi.c +++ b/drivers/net/dsa/realtek-smi.c | |||
| @@ -347,16 +347,17 @@ int realtek_smi_setup_mdio(struct realtek_smi *smi) | |||
| 347 | struct device_node *mdio_np; | 347 | struct device_node *mdio_np; |
| 348 | int ret; | 348 | int ret; |
| 349 | 349 | ||
| 350 | mdio_np = of_find_compatible_node(smi->dev->of_node, NULL, | 350 | mdio_np = of_get_compatible_child(smi->dev->of_node, "realtek,smi-mdio"); |
| 351 | "realtek,smi-mdio"); | ||
| 352 | if (!mdio_np) { | 351 | if (!mdio_np) { |
| 353 | dev_err(smi->dev, "no MDIO bus node\n"); | 352 | dev_err(smi->dev, "no MDIO bus node\n"); |
| 354 | return -ENODEV; | 353 | return -ENODEV; |
| 355 | } | 354 | } |
| 356 | 355 | ||
| 357 | smi->slave_mii_bus = devm_mdiobus_alloc(smi->dev); | 356 | smi->slave_mii_bus = devm_mdiobus_alloc(smi->dev); |
| 358 | if (!smi->slave_mii_bus) | 357 | if (!smi->slave_mii_bus) { |
| 359 | return -ENOMEM; | 358 | ret = -ENOMEM; |
| 359 | goto err_put_node; | ||
| 360 | } | ||
| 360 | smi->slave_mii_bus->priv = smi; | 361 | smi->slave_mii_bus->priv = smi; |
| 361 | smi->slave_mii_bus->name = "SMI slave MII"; | 362 | smi->slave_mii_bus->name = "SMI slave MII"; |
| 362 | smi->slave_mii_bus->read = realtek_smi_mdio_read; | 363 | smi->slave_mii_bus->read = realtek_smi_mdio_read; |
| @@ -371,10 +372,15 @@ int realtek_smi_setup_mdio(struct realtek_smi *smi) | |||
| 371 | if (ret) { | 372 | if (ret) { |
| 372 | dev_err(smi->dev, "unable to register MDIO bus %s\n", | 373 | dev_err(smi->dev, "unable to register MDIO bus %s\n", |
| 373 | smi->slave_mii_bus->id); | 374 | smi->slave_mii_bus->id); |
| 374 | of_node_put(mdio_np); | 375 | goto err_put_node; |
| 375 | } | 376 | } |
| 376 | 377 | ||
| 377 | return 0; | 378 | return 0; |
| 379 | |||
| 380 | err_put_node: | ||
| 381 | of_node_put(mdio_np); | ||
| 382 | |||
| 383 | return ret; | ||
| 378 | } | 384 | } |
| 379 | 385 | ||
| 380 | static int realtek_smi_probe(struct platform_device *pdev) | 386 | static int realtek_smi_probe(struct platform_device *pdev) |
| @@ -457,6 +463,8 @@ static int realtek_smi_remove(struct platform_device *pdev) | |||
| 457 | struct realtek_smi *smi = dev_get_drvdata(&pdev->dev); | 463 | struct realtek_smi *smi = dev_get_drvdata(&pdev->dev); |
| 458 | 464 | ||
| 459 | dsa_unregister_switch(smi->ds); | 465 | dsa_unregister_switch(smi->ds); |
| 466 | if (smi->slave_mii_bus) | ||
| 467 | of_node_put(smi->slave_mii_bus->dev.of_node); | ||
| 460 | gpiod_set_value(smi->reset, 1); | 468 | gpiod_set_value(smi->reset, 1); |
| 461 | 469 | ||
| 462 | return 0; | 470 | return 0; |
