From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752678AbcF2AgE (ORCPT ); Tue, 28 Jun 2016 20:36:04 -0400 Received: from relmlor3.renesas.com ([210.160.252.173]:53926 "EHLO relmlie2.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752466AbcF2AgA (ORCPT ); Tue, 28 Jun 2016 20:36:00 -0400 X-IronPort-AV: E=Sophos;i="5.22,559,1449500400"; d="scan'";a="214456101" Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; Message-ID: <87eg7gg7ng.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto Subject: [PATCH v2 4/7] of_graph: add of_graph_get_port_parent() User-Agent: Wanderlust/2.15.9 Emacs/24.3 Mule/6.0 MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") To: Rob Herring , Mark Brown , Mark Brown , Laurent , Guennadi , Grant Likely , Frank Rowand CC: Linux-Kernel , Linux-DT , Linux-ALSA In-Reply-To: <87k2h8g7rr.wl%kuninori.morimoto.gx@renesas.com> References: <87k2h8g7rr.wl%kuninori.morimoto.gx@renesas.com> Content-Type: text/plain; charset="US-ASCII" Date: Wed, 29 Jun 2016 00:35:53 +0000 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: OS2PR01CA0014.jpnprd01.prod.outlook.com (10.161.74.152) To KL1PR06MB1702.apcprd06.prod.outlook.com (10.167.63.16) X-MS-Office365-Filtering-Correlation-Id: fe942b1b-497e-466c-10fa-08d39fb55472 X-Microsoft-Exchange-Diagnostics: 1;KL1PR06MB1702;2:T03KOBVzQ7vBzQpM+Wc3yi0oIvCPjT1TPu7PhJVOGRE8XYuRRDRQEbFL/yOOdI6W5LkzROfeMfgMA09aMewxfKv9OJzA/I5ZWXDOs49GtUETC1r2LJI8JjNYynR+3pkZnfmgwvvcJgOfXfKM91QuyPurkC2IAtPHb2jOM9cS73slmSAWu0LKMYvZGmr4jL2A;3:ePDX61ie4tEcxYlXUAiQiwz9++VuFIvSTxo3OfjnCL1jbcmXXCHUIvDnxLnbsaGGVHBzMJGR4YrZjbFP6MqvzmfuunzBfKiEoLoNQNywap0FFLg+oRqD3MXmZUAMBqrT X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:KL1PR06MB1702; X-Microsoft-Exchange-Diagnostics: 1;KL1PR06MB1702;25:grS+kuGPTAADXwJ1acUKy9aEx1Yhm1oKot+TrDY0i3mJ87lakNS41S5F2pDMHkgOK3OLj78lcD0oiWteYm48e8BJ3KKPAujfEwZIfvA2UJvRWjjrnvOCrAZ5ePe3PdfFaZtBHSv0Hh1JTqwkYTeKVpYvyc5hXEk9v+P0EUwOChcTC8ZkzEeDmue89MXNfF5hUAe4liY4FDgJ4P62D4Gdt09fsxkziU2UeovUBgB+CyQhYBWoUAaxNp0SIn8GJDdjllq/zxwi+iDohltyt4CGIBx7TvgvTxrzUc/d6nT2elVvJy/IO6GVGhjSVBQmavz99HHKJYmYca73jqyv10zUA4p9mrpxiFgCmC2vSroG4PqYNTvsqbdc+KiXmjG3YQpN+mnrjvnGh/dDQ0lFuJz02qIQMdXq2ubtu7lguoB8huakOdyI7k3JDTBuhVB2qc4wYfDZNBEPMKOpPDQHkmOFlNmrzpgvNAXzPW+QLj/4LKm1lMZQKp/X5HDabk985YfzLJm3FEmtJmcYUGC4EhaoJagNNoZkVUQun3xlwWBtcnTl1fjtLvqkumi0FOOZ4v5IqfDbSGIMOUSHb5kbejicOrnDfVnFhTrhQbUYCsejibKYRFDJ/9YW4RWW1KIclKKyvfOY0H36j/R3Hsz6RRgKgtrNnsoWsubTeNWJXk05HJmbL8u3Bsyd18eVh+pdoRu8vfu61FjDdDmZm208tozF+w==;31:ah6Zf2h0y4J4NZQSB1Uo+iO3hhb5RAmR99oN6DOEMFpE6rRGxpXUSemS91GcBpNgNgYYHH6wWyvgnDdswA8BCkNsb9eztkPRsWIBhRl06UNlr3F2n5/+1F/ui15RH1ZHvl5sru4pwCJmZ+ql8RQs/Qn59GE/jHJKMo56AQRgw+wnmXEX6gTOluuRy0vUuYHNrBgZeOTTmFcbV6cq6freiw== X-Microsoft-Exchange-Diagnostics: 1;KL1PR06MB1702;20:mOGAONGbrsnaG7svNZB2WcX8wh8s/jcwcnoKZOwvX7QzYNDoyEOfvcI9DMCVWo9QC1mj5iYk1cltIM78nNbCQpDjwHqFUVn7eAPuRbtp8qJnZtjagnBDchj3bLjSaGbuvaaTKIbZK8VsImKWmiZw97xnYIm3O3Y9WfKrxJQhkutWCtmjt4Gy/3YKOzCvaUoNN6hklY6TQ3msBLRic4UTahdH0QcfRspEStj6LGJt1XIHKBhB2KJPXIQjnHj73QorZTklCEa0A0/I1yJjXSSWQj7NFlfCaHrVvqSJzGGH+Tv09wWS9tomG5QmNdawPTbNvLU1An5r2lmGmJQgjNuQxvY58NrCoA+zdnbBOD/LzATWUGlNXV1LmAcnc4xShFEHC7hBktOQXrlMLGrkyI/unUozHSSCxrvV8dN5n5sZtNBYUXal7tJlWX4KydSfxQj/cXGljBgQ0LxtY95+huHeX16o4q4uG+ggMyEn1oMnNuFNF30iPJ3Pkqn1ORWQduuz;4:0ntQkM710P9y0tvISxOpCy4q8hNgokKmeeq2lYqeXXXcwTrskSR7cyXTY2xxmknHZCeQbihuqXfknDw71UR9MZMJXhXUE4H2e5LBRAmBXDi6W8eUJXg7fM/UY9sCCFbi/UR6sAbqXGeV0I4FQ9Q2ONe07jveOUFdxBQhNBaEvWsxVoyQ3WL3aUmzNfgWeZbm1eidxxqQ1GXEwzGY4cvBRDR+FMYj+/8N1SMR6rvf700rF0CxdT4MgCH7oAq7YQTB242qaIrxPxomPk1tFfo0z0XOjnYu/pWT5m8yjDwhb/+59Nbgmq5ZKwy7wjOBCRi6L+y+5A4jL46NHnNnGJt2JfTkvh20/7kW8piCCVhkrlqUkoRFkxFScdM/ppoGnmHwTFKWPuiMlu2vxlPH+7O+kA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:KL1PR06MB1702;BCL:0;PCL:0;RULEID:;SRVR:KL1PR06MB1702; X-Forefront-PRVS: 09888BC01D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(47776003)(66066001)(33646002)(4326007)(586003)(42186005)(6116002)(3846002)(189998001)(83506001)(77096005)(2950100001)(69596002)(23726003)(86362001)(53416004)(7846002)(229853001)(54356999)(50986999)(76176999)(8666005)(50466002)(8676002)(101416001)(7736002)(81156014)(305945005)(36756003)(68736007)(2906002)(92566002)(106356001)(4001350100001)(97736004)(19580405001)(46406003)(81166006)(5001770100001)(105586002)(19580395003)(7059030)(16060500001);DIR:OUT;SFP:1102;SCL:1;SRVR:KL1PR06MB1702;H:morimoto-PC.renesas.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;KL1PR06MB1702;23:7Okf6Aj37zGpIEcxPownnZVysUdKPa/kGYvjDXSzv?= =?us-ascii?Q?SCcJZsXTyHjdxqro8VezfiEumENrXVVuJzwha55MaARItA3PLBp0T5XzR4Rr?= =?us-ascii?Q?/tBuykt8PaUjmE3fmjtS4codJ/K2Ia58M/AW8dvQWCoLoVrY1y85Imd+U4eG?= =?us-ascii?Q?WG91tlUvgWUozgzmI9uwe/aGiudEbGfq3ZtT7xVPIAIpcxlhF3q3jq60VWcM?= =?us-ascii?Q?AeHCwxSNEtXn8k33GFRVLkOBFLtEWolfqQaI/aEtO0sAofojn+5F9hL5TWCJ?= =?us-ascii?Q?nOwTHP508wzqJqW32VMnyj6Wrqfm48V1WC4xLDMfUf1pGxEMPkCwY3j33Tj+?= =?us-ascii?Q?9671svdjDfyAxcuK1Ybt54+2X/to6iyXKqBZVMnRRyvzfO1I3PretrkSSC/3?= =?us-ascii?Q?nFd/BlX2sc38MdJPeoQWlOTmxZUvGupeXjsXV2u9MBoAYtX4pdK981TRFfzg?= =?us-ascii?Q?tOXrZr4XpnR6WzKNg8fI758UMEzgGFg1i6ohZBJccRY67bJkTz6HU6akYf/V?= =?us-ascii?Q?XsO36w9xcDaqAsGlEznQlH4ztbEYwOLNPxt2Nv3jTRY2sO57XrR5wWjla+aw?= =?us-ascii?Q?PM61hW4vamPBt1jokTzHdhyyVyfeNiTyMlV7M2DPch5JCo3neqGxd08+Y8AP?= =?us-ascii?Q?SjCBwQ66KtSXNW/WDoMxlwxbISSilxf2EBKIdLQldSJybDwDMppL2swEtbtL?= =?us-ascii?Q?otwwibLSuGFq7GT9pQR2aI3O36cdec+IGx/Mhm5GhLekBKB4P9gDxaEJSwlb?= =?us-ascii?Q?009SuEx2ugn5e49Wh8WhoFxgTofrgf3p+MzigmLOq73S0RNp4PvD2QyYAOtq?= =?us-ascii?Q?VD9c/el9yiosi43hYEN5ypptW6q8SmfauRxVALkbJEXPzJWtYa+eqeAva7FY?= =?us-ascii?Q?Vy3Xdb34CVOQObRM1wkGlZcZGm+qQ+zyu3F0vVCseZPxcaLbD//q4otGm1Wy?= =?us-ascii?Q?OxfswhAqT1vV6Xdv21ute65x1DjnOLlywF4wcMoAUXuBiv6w2eBS7GTFH7K6?= =?us-ascii?Q?Mczvm7bh0swaxlba4uYvpj+MxQAzQtK6lcbnCMdQLrcn5oxy4yoqFPZNvfwn?= =?us-ascii?Q?JzawfunPj2OMyRjDywEtdxW69M2Wg8Y6/6A2xZ0Oq2vWo5KT4jFetxaXUmfa?= =?us-ascii?Q?CtHT7WiOCmOfnWFEdQC7KHU/lWIGaxaabfyBzwD64+/1lDL2a9Pa9l9ZqUC4?= =?us-ascii?Q?JvwsJY6Gcp1UBm6WgawlLd97KsKx2T/C7+x?= X-Microsoft-Exchange-Diagnostics: 1;KL1PR06MB1702;6:tAwBGWqA8GjInNQ95Ry1Yj6aLuRX1AzufuztCMF0P0pXCt+LxC1nKKyCa0MbWOiLVP+NRxEvZX3e1OSOqgmLIGXrjppABtDJhD0Krrg41sJeeewngX3rxc1wqGPKOdEZnZ3rGTly9zo/vP6sObe65syZXeH5Gw43ML3+5vQFnvZbRCXhPEcMXV62ZuVyCwGf8AC93b9Lvt4M7tlz0r31D6x6x1/WwUla5/a83v0+jiEpJugHv/itrt6OKDwryYfmq4WYFV9RJtFNdTUaMLXW1AyxwkW/DbTIaT/e7XxAIN3lpPIHIaqyzRq1SlEcbmvVQuLseNQQ8w0beUzZT7TbDw==;5:d0etl7xviM/efYEVh8ERo2rkX0v2NxLGRBnWo3g6+lSljqnFNDXZkuOVLqnmAcY6c1+36gbF+7LE+XwYsBTLLBds4a8bIpI4Fy44CryAQF9N3AZFG2yikmopu1PCjlAT+4xkKJJ5MovB2Jl+Pnuq7g==;24:X6IsPkyfSBy1hoD7OYccR1P1729piQztfsvethskMLNAb87f7NgdrlTtpFFihVQcD1lU2tCs8/41N7A3nmuEYb+m5Cltk/B2um25wKBFbLs=;7:P6qd62TtgZgTg/fwDFVVLCS8tIJQF/VwDJ+ArporTMoJ6MQZLdT/dYmlNwKdEcAwwKi8jLHzx3bPUOh5DEjax+HmYCswn+6XohipyZ8z2wK6cfPjy2n2O2YPeX4+bxgR1IJ49+oLeVgUv/4RbYRIG5RjqpfBR4fmM3HaNZzxRRqjFYm6WFNKFmTbrU7YiBTbwHw5VDeQYtX/ETIMPbiZMRRSWN4E6BK14AvojsuKiYGJStO7A8P2XrJpm9NEbDtX SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;KL1PR06MB1702;20:dTsTYWdBn3BS5DdSTNtWIaUWLVaHqt1NByLK1GV8ZgaiDEeV3MccBriO7VlvHoIM6OwW4ZajdUd6/7LUnrFr85iS2VIzwIkEHgR8OUPz6emjTWpbP9c/UQObQ5VvPsKm4otylnNvzH/gSw5WSEkFzxy8SZfwH+zO6xrwZoc0R48= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 29 Jun 2016 00:35:53.2030 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: KL1PR06MB1702 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kuninori Morimoto Linux kernel already has of_graph_get_remote_port_parent(), but, sometimes we want to get own port parent. This patch adds of_graph_get_port_parent() Signed-off-by: Kuninori Morimoto --- v1 -> v2 - no change drivers/of/base.c | 30 ++++++++++++++++++++++-------- include/linux/of_graph.h | 7 +++++++ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/drivers/of/base.c b/drivers/of/base.c index 77c9e34..a059d59 100644 --- a/drivers/of/base.c +++ b/drivers/of/base.c @@ -2341,6 +2341,27 @@ struct device_node *of_graph_get_remote_endpoint(const struct device_node *node) EXPORT_SYMBOL(of_graph_get_remote_endpoint); /** + * of_graph_get_port_parent() - get port's parent node + * @node: pointer to a local endpoint device_node + * + * Return: device node associated with endpoint node linked + * to @node. Use of_node_put() on it when done. + */ +struct device_node *of_graph_get_port_parent(struct device_node *node) +{ + unsigned int depth; + + /* Walk 3 levels up only if there is 'ports' node. */ + for (depth = 3; depth && node; depth--) { + node = of_get_next_parent(node); + if (depth == 2 && of_node_cmp(node->name, "ports")) + break; + } + return node; +} +EXPORT_SYMBOL(of_graph_get_port_parent); + +/** * of_graph_get_remote_port_parent() - get remote port's parent node * @node: pointer to a local endpoint device_node * @@ -2351,18 +2372,11 @@ struct device_node *of_graph_get_remote_port_parent( const struct device_node *node) { struct device_node *np; - unsigned int depth; /* Get remote endpoint node. */ np = of_graph_get_remote_endpoint(node); - /* Walk 3 levels up only if there is 'ports' node. */ - for (depth = 3; depth && np; depth--) { - np = of_get_next_parent(np); - if (depth == 2 && of_node_cmp(np->name, "ports")) - break; - } - return np; + return of_graph_get_port_parent(np); } EXPORT_SYMBOL(of_graph_get_remote_port_parent); diff --git a/include/linux/of_graph.h b/include/linux/of_graph.h index 0a06441..0f362ed 100644 --- a/include/linux/of_graph.h +++ b/include/linux/of_graph.h @@ -53,6 +53,7 @@ struct device_node *of_graph_get_endpoint_by_regs( const struct device_node *parent, int port_reg, int reg); struct device_node *of_graph_get_remote_endpoint( const struct device_node *node); +struct device_node *of_graph_get_port_parent(struct device_node *node); struct device_node *of_graph_get_remote_port_parent( const struct device_node *node); struct device_node *of_graph_get_remote_port(const struct device_node *node); @@ -94,6 +95,12 @@ static inline struct device_node *of_graph_get_remote_endpoint( return NULL; } +static inline struct device_node *of_graph_get_port_parent( + struct device_node *node) +{ + return NULL; +} + static inline struct device_node *of_graph_get_remote_port_parent( const struct device_node *node) { -- 1.9.1