if (pass != SOC_TPLG_PASS_CONTROL)
                return;
 
-       if (dobj->ops && dobj->ops->control_unload)
-               dobj->ops->control_unload(comp, dobj);
+       if (dobj->unload)
+               dobj->unload(comp, dobj);
 
        snd_ctl_remove(card, dobj->control.kcontrol);
        list_del(&dobj->list);
        if (pass != SOC_TPLG_PASS_GRAPH)
                return;
 
-       if (dobj->ops && dobj->ops->dapm_route_unload)
-               dobj->ops->dapm_route_unload(comp, dobj);
+       if (dobj->unload)
+               dobj->unload(comp, dobj);
 
        list_del(&dobj->list);
 }
        if (pass != SOC_TPLG_PASS_WIDGET)
                return;
 
-       if (dobj->ops && dobj->ops->widget_unload)
-               dobj->ops->widget_unload(comp, dobj);
+       if (dobj->unload)
+               dobj->unload(comp, dobj);
 
        if (!w->kcontrols)
                goto free_news;
        if (pass != SOC_TPLG_PASS_PCM_DAI)
                return;
 
-       if (dobj->ops && dobj->ops->dai_unload)
-               dobj->ops->dai_unload(comp, dobj);
+       if (dobj->unload)
+               dobj->unload(comp, dobj);
 
        for_each_component_dais_safe(comp, dai, _dai)
                if (dai->driver == dai_drv)
        if (pass != SOC_TPLG_PASS_PCM_DAI)
                return;
 
-       if (dobj->ops && dobj->ops->link_unload)
-               dobj->ops->link_unload(comp, dobj);
+       if (dobj->unload)
+               dobj->unload(comp, dobj);
 
        list_del(&dobj->list);
        snd_soc_remove_pcm_runtime(comp->card,
        if (pass != SOC_TPLG_PASS_LINK)
                return;
 
-       if (dobj->ops && dobj->ops->link_unload)
-               dobj->ops->link_unload(comp, dobj);
+       if (dobj->unload)
+               dobj->unload(comp, dobj);
 
        /*
         * We don't free the link here as what soc_tplg_remove_link() do since BE
 
        sbe->max = le32_to_cpu(be->max);
        sbe->dobj.type = SND_SOC_DOBJ_BYTES;
-       sbe->dobj.ops = tplg->ops;
+       if (tplg->ops)
+               sbe->dobj.unload = tplg->ops->control_unload;
        INIT_LIST_HEAD(&sbe->dobj.list);
 
        /* map io handlers */
        sm->invert = le32_to_cpu(mc->invert);
        sm->platform_max = le32_to_cpu(mc->platform_max);
        sm->dobj.index = tplg->index;
-       sm->dobj.ops = tplg->ops;
        sm->dobj.type = SND_SOC_DOBJ_MIXER;
+       if (tplg->ops)
+               sm->dobj.unload = tplg->ops->control_unload;
        INIT_LIST_HEAD(&sm->dobj.list);
 
        /* map io handlers */
        se->mask = le32_to_cpu(ec->mask);
        se->dobj.index = tplg->index;
        se->dobj.type = SND_SOC_DOBJ_ENUM;
-       se->dobj.ops = tplg->ops;
+       if (tplg->ops)
+               se->dobj.unload = tplg->ops->control_unload;
        INIT_LIST_HEAD(&se->dobj.list);
 
        switch (le32_to_cpu(ec->hdr.ops.info)) {
 
                /* add route dobj to dobj_list */
                route->dobj.type = SND_SOC_DOBJ_GRAPH;
-               route->dobj.ops = tplg->ops;
+               if (tplg->ops)
+                       route->dobj.unload = tplg->ops->control_unload;
                route->dobj.index = tplg->index;
                list_add(&route->dobj.list, &tplg->comp->dobj_list);
 
 
        widget->dobj.type = SND_SOC_DOBJ_WIDGET;
        widget->dobj.widget.kcontrol_type = kcontrol_type;
-       widget->dobj.ops = tplg->ops;
+       if (tplg->ops)
+               widget->dobj.unload = tplg->ops->widget_unload;
        widget->dobj.index = tplg->index;
        list_add(&widget->dobj.list, &tplg->comp->dobj_list);
 
        }
 
        dai_drv->dobj.index = tplg->index;
-       dai_drv->dobj.ops = tplg->ops;
        dai_drv->dobj.type = SND_SOC_DOBJ_PCM;
+       if (tplg->ops)
+               dai_drv->dobj.unload = tplg->ops->dai_unload;
        list_add(&dai_drv->dobj.list, &tplg->comp->dobj_list);
 
        /* register the DAI to the component */
        link->num_platforms = 1;
 
        link->dobj.index = tplg->index;
-       link->dobj.ops = tplg->ops;
        link->dobj.type = SND_SOC_DOBJ_DAI_LINK;
+       if (tplg->ops)
+               link->dobj.unload = tplg->ops->link_unload;
 
        if (strlen(pcm->pcm_name)) {
                link->name = devm_kstrdup(tplg->dev, pcm->pcm_name, GFP_KERNEL);
 
        /* for unloading it in snd_soc_tplg_component_remove */
        link->dobj.index = tplg->index;
-       link->dobj.ops = tplg->ops;
        link->dobj.type = SND_SOC_DOBJ_BACKEND_LINK;
+       if (tplg->ops)
+               link->dobj.unload = tplg->ops->link_unload;
        list_add(&link->dobj.list, &tplg->comp->dobj_list);
 
        return 0;