* name. First part of control name contains the pipe name (widget name).
  */
 static int sst_fill_widget_module_info(struct snd_soc_dapm_widget *w,
-       struct snd_soc_platform *platform)
+       struct snd_soc_component *component)
 {
        struct snd_kcontrol *kctl;
        int index, ret = 0;
-       struct snd_card *card = platform->component.card->snd_card;
+       struct snd_card *card = component->card->snd_card;
        char *idx;
 
        down_read(&card->controls_rwsem);
 /**
  * sst_fill_linked_widgets - fill the parent pointer for the linked widget
  */
-static void sst_fill_linked_widgets(struct snd_soc_platform *platform,
+static void sst_fill_linked_widgets(struct snd_soc_component *component,
                                                struct sst_ids *ids)
 {
        struct snd_soc_dapm_widget *w;
        unsigned int len = strlen(ids->parent_wname);
 
-       list_for_each_entry(w, &platform->component.card->widgets, list) {
+       list_for_each_entry(w, &component->card->widgets, list) {
                if (!strncmp(ids->parent_wname, w->name, len)) {
                        ids->parent_w = w;
                        break;
 /**
  * sst_map_modules_to_pipe - fill algo/gains list for all pipes
  */
-static int sst_map_modules_to_pipe(struct snd_soc_platform *platform)
+static int sst_map_modules_to_pipe(struct snd_soc_component *component)
 {
        struct snd_soc_dapm_widget *w;
        int ret = 0;
 
-       list_for_each_entry(w, &platform->component.card->widgets, list) {
+       list_for_each_entry(w, &component->card->widgets, list) {
                if (is_sst_dapm_widget(w) && (w->priv)) {
                        struct sst_ids *ids = w->priv;
 
-                       dev_dbg(platform->dev, "widget type=%d name=%s\n",
+                       dev_dbg(component->dev, "widget type=%d name=%s\n",
                                        w->id, w->name);
                        INIT_LIST_HEAD(&ids->algo_list);
                        INIT_LIST_HEAD(&ids->gain_list);
-                       ret = sst_fill_widget_module_info(w, platform);
+                       ret = sst_fill_widget_module_info(w, component);
 
                        if (ret < 0)
                                return ret;
 
                        /* fill linked widgets */
                        if (ids->parent_wname !=  NULL)
-                               sst_fill_linked_widgets(platform, ids);
+                               sst_fill_linked_widgets(component, ids);
                }
        }
        return 0;
 }
 
-int sst_dsp_init_v2_dpcm(struct snd_soc_platform *platform)
+int sst_dsp_init_v2_dpcm(struct snd_soc_component *component)
 {
        int i, ret = 0;
        struct snd_soc_dapm_context *dapm =
-                       snd_soc_component_get_dapm(&platform->component);
-       struct sst_data *drv = snd_soc_platform_get_drvdata(platform);
+                       snd_soc_component_get_dapm(component);
+       struct sst_data *drv = snd_soc_component_get_drvdata(component);
        unsigned int gains = ARRAY_SIZE(sst_gain_controls)/3;
 
-       drv->byte_stream = devm_kzalloc(platform->dev,
+       drv->byte_stream = devm_kzalloc(component->dev,
                                        SST_MAX_BIN_BYTES, GFP_KERNEL);
        if (!drv->byte_stream)
                return -ENOMEM;
                sst_gains[i].ramp_duration = SST_GAIN_RAMP_DURATION_DEFAULT;
        }
 
-       ret = snd_soc_add_platform_controls(platform, sst_gain_controls,
+       ret = snd_soc_add_component_controls(component, sst_gain_controls,
                        ARRAY_SIZE(sst_gain_controls));
        if (ret)
                return ret;
 
        /* Initialize algo control params */
-       ret = sst_algo_control_init(platform->dev);
+       ret = sst_algo_control_init(component->dev);
        if (ret)
                return ret;
-       ret = snd_soc_add_platform_controls(platform, sst_algo_controls,
+       ret = snd_soc_add_component_controls(component, sst_algo_controls,
                        ARRAY_SIZE(sst_algo_controls));
        if (ret)
                return ret;
 
-       ret = snd_soc_add_platform_controls(platform, sst_slot_controls,
+       ret = snd_soc_add_component_controls(component, sst_slot_controls,
                        ARRAY_SIZE(sst_slot_controls));
        if (ret)
                return ret;
 
-       ret = sst_map_modules_to_pipe(platform);
+       ret = sst_map_modules_to_pipe(component);
 
        return ret;
 }
 
        return retval;
 }
 
-static int sst_soc_probe(struct snd_soc_platform *platform)
+static int sst_soc_probe(struct snd_soc_component *component)
 {
-       struct sst_data *drv = dev_get_drvdata(platform->dev);
+       struct sst_data *drv = dev_get_drvdata(component->dev);
 
-       drv->soc_card = platform->component.card;
-       return sst_dsp_init_v2_dpcm(platform);
+       drv->soc_card = component->card;
+       return sst_dsp_init_v2_dpcm(component);
 }
 
-static const struct snd_soc_platform_driver sst_soc_platform_drv  = {
+static const struct snd_soc_component_driver sst_soc_platform_drv  = {
+       .name           = DRV_NAME,
        .probe          = sst_soc_probe,
        .ops            = &sst_platform_ops,
        .compr_ops      = &sst_platform_compr_ops,
        .pcm_new        = sst_pcm_new,
 };
 
-static const struct snd_soc_component_driver sst_component = {
-       .name           = "sst",
-};
-
-
 static int sst_platform_probe(struct platform_device *pdev)
 {
        struct sst_data *drv;
        mutex_init(&drv->lock);
        dev_set_drvdata(&pdev->dev, drv);
 
-       ret = snd_soc_register_platform(&pdev->dev, &sst_soc_platform_drv);
-       if (ret) {
-               dev_err(&pdev->dev, "registering soc platform failed\n");
-               return ret;
-       }
-
-       ret = snd_soc_register_component(&pdev->dev, &sst_component,
+       ret = devm_snd_soc_register_component(&pdev->dev, &sst_soc_platform_drv,
                                sst_platform_dai, ARRAY_SIZE(sst_platform_dai));
-       if (ret) {
+       if (ret)
                dev_err(&pdev->dev, "registering cpu dais failed\n");
-               snd_soc_unregister_platform(&pdev->dev);
-       }
+
        return ret;
 }
 
 static int sst_platform_remove(struct platform_device *pdev)
 {
-
-       snd_soc_unregister_component(&pdev->dev);
-       snd_soc_unregister_platform(&pdev->dev);
        dev_dbg(&pdev->dev, "sst_platform_remove success\n");
        return 0;
 }