From mboxrd@z Thu Jan 1 00:00:00 1970 From: a.hajda@samsung.com (Andrzej Hajda) Date: Tue, 23 Dec 2014 12:10:00 +0100 Subject: [PATCH v6 3/3] of: Add of_graph_get_port_by_id function In-Reply-To: <1419261091-29888-4-git-send-email-p.zabel@pengutronix.de> References: <1419261091-29888-1-git-send-email-p.zabel@pengutronix.de> <1419261091-29888-4-git-send-email-p.zabel@pengutronix.de> Message-ID: <54994D88.3000009@samsung.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Philipp, On 12/22/2014 04:11 PM, Philipp Zabel wrote: > This patch adds a function to get a port device tree node by port id, > or reg property value. > > Signed-off-by: Philipp Zabel > Acked-by: Laurent Pinchart > --- > drivers/of/base.c | 26 ++++++++++++++++++++++++++ > include/linux/of_graph.h | 7 +++++++ > 2 files changed, 33 insertions(+) > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index aac66df..c816299 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -2080,6 +2080,32 @@ int of_graph_parse_endpoint(const struct device_node *node, > EXPORT_SYMBOL(of_graph_parse_endpoint); > > /** > + * of_graph_get_port_by_id() - get the port matching a given id > + * @parent: pointer to the parent device node Here you have 'parent' and 'node' in the code. > + * @id: id of the port > + * > + * Return: A 'port' node pointer with refcount incremented. The caller > + * has to use of_node_put() on it when done. > + */ > +struct device_node *of_graph_get_port_by_id(struct device_node *node, u32 id) > +{ > + struct device_node *port; > + > + for_each_child_of_node(node, port) { > + u32 port_id = 0; > + > + if (of_node_cmp(port->name, "port") != 0) > + continue; > + of_property_read_u32(port, "reg", &port_id); > + if (id == port_id) > + return port; > + } > + > + return NULL; > +} Maybe I miss something but it does not handle optional 'ports' node. Regards Andrzej > +EXPORT_SYMBOL(of_graph_get_port_by_id); > + > +/** > * of_graph_get_next_endpoint() - get next endpoint node > * @parent: pointer to the parent device node > * @prev: previous endpoint node, or NULL to get first > diff --git a/include/linux/of_graph.h b/include/linux/of_graph.h > index e43442e..3c1c95a 100644 > --- a/include/linux/of_graph.h > +++ b/include/linux/of_graph.h > @@ -40,6 +40,7 @@ struct of_endpoint { > #ifdef CONFIG_OF > int of_graph_parse_endpoint(const struct device_node *node, > struct of_endpoint *endpoint); > +struct device_node *of_graph_get_port_by_id(struct device_node *node, u32 id); > struct device_node *of_graph_get_next_endpoint(const struct device_node *parent, > struct device_node *previous); > struct device_node *of_graph_get_remote_port_parent( > @@ -53,6 +54,12 @@ static inline int of_graph_parse_endpoint(const struct device_node *node, > return -ENOSYS; > } > > +static inline struct device_node *of_graph_get_port_by_id( > + struct device_node *node, u32 id) > +{ > + return NULL; > +} > + > static inline struct device_node *of_graph_get_next_endpoint( > const struct device_node *parent, > struct device_node *previous) > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrzej Hajda Subject: Re: [PATCH v6 3/3] of: Add of_graph_get_port_by_id function Date: Tue, 23 Dec 2014 12:10:00 +0100 Message-ID: <54994D88.3000009@samsung.com> References: <1419261091-29888-1-git-send-email-p.zabel@pengutronix.de> <1419261091-29888-4-git-send-email-p.zabel@pengutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mailout3.w1.samsung.com (mailout3.w1.samsung.com [210.118.77.13]) by gabe.freedesktop.org (Postfix) with ESMTP id B80506E3B4 for ; Tue, 23 Dec 2014 03:10:19 -0800 (PST) Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout3.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NH1003W38JXC590@mailout3.w1.samsung.com> for dri-devel@lists.freedesktop.org; Tue, 23 Dec 2014 11:14:21 +0000 (GMT) In-reply-to: <1419261091-29888-4-git-send-email-p.zabel@pengutronix.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Philipp Zabel , Grant Likely Cc: Mathieu Poirier , Greg Kroah-Hartman , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Laurent Pinchart , kernel@pengutronix.de, Russell King , linux-media@vger.kernel.org, Guennadi Liakhovetski , linux-arm-kernel@lists.infradead.org, Mauro Carvalho Chehab List-Id: dri-devel@lists.freedesktop.org SGkgUGhpbGlwcCwKCk9uIDEyLzIyLzIwMTQgMDQ6MTEgUE0sIFBoaWxpcHAgWmFiZWwgd3JvdGU6 Cj4gVGhpcyBwYXRjaCBhZGRzIGEgZnVuY3Rpb24gdG8gZ2V0IGEgcG9ydCBkZXZpY2UgdHJlZSBu b2RlIGJ5IHBvcnQgaWQsCj4gb3IgcmVnIHByb3BlcnR5IHZhbHVlLgo+IAo+IFNpZ25lZC1vZmYt Ynk6IFBoaWxpcHAgWmFiZWwgPHAuemFiZWxAcGVuZ3V0cm9uaXguZGU+Cj4gQWNrZWQtYnk6IExh dXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KPiAtLS0K PiAgZHJpdmVycy9vZi9iYXNlLmMgICAgICAgIHwgMjYgKysrKysrKysrKysrKysrKysrKysrKysr KysKPiAgaW5jbHVkZS9saW51eC9vZl9ncmFwaC5oIHwgIDcgKysrKysrKwo+ICAyIGZpbGVzIGNo YW5nZWQsIDMzIGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9iYXNl LmMgYi9kcml2ZXJzL29mL2Jhc2UuYwo+IGluZGV4IGFhYzY2ZGYuLmM4MTYyOTkgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9vZi9iYXNlLmMKPiArKysgYi9kcml2ZXJzL29mL2Jhc2UuYwo+IEBAIC0y MDgwLDYgKzIwODAsMzIgQEAgaW50IG9mX2dyYXBoX3BhcnNlX2VuZHBvaW50KGNvbnN0IHN0cnVj dCBkZXZpY2Vfbm9kZSAqbm9kZSwKPiAgRVhQT1JUX1NZTUJPTChvZl9ncmFwaF9wYXJzZV9lbmRw b2ludCk7Cj4gIAo+ICAvKioKPiArICogb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQoKSAtIGdldCB0 aGUgcG9ydCBtYXRjaGluZyBhIGdpdmVuIGlkCj4gKyAqIEBwYXJlbnQ6IHBvaW50ZXIgdG8gdGhl IHBhcmVudCBkZXZpY2Ugbm9kZQoKSGVyZSB5b3UgaGF2ZSAncGFyZW50JyBhbmQgJ25vZGUnIGlu IHRoZSBjb2RlLgoKPiArICogQGlkOiBpZCBvZiB0aGUgcG9ydAo+ICsgKgo+ICsgKiBSZXR1cm46 IEEgJ3BvcnQnIG5vZGUgcG9pbnRlciB3aXRoIHJlZmNvdW50IGluY3JlbWVudGVkLiBUaGUgY2Fs bGVyCj4gKyAqIGhhcyB0byB1c2Ugb2Zfbm9kZV9wdXQoKSBvbiBpdCB3aGVuIGRvbmUuCj4gKyAq Lwo+ICtzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKHN0cnVjdCBk ZXZpY2Vfbm9kZSAqbm9kZSwgdTMyIGlkKQo+ICt7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBv cnQ7Cj4gKwo+ICsJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShub2RlLCBwb3J0KSB7Cj4gKwkJdTMy IHBvcnRfaWQgPSAwOwo+ICsKPiArCQlpZiAob2Zfbm9kZV9jbXAocG9ydC0+bmFtZSwgInBvcnQi KSAhPSAwKQo+ICsJCQljb250aW51ZTsKPiArCQlvZl9wcm9wZXJ0eV9yZWFkX3UzMihwb3J0LCAi cmVnIiwgJnBvcnRfaWQpOwo+ICsJCWlmIChpZCA9PSBwb3J0X2lkKQo+ICsJCQlyZXR1cm4gcG9y dDsKPiArCX0KPiArCj4gKwlyZXR1cm4gTlVMTDsKPiArfQoKCk1heWJlIEkgbWlzcyBzb21ldGhp bmcgYnV0IGl0IGRvZXMgbm90IGhhbmRsZSBvcHRpb25hbCAncG9ydHMnIG5vZGUuCgpSZWdhcmRz CkFuZHJ6ZWoKCgo+ICtFWFBPUlRfU1lNQk9MKG9mX2dyYXBoX2dldF9wb3J0X2J5X2lkKTsKPiAr Cj4gKy8qKgo+ICAgKiBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludCgpIC0gZ2V0IG5leHQgZW5k cG9pbnQgbm9kZQo+ICAgKiBAcGFyZW50OiBwb2ludGVyIHRvIHRoZSBwYXJlbnQgZGV2aWNlIG5v ZGUKPiAgICogQHByZXY6IHByZXZpb3VzIGVuZHBvaW50IG5vZGUsIG9yIE5VTEwgdG8gZ2V0IGZp cnN0Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2ZfZ3JhcGguaCBiL2luY2x1ZGUvbGlu dXgvb2ZfZ3JhcGguaAo+IGluZGV4IGU0MzQ0MmUuLjNjMWM5NWEgMTAwNjQ0Cj4gLS0tIGEvaW5j bHVkZS9saW51eC9vZl9ncmFwaC5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9vZl9ncmFwaC5oCj4g QEAgLTQwLDYgKzQwLDcgQEAgc3RydWN0IG9mX2VuZHBvaW50IHsKPiAgI2lmZGVmIENPTkZJR19P Rgo+ICBpbnQgb2ZfZ3JhcGhfcGFyc2VfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRldmljZV9ub2Rl ICpub2RlLAo+ICAJCQkJc3RydWN0IG9mX2VuZHBvaW50ICplbmRwb2ludCk7Cj4gK3N0cnVjdCBk ZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQoc3RydWN0IGRldmljZV9ub2RlICpu b2RlLCB1MzIgaWQpOwo+ICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dldF9uZXh0X2Vu ZHBvaW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LAo+ICAJCQkJCXN0cnVjdCBk ZXZpY2Vfbm9kZSAqcHJldmlvdXMpOwo+ICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2dyYXBoX2dl dF9yZW1vdGVfcG9ydF9wYXJlbnQoCj4gQEAgLTUzLDYgKzU0LDEyIEBAIHN0YXRpYyBpbmxpbmUg aW50IG9mX2dyYXBoX3BhcnNlX2VuZHBvaW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9k ZSwKPiAgCXJldHVybiAtRU5PU1lTOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBk ZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X3BvcnRfYnlfaWQoCj4gKwkJCQkJc3RydWN0IGRldmlj ZV9ub2RlICpub2RlLCB1MzIgaWQpCj4gK3sKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICBz dGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9p bnQoCj4gIAkJCQkJY29uc3Qgc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsCj4gIAkJCQkJc3Ry dWN0IGRldmljZV9ub2RlICpwcmV2aW91cykKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mailout3.w1.samsung.com ([210.118.77.13]:60537 "EHLO mailout3.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752026AbaLWLKU (ORCPT ); Tue, 23 Dec 2014 06:10:20 -0500 Message-id: <54994D88.3000009@samsung.com> Date: Tue, 23 Dec 2014 12:10:00 +0100 From: Andrzej Hajda MIME-version: 1.0 To: Philipp Zabel , Grant Likely Cc: Mathieu Poirier , Greg Kroah-Hartman , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Laurent Pinchart , kernel@pengutronix.de, Russell King , Mauro Carvalho Chehab , Guennadi Liakhovetski , linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Subject: Re: [PATCH v6 3/3] of: Add of_graph_get_port_by_id function References: <1419261091-29888-1-git-send-email-p.zabel@pengutronix.de> <1419261091-29888-4-git-send-email-p.zabel@pengutronix.de> In-reply-to: <1419261091-29888-4-git-send-email-p.zabel@pengutronix.de> Content-type: text/plain; charset=utf-8 Content-transfer-encoding: 7bit Sender: linux-media-owner@vger.kernel.org List-ID: Hi Philipp, On 12/22/2014 04:11 PM, Philipp Zabel wrote: > This patch adds a function to get a port device tree node by port id, > or reg property value. > > Signed-off-by: Philipp Zabel > Acked-by: Laurent Pinchart > --- > drivers/of/base.c | 26 ++++++++++++++++++++++++++ > include/linux/of_graph.h | 7 +++++++ > 2 files changed, 33 insertions(+) > > diff --git a/drivers/of/base.c b/drivers/of/base.c > index aac66df..c816299 100644 > --- a/drivers/of/base.c > +++ b/drivers/of/base.c > @@ -2080,6 +2080,32 @@ int of_graph_parse_endpoint(const struct device_node *node, > EXPORT_SYMBOL(of_graph_parse_endpoint); > > /** > + * of_graph_get_port_by_id() - get the port matching a given id > + * @parent: pointer to the parent device node Here you have 'parent' and 'node' in the code. > + * @id: id of the port > + * > + * Return: A 'port' node pointer with refcount incremented. The caller > + * has to use of_node_put() on it when done. > + */ > +struct device_node *of_graph_get_port_by_id(struct device_node *node, u32 id) > +{ > + struct device_node *port; > + > + for_each_child_of_node(node, port) { > + u32 port_id = 0; > + > + if (of_node_cmp(port->name, "port") != 0) > + continue; > + of_property_read_u32(port, "reg", &port_id); > + if (id == port_id) > + return port; > + } > + > + return NULL; > +} Maybe I miss something but it does not handle optional 'ports' node. Regards Andrzej > +EXPORT_SYMBOL(of_graph_get_port_by_id); > + > +/** > * of_graph_get_next_endpoint() - get next endpoint node > * @parent: pointer to the parent device node > * @prev: previous endpoint node, or NULL to get first > diff --git a/include/linux/of_graph.h b/include/linux/of_graph.h > index e43442e..3c1c95a 100644 > --- a/include/linux/of_graph.h > +++ b/include/linux/of_graph.h > @@ -40,6 +40,7 @@ struct of_endpoint { > #ifdef CONFIG_OF > int of_graph_parse_endpoint(const struct device_node *node, > struct of_endpoint *endpoint); > +struct device_node *of_graph_get_port_by_id(struct device_node *node, u32 id); > struct device_node *of_graph_get_next_endpoint(const struct device_node *parent, > struct device_node *previous); > struct device_node *of_graph_get_remote_port_parent( > @@ -53,6 +54,12 @@ static inline int of_graph_parse_endpoint(const struct device_node *node, > return -ENOSYS; > } > > +static inline struct device_node *of_graph_get_port_by_id( > + struct device_node *node, u32 id) > +{ > + return NULL; > +} > + > static inline struct device_node *of_graph_get_next_endpoint( > const struct device_node *parent, > struct device_node *previous) >