Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932658AbbERQYu (ORCPT ); Mon, 18 May 2015 12:24:50 -0400 Received: from mga02.intel.com ([134.134.136.20]:26832 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932230AbbERQYU (ORCPT ); Mon, 18 May 2015 12:24:20 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,453,1427785200"; d="scan'208";a="696657784" From: Daniel Baluta To: jic23@kernel.org, srinivas.pandruvada@linux.intel.com Cc: knaack.h@gmx.de, lars@metafoo.de, pmeerw@pmeerw.net, daniel.baluta@intel.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 1/2] iio: pm_runtime: Introduce PM runtime helper functions Date: Mon, 18 May 2015 19:25:27 +0300 Message-Id: <1431966328-11058-2-git-send-email-daniel.baluta@intel.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1431966328-11058-1-git-send-email-daniel.baluta@intel.com> References: <1431966328-11058-1-git-send-email-daniel.baluta@intel.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2316 Lines: 95 We need this in order to avoid reimplementing the same functions each time we add PM runtime support in a driver. Simple grep shows the following users: * accel/mma9551.c * accel/mmc9553.c * accel/kxcjk1013.c * accel/bmc150-accel.c * gyro/bmg160.c * imu/kmx61.c * common/hid-sensors. Signed-off-by: Daniel Baluta --- include/linux/iio/pm_runtime.h | 63 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 include/linux/iio/pm_runtime.h diff --git a/include/linux/iio/pm_runtime.h b/include/linux/iio/pm_runtime.h new file mode 100644 index 0000000..dc2bca7 --- /dev/null +++ b/include/linux/iio/pm_runtime.h @@ -0,0 +1,63 @@ +/* + * Industrial I/O runtime PM helper functions + * + * Copyright (c) 2015, Intel Corporation. + * + * This file is subject to the terms and conditions of version 2 of + * the GNU General Public License. See the file COPYING in the main + * directory of this archive for more details. + * + */ +#ifndef __IIO_PM_RUNTIME +#define __IIO_PM_RUNTIME + +#include + +static inline int iio_pm_runtime_setup(struct device *dev, int delay, + bool ignore_children) +{ + int ret; + + ret = pm_runtime_set_active(dev); + if (ret) + return ret; + + pm_suspend_ignore_children(dev, ignore_children); + pm_runtime_enable(dev); + pm_runtime_set_autosuspend_delay(dev, delay); + pm_runtime_use_autosuspend(dev); + + return 0; +} + +static inline void iio_pm_runtime_cleanup(struct device *dev) +{ + pm_runtime_disable(dev); + pm_runtime_set_suspended(dev); + pm_runtime_put_noidle(dev); +} + +static inline int iio_pm_runtime_set_power(struct device *dev, bool on) +{ +#ifdef CONFIG_PM + int ret; + + if (on) + ret = pm_runtime_get_sync(dev); + else { + pm_runtime_mark_last_busy(dev); + ret = pm_runtime_put_autosuspend(dev); + } + + if (ret < 0) { + dev_err(dev, "Failed: iio_set_power_state for %d\n", on); + if (on) + pm_runtime_put_noidle(dev); + + return ret; + } +#endif + return 0; +} + +#endif /* __IIO_PM_RUNTIME */ -- 1.9.1 -- 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/