struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)];
        int fll_freq_out;
        int fll_freq_in;
+       struct delayed_work pga_work;
 };
 
 /*
  * Ramp OUT1 PGA volume to minimise pops at stream startup and shutdown.
  */
-static inline int wm8350_out1_ramp_step(struct snd_soc_codec *codec)
+static inline int wm8350_out1_ramp_step(struct wm8350_data *wm8350_data)
 {
-       struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec);
        struct wm8350_output *out1 = &wm8350_data->out1;
        struct wm8350 *wm8350 = wm8350_data->wm8350;
        int left_complete = 0, right_complete = 0;
 /*
  * Ramp OUT2 PGA volume to minimise pops at stream startup and shutdown.
  */
-static inline int wm8350_out2_ramp_step(struct snd_soc_codec *codec)
+static inline int wm8350_out2_ramp_step(struct wm8350_data *wm8350_data)
 {
-       struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec);
        struct wm8350_output *out2 = &wm8350_data->out2;
        struct wm8350 *wm8350 = wm8350_data->wm8350;
        int left_complete = 0, right_complete = 0;
  */
 static void wm8350_pga_work(struct work_struct *work)
 {
-       struct snd_soc_dapm_context *dapm =
-           container_of(work, struct snd_soc_dapm_context, delayed_work.work);
-       struct snd_soc_codec *codec = snd_soc_dapm_to_codec(dapm);
-       struct wm8350_data *wm8350_data = snd_soc_codec_get_drvdata(codec);
+       struct wm8350_data *wm8350_data =
+               container_of(work, struct wm8350_data, pga_work.work);
        struct wm8350_output *out1 = &wm8350_data->out1,
            *out2 = &wm8350_data->out2;
        int i, out1_complete, out2_complete;
        for (i = 0; i <= 63; i++) {
                out1_complete = 1, out2_complete = 1;
                if (out1->ramp != WM8350_RAMP_NONE)
-                       out1_complete = wm8350_out1_ramp_step(codec);
+                       out1_complete = wm8350_out1_ramp_step(wm8350_data);
                if (out2->ramp != WM8350_RAMP_NONE)
-                       out2_complete = wm8350_out2_ramp_step(codec);
+                       out2_complete = wm8350_out2_ramp_step(wm8350_data);
 
                /* ramp finished ? */
                if (out1_complete && out2_complete)
                out->ramp = WM8350_RAMP_UP;
                out->active = 1;
 
-               schedule_delayed_work(&codec->dapm.delayed_work,
+               schedule_delayed_work(&wm8350_data->pga_work,
                                      msecs_to_jiffies(1));
                break;
 
                out->ramp = WM8350_RAMP_DOWN;
                out->active = 0;
 
-               schedule_delayed_work(&codec->dapm.delayed_work,
+               schedule_delayed_work(&wm8350_data->pga_work,
                                      msecs_to_jiffies(1));
                break;
        }
        /* Put the codec into reset if it wasn't already */
        wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA);
 
-       INIT_DELAYED_WORK(&codec->dapm.delayed_work, wm8350_pga_work);
+       INIT_DELAYED_WORK(&priv->pga_work, wm8350_pga_work);
        INIT_DELAYED_WORK(&priv->hpl.work, wm8350_hpl_work);
        INIT_DELAYED_WORK(&priv->hpr.work, wm8350_hpr_work);
 
 
        /* if there was any work waiting then we run it now and
         * wait for its completion */
-       flush_delayed_work(&codec->dapm.delayed_work);
+       flush_delayed_work(&priv->pga_work);
 
        wm8350_clear_bits(wm8350, WM8350_POWER_MGMT_5, WM8350_CODEC_ENA);