From patchwork Fri Oct 9 15:44:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Baryshkov X-Patchwork-Id: 317551 Delivered-To: patch@linaro.org Received: by 2002:a92:d603:0:0:0:0:0 with SMTP id w3csp2426853ilm; Fri, 9 Oct 2020 08:45:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwJE5D3DOTMAeaRJKXFIIqARFNhS3NunB2JVWdPBPPRPGtsVKOsRcUk9trIC6eR9vHDOO0T X-Received: by 2002:a17:906:dc5:: with SMTP id p5mr15732394eji.116.1602258328999; Fri, 09 Oct 2020 08:45:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602258328; cv=none; d=google.com; s=arc-20160816; b=RWCUquR8zjUadSTfv/AJZ/+CZMazy/3mD3DIWRPup/Ee4y8HKMiMY4qRjrKC66Wb/I Z75uc8wN/uaZm/x8XFPd2XN3BxQwl9ag5r3tEx9Qe8vJcfFOKTEIfB8iWZHVloT/bXas KQrowe6lHVAfwLdtd3ON3H3u839DPVpd5YkeJV2hkzBzwylpHg0imvztIMdhswhwEfuE qcNKJaLT5rroHsUYSI7avqTin7fsCXhimk0BDUKk9TjD3c9PXsXtPu0KnR+2ThI4DJb6 5uMmCwBCRJlogdxvjxEwTELWRqNDsD4EvuKizISbvWTuOp9wZcL+BT7TO9vm06+nQ+Wy /gFg== 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=eq6Rl9D4r7ykBvZhMZXQ4Rm1iI1hZaqPjSQYQzcwj/MzZLbPhpUFAogvWxyISh4NXV l5X31hVI18Z1+p387w2PikhQsfmiTaVCj5+Hph8t65I/p+JPbg7mbVCPMKcga6KCXnmE ZIcuD2K3efAY1mBkJ/ZBV4fX6SFqK+0iTy2PhoLbt68qXl+2wOmyYIoSsWtsX7iqTbYF LKfeCDpclTPjx31lA63JlDOKf9my2ewE7NvtcaaHIj16+tjyXAbIWSilFkeA9uIWiY5c LGkmBn2ds7OnwDqAz1l9HfGRWiWW3IjFPG2AFWlkcRkDR51H6OAw6hd1fSVCfOL56cgD IjfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=QQ8PPP7Y; spf=pass (google.com: domain of linux-pm-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-pm-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 d3si6328708ejy.232.2020.10.09.08.45.28; Fri, 09 Oct 2020 08:45:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-pm-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=QQ8PPP7Y; spf=pass (google.com: domain of linux-pm-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-pm-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 S2389457AbgJIPp0 (ORCPT + 9 others); Fri, 9 Oct 2020 11:45:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36976 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389442AbgJIPp0 (ORCPT ); Fri, 9 Oct 2020 11:45:26 -0400 Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A4992C0613D6 for ; Fri, 9 Oct 2020 08:45:25 -0700 (PDT) Received: by mail-lj1-x242.google.com with SMTP id m16so10068144ljo.6 for ; Fri, 09 Oct 2020 08:45:25 -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=QQ8PPP7YlO0/UHr8jlsho9AweoMKViXRz4pTkwW3SQEUjoeFkUOxIDdg/IgaWdzH+S rcavuFiKA0oY/ZXTGUa17BQlobuM96TWx9uzC4NRKcvS74imqyBOceLTa+fQNTTanZMw mSI4LlNoueyl3UwjM3odRql8CSWc13kc6AJHv5l/FBUY4HFOF0uN1D3iJrgaydgpksZj IpjdmPqLCpNCDabgwbHVpsDDbeIVofaBskLzWKjAt27QqT9ZRsHHOzcUYSQDbRPs2akP oC0700AtbNXEmGrlYd0TBCfdvgIEtBfGcdwzZ78pPZnmMV4X3qs38hOVyUnTAaEprRB5 3rVw== 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=N/tOSAlHTbnJESlOWC06+vqj5hHq4AF+TFUZNEhyPUESdKQkPmxtoIY2KNN2Omu+FO y30u92YLdXzdSKkNcyAsLl2OpdpIFdf4NfKFA9ONpwbqIihLjDCR357K+xkRJfAAOChp ttue+6Y8gs+l3fIqURzxjsu9aFxBY916qEKOECWHlksCmdLmyVUzGW9oYzIWEps+IG9Y dY0kazJQniyfRu6EeOlGX1wKyk74wmyBa49vDln4+FpCEGXF/wUPEf7aoNKrsGf2FwXS /yRQzxpuhiP1THC2vRDDgP41asAot7F3sypykvZcIt173QO7Fv+ZfSm3e4RfUvJLSdIV ecIA== X-Gm-Message-State: AOAM53232XYx08zePXNKIqgEt3hPAXqGTY7KW2H91xspjN+y/Fk4yd5S YlPvdOCSQ34GOVuMSoiqx1f7OEoLJY21A/sr X-Received: by 2002:a2e:7c09:: with SMTP id x9mr5102211ljc.192.1602258323973; Fri, 09 Oct 2020 08:45:23 -0700 (PDT) Received: from eriador.lan ([188.162.65.231]) by smtp.gmail.com with ESMTPSA id r4sm1505597lfc.162.2020.10.09.08.45.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2020 08:45:22 -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 v8 07/11] iio: provide of_iio_channel_get_by_name() and devm_ version it Date: Fri, 9 Oct 2020 18:44:55 +0300 Message-Id: <20201009154459.106189-8-dmitry.baryshkov@linaro.org> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201009154459.106189-1-dmitry.baryshkov@linaro.org> References: <20201009154459.106189-1-dmitry.baryshkov@linaro.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@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