struct device *dev;
        char name[HDA_MAX_NAME_SIZE];
        struct hda_codec *codec;
+       void (*pre_playback_hook)(struct device *dev, int action);
        void (*playback_hook)(struct device *dev, int action);
+       void (*post_playback_hook)(struct device *dev, int action);
 };
 
        int i;
 
        for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
-               if (spec->comps[i].dev)
+               if (spec->comps[i].dev && spec->comps[i].pre_playback_hook)
+                       spec->comps[i].pre_playback_hook(spec->comps[i].dev, action);
+       }
+       for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
+               if (spec->comps[i].dev && spec->comps[i].playback_hook)
                        spec->comps[i].playback_hook(spec->comps[i].dev, action);
        }
+       for (i = 0; i < HDA_MAX_COMPONENTS; i++) {
+               if (spec->comps[i].dev && spec->comps[i].post_playback_hook)
+                       spec->comps[i].post_playback_hook(spec->comps[i].dev, action);
+       }
 }
 
 struct cs35l41_dev_name {