unsigned short mirqlvl1_addr;
        unsigned short pbstat_addr;
        u8 pbstat_mask;
+       struct intel_scu_ipc_dev *scu;
        int (*setup)(struct mid_pb_ddata *ddata);
 };
 
        int ret;
        u8 pbstat;
 
-       ret = intel_scu_ipc_ioread8(ddata->pbstat_addr, &pbstat);
+       ret = intel_scu_ipc_dev_ioread8(ddata->scu, ddata->pbstat_addr,
+                                       &pbstat);
        if (ret)
                return ret;
 
 
 static int mid_irq_ack(struct mid_pb_ddata *ddata)
 {
-       return intel_scu_ipc_update_register(ddata->mirqlvl1_addr, 0, MSIC_PWRBTNM);
+       return intel_scu_ipc_dev_update(ddata->scu, ddata->mirqlvl1_addr, 0,
+                                       MSIC_PWRBTNM);
 }
 
 static int mrfld_setup(struct mid_pb_ddata *ddata)
 {
        /* Unmask the PBIRQ and MPBIRQ on Tangier */
-       intel_scu_ipc_update_register(BCOVE_PBIRQ, 0, MSIC_PWRBTNM);
-       intel_scu_ipc_update_register(BCOVE_PBIRQMASK, 0, MSIC_PWRBTNM);
+       intel_scu_ipc_dev_update(ddata->scu, BCOVE_PBIRQ, 0, MSIC_PWRBTNM);
+       intel_scu_ipc_dev_update(ddata->scu, BCOVE_PBIRQMASK, 0, MSIC_PWRBTNM);
 
        return 0;
 }
                        return error;
        }
 
+       ddata->scu = devm_intel_scu_ipc_dev_get(&pdev->dev);
+       if (!ddata->scu)
+               return -EPROBE_DEFER;
+
        error = devm_request_threaded_irq(&pdev->dev, irq, NULL, mid_pb_isr,
                                          IRQF_ONESHOT, DRIVER_NAME, ddata);
        if (error) {