|
@@ -156,6 +156,68 @@ struct bus_type fsl_mc_bus_type = {
|
|
};
|
|
};
|
|
EXPORT_SYMBOL_GPL(fsl_mc_bus_type);
|
|
EXPORT_SYMBOL_GPL(fsl_mc_bus_type);
|
|
|
|
|
|
|
|
+struct device_type fsl_mc_bus_dprc_type = {
|
|
|
|
+ .name = "fsl_mc_bus_dprc"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct device_type fsl_mc_bus_dpni_type = {
|
|
|
|
+ .name = "fsl_mc_bus_dpni"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct device_type fsl_mc_bus_dpio_type = {
|
|
|
|
+ .name = "fsl_mc_bus_dpio"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct device_type fsl_mc_bus_dpsw_type = {
|
|
|
|
+ .name = "fsl_mc_bus_dpsw"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct device_type fsl_mc_bus_dpbp_type = {
|
|
|
|
+ .name = "fsl_mc_bus_dpbp"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct device_type fsl_mc_bus_dpcon_type = {
|
|
|
|
+ .name = "fsl_mc_bus_dpcon"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct device_type fsl_mc_bus_dpmcp_type = {
|
|
|
|
+ .name = "fsl_mc_bus_dpmcp"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct device_type fsl_mc_bus_dpmac_type = {
|
|
|
|
+ .name = "fsl_mc_bus_dpmac"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+struct device_type fsl_mc_bus_dprtc_type = {
|
|
|
|
+ .name = "fsl_mc_bus_dprtc"
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct device_type *fsl_mc_get_device_type(const char *type)
|
|
|
|
+{
|
|
|
|
+ static const struct {
|
|
|
|
+ struct device_type *dev_type;
|
|
|
|
+ const char *type;
|
|
|
|
+ } dev_types[] = {
|
|
|
|
+ { &fsl_mc_bus_dprc_type, "dprc" },
|
|
|
|
+ { &fsl_mc_bus_dpni_type, "dpni" },
|
|
|
|
+ { &fsl_mc_bus_dpio_type, "dpio" },
|
|
|
|
+ { &fsl_mc_bus_dpsw_type, "dpsw" },
|
|
|
|
+ { &fsl_mc_bus_dpbp_type, "dpbp" },
|
|
|
|
+ { &fsl_mc_bus_dpcon_type, "dpcon" },
|
|
|
|
+ { &fsl_mc_bus_dpmcp_type, "dpmcp" },
|
|
|
|
+ { &fsl_mc_bus_dpmac_type, "dpmac" },
|
|
|
|
+ { &fsl_mc_bus_dprtc_type, "dprtc" },
|
|
|
|
+ { NULL, NULL }
|
|
|
|
+ };
|
|
|
|
+ int i;
|
|
|
|
+
|
|
|
|
+ for (i = 0; dev_types[i].dev_type; i++)
|
|
|
|
+ if (!strcmp(dev_types[i].type, type))
|
|
|
|
+ return dev_types[i].dev_type;
|
|
|
|
+
|
|
|
|
+ return NULL;
|
|
|
|
+}
|
|
|
|
+
|
|
static int fsl_mc_driver_probe(struct device *dev)
|
|
static int fsl_mc_driver_probe(struct device *dev)
|
|
{
|
|
{
|
|
struct fsl_mc_driver *mc_drv;
|
|
struct fsl_mc_driver *mc_drv;
|
|
@@ -506,6 +568,11 @@ int fsl_mc_device_add(struct fsl_mc_obj_desc *obj_desc,
|
|
mc_dev->dev.parent = parent_dev;
|
|
mc_dev->dev.parent = parent_dev;
|
|
mc_dev->dev.bus = &fsl_mc_bus_type;
|
|
mc_dev->dev.bus = &fsl_mc_bus_type;
|
|
mc_dev->dev.release = fsl_mc_device_release;
|
|
mc_dev->dev.release = fsl_mc_device_release;
|
|
|
|
+ mc_dev->dev.type = fsl_mc_get_device_type(obj_desc->type);
|
|
|
|
+ if (!mc_dev->dev.type) {
|
|
|
|
+ dev_err(parent_dev, "unknown device type %s\n", obj_desc->type);
|
|
|
|
+ goto error_cleanup_dev;
|
|
|
|
+ }
|
|
dev_set_name(&mc_dev->dev, "%s.%d", obj_desc->type, obj_desc->id);
|
|
dev_set_name(&mc_dev->dev, "%s.%d", obj_desc->type, obj_desc->id);
|
|
|
|
|
|
if (strcmp(obj_desc->type, "dprc") == 0) {
|
|
if (strcmp(obj_desc->type, "dprc") == 0) {
|