static int yatse_detect_phys(struct yatse_private *priv, struct mii_bus *mdio){ int i; int ret; u32 phy_id; priv->phy_addr = -1; for(i = 31;i >= 0;i--){ ret = get_phy_id(mdio, i, &phy_id); if(ret) return ret; if(((phy_id >> 16) & 0xffff) != (phy_id & 0xffff)){ printk(KERN_INFO "yatse: found PHY id=%x at addr %x\n", phy_id, i); priv->phy_addr = i; } } return ret; }
int mdio_main(int argc, char *argv[]) #endif { int ret; int i; /* test related */ uint16_t phy_id; uint16_t reg_num; uint16_t val_in; uint16_t val_out; /*--- SETUP --------------------------------------------------------------*/ if (argc == 1) { printf("usage:\n"); printf("\n"); printf(" %s phy_id reg_no -- read register\n", argv[0]); printf(" %s phy_id reg_no value -- write register\n", argv[0]); printf("\n"); return -1; } initialize_socket(); if (argc == 4) /* Write to register */ { phy_id = strtol(argv[1], NULL, 16); reg_num = strtol(argv[2], NULL, 16); val_in = strtol(argv[3], NULL, 16); ret = set_phy_reg(phy_id, reg_num, val_in); if (ret != 0) { printf("%s() returned %d\n", "set_phy_reg", ret); } } else if (argc == 3) /* Read from register */ { phy_id = strtol(argv[1], NULL, 16); reg_num = strtol(argv[2], NULL, 16); ret = get_phy_reg(phy_id, reg_num, &val_out); if (ret != 0) { printf("%s() returned %d\n", "get_phy_reg", ret); } else { printf("0x%4x\n", val_out); } } else if (argc == 2) { phy_id = strtol(argv[1], NULL, 16); for (i = 0; i < 32; i++) { ret = get_phy_reg(phy_id, i, &val_out); printf("phy[%d][%d] = 0x%4x\n", phy_id, i, val_out); } } else { /* Read the PHY address */ phy_id = get_phy_id(); if (phy_id < 1) { /* failed (can not be negative) */ printf("getting phy id failed\n"); } else { printf("phy_id = %d\n", phy_id); } } return 0; }