mirror of https://github.com/hak5/openwrt.git
generic: rtl8367: allow to load extif config from OF
Signed-off-by: Gabor Juhos <juhosg@openwrt.org> SVN-Revision: 36220lede-17.01
parent
585d19d168
commit
38bd9b4337
|
@ -1073,6 +1073,51 @@ static int rtl8367_led_blinkrate_set(struct rtl8366_smi *smi, unsigned int rate)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
|
static int rtl8367_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)
|
||||||
|
return rtl8367_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 -ENOMEM;
|
||||||
|
|
||||||
|
cfg->txdelay = be32_to_cpup(prop++);
|
||||||
|
cfg->rxdelay = be32_to_cpup(prop++);
|
||||||
|
cfg->mode = be32_to_cpup(prop++);
|
||||||
|
cfg->ability.force_mode = be32_to_cpup(prop++);
|
||||||
|
cfg->ability.txpause = be32_to_cpup(prop++);
|
||||||
|
cfg->ability.rxpause = be32_to_cpup(prop++);
|
||||||
|
cfg->ability.link = be32_to_cpup(prop++);
|
||||||
|
cfg->ability.duplex = be32_to_cpup(prop++);
|
||||||
|
cfg->ability.speed = be32_to_cpup(prop++);
|
||||||
|
|
||||||
|
err = rtl8367_extif_init(smi, id, cfg);
|
||||||
|
kfree(cfg);
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static int rtl8367_extif_init_of(struct rtl8366_smi *smi, int id,
|
||||||
|
const char *name)
|
||||||
|
{
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int rtl8367_setup(struct rtl8366_smi *smi)
|
static int rtl8367_setup(struct rtl8366_smi *smi)
|
||||||
{
|
{
|
||||||
struct rtl8367_platform_data *pdata;
|
struct rtl8367_platform_data *pdata;
|
||||||
|
@ -1086,13 +1131,23 @@ static int rtl8367_setup(struct rtl8366_smi *smi)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
/* initialize external interfaces */
|
/* initialize external interfaces */
|
||||||
err = rtl8367_extif_init(smi, 0, pdata->extif0_cfg);
|
if (smi->parent->of_node) {
|
||||||
if (err)
|
err = rtl8367_extif_init_of(smi, 0, "realtek,extif0");
|
||||||
return err;
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
err = rtl8367_extif_init(smi, 1, pdata->extif1_cfg);
|
err = rtl8367_extif_init_of(smi, 1, "realtek,extif1");
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
} else {
|
||||||
|
err = rtl8367_extif_init(smi, 0, pdata->extif0_cfg);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
err = rtl8367_extif_init(smi, 1, pdata->extif1_cfg);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
/* set maximum packet length to 1536 bytes */
|
/* set maximum packet length to 1536 bytes */
|
||||||
REG_RMW(smi, RTL8367_SWC0_REG, RTL8367_SWC0_MAX_LENGTH_MASK,
|
REG_RMW(smi, RTL8367_SWC0_REG, RTL8367_SWC0_MAX_LENGTH_MASK,
|
||||||
|
|
Loading…
Reference in New Issue