Ticket #4241: 404-phy_status.patch

File 404-phy_status.patch, 1.6 KB (added by zadevalov@…, 7 years ago)

show PHY status through sysfs

  • drivers/net/adm5120sw.c

    a b  
    4141 
    4242#define DRV_NAME        "adm5120-switch" 
    4343#define DRV_DESC        "ADM5120 built-in ethernet switch driver" 
    44 #define DRV_VERSION     "0.1.1" 
     44#define DRV_VERSION     "0.1.1a" 
    4545 
    4646#define CONFIG_ADM5120_SWITCH_NAPI      1 
    4747#undef CONFIG_ADM5120_SWITCH_DEBUG 
     
    980980        return 0; 
    981981} 
    982982 
     983static ssize_t show_phy_status(struct device *dev, struct device_attribute *attr, char *buf) 
     984{ 
     985        int len = 0, port, status; 
     986 
     987        status = sw_read_reg(SWITCH_REG_PHY_STATUS); 
     988 
     989        for (port=0; port < adm5120_nrdevs; port++) { 
     990          if (port == 5) /* SWITCH_PORT_MII has different status logic */ 
     991            break; 
     992          if (status & BIT(port)) 
     993            len += snprintf(buf + len, PAGE_SIZE - len, "eth%d: %s %s\n", port, 
     994                                        (status & (0x100<<port)?"100Mb/s":"10Mb/s"), 
     995                                        (status & (0x10000<<port)?"Full-Duplex":"Half-Duplex")); 
     996          else 
     997            len += snprintf(buf + len, PAGE_SIZE - len, "eth%d: no link\n", port); 
     998        } 
     999 
     1000        return len; 
     1001} 
     1002 
     1003static DEVICE_ATTR(phy_status, S_IRUGO, show_phy_status, NULL); /* struct device_attribute dev_attr_phy_status */ 
     1004 
    9831005static int adm5120_if_do_ioctl(struct net_device *dev, struct ifreq *rq, 
    9841006                int cmd) 
    9851007{ 
     
    11541176        t &= ~CPUP_CONF_DCPUP; 
    11551177        sw_write_reg(SWITCH_REG_CPUP_CONF, t); 
    11561178 
     1179        err = device_create_file(&pdev->dev, &dev_attr_phy_status); 
     1180        if (err) { 
     1181                SW_INFO("sysfs \"phy_status\" add failed, error=%d\n", err); 
     1182                goto err; 
     1183        } 
     1184 
    11571185        return 0; 
    11581186 
    11591187err: 
     
    11651193 
    11661194static int adm5120_switch_remove(struct platform_device *pdev) 
    11671195{ 
     1196        device_remove_file(&pdev->dev, &dev_attr_phy_status); 
    11681197        adm5120_switch_cleanup(); 
    11691198        return 0; 
    11701199}