Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp3076083imm; Fri, 20 Jul 2018 09:42:54 -0700 (PDT) X-Google-Smtp-Source: AAOMgpeia56+ipqwDoB1gYOIVn3SAalY6ZYRxFbYKK8R0o9gcp9YT4MtT+6435h4tz/R4zTw1RuU X-Received: by 2002:a62:b917:: with SMTP id z23-v6mr2915704pfe.131.1532104974223; Fri, 20 Jul 2018 09:42:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532104974; cv=none; d=google.com; s=arc-20160816; b=rzYSYZhlhzLAwJm3l2KANb/0fEYL0ZddOELdmGh8aYBDciqgUfJfxZHRliYq/EwlxX SUGmBKrzTVG+rB6sgklFKgP4eqWgLwUXdhuqwje3mbkQf6JcaGKD4eksHfxOFYAlkEHR yT2tw+B/M9qS0WoTQoBun6rOO656+nk1FtBXSOtfFvlepmS6pSrNjyn8XiVqQOGNNH6c C1yZycvzfoTyTjwSUmn+RgIqDipeVY+RpcHFpuiTIxhzyLgVOE0CZuJPAT6RRGJHvtRz 9VxIWiUtnHdAxtaa0eUdjS9iuzi4skb2ZB/wllV3HeycsEQglsFEzfSbxu/xJ2Js2w6c WlPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=MQtHHi598tB1Mbw9CTb+/zGfzPe6SXwDat3aLLMqH+I=; b=sVskowyYRoRztZ/KCe+QjqMS/437C3+OJhfyDC3isBbfYoSP7ChxHpnhqt8iLVeqeU O6P9Rv57iiHTp3SJ0D5PgEuO5QGRgZb6l5YMK42M6NiEY//4NbskR+V2d6KuoCHZ6Y/d x0IN/jg+uGXiX9HJS0byQEIJh12aeZIifc66balS8Nl2AZsBeWDNpSQgs75cb3bHoLRE ZXZ0N2qWNVzRw5BCNFuUJwmtZ9IhF9EIkToI3OYjURGIn5UR730nj3RRLJFZzc9J0zNr 7lSKdoqkveGI7NY6S2asbvhGiF3fsHSRBqFZ4uh3mmZ0fxLwFy9NAdODMgps0hsbAnQd kHfg== 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 n125-v6si2110192pga.376.2018.07.20.09.42.38; Fri, 20 Jul 2018 09:42:54 -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 S2387855AbeGTRbJ (ORCPT + 99 others); Fri, 20 Jul 2018 13:31:09 -0400 Received: from smtprz14.163.net ([106.3.154.247]:1339 "EHLO smtp.tom.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1732826AbeGTRbJ (ORCPT ); Fri, 20 Jul 2018 13:31:09 -0400 Received: from antispam1.tom.com (unknown [172.25.16.55]) by freemail01.tom.com (Postfix) with ESMTP id 5E8571C80DC0 for ; Fri, 20 Jul 2018 23:52:31 +0800 (CST) Received: from antispam1.tom.com (antispam1.tom.com [127.0.0.1]) by antispam1.tom.com (Postfix) with ESMTP id 4EF7D1001293 for ; Fri, 20 Jul 2018 23:52:31 +0800 (CST) X-Virus-Scanned: Debian amavisd-new at antispam1.tom.com Received: from antispam1.tom.com ([127.0.0.1]) by antispam1.tom.com (antispam1.tom.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JovWPpNZc2f4 for ; Fri, 20 Jul 2018 23:52:30 +0800 (CST) Received: from localhost (unknown [110.184.155.205]) by antispam1.tom.com (Postfix) with ESMTPA id 013F01001225; Fri, 20 Jul 2018 23:52:29 +0800 (CST) From: Liu Xiang To: robh+dt@kernel.org Cc: frowand.list@gmail.com, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Liu Xiang Subject: [PATCH] of: irq: Add a helper function for irq_of_parse_and_map Date: Fri, 20 Jul 2018 23:52:21 +0800 Message-Id: <1532101941-13130-1-git-send-email-liu.xiang6@zte.com.cn> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Implement a resource managed irq_of_parse_and_map function. Signed-off-by: Liu Xiang --- drivers/of/irq.c | 38 ++++++++++++++++++++++++++++++++++++++ include/linux/of_irq.h | 7 +++++++ 2 files changed, 45 insertions(+) diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 02ad93a..947fe41 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -45,6 +45,44 @@ unsigned int irq_of_parse_and_map(struct device_node *dev, int index) } EXPORT_SYMBOL_GPL(irq_of_parse_and_map); +static void devm_irq_dispose_mapping(struct device *dev, void *res) +{ + irq_dispose_mapping(*(unsigned int *)res); +} + +/** + * devm_irq_of_parse_and_map - Resource-managed irq_of_parse_and_map + * @dev: Device whose interrupt is to be mapped + * @index: Index of the interrupt to map + * + * Managed irq_of_parse_and_map. Irq mapping created by this function is + * automatically disposed on driver detach. + * + * RETURNS: + * Returns a linux irq number on success, 0 on failure. + */ +unsigned int devm_irq_of_parse_and_map(struct device *dev, int index) +{ + struct device_node *np = dev->of_node; + unsigned int *dr = NULL; + unsigned int rc = 0; + + dr = devres_alloc(devm_irq_dispose_mapping, sizeof(unsigned int), + GFP_KERNEL); + if (!dr) + return 0; + + rc = irq_of_parse_and_map(np, index); + if (rc > 0) { + *dr = rc; + devres_add(dev, dr); + } else + devres_free(dr); + + return rc; +} +EXPORT_SYMBOL_GPL(devm_irq_of_parse_and_map); + /** * of_irq_find_parent - Given a device node, find its interrupt parent node * @child: pointer to device node diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h index 1214cab..1ac26ff 100644 --- a/include/linux/of_irq.h +++ b/include/linux/of_irq.h @@ -55,6 +55,7 @@ extern struct irq_domain *of_msi_map_get_device_domain(struct device *dev, u32 rid); extern void of_msi_configure(struct device *dev, struct device_node *np); u32 of_msi_map_rid(struct device *dev, struct device_node *msi_np, u32 rid_in); +extern unsigned int devm_irq_of_parse_and_map(struct device *dev, int index); #else static inline int of_irq_count(struct device_node *dev) { @@ -97,6 +98,12 @@ static inline u32 of_msi_map_rid(struct device *dev, { return rid_in; } + +static inline unsigned int devm_irq_of_parse_and_map(struct device *dev, + int index) +{ + return 0; +} #endif #if defined(CONFIG_OF_IRQ) || defined(CONFIG_SPARC) -- 1.9.1