@@ -662,6 +662,60 @@ int omap_device_shutdown(struct platform_device *pdev)
return ret;
}
+static int omap_device_add_initiator_user(struct platform_device *pdev,
+ u8 init_id)
+{
+ int i;
+ struct omap_device *od;
+
+ od = _find_by_pdev(pdev);
+
+ if (od->_state != OMAP_DEVICE_STATE_ENABLED)
+ return -EINVAL;
+
+ for (i = 0; i < od->hwmods_cnt; i++)
+ omap_hwmod_add_initiator_user(od->hwmods[i], init_id);
+
+ return 0;
+}
+
+inline int omap_device_add_mpu_user(struct platform_device *pdev)
+{
+ return omap_device_add_initiator_user(pdev, OMAP_INIT_MPU);
+}
+
+inline int omap_device_add_iva_user(struct platform_device *pdev)
+{
+ return omap_device_add_initiator_user(pdev, OMAP_INIT_IVA);
+}
+
+static int omap_device_del_initiator_user(struct platform_device *pdev,
+ u8 init_id)
+{
+ int i;
+ struct omap_device *od;
+
+ od = _find_by_pdev(pdev);
+
+ if (od->_state == OMAP_DEVICE_STATE_ENABLED)
+ return -EINVAL;
+
+ for (i = 0; i < od->hwmods_cnt; i++)
+ omap_hwmod_del_initiator_user(od->hwmods[i], init_id);
+
+ return 0;
+}
+
+inline int omap_device_del_mpu_user(struct platform_device *pdev)
+{
+ return omap_device_del_initiator_user(pdev, OMAP_INIT_MPU);
+}
+
+inline int omap_device_del_iva_user(struct platform_device *pdev)
+{
+ return omap_device_del_initiator_user(pdev, OMAP_INIT_IVA);
+}
+
/**
* omap_device_align_pm_lat - activate/deactivate device to match wakeup lat lim
* @od: struct omap_device *