From patchwork Wed Sep 30 10:01:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 313883 Delivered-To: patch@linaro.org Received: by 2002:a05:6e02:1081:0:0:0:0 with SMTP id r1csp47976ilj; Wed, 30 Sep 2020 03:02:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyewZdrApairnZ99pZ1hOtJJ+bA/M4AE0VgbWgm/Quhl/UhnN10cT+AIirR0qwc4li3JyCx X-Received: by 2002:a17:906:4b18:: with SMTP id y24mr1909973eju.471.1601460157614; Wed, 30 Sep 2020 03:02:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1601460157; cv=none; d=google.com; s=arc-20160816; b=m2vpknems3sLanh3w7oGkY9ohW+tCdf4Tddw0zfdtpImRQa8zkhr1TU4XFzKdkK1HS ZOxek4I+kDJ8CdTAFAYbys8YQSMcdqSZ2cOCdc//95v6sH6JY/V0iguFVPOMrtdDBwCR 8MEhyie8uMIggEYMeJYhoS/mhs1WXbIp7MpnfBWutziygLzfQhu642kI+d/ICrX9E22F 0O9gr+JvnMLRc9QzPma5O0aCuZR/bWZfEG5p8SGv2e4BecRa7I5bB/g6SLxD3LJ/0qSi nKrFFVHCGRev22gAVAqz/aD8fI/T4Z/MmNpsfkbsDZJRHQiVqc0FqAC7YRVF0k5t1RCt kvKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=T0dKj6g81Qnwj432BHav6MjrRFfi+Md37xffdodCkkE=; b=BI5eNK3gJFOENU08c/3gMOwP3QmqJFEVYqYhgNqxNvGuwgZ4DWPj9qdw6AtxqU7knC 42pyyjTEppruuajZozdgBqX3OaQQ2vnlUHc2nJsWjgOhLdobv/K/6Tt9YyBF0jtr91WS O69cYoNtukayUokx8EYp3fXOFWwW37uBoPHdtjkIAdZpJcq5o52xOpSh4kkwnfFzzP1v rhaOQUODARRBAsCtSmoUW10MMUuhIgp3ZMLiuTTXKGt3s+XZWTc7fPYOcWCOnU/YfJyJ QwU80DbVe6xSICH4mGwJzwkHQCn96gaixyljKtQIFMtHSNxmhhYT0JOhYlYzVGIB8ybf yD1w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=MxiLmYiD; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o23si797422ejj.533.2020.09.30.03.02.37; Wed, 30 Sep 2020 03:02:37 -0700 (PDT) Received-SPF: pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=MxiLmYiD; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729368AbgI3KCg (ORCPT + 6 others); Wed, 30 Sep 2020 06:02:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729218AbgI3KCf (ORCPT ); Wed, 30 Sep 2020 06:02:35 -0400 Received: from mail-lf1-x142.google.com (mail-lf1-x142.google.com [IPv6:2a00:1450:4864:20::142]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 89F3DC061755 for ; Wed, 30 Sep 2020 03:02:34 -0700 (PDT) Received: by mail-lf1-x142.google.com with SMTP id w11so1416132lfn.2 for ; Wed, 30 Sep 2020 03:02:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=T0dKj6g81Qnwj432BHav6MjrRFfi+Md37xffdodCkkE=; b=MxiLmYiD2g1Tfkk52bZTsu5K2fku1e3naRGUyTyT5A5n4kWDCcBGiqciVaeToDwFUU xMasbvvH5zOrzAiPBZedWYYbqyG1yerwR2Q7FexbeCu2lQVfkxrjuvCowZJ48tnrNeRz EinRE1TzOR+iM51/mslIc5L+yp/mgwuBjXyuXA/AFFaAM6XxCWFwIl5EWNWI8cLYT2I4 s6ig9CxVxkYFPE1MfOOPKeKpuiSZWF/9qLxgQjHmeirYIxaPhExjlPJRpfb9lPFUOwpW M3NY7DAArKvORTqNaIN/cqG2iirRvx0tXIL6spxKgYg5l2kWSwuIIs0u/Dkc0q/FOftY 07kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=T0dKj6g81Qnwj432BHav6MjrRFfi+Md37xffdodCkkE=; b=RDJNaO0aPszBcubmIc1tH/VMqXiT13gYmobaBe1jOy5NoJsLO0TIzIYnmKWyJfyeQU Rx0n9sqBbj5sTAj/b20QX9tP3ydC9HkE5VoSy59XoYwAMIDgyWM1LgK4Wg7MciT8c1la SrvpTIP2lHpIuerLyNS/LYZhYCJCEU65OGVe2JEjBsdpJFGGFCGHN5i9JbC7kBXJx+nY X/7GEVjnceNEILoYYPpFMFx+HpwxN5+dDiq8Q+plSDbcgjz27gGaXMC0k4klFONwZkq4 TfWmX9ZY8NnJzhKJ/6IHGHjiZkvPOOAGFP2RIwSfjDbHPD8AKMr6FZT4tZguHcclVDYs e7tg== X-Gm-Message-State: AOAM531AgKLfFNIOnDeaR0bq0UV2WWfpDZQWacQWb28QVAQsDHJ1JSX2 LBCnDyRlNckglyDDY7Y/XNcAuA== X-Received: by 2002:a19:6a19:: with SMTP id u25mr558081lfu.415.1601460152981; Wed, 30 Sep 2020 03:02:32 -0700 (PDT) Received: from eriador.lan ([188.162.64.138]) by smtp.gmail.com with ESMTPSA id w4sm132479lff.231.2020.09.30.03.02.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 30 Sep 2020 03:02:32 -0700 (PDT) From: Dmitry Baryshkov To: Andy Gross , Bjorn Andersson , Rob Herring , Zhang Rui , Daniel Lezcano , Amit Kucheria , Jonathan Cameron , Hartmut Knaack , Lars-Peter Clausen , Peter Meerwald-Stadler Cc: linux-arm-msm@vger.kernel.org, linux-pm@vger.kernel.org, devicetree@vger.kernel.org, linux-iio@vger.kernel.org, Manivannan Sadhasivam , Jishnu Prakash , Jonathan Cameron Subject: [PATCH v6 06/10] iio: provide of_iio_channel_get_by_name() and devm_ version it Date: Wed, 30 Sep 2020 13:01:59 +0300 Message-Id: <20200930100203.1988374-7-dmitry.baryshkov@linaro.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200930100203.1988374-1-dmitry.baryshkov@linaro.org> References: <20200930100203.1988374-1-dmitry.baryshkov@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org There might be cases when the IIO channel is attached to the device subnode instead of being attached to the main device node. Allow drivers to query IIO channels by using device tree nodes. Signed-off-by: Dmitry Baryshkov Reviewed-by: Jonathan Cameron --- drivers/iio/inkern.c | 34 ++++++++++++++++++++++++++-------- include/linux/iio/consumer.h | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+), 8 deletions(-) -- 2.28.0 diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c index ede99e0d5371..8ff0ac472de3 100644 --- a/drivers/iio/inkern.c +++ b/drivers/iio/inkern.c @@ -180,8 +180,8 @@ static struct iio_channel *of_iio_channel_get(struct device_node *np, int index) return ERR_PTR(err); } -static struct iio_channel *of_iio_channel_get_by_name(struct device_node *np, - const char *name) +struct iio_channel *of_iio_channel_get_by_name(struct device_node *np, + const char *name) { struct iio_channel *chan = NULL; @@ -219,6 +219,7 @@ static struct iio_channel *of_iio_channel_get_by_name(struct device_node *np, return chan; } +EXPORT_SYMBOL_GPL(of_iio_channel_get_by_name); static struct iio_channel *of_iio_channel_get_all(struct device *dev) { @@ -261,12 +262,6 @@ static struct iio_channel *of_iio_channel_get_all(struct device *dev) #else /* CONFIG_OF */ -static inline struct iio_channel * -of_iio_channel_get_by_name(struct device_node *np, const char *name) -{ - return NULL; -} - static inline struct iio_channel *of_iio_channel_get_all(struct device *dev) { return NULL; @@ -382,6 +377,29 @@ struct iio_channel *devm_iio_channel_get(struct device *dev, } EXPORT_SYMBOL_GPL(devm_iio_channel_get); +struct iio_channel *devm_of_iio_channel_get_by_name(struct device *dev, + struct device_node *np, + const char *channel_name) +{ + struct iio_channel **ptr, *channel; + + ptr = devres_alloc(devm_iio_channel_free, sizeof(*ptr), GFP_KERNEL); + if (!ptr) + return ERR_PTR(-ENOMEM); + + channel = of_iio_channel_get_by_name(np, channel_name); + if (IS_ERR(channel)) { + devres_free(ptr); + return channel; + } + + *ptr = channel; + devres_add(dev, ptr); + + return channel; +} +EXPORT_SYMBOL_GPL(devm_of_iio_channel_get_by_name); + struct iio_channel *iio_channel_get_all(struct device *dev) { const char *name; diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h index c4118dcb8e05..0a90ba8fa1bb 100644 --- a/include/linux/iio/consumer.h +++ b/include/linux/iio/consumer.h @@ -13,6 +13,7 @@ struct iio_dev; struct iio_chan_spec; struct device; +struct device_node; /** * struct iio_channel - everything needed for a consumer to use a channel @@ -97,6 +98,41 @@ void iio_channel_release_all(struct iio_channel *chan); */ struct iio_channel *devm_iio_channel_get_all(struct device *dev); +/** + * of_iio_channel_get_by_name() - get description of all that is needed to access channel. + * @np: Pointer to consumer device tree node + * @consumer_channel: Unique name to identify the channel on the consumer + * side. This typically describes the channels use within + * the consumer. E.g. 'battery_voltage' + */ +#ifdef CONFIG_OF +struct iio_channel *of_iio_channel_get_by_name(struct device_node *np, const char *name); +#else +static inline struct iio_channel * +of_iio_channel_get_by_name(struct device_node *np, const char *name) +{ + return NULL; +} +#endif + +/** + * devm_of_iio_channel_get_by_name() - Resource managed version of of_iio_channel_get_by_name(). + * @dev: Pointer to consumer device. + * @np: Pointer to consumer device tree node + * @consumer_channel: Unique name to identify the channel on the consumer + * side. This typically describes the channels use within + * the consumer. E.g. 'battery_voltage' + * + * Returns a pointer to negative errno if it is not able to get the iio channel + * otherwise returns valid pointer for iio channel. + * + * The allocated iio channel is automatically released when the device is + * unbound. + */ +struct iio_channel *devm_of_iio_channel_get_by_name(struct device *dev, + struct device_node *np, + const char *consumer_channel); + struct iio_cb_buffer; /** * iio_channel_get_all_cb() - register callback for triggered capture