struct hda_codec *codec =
                container_of(work, struct hda_codec, jackpoll_work.work);
 
-       /* for non-polling trigger: we need nothing if already powered on */
-       if (!codec->jackpoll_interval && snd_hdac_is_power_on(&codec->core))
+       if (!codec->jackpoll_interval)
                return;
 
        /* the power-up/down sequence triggers the runtime resume */
-       snd_hda_power_up_pm(codec);
+       snd_hda_power_up(codec);
        /* update jacks manually if polling is required, too */
-       if (codec->jackpoll_interval) {
-               snd_hda_jack_set_dirty_all(codec);
-               snd_hda_jack_poll_all(codec);
-       }
-       snd_hda_power_down_pm(codec);
-
-       if (!codec->jackpoll_interval)
-               return;
-
-       schedule_delayed_work(&codec->jackpoll_work,
-                             codec->jackpoll_interval);
+       snd_hda_jack_set_dirty_all(codec);
+       snd_hda_jack_poll_all(codec);
+       schedule_delayed_work(&codec->jackpoll_work, codec->jackpoll_interval);
+       snd_hda_power_down(codec);
 }
 
 /* release all pincfg lists */
                snd_hda_regmap_sync(codec);
        }
 
-       if (codec->jackpoll_interval)
-               hda_jackpoll_work(&codec->jackpoll_work.work);
-       else
-               snd_hda_jack_report_sync(codec);
+       snd_hda_jack_report_sync(codec);
        codec->core.dev.power.power_state = PMSG_ON;
        snd_hdac_leave_pm(&codec->core);
+       if (codec->jackpoll_interval)
+               schedule_delayed_work(&codec->jackpoll_work,
+                                     codec->jackpoll_interval);
 }
 
 static int hda_codec_runtime_suspend(struct device *dev)
        if (!codec->card)
                return 0;
 
-       cancel_delayed_work_sync(&codec->jackpoll_work);
-
        state = hda_call_codec_suspend(codec);
        if (codec->link_down_at_suspend ||
            (codec_has_clkstop(codec) && codec_has_epss(codec) &&
                snd_hdac_codec_link_down(&codec->core);
        snd_hda_codec_display_power(codec, false);
 
-       if (codec->bus->jackpoll_in_suspend &&
-               (dev->power.power_state.event != PM_EVENT_SUSPEND))
-               schedule_delayed_work(&codec->jackpoll_work,
-                                       codec->jackpoll_interval);
        return 0;
 }
 
        if (err < 0)
                return err;
 
+       snd_hda_jack_report_sync(codec); /* call at the last init point */
        if (codec->jackpoll_interval)
-               hda_jackpoll_work(&codec->jackpoll_work.work);
-       else
-               snd_hda_jack_report_sync(codec); /* call at the last init point */
+               schedule_delayed_work(&codec->jackpoll_work,
+                                     codec->jackpoll_interval);
+
        sync_power_up_states(codec);
        return 0;
 }