From patchwork Sat Sep 13 08:50:50 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Abhilash Kesavan X-Patchwork-Id: 4899411 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 763A9BEEA5 for ; Sat, 13 Sep 2014 08:51:25 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 939F220200 for ; Sat, 13 Sep 2014 08:51:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 88C66201D3 for ; Sat, 13 Sep 2014 08:51:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751876AbaIMIvV (ORCPT ); Sat, 13 Sep 2014 04:51:21 -0400 Received: from mailout1.samsung.com ([203.254.224.24]:63392 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751779AbaIMIvJ (ORCPT ); Sat, 13 Sep 2014 04:51:09 -0400 Received: from epcpsbgr2.samsung.com (u142.gpu120.samsung.co.kr [203.254.230.142]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NBU005F90L7LP60@mailout1.samsung.com>; Sat, 13 Sep 2014 17:51:07 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.125]) by epcpsbgr2.samsung.com (EPCPMTA) with SMTP id 19.8B.04049.B7504145; Sat, 13 Sep 2014 17:51:07 +0900 (KST) X-AuditID: cbfee68e-f79536d000000fd1-38-5414057b849c Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 57.68.05196.B7504145; Sat, 13 Sep 2014 17:51:07 +0900 (KST) Received: from abhilash-ubuntu.sisodomain.com ([107.108.73.92]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NBU002Z90KJ4U10@mmp1.samsung.com>; Sat, 13 Sep 2014 17:51:07 +0900 (KST) From: Abhilash Kesavan To: linux-arm-kernel@lists.infradead.org Cc: kesavan.abhilash@gmail.com, linux-samsung-soc@vger.kernel.org, catalin.marinas@arm.com, robh@kernel.org, devicetree@vger.kernel.org, tomasz.figa@gmail.com, linus.walleij@linaro.org, thomas.ab@samsung.com Subject: [PATCH 2/4] pinctrl: exynos: Add irq_chip instance for Exynos7 wakeup interrupts Date: Sat, 13 Sep 2014 14:20:50 +0530 Message-id: <1410598252-30931-4-git-send-email-a.kesavan@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1410598252-30931-1-git-send-email-a.kesavan@samsung.com> References: <1410598252-30931-1-git-send-email-a.kesavan@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrJLMWRmVeSWpSXmKPExsWyRsSkVreaVSTE4GmPuMX7ZT2MFvOPnGO1 WPNXyWLKn+VMFpseX2O1mHF+H5PF/z072C06ljFarNr1h9GB02PNvDWMHjtn3WX32LSqk83j zrU9bB6bl9R79G1ZxejxeZNcAHsUl01Kak5mWWqRvl0CV8a5X29ZC9aqVpxZepqtgXGlfBcj B4eEgInEiVMeXYycQKaYxIV769lAbCGBpYwSy15mQMRNJH4vPMkMEV/EKNGyQKOLkQvI7mOS OLj+IgtIgk1AT2LBv69gRSICGhJTuh6zg9jMApcZJU5+rASxhQWiJV6d/AVWzyKgKvH64jtW EJtXwFVi+/JVLBD3KEjMmWQDEuYUcJN4/nED1F5XiWmz1rCA7JUQ2MQu0d69nh1ijoDEt8mH oHplJTYdYIa4WVLi4IobLBMYhRcwMqxiFE0tSC4oTkovMtIrTswtLs1L10vOz93ECIyB0/+e 9e1gvHnA+hCjAAejEg/viovCIUKsiWXFlbmHGE2BNkxklhJNzgdGWl5JvKGxmZGFqYmpsZG5 pZmSOG+C1M9gIYH0xJLU7NTUgtSi+KLSnNTiQ4xMHJxSDYxJ9yt4Z845eHn52kbt39FznQ8r qr4TPs9QfyXki2bR/b7p0cFf5s1sYLp9fuv9aYKzkmdfqiiun6VW0nwoIrJw/fwFDyZxLRXy b90s6nHv/9Kji3uPeFrn3hNcqrHATqHw748M/7qLfZndPiclJhjw2c41ktY+/Spui55JyZkl zzYUHH8Rv2ilEktxRqKhFnNRcSIA7QZgLHwCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrKIsWRmVeSWpSXmKPExsVy+t9jAd1qVpEQg1NHeC3eL+thtJh/5Byr xZq/ShZT/ixnstj0+BqrxYzz+5gs/u/ZwW7RsYzRYtWuP4wOnB5r5q1h9Ng56y67x6ZVnWwe d67tYfPYvKTeo2/LKkaPz5vkAtijGhhtMlITU1KLFFLzkvNTMvPSbZW8g+Od403NDAx1DS0t zJUU8hJzU22VXHwCdN0yc4AOU1IoS8wpBQoFJBYXK+nbYZoQGuKmawHTGKHrGxIE12NkgAYS 1jBmnPv1lrVgrWrFmaWn2RoYV8p3MXJySAiYSPxeeJIZwhaTuHBvPRuILSSwiFGiZYFGFyMX kN3HJHFw/UUWkASbgJ7Egn9fwRpEBDQkpnQ9ZgexmQUuM0qc/FgJYgsLREu8OvkLrJ5FQFXi 9cV3rCA2r4CrxPblq4DiHEDLFCTmTLIBCXMKuEk8/7iBGWKvq8S0WWtYJjDyLmBkWMUomlqQ XFCclJ5rpFecmFtcmpeul5yfu4kRHGXPpHcwrmqwOMQowMGoxMMbcF44RIg1say4MvcQowQH s5IIr8kUoBBvSmJlVWpRfnxRaU5q8SFGU6CjJjJLiSbnAxNAXkm8obGJuamxqaWJhYmZpZI4 78FW60AhgfTEktTs1NSC1CKYPiYOTqkGxtbWd39u9dkwlswMyS+LyOo9ucYhpWn3yrM/rDLv s/ye52TzP2idUpHWqdhspmyd4+xPtxa8M6n5unU1z99Thp1v7S/s3pmQdnmayKuyORe3vmJJ 5ai95PGzW/I3o2lv0wmxt/tZ989MiuFdMPkd6/V/Akc53PoMpErndVwSP/Nl2cbddtKpQUos xRmJhlrMRcWJAHQAlpzIAgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Exynos7 uses different offsets for wakeup interrupt configuration registers. So a new irq_chip instance for Exynos7 wakeup interrupts is added. The irq_chip selection is now based on the wakeup interrupt controller compatible string. Signed-off-by: Abhilash Kesavan Cc: Thomas Abraham Cc: Tomasz Figa Cc: Linus Walleij --- .../bindings/pinctrl/samsung-pinctrl.txt | 2 + drivers/pinctrl/samsung/pinctrl-exynos.c | 42 +++++++++++++++----- drivers/pinctrl/samsung/pinctrl-exynos.h | 3 ++ 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt b/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt index e82aaf4..f80519a 100644 --- a/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt +++ b/Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt @@ -136,6 +136,8 @@ B. External Wakeup Interrupts: For supporting external wakeup interrupts, a found on Samsung S3C64xx SoCs, - samsung,exynos4210-wakeup-eint: represents wakeup interrupt controller found on Samsung Exynos4210 and S5PC110/S5PV210 SoCs. + - samsung,exynos7-wakeup-eint: represents wakeup interrupt controller + found on Samsung Exynos7 SoC. - interrupt-parent: phandle of the interrupt parent to which the external wakeup interrupts are forwarded to. - interrupts: interrupt used by multiplexed wakeup interrupts. diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.c b/drivers/pinctrl/samsung/pinctrl-exynos.c index 3133a1e..fe15ab8 100644 --- a/drivers/pinctrl/samsung/pinctrl-exynos.c +++ b/drivers/pinctrl/samsung/pinctrl-exynos.c @@ -56,12 +56,6 @@ static struct samsung_pin_bank_type bank_type_alive = { .reg_offset = { 0x00, 0x04, 0x08, 0x0c, }, }; -/* list of external wakeup controllers supported */ -static const struct of_device_id exynos_wkup_irq_ids[] = { - { .compatible = "samsung,exynos4210-wakeup-eint", }, - { } -}; - static void exynos_irq_mask(struct irq_data *irqd) { struct irq_chip *chip = irq_data_get_irq_chip(irqd); @@ -328,9 +322,11 @@ static int exynos_wkup_irq_set_wake(struct irq_data *irqd, unsigned int on) /* * irq_chip for wakeup interrupts */ -static struct exynos_irq_chip exynos_wkup_irq_chip = { +static struct exynos_irq_chip exynos_wkup_irq_chip; + +static struct exynos_irq_chip exynos4210_wkup_irq_chip = { .chip = { - .name = "exynos_wkup_irq_chip", + .name = "exynos4210_wkup_irq_chip", .irq_unmask = exynos_irq_unmask, .irq_mask = exynos_irq_mask, .irq_ack = exynos_irq_ack, @@ -342,6 +338,29 @@ static struct exynos_irq_chip exynos_wkup_irq_chip = { .eint_pend = EXYNOS_WKUP_EPEND_OFFSET, }; +static struct exynos_irq_chip exynos7_wkup_irq_chip = { + .chip = { + .name = "exynos7_wkup_irq_chip", + .irq_unmask = exynos_irq_unmask, + .irq_mask = exynos_irq_mask, + .irq_ack = exynos_irq_ack, + .irq_set_type = exynos_irq_set_type, + .irq_set_wake = exynos_wkup_irq_set_wake, + }, + .eint_con = EXYNOS7_WKUP_ECON_OFFSET, + .eint_mask = EXYNOS7_WKUP_EMASK_OFFSET, + .eint_pend = EXYNOS7_WKUP_EPEND_OFFSET, +}; + +/* list of external wakeup controllers supported */ +static const struct of_device_id exynos_wkup_irq_ids[] = { + { .compatible = "samsung,exynos4210-wakeup-eint", + .data = &exynos4210_wkup_irq_chip }, + { .compatible = "samsung,exynos7-wakeup-eint", + .data = &exynos7_wkup_irq_chip }, + { } +}; + /* interrupt handler for wakeup interrupts 0..15 */ static void exynos_irq_eint0_15(unsigned int irq, struct irq_desc *desc) { @@ -434,7 +453,12 @@ static int exynos_eint_wkup_init(struct samsung_pinctrl_drv_data *d) int idx, irq; for_each_child_of_node(dev->of_node, np) { - if (of_match_node(exynos_wkup_irq_ids, np)) { + const struct of_device_id *match; + + match = of_match_node(exynos_wkup_irq_ids, np); + if (match) { + memcpy(&exynos_wkup_irq_chip, match->data, + sizeof(struct exynos_irq_chip)); wkup_np = np; break; } diff --git a/drivers/pinctrl/samsung/pinctrl-exynos.h b/drivers/pinctrl/samsung/pinctrl-exynos.h index e060722..0db1e52 100644 --- a/drivers/pinctrl/samsung/pinctrl-exynos.h +++ b/drivers/pinctrl/samsung/pinctrl-exynos.h @@ -25,6 +25,9 @@ #define EXYNOS_WKUP_ECON_OFFSET 0xE00 #define EXYNOS_WKUP_EMASK_OFFSET 0xF00 #define EXYNOS_WKUP_EPEND_OFFSET 0xF40 +#define EXYNOS7_WKUP_ECON_OFFSET 0x700 +#define EXYNOS7_WKUP_EMASK_OFFSET 0x900 +#define EXYNOS7_WKUP_EPEND_OFFSET 0xA00 #define EXYNOS_SVC_OFFSET 0xB08 #define EXYNOS_EINT_FUNC 0xF