generic: rtl8367b: fix rtl8367b_extif_init_of

* disable external interface if its property is not present
* show an error message if the extif property is not valid
* use proper error values intead of -1
* fix memory leak
* wrap long lines

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

SVN-Revision: 36229
lede-17.01
Gabor Juhos 2013-04-06 17:03:09 +00:00
parent 32d3b456f0
commit f5d8d80ca9
1 changed files with 18 additions and 7 deletions

View File

@ -863,19 +863,26 @@ static int rtl8367b_extif_init(struct rtl8366_smi *smi, int id,
} }
#ifdef CONFIG_OF #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; struct rtl8367_extif_config *cfg;
const __be32 *prop; const __be32 *prop;
int size; int size;
int err;
prop = of_get_property(smi->parent->of_node, name, &size); prop = of_get_property(smi->parent->of_node, name, &size);
if (!prop || size != (9 * sizeof(*prop))) if (!prop)
return 0; 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); cfg = kzalloc(sizeof(struct rtl8367_extif_config), GFP_KERNEL);
if (!cfg) if (!cfg)
return -1; return -ENOMEM;
cfg->txdelay = be32_to_cpup(prop++); cfg->txdelay = be32_to_cpup(prop++);
cfg->rxdelay = 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.duplex = be32_to_cpup(prop++);
cfg->ability.speed = 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 #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 #endif