|
@@ -842,6 +842,7 @@ static int __init omap_device_late_idle(struct device *dev, void *data)
|
|
|
{
|
|
|
struct platform_device *pdev = to_platform_device(dev);
|
|
|
struct omap_device *od = to_omap_device(pdev);
|
|
|
+ int i;
|
|
|
|
|
|
if (!od)
|
|
|
return 0;
|
|
@@ -850,6 +851,15 @@ static int __init omap_device_late_idle(struct device *dev, void *data)
|
|
|
* If omap_device state is enabled, but has no driver bound,
|
|
|
* idle it.
|
|
|
*/
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Some devices (like memory controllers) are always kept
|
|
|
+ * enabled, and should not be idled even with no drivers.
|
|
|
+ */
|
|
|
+ for (i = 0; i < od->hwmods_cnt; i++)
|
|
|
+ if (od->hwmods[i]->flags & HWMOD_INIT_NO_IDLE)
|
|
|
+ return 0;
|
|
|
+
|
|
|
if (od->_driver_status != BUS_NOTIFY_BOUND_DRIVER) {
|
|
|
if (od->_state == OMAP_DEVICE_STATE_ENABLED) {
|
|
|
dev_warn(dev, "%s: enabled but no driver. Idling\n",
|