|
@@ -844,6 +844,42 @@ void __iomem *omap_device_get_rt_va(struct omap_device *od)
|
|
|
return omap_hwmod_get_mpu_rt_va(od->hwmods[0]);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * omap_device_get_by_hwmod_name() - convert a hwmod name to
|
|
|
+ * device pointer.
|
|
|
+ * @oh_name: name of the hwmod device
|
|
|
+ *
|
|
|
+ * Returns back a struct device * pointer associated with a hwmod
|
|
|
+ * device represented by a hwmod_name
|
|
|
+ */
|
|
|
+struct device *omap_device_get_by_hwmod_name(const char *oh_name)
|
|
|
+{
|
|
|
+ struct omap_hwmod *oh;
|
|
|
+
|
|
|
+ if (!oh_name) {
|
|
|
+ WARN(1, "%s: no hwmod name!\n", __func__);
|
|
|
+ return ERR_PTR(-EINVAL);
|
|
|
+ }
|
|
|
+
|
|
|
+ oh = omap_hwmod_lookup(oh_name);
|
|
|
+ if (IS_ERR_OR_NULL(oh)) {
|
|
|
+ WARN(1, "%s: no hwmod for %s\n", __func__,
|
|
|
+ oh_name);
|
|
|
+ return ERR_PTR(oh ? PTR_ERR(oh) : -ENODEV);
|
|
|
+ }
|
|
|
+ if (IS_ERR_OR_NULL(oh->od)) {
|
|
|
+ WARN(1, "%s: no omap_device for %s\n", __func__,
|
|
|
+ oh_name);
|
|
|
+ return ERR_PTR(oh->od ? PTR_ERR(oh->od) : -ENODEV);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (IS_ERR_OR_NULL(oh->od->pdev))
|
|
|
+ return ERR_PTR(oh->od->pdev ? PTR_ERR(oh->od->pdev) : -ENODEV);
|
|
|
+
|
|
|
+ return &oh->od->pdev->dev;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL(omap_device_get_by_hwmod_name);
|
|
|
+
|
|
|
/*
|
|
|
* Public functions intended for use in omap_device_pm_latency
|
|
|
* .activate_func and .deactivate_func function pointers
|