Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp71360imm; Tue, 19 Jun 2018 14:30:35 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJ8vrjwmGrvojLaeVw3n8AnZ+uuQs1uhKOlpR0oxaU1AhA3R9bvacbwIvQtkYNhBqCj6Xhv X-Received: by 2002:a17:902:9a95:: with SMTP id w21-v6mr20643967plp.168.1529443835422; Tue, 19 Jun 2018 14:30:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1529443835; cv=none; d=google.com; s=arc-20160816; b=Vu+QGD9V0P5+wZZ+07KUoAzWxTYGP8Te2fu5YmyGS3jjj+YhiMXdWbsXT9YaFnDFwB uCFe1Y4TEkGf0L/o1ZwtuS+tpbHq0LZSVWt+WjAE2l1+JIbPrLmmMgvLZ44PEnyKWKX5 /Sy1eFGnk5kPmWdkZVyECQhR3n9tC0uqdmc+ICp6Zptfk/pv1OdYT/KqRC96ZpwFTook 1tF4URLCaYuXQZdjRRk2xyHjFbgfu61RxXYzQmuhAfA+qQN6+myyTeGbkgZ8pLqGL/zj b+Jy9V6YnbB1q3s63JckvzJKUquyIKfo2e7oE1RrW0hNaLM7RLfQD4Poet5obpvLZHom 4KoQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=aB26fuuA5HQCXxZb0QfN+d4WTQJCtwOVFmPpgKtKRtY=; b=YLNOvYAih88GWc56s/fqDLEz53fBIowwQRaVZpQ8AXrhb0t8rpobSN3PMmkM1zdQ5V IaTBQkF6r2CQtVIwPVllLZ/xlrNLhr7YIzYq5nSYsswgE4OR0RbnSw1+oJvs3wntb8QM CmcpQYlbuKffHgRFQEWfVvF3eirlraPuuw4fp8Uzj6wmKBLT1rwHhveUwfbVkAhfjPqr d0+iYXhz5cw1PpZMocaWH2xBxW7Agazguqg5+cRAktBAz7u/qF3G0oyFHcV3Uhgx/uv1 fpEO2UNJoPWPEXdRiylxn7AQO2qgAz8jWfuynZIgkbpHVi8U6cJOUblMTQE781ar+Scj +qpw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 31-v6si607737pli.45.2018.06.19.14.30.05; Tue, 19 Jun 2018 14:30:35 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757425AbeFSV2B (ORCPT + 99 others); Tue, 19 Jun 2018 17:28:01 -0400 Received: from mail.bugwerft.de ([46.23.86.59]:50662 "EHLO mail.bugwerft.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757354AbeFSV14 (ORCPT ); Tue, 19 Jun 2018 17:27:56 -0400 Received: from localhost.localdomain (pD95EF733.dip0.t-ipconnect.de [217.94.247.51]) by mail.bugwerft.de (Postfix) with ESMTPSA id D03D828A290; Tue, 19 Jun 2018 21:24:50 +0000 (UTC) From: Daniel Mack To: zbr@ioremap.net, robh+dt@kernel.org, mark.rutland@arm.com, szabolcs.gyurko@tlt.hu Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Daniel Mack Subject: [PATCH RFC 3/4] w1: core: provide helper to look up w1 slaves through devicetree nodes Date: Tue, 19 Jun 2018 23:27:43 +0200 Message-Id: <20180619212744.794-4-daniel@zonque.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180619212744.794-1-daniel@zonque.org> References: <20180619212744.794-1-daniel@zonque.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds a helper called w1_of_get_slave() that allows users to refer to w1 slave devices through phandles in devicetree nodes. The implementation walks all master devices and all their slaves in order to find the right slave device. The API is stubbed out for !CONFIG_OF. Signed-off-by: Daniel Mack --- drivers/w1/w1.c | 37 +++++++++++++++++++++++++++++++++++++ include/linux/w1.h | 11 +++++++++++ 2 files changed, 48 insertions(+) diff --git a/drivers/w1/w1.c b/drivers/w1/w1.c index dc73d8c08438..693aa9be2cd9 100644 --- a/drivers/w1/w1.c +++ b/drivers/w1/w1.c @@ -1185,6 +1185,43 @@ int w1_process(void *data) return 0; } +#ifdef CONFIG_OF +struct w1_slave *w1_of_get_slave(struct device_node *np, + const char *name, int index) +{ + struct device_node *slave_node; + struct w1_master *master; + struct w1_slave *sl; + bool found = false; + + slave_node = of_parse_phandle(np, name, index); + if (!slave_node) + return NULL; + + mutex_lock(&w1_mlock); + list_for_each_entry(master, &w1_masters, w1_master_entry) { + mutex_lock(&master->list_mutex); + list_for_each_entry(sl, &master->slist, w1_slave_entry) { + if (sl->dev.of_node == slave_node) { + found = true; + break; + } + } + mutex_unlock(&master->list_mutex); + + if (found) + break; + } + mutex_unlock(&w1_mlock); + + if (!found) + return NULL; + + return sl; +} +EXPORT_SYMBOL_GPL(w1_of_get_slave); +#endif /* CONFIG_OF */ + static int __init w1_init(void) { int retval; diff --git a/include/linux/w1.h b/include/linux/w1.h index 3111585c371f..c44dffe782f0 100644 --- a/include/linux/w1.h +++ b/include/linux/w1.h @@ -322,6 +322,17 @@ static inline struct w1_master* dev_to_w1_master(struct device *dev) return container_of(dev, struct w1_master, dev); } +#ifdef CONFIG_OF +struct w1_slave *w1_of_get_slave(struct device_node *np, + const char *name, int index); +#else +static inline struct w1_slave *w1_of_get_slave(struct device_node *np, + const char *name, int index) +{ + return NULL; +} +#endif /* CONFIG_OF */ + #endif /* __KERNEL__ */ #endif /* __LINUX_W1_H */ -- 2.17.1