Changeset 36220


Ignore:
Timestamp:
2013-04-06T14:37:36+02:00 (5 years ago)
Author:
juhosg
Message:

generic: rtl8367: allow to load extif config from OF

Signed-off-by: Gabor Juhos <juhosg@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic/files/drivers/net/phy/rtl8367.c

    r36219 r36220  
    10741074} 
    10751075 
     1076#ifdef CONFIG_OF 
     1077static int rtl8367_extif_init_of(struct rtl8366_smi *smi, int id, 
     1078                                 const char *name) 
     1079{ 
     1080        struct rtl8367_extif_config *cfg; 
     1081        const __be32 *prop; 
     1082        int size; 
     1083        int err; 
     1084 
     1085        prop = of_get_property(smi->parent->of_node, name, &size); 
     1086        if (!prop) 
     1087                return rtl8367_extif_init(smi, id, NULL); 
     1088 
     1089        if (size != (9 * sizeof(*prop))) { 
     1090                dev_err(smi->parent, "%s property is invalid\n", name); 
     1091                return -EINVAL; 
     1092        } 
     1093 
     1094        cfg = kzalloc(sizeof(struct rtl8367_extif_config), GFP_KERNEL); 
     1095        if (!cfg) 
     1096                return -ENOMEM; 
     1097 
     1098        cfg->txdelay = be32_to_cpup(prop++); 
     1099        cfg->rxdelay = be32_to_cpup(prop++); 
     1100        cfg->mode = be32_to_cpup(prop++); 
     1101        cfg->ability.force_mode = be32_to_cpup(prop++); 
     1102        cfg->ability.txpause = be32_to_cpup(prop++); 
     1103        cfg->ability.rxpause = be32_to_cpup(prop++); 
     1104        cfg->ability.link = be32_to_cpup(prop++); 
     1105        cfg->ability.duplex = be32_to_cpup(prop++); 
     1106        cfg->ability.speed = be32_to_cpup(prop++); 
     1107 
     1108        err = rtl8367_extif_init(smi, id, cfg); 
     1109        kfree(cfg); 
     1110 
     1111        return err; 
     1112} 
     1113#else 
     1114static int rtl8367_extif_init_of(struct rtl8366_smi *smi, int id, 
     1115                                 const char *name) 
     1116{ 
     1117        return -EINVAL; 
     1118} 
     1119#endif 
     1120 
    10761121static int rtl8367_setup(struct rtl8366_smi *smi) 
    10771122{ 
     
    10871132 
    10881133        /* initialize external interfaces */ 
    1089         err = rtl8367_extif_init(smi, 0, pdata->extif0_cfg); 
    1090         if (err) 
    1091                 return err; 
    1092  
    1093         err = rtl8367_extif_init(smi, 1, pdata->extif1_cfg); 
    1094         if (err) 
    1095                 return err; 
     1134        if (smi->parent->of_node) { 
     1135                err = rtl8367_extif_init_of(smi, 0, "realtek,extif0"); 
     1136                if (err) 
     1137                        return err; 
     1138 
     1139                err = rtl8367_extif_init_of(smi, 1, "realtek,extif1"); 
     1140                if (err) 
     1141                        return err; 
     1142        } else { 
     1143                err = rtl8367_extif_init(smi, 0, pdata->extif0_cfg); 
     1144                if (err) 
     1145                        return err; 
     1146 
     1147                err = rtl8367_extif_init(smi, 1, pdata->extif1_cfg); 
     1148                if (err) 
     1149                        return err; 
     1150        } 
    10961151 
    10971152        /* set maximum packet length to 1536 bytes */ 
Note: See TracChangeset for help on using the changeset viewer.