diff options
| author | Tom Rini <[email protected]> | 2022-04-04 10:45:33 -0400 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2022-04-04 10:48:44 -0400 |
| commit | 01f1ab67f38882dc7665a0a6eca4bbeba6d84f81 (patch) | |
| tree | 31b1febefe82731d94571f7442877c039efb602c /drivers/core/ofnode.c | |
| parent | e4b6ebd3de982ae7185dbf689a030e73fd06e0d2 (diff) | |
| parent | 8221c52d88fbe84ca9692dc23827e21403c952e8 (diff) | |
Merge branch 'next'
Signed-off-by: Tom Rini <[email protected]>
Diffstat (limited to 'drivers/core/ofnode.c')
| -rw-r--r-- | drivers/core/ofnode.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/core/ofnode.c b/drivers/core/ofnode.c index 709bea272a6..8042847f3c1 100644 --- a/drivers/core/ofnode.c +++ b/drivers/core/ofnode.c @@ -898,6 +898,42 @@ int ofnode_read_pci_vendev(ofnode node, u16 *vendor, u16 *device) return -ENOENT; } +int ofnode_read_eth_phy_id(ofnode node, u16 *vendor, u16 *device) +{ + const char *list, *end; + int len; + + list = ofnode_get_property(node, "compatible", &len); + + if (!list) + return -ENOENT; + + end = list + len; + while (list < end) { + len = strlen(list); + + if (len >= strlen("ethernet-phy-idVVVV,DDDD")) { + char *s = strstr(list, "ethernet-phy-id"); + + /* + * check if the string is something like + * ethernet-phy-idVVVV,DDDD + */ + if (s && s[19] == '.') { + s += strlen("ethernet-phy-id"); + *vendor = simple_strtol(s, NULL, 16); + s += 5; + *device = simple_strtol(s, NULL, 16); + + return 0; + } + } + list += (len + 1); + } + + return -ENOENT; +} + int ofnode_read_addr_cells(ofnode node) { if (ofnode_is_np(node)) { |
