* Scott Rowe <scott.m.rowe@intel.com>
 */
 
+#include <asm/intel_scu_ipc.h>
+
 #include "mdfld_output.h"
 #include "mdfld_dsi_dpi.h"
 #include "mdfld_dsi_output.h"
        }
 }
 
-
 int mdfld_output_init(struct drm_device *dev)
 {
        struct drm_psb_private *dev_priv = dev->dev_private;
 
+       dev_priv->scu = devm_intel_scu_ipc_dev_get(&dev->pdev->dev);
+       if (!dev_priv->scu)
+               return -EPROBE_DEFER;
+
        /* FIXME: hardcoded for now */
        dev_priv->mdfld_panel_id = TC35876X;
        /* MIPI panel 1 */
        mdfld_init_panel(dev, 1, HDMI);
        return 0;
 }
-
 
 
 #define PSB_NUM_PIPE           3
 
+struct intel_scu_ipc_dev;
+
 struct drm_psb_private {
        struct drm_device *dev;
        struct pci_dev *aux_pdev; /* Currently only used by mrst */
         * Used for modifying backlight from
         * xrandr -- consider removing and using HAL instead
         */
+       struct intel_scu_ipc_dev *scu;
        struct backlight_device *backlight_device;
        struct drm_property *backlight_property;
        bool backlight_enabled;
 
 
 static void tc35876x_brightness_init(struct drm_device *dev)
 {
+       struct drm_psb_private *dev_priv = dev->dev_private;
        int ret;
        u8 pwmctrl;
        u16 clkdiv;
        /* Make sure the PWM reference is the 19.2 MHz system clock. Read first
         * instead of setting directly to catch potential conflicts between PWM
         * users. */
-       ret = intel_scu_ipc_ioread8(GPIOPWMCTRL, &pwmctrl);
+       ret = intel_scu_ipc_dev_ioread8(dev_priv->scu, GPIOPWMCTRL, &pwmctrl);
        if (ret || pwmctrl != 0x01) {
                if (ret)
                        dev_err(&dev->pdev->dev, "GPIOPWMCTRL read failed\n");
                else
                        dev_warn(&dev->pdev->dev, "GPIOPWMCTRL was not set to system clock (pwmctrl = 0x%02x)\n", pwmctrl);
 
-               ret = intel_scu_ipc_iowrite8(GPIOPWMCTRL, 0x01);
+               ret = intel_scu_ipc_dev_iowrite8(dev_priv->scu, GPIOPWMCTRL, 0x01);
                if (ret)
                        dev_err(&dev->pdev->dev, "GPIOPWMCTRL set failed\n");
        }
 
        clkdiv = calc_clkdiv(SYSTEMCLK, PWM_FREQUENCY);
 
-       ret = intel_scu_ipc_iowrite8(PWM0CLKDIV1, (clkdiv >> 8) & 0xff);
+       ret = intel_scu_ipc_dev_iowrite8(dev_priv->scu, PWM0CLKDIV1, (clkdiv >> 8) & 0xff);
        if (!ret)
-               ret = intel_scu_ipc_iowrite8(PWM0CLKDIV0, clkdiv & 0xff);
+               ret = intel_scu_ipc_dev_iowrite8(dev_priv->scu, PWM0CLKDIV0, clkdiv & 0xff);
 
        if (ret)
                dev_err(&dev->pdev->dev, "PWM0CLKDIV set failed\n");
 
 void tc35876x_brightness_control(struct drm_device *dev, int level)
 {
+       struct drm_psb_private *dev_priv = dev->dev_private;
        int ret;
        u8 duty_val;
        u8 panel_duty_val;
        panel_duty_val = (2 * level - 100) * 0xA9 /
                         MDFLD_DSI_BRIGHTNESS_MAX_LEVEL + 0x56;
 
-       ret = intel_scu_ipc_iowrite8(PWM0DUTYCYCLE, duty_val);
+       ret = intel_scu_ipc_dev_iowrite8(dev_priv->scu, PWM0DUTYCYCLE, duty_val);
        if (ret)
                dev_err(&tc35876x_client->dev, "%s: ipc write fail\n",
                        __func__);