struct hdac_hdmi_drv_data *drv_data;
 };
 
+#define hdev_to_hdmi_priv(_hdev) ((to_ehdac_device(_hdev))->private_data)
+
 static struct hdac_hdmi_pcm *
 hdac_hdmi_get_pcm_from_cvt(struct hdac_hdmi_priv *hdmi,
                           struct hdac_hdmi_cvt *cvt)
        struct hdmi_audio_infoframe frame;
        struct hdac_hdmi_pin *pin = port->pin;
        struct dp_audio_infoframe dp_ai;
-       struct hdac_hdmi_priv *hdmi = hdac->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&hdac->hdac);
        struct hdac_hdmi_cvt *cvt = pcm->cvt;
        u8 *dip;
        int ret;
                int slots, int slot_width)
 {
        struct hdac_ext_device *edev = snd_soc_dai_get_drvdata(dai);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_dai_port_map *dai_map;
        struct hdac_hdmi_pcm *pcm;
 
        struct snd_pcm_hw_params *hparams, struct snd_soc_dai *dai)
 {
        struct hdac_ext_device *hdac = snd_soc_dai_get_drvdata(dai);
-       struct hdac_hdmi_priv *hdmi = hdac->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&hdac->hdac);
        struct hdac_hdmi_dai_port_map *dai_map;
        struct hdac_hdmi_port *port;
        struct hdac_hdmi_pcm *pcm;
                        struct snd_soc_dai *dai)
 {
        struct hdac_ext_device *hdac = snd_soc_dai_get_drvdata(dai);
-       struct hdac_hdmi_priv *hdmi = hdac->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&hdac->hdac);
        struct hdac_hdmi_dai_port_map *dai_map;
        struct hdac_hdmi_cvt *cvt;
        struct hdac_hdmi_port *port;
                struct snd_soc_dai *dai)
 {
        struct hdac_ext_device *hdac = snd_soc_dai_get_drvdata(dai);
-       struct hdac_hdmi_priv *hdmi = hdac->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&hdac->hdac);
        struct hdac_hdmi_dai_port_map *dai_map;
        struct hdac_hdmi_pcm *pcm;
 
 hdac_hdmi_query_cvt_params(struct hdac_device *hdac, struct hdac_hdmi_cvt *cvt)
 {
        unsigned int chans;
-       struct hdac_ext_device *edev = to_ehdac_device(hdac);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdac);
        int err;
 
        chans = get_wcaps(hdac, cvt->nid);
 static struct hdac_hdmi_pcm *hdac_hdmi_get_pcm(struct hdac_ext_device *edev,
                                        struct hdac_hdmi_port *port)
 {
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pcm *pcm = NULL;
        struct hdac_hdmi_port *p;
 
 {
        struct hdac_hdmi_cvt *cvt = w->priv;
        struct hdac_ext_device *edev = to_hda_ext_device(w->dapm->dev);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pcm *pcm;
 
        dev_dbg(&edev->hdac.dev, "%s: widget: %s event: %x\n",
        struct snd_soc_dapm_context *dapm = w->dapm;
        struct hdac_hdmi_port *port = w->priv;
        struct hdac_ext_device *edev = to_hda_ext_device(dapm->dev);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pcm *pcm = NULL;
        const char *cvt_name =  e->texts[ucontrol->value.enumerated.item[0]];
 
                                struct snd_soc_dapm_widget *widget,
                                const char *widget_name)
 {
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pin *pin = port->pin;
        struct snd_kcontrol_new *kc;
        struct hdac_hdmi_cvt *cvt;
                        struct snd_soc_dapm_widget *widgets,
                        struct snd_soc_dapm_route *route, int rindex)
 {
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        const struct snd_kcontrol_new *kc;
        struct soc_enum *se;
        int mux_index = hdmi->num_cvt + hdmi->num_ports;
        struct snd_soc_dapm_widget *widgets;
        struct snd_soc_dapm_route *route;
        struct hdac_ext_device *edev = to_hda_ext_device(dapm->dev);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct snd_soc_dai_driver *dai_drv = dapm->component->dai_drv;
        char widget_name[NAME_SIZE];
        struct hdac_hdmi_cvt *cvt;
 
 static int hdac_hdmi_init_dai_map(struct hdac_ext_device *edev)
 {
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_dai_port_map *dai_map;
        struct hdac_hdmi_cvt *cvt;
        int dai_id = 0;
 
 static int hdac_hdmi_add_cvt(struct hdac_ext_device *edev, hda_nid_t nid)
 {
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_cvt *cvt;
        char name[NAME_SIZE];
 
                                    struct hdac_hdmi_port *port)
 {
        struct hdac_ext_device *edev = pin->edev;
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pcm *pcm;
        int size = 0;
        int port_id = -1;
 
 static int hdac_hdmi_add_pin(struct hdac_ext_device *edev, hda_nid_t nid)
 {
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pin *pin;
        int ret;
 
 static void hdac_hdmi_skl_enable_all_pins(struct hdac_device *hdac)
 {
        unsigned int vendor_param;
-       struct hdac_ext_device *edev = to_ehdac_device(hdac);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdac);
        unsigned int vendor_nid = hdmi->drv_data->vendor_nid;
 
        vendor_param = snd_hdac_codec_read(hdac, vendor_nid, 0,
 static void hdac_hdmi_skl_enable_dp12(struct hdac_device *hdac)
 {
        unsigned int vendor_param;
-       struct hdac_ext_device *edev = to_ehdac_device(hdac);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdac);
        unsigned int vendor_nid = hdmi->drv_data->vendor_nid;
 
        vendor_param = snd_hdac_codec_read(hdac, vendor_nid, 0,
        hda_nid_t nid;
        int i, num_nodes;
        struct hdac_device *hdac = &edev->hdac;
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
        struct hdac_hdmi_cvt *temp_cvt, *cvt_next;
        struct hdac_hdmi_pin *temp_pin, *pin_next;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdac);
        int ret;
 
        hdac_hdmi_skl_enable_all_pins(hdac);
 static void hdac_hdmi_eld_notify_cb(void *aptr, int port, int pipe)
 {
        struct hdac_ext_device *edev = aptr;
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pin *pin = NULL;
        struct hdac_hdmi_port *hport = NULL;
        struct snd_soc_codec *codec = edev->scodec;
        char *name;
        int i = 0, j;
        struct snd_soc_codec *codec = edev->scodec;
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
 
        kc = devm_kcalloc(codec->dev, hdmi->num_ports,
                                sizeof(*kc), GFP_KERNEL);
                        struct snd_soc_dapm_context *dapm)
 {
        struct hdac_ext_device *edev = snd_soc_codec_get_drvdata(codec);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pin *pin;
        struct snd_soc_dapm_widget *widgets;
        struct snd_soc_dapm_route *route;
 {
        struct snd_soc_codec *codec = dai->codec;
        struct hdac_ext_device *edev = snd_soc_codec_get_drvdata(codec);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pcm *pcm;
        struct snd_pcm *snd_pcm;
        int err;
 static int hdmi_codec_probe(struct snd_soc_codec *codec)
 {
        struct hdac_ext_device *edev = snd_soc_codec_get_drvdata(codec);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct snd_soc_dapm_context *dapm =
                snd_soc_component_get_dapm(&codec->component);
        struct hdac_ext_link *hlink = NULL;
 static void hdmi_codec_complete(struct device *dev)
 {
        struct hdac_ext_device *edev = to_hda_ext_device(dev);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_device *hdac = &edev->hdac;
 
        /* Power up afg */
 static void hdac_hdmi_get_chmap(struct hdac_device *hdac, int pcm_idx,
                                        unsigned char *chmap)
 {
-       struct hdac_ext_device *edev = to_ehdac_device(hdac);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdac);
        struct hdac_hdmi_pcm *pcm = get_hdmi_pcm_from_id(hdmi, pcm_idx);
 
        memcpy(chmap, pcm->chmap, ARRAY_SIZE(pcm->chmap));
                                unsigned char *chmap, int prepared)
 {
        struct hdac_ext_device *edev = to_ehdac_device(hdac);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdac);
        struct hdac_hdmi_pcm *pcm = get_hdmi_pcm_from_id(hdmi, pcm_idx);
        struct hdac_hdmi_port *port;
 
 
 static bool is_hdac_hdmi_pcm_attached(struct hdac_device *hdac, int pcm_idx)
 {
-       struct hdac_ext_device *edev = to_ehdac_device(hdac);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdac);
        struct hdac_hdmi_pcm *pcm = get_hdmi_pcm_from_id(hdmi, pcm_idx);
 
        if (!pcm)
 
 static int hdac_hdmi_get_spk_alloc(struct hdac_device *hdac, int pcm_idx)
 {
-       struct hdac_ext_device *edev = to_ehdac_device(hdac);
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdac);
        struct hdac_hdmi_pcm *pcm = get_hdmi_pcm_from_id(hdmi, pcm_idx);
        struct hdac_hdmi_port *port;
 
 
 static int hdac_hdmi_dev_remove(struct hdac_ext_device *edev)
 {
-       struct hdac_hdmi_priv *hdmi = edev->private_data;
+       struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(&edev->hdac);
        struct hdac_hdmi_pin *pin, *pin_next;
        struct hdac_hdmi_cvt *cvt, *cvt_next;
        struct hdac_hdmi_pcm *pcm, *pcm_next;