return 0;
}
+static int dsa_port_parse_user(struct dsa_port *dp, const char *name)
+{
+ if (!name)
+ name = "eth%d";
+
+ dp->type = DSA_PORT_TYPE_USER;
+ dp->name = name;
+
+ return 0;
+}
+
+static int dsa_port_parse_dsa(struct dsa_port *dp)
+{
+ dp->type = DSA_PORT_TYPE_DSA;
+
+ return 0;
+}
+
+static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master)
+{
+ dp->type = DSA_PORT_TYPE_CPU;
+ dp->master = master;
+
+ return 0;
+}
+
static int dsa_cpu_parse(struct dsa_port *port, u32 index,
struct dsa_switch_tree *dst,
struct dsa_switch *ds)
const char *name = of_get_property(dn, "label", NULL);
bool link = of_property_read_bool(dn, "link");
+ dp->dn = dn;
+
if (ethernet) {
struct net_device *master;
if (!master)
return -EPROBE_DEFER;
- dp->type = DSA_PORT_TYPE_CPU;
- dp->master = master;
- } else if (link) {
- dp->type = DSA_PORT_TYPE_DSA;
- } else {
- if (!name)
- name = "eth%d";
-
- dp->type = DSA_PORT_TYPE_USER;
- dp->name = name;
+ return dsa_port_parse_cpu(dp, master);
}
- dp->dn = dn;
+ if (link)
+ return dsa_port_parse_dsa(dp);
- return 0;
+ return dsa_port_parse_user(dp, name);
}
static int dsa_switch_parse_ports_of(struct dsa_switch *ds,
dev_put(master);
- dp->type = DSA_PORT_TYPE_CPU;
- dp->master = master;
- } else if (!strcmp(name, "dsa")) {
- dp->type = DSA_PORT_TYPE_DSA;
- } else {
- dp->type = DSA_PORT_TYPE_USER;
+ return dsa_port_parse_cpu(dp, master);
}
- dp->name = name;
+ if (!strcmp(name, "dsa"))
+ return dsa_port_parse_dsa(dp);
- return 0;
+ return dsa_port_parse_user(dp, name);
}
static int dsa_switch_parse_ports(struct dsa_switch *ds,