#include <linux/platform_device.h>
 #include <linux/of_platform.h>
 #include <linux/bitops.h>
-#include <linux/component.h>
 #include <linux/mutex.h>
 #include <linux/of_device.h>
 #include <linux/slab.h>
        .num_dapm_routes = ARRAY_SIZE(intercon),
 };
 
-static int q6routing_dai_bind(struct device *dev, struct device *master,
-                             void *data)
+static int q6pcm_routing_probe(struct platform_device *pdev)
 {
+       struct device *dev = &pdev->dev;
+
        routing_data = kzalloc(sizeof(*routing_data), GFP_KERNEL);
        if (!routing_data)
                return -ENOMEM;
        mutex_init(&routing_data->lock);
        dev_set_drvdata(dev, routing_data);
 
-       return snd_soc_register_component(dev, &msm_soc_routing_component,
+       return devm_snd_soc_register_component(dev, &msm_soc_routing_component,
                                          NULL, 0);
 }
 
-static void q6routing_dai_unbind(struct device *dev, struct device *master,
-                                void *d)
+static int q6pcm_routing_remove(struct platform_device *pdev)
 {
-       struct msm_routing_data *data = dev_get_drvdata(dev);
-
-       snd_soc_unregister_component(dev);
-
-       kfree(data);
-
+       kfree(routing_data);
        routing_data = NULL;
-}
 
-static const struct component_ops q6routing_dai_comp_ops = {
-       .bind   = q6routing_dai_bind,
-       .unbind = q6routing_dai_unbind,
-};
-
-static int q6pcm_routing_probe(struct platform_device *pdev)
-{
-       return component_add(&pdev->dev, &q6routing_dai_comp_ops);
-}
-
-static int q6pcm_routing_remove(struct platform_device *pdev)
-{
-       component_del(&pdev->dev, &q6routing_dai_comp_ops);
        return 0;
 }