|
@@ -266,7 +266,8 @@ EXPORT_SYMBOL(of_phy_attach);
|
|
|
bool of_phy_is_fixed_link(struct device_node *np)
|
|
|
{
|
|
|
struct device_node *dn;
|
|
|
- int len;
|
|
|
+ int len, err;
|
|
|
+ const char *managed;
|
|
|
|
|
|
/* New binding */
|
|
|
dn = of_get_child_by_name(np, "fixed-link");
|
|
@@ -275,6 +276,10 @@ bool of_phy_is_fixed_link(struct device_node *np)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ err = of_property_read_string(np, "managed", &managed);
|
|
|
+ if (err == 0 && strcmp(managed, "auto") != 0)
|
|
|
+ return true;
|
|
|
+
|
|
|
/* Old binding */
|
|
|
if (of_get_property(np, "fixed-link", &len) &&
|
|
|
len == (5 * sizeof(__be32)))
|
|
@@ -289,8 +294,18 @@ int of_phy_register_fixed_link(struct device_node *np)
|
|
|
struct fixed_phy_status status = {};
|
|
|
struct device_node *fixed_link_node;
|
|
|
const __be32 *fixed_link_prop;
|
|
|
- int len;
|
|
|
+ int len, err;
|
|
|
struct phy_device *phy;
|
|
|
+ const char *managed;
|
|
|
+
|
|
|
+ err = of_property_read_string(np, "managed", &managed);
|
|
|
+ if (err == 0) {
|
|
|
+ if (strcmp(managed, "in-band-status") == 0) {
|
|
|
+ /* status is zeroed, namely its .link member */
|
|
|
+ phy = fixed_phy_register(PHY_POLL, &status, np);
|
|
|
+ return IS_ERR(phy) ? PTR_ERR(phy) : 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/* New binding */
|
|
|
fixed_link_node = of_get_child_by_name(np, "fixed-link");
|