|
|
@@ -863,19 +863,26 @@ static int rtl8367b_extif_init(struct rtl8366_smi *smi, int id,
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_OF
|
|
|
-static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id, const char *name)
|
|
|
+static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id,
|
|
|
+ const char *name)
|
|
|
{
|
|
|
struct rtl8367_extif_config *cfg;
|
|
|
const __be32 *prop;
|
|
|
int size;
|
|
|
+ int err;
|
|
|
|
|
|
prop = of_get_property(smi->parent->of_node, name, &size);
|
|
|
- if (!prop || size != (9 * sizeof(*prop)))
|
|
|
- return 0;
|
|
|
+ if (!prop)
|
|
|
+ return rtl8367b_extif_init(smi, id, NULL);
|
|
|
+
|
|
|
+ if (size != (9 * sizeof(*prop))) {
|
|
|
+ dev_err(smi->parent, "%s property is invalid\n", name);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
cfg = kzalloc(sizeof(struct rtl8367_extif_config), GFP_KERNEL);
|
|
|
if (!cfg)
|
|
|
- return -1;
|
|
|
+ return -ENOMEM;
|
|
|
|
|
|
cfg->txdelay = be32_to_cpup(prop++);
|
|
|
cfg->rxdelay = be32_to_cpup(prop++);
|
|
|
@@ -887,12 +894,16 @@ static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id, const char *n
|
|
|
cfg->ability.duplex = be32_to_cpup(prop++);
|
|
|
cfg->ability.speed = be32_to_cpup(prop++);
|
|
|
|
|
|
- return rtl8367b_extif_init(smi, id, cfg);
|
|
|
+ err = rtl8367b_extif_init(smi, id, cfg);
|
|
|
+ kfree(cfg);
|
|
|
+
|
|
|
+ return err;
|
|
|
}
|
|
|
#else
|
|
|
-static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id, const char *name)
|
|
|
+static int rtl8367b_extif_init_of(struct rtl8366_smi *smi, int id,
|
|
|
+ const char *name)
|
|
|
{
|
|
|
- return -1;
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
#endif
|
|
|
|