@@ -1069,24 +1069,23 @@ static int gswip_probe(struct platform_device *pdev)
1069
1069
version = gswip_switch_r (priv , GSWIP_VERSION );
1070
1070
1071
1071
/* bring up the mdio bus */
1072
- gphy_fw_np = of_find_compatible_node (pdev -> dev .of_node , NULL ,
1073
- "lantiq,gphy-fw" );
1072
+ gphy_fw_np = of_get_compatible_child (dev -> of_node , "lantiq,gphy-fw" );
1074
1073
if (gphy_fw_np ) {
1075
1074
err = gswip_gphy_fw_list (priv , gphy_fw_np , version );
1075
+ of_node_put (gphy_fw_np );
1076
1076
if (err ) {
1077
1077
dev_err (dev , "gphy fw probe failed\n" );
1078
1078
return err ;
1079
1079
}
1080
1080
}
1081
1081
1082
1082
/* bring up the mdio bus */
1083
- mdio_np = of_find_compatible_node (pdev -> dev .of_node , NULL ,
1084
- "lantiq,xrx200-mdio" );
1083
+ mdio_np = of_get_compatible_child (dev -> of_node , "lantiq,xrx200-mdio" );
1085
1084
if (mdio_np ) {
1086
1085
err = gswip_mdio (priv , mdio_np );
1087
1086
if (err ) {
1088
1087
dev_err (dev , "mdio probe failed\n" );
1089
- goto gphy_fw ;
1088
+ goto put_mdio_node ;
1090
1089
}
1091
1090
}
1092
1091
@@ -1099,7 +1098,7 @@ static int gswip_probe(struct platform_device *pdev)
1099
1098
dev_err (dev , "wrong CPU port defined, HW only supports port: %i" ,
1100
1099
priv -> hw_info -> cpu_port );
1101
1100
err = - EINVAL ;
1102
- goto mdio_bus ;
1101
+ goto disable_switch ;
1103
1102
}
1104
1103
1105
1104
platform_set_drvdata (pdev , priv );
@@ -1109,10 +1108,14 @@ static int gswip_probe(struct platform_device *pdev)
1109
1108
(version & GSWIP_VERSION_MOD_MASK ) >> GSWIP_VERSION_MOD_SHIFT );
1110
1109
return 0 ;
1111
1110
1111
+ disable_switch :
1112
+ gswip_mdio_mask (priv , GSWIP_MDIO_GLOB_ENABLE , 0 , GSWIP_MDIO_GLOB );
1113
+ dsa_unregister_switch (priv -> ds );
1112
1114
mdio_bus :
1113
1115
if (mdio_np )
1114
1116
mdiobus_unregister (priv -> ds -> slave_mii_bus );
1115
- gphy_fw :
1117
+ put_mdio_node :
1118
+ of_node_put (mdio_np );
1116
1119
for (i = 0 ; i < priv -> num_gphy_fw ; i ++ )
1117
1120
gswip_gphy_fw_remove (priv , & priv -> gphy_fw [i ]);
1118
1121
return err ;
@@ -1123,16 +1126,15 @@ static int gswip_remove(struct platform_device *pdev)
1123
1126
struct gswip_priv * priv = platform_get_drvdata (pdev );
1124
1127
int i ;
1125
1128
1126
- if (!priv )
1127
- return 0 ;
1128
-
1129
1129
/* disable the switch */
1130
1130
gswip_mdio_mask (priv , GSWIP_MDIO_GLOB_ENABLE , 0 , GSWIP_MDIO_GLOB );
1131
1131
1132
1132
dsa_unregister_switch (priv -> ds );
1133
1133
1134
- if (priv -> ds -> slave_mii_bus )
1134
+ if (priv -> ds -> slave_mii_bus ) {
1135
1135
mdiobus_unregister (priv -> ds -> slave_mii_bus );
1136
+ of_node_put (priv -> ds -> slave_mii_bus -> dev .of_node );
1137
+ }
1136
1138
1137
1139
for (i = 0 ; i < priv -> num_gphy_fw ; i ++ )
1138
1140
gswip_gphy_fw_remove (priv , & priv -> gphy_fw [i ]);
0 commit comments