Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932516AbbBIK67 (ORCPT ); Mon, 9 Feb 2015 05:58:59 -0500 Received: from mailout3.samsung.com ([203.254.224.33]:28952 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759973AbbBIK64 (ORCPT ); Mon, 9 Feb 2015 05:58:56 -0500 X-AuditID: cbfee68d-f79296d000004278-c7-54d892ee9dc7 From: Amit Daniel Kachhap To: linux-pm@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, khilman@linaro.org, rjw@rjwysocki.net, len.brown@intel.com, ulf.hansson@linaro.org, tomasz.figa@gmail.com, kgene.kim@samsung.com, s.nawrocki@samsung.com, thomas.ab@samsung.com, pankaj.dubey@samsung.com, m.szyprowski@samsung.com, geert+renesas@glider.be, Amit Daniel Kachhap Subject: [PATCH RFC v4 1/3] PM / Runtime: Add an API pm_runtime_set_slave Date: Mon, 09 Feb 2015 16:32:04 +0530 Message-id: <1423479726-23140-2-git-send-email-amit.daniel@samsung.com> X-Mailer: git-send-email 2.2.0 In-reply-to: <1423479726-23140-1-git-send-email-amit.daniel@samsung.com> References: <1423479726-23140-1-git-send-email-amit.daniel@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprMIsWRmVeSWpSXmKPExsWyRsSkWvfdpBshBjO3i1s0XA2xmDt7EqNF 74KrbBZfD69gtJg1ZS+TxabH11gtLu+aw2bxufcIo8WM8/uYLNYeuctusWjrF3aLM6cvsVoc ftPOatGxjNFi1a4/jBbH14Y7CHhMPKvrsXPWXXaPxXteMnncubaHzWPzknqPLVfbWTz6tqxi 9Pi8SS6AI4rLJiU1J7MstUjfLoEr49TLO8wFTyQqtn/9ydbA+F6ki5GTQ0LARGJN9zZWCFtM 4sK99WxdjFwcQgJLGSU231nODFN0fOkBVojEIkaJs/MOsUM4E5gkrv9sYQOpYhMwlvi5cz87 iC0iICMx9cp+sA5mgQXMEkcnLWYBSQgLeEqcPLWQCcRmEVCVuPJxHpDNwcEr4C6x+YwsxDY5 iS23HoHN4RTwkJhxug3MFgIq6Ti1gBFkpoTAR3aJ+5sOsEPMEZD4NvkQC8gcCQFZiU0HoK6W lDi44gbLBEbhBYwMqxhFUwuSC4qT0osM9YoTc4tL89L1kvNzNzEC4+r0v2e9OxhvH7A+xCjA wajEw3vh8/UQIdbEsuLK3EOMpkAbJjJLiSbnA6M3ryTe0NjMyMLUxNTYyNzSTEmcV1HqZ7CQ QHpiSWp2ampBalF8UWlOavEhRiYOTqkGRrvW7hVrZ0t9b6q35mqTP/vd1DlDfuV9lrsKFrJi /W3zy+Zc9btsGvPJtXSp3dr8voRn+am3ykS+cHU8f7u+u/DCjtriiKeGx+4rT3mxp/XPrN8H Kg0Y5yTITc6fcyHrzcMG69NpX0R8c8WefZ9QcNeiz3XTpFL9qQyM1857Hf2Ys3nSg7n7lJRY ijMSDbWYi4oTAeQHEISmAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrLIsWRmVeSWpSXmKPExsVy+t9jAd13k26EGJz/y2PRcDXEYu7sSYwW vQuusll8PbyC0WLWlL1MFpseX2O1uLxrDpvF594jjBYzzu9jslh75C67xaKtX9gtzpy+xGpx +E07q0XHMkaLVbv+MFocXxvuIOAx8ayux85Zd9k9Fu95yeRx59oeNo/NS+o9tlxtZ/Ho27KK 0ePzJrkAjqgGRpuM1MSU1CKF1Lzk/JTMvHRbJe/geOd4UzMDQ11DSwtzJYW8xNxUWyUXnwBd t8wcoPOVFMoSc0qBQgGJxcVK+naYJoSGuOlawDRG6PqGBMH1GBmggYQ1jBmnXt5hLngiUbH9 60+2Bsb3Il2MnBwSAiYSx5ceYIWwxSQu3FvP1sXIxSEksIhR4uy8Q+wQzgQmies/W9hAqtgE jCV+7tzPDmKLCMhITL2ynxWkiFlgAbPE0UmLWUASwgKeEidPLWQCsVkEVCWufJwHZHNw8Aq4 S2w+IwuxTU5iy61HYHM4BTwkZpxuA7OFgEo6Ti1gnMDIu4CRYRWjaGpBckFxUnqukV5xYm5x aV66XnJ+7iZGcNQ+k97BuKrB4hCjAAejEg/vhc/XQ4RYE8uKK3MPMUpwMCuJ8O7vuREixJuS WFmVWpQfX1Sak1p8iNEU6KiJzFKiyfnAhJJXEm9obGJuamxqaWJhYmapJM6rZN8WIiSQnliS mp2aWpBaBNPHxMEp1cDofNzBO+9shX6zhF7U/Eczgk+1nl1Z61nPsHrtqe6ovQoxDmfn3+sq +erpf27+XrPJASL5qfrFLyP7srV70runX+PrkdvCcizwr6Hw770M725eFrPv+8SdKifvu+BL AlPuJaXstdG7I+68b3cJWaX8T2fKiY5/H28XvdL4euGps7JmhUmE9FIlluKMREMt5qLiRACK hKQw8AIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3338 Lines: 84 This API creates a pm runtime slave type device which does not itself participates in pm runtime but depends on the master devices to power manage them. These devices should have pm runtime callbacks. These devices (like clock) may not implement complete pm_runtime calls such as pm_runtime_get/pm_runtime_put due to subsystems interaction behaviour or any other reason. Signed-off-by: Amit Daniel Kachhap --- drivers/base/power/runtime.c | 18 ++++++++++++++++++ include/linux/pm.h | 1 + include/linux/pm_runtime.h | 2 ++ 3 files changed, 21 insertions(+) diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c index 5070c4f..e247f08 100644 --- a/drivers/base/power/runtime.c +++ b/drivers/base/power/runtime.c @@ -1252,6 +1252,24 @@ void pm_runtime_no_callbacks(struct device *dev) EXPORT_SYMBOL_GPL(pm_runtime_no_callbacks); /** + * pm_runtime_set_slave - Set these devices as slave. + * @dev: Device to handle. + * + * Set the power.slave flag, which tells the PM core that this device is + * power-managed by the master device through the runtime callbacks. Since it + * will not manage runtime callbacks on its own, so runtime sysfs attributes is + * removed. + */ +void pm_runtime_set_slave(struct device *dev) +{ + spin_lock_irq(&dev->power.lock); + dev->power.slave = true; + spin_unlock_irq(&dev->power.lock); + if (device_is_registered(dev)) + rpm_sysfs_remove(dev); +} + +/** * pm_runtime_irq_safe - Leave interrupts disabled during callbacks. * @dev: Device to handle * diff --git a/include/linux/pm.h b/include/linux/pm.h index 8b59763..a4090ef 100644 --- a/include/linux/pm.h +++ b/include/linux/pm.h @@ -581,6 +581,7 @@ struct dev_pm_info { unsigned int use_autosuspend:1; unsigned int timer_autosuspends:1; unsigned int memalloc_noio:1; + unsigned int slave:1; enum rpm_request request; enum rpm_status runtime_status; int runtime_error; diff --git a/include/linux/pm_runtime.h b/include/linux/pm_runtime.h index 30e84d4..0707a4b 100644 --- a/include/linux/pm_runtime.h +++ b/include/linux/pm_runtime.h @@ -47,6 +47,7 @@ extern void __pm_runtime_disable(struct device *dev, bool check_resume); extern void pm_runtime_allow(struct device *dev); extern void pm_runtime_forbid(struct device *dev); extern void pm_runtime_no_callbacks(struct device *dev); +extern void pm_runtime_set_slave(struct device *dev); extern void pm_runtime_irq_safe(struct device *dev); extern void __pm_runtime_use_autosuspend(struct device *dev, bool use); extern void pm_runtime_set_autosuspend_delay(struct device *dev, int delay); @@ -168,6 +169,7 @@ static inline bool pm_runtime_suspended_if_enabled(struct device *dev) { return static inline bool pm_runtime_enabled(struct device *dev) { return false; } static inline void pm_runtime_no_callbacks(struct device *dev) {} +static inline void pm_runtime_set_slave(struct device *dev) {} static inline void pm_runtime_irq_safe(struct device *dev) {} static inline bool pm_runtime_is_irq_safe(struct device *dev) { return false; } -- 2.2.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/