From patchwork Wed Nov 21 11:08:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 10692395 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C3CA31709 for ; Wed, 21 Nov 2018 11:06:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B10602B830 for ; Wed, 21 Nov 2018 11:06:45 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A4AA32B852; Wed, 21 Nov 2018 11:06:45 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,HK_RANDOM_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 47FBB2B830 for ; Wed, 21 Nov 2018 11:06:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729796AbeKUVkP (ORCPT ); Wed, 21 Nov 2018 16:40:15 -0500 Received: from mail-lf1-f66.google.com ([209.85.167.66]:43206 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728460AbeKUVkO (ORCPT ); Wed, 21 Nov 2018 16:40:14 -0500 Received: by mail-lf1-f66.google.com with SMTP id u18so3653905lff.10; Wed, 21 Nov 2018 03:06:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=GEY4Eg/HyBux+h94i0R3Me7aHdi4FQExdO6ecAY2kg8=; b=fSdoEPD4EYSMpQ0bLrJrz2xELWJ9+cHimuDX5KKGx9MMgkOOFsguXqF7E9zlik6HtB 9p4Bmys+PbPamWwAHt1iHrLwsuI5GEd0n2sp7MeWszGX1WjwtVtsj3B9YrFlCK46KO9r VbGVL3tWFBR4dHv9xawfjxDa2jSVVCJO6sLU9+to8TGLo3UliR391HlFsxvUmIP2aywj FLXBhF+Lb01RoXNx2g5hCIk/UVrKtUzyhtq4BL26eKZpcLWtQhY1En3Et/nMhflyho5o q4zQgPWMzJozWpj/pQ8I1Ai+WVD0H6ScThlgYKGuVt+WXqnOu6EGdSKtpt6OIjsTG+Mv KcQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=GEY4Eg/HyBux+h94i0R3Me7aHdi4FQExdO6ecAY2kg8=; b=Ln95vLWnsa6uSYJAa856KDFWrc5aila8Rs+/wbWSme45UEIU7+n9cMj2GZT62ALwTN kv3n6pkaVhJHywdrsQ39fTlgqU6m9BIV5xLoNK8ATP9uw92SNpOAIgmQuo5I1L5+CvCB CMw9mrrbw7chgMy7OVBDUNedjp8q0P9lkkmErTulo/NCIayZ7QyHIODIrfCcm5ZmGLpN O8bFKAIQuFWImOF4pJ4MVVVA0iKAoNCm5VMAUoMzU9sa0lGAf1oCHXD5bVn8PMyYZWZH 2HkcBRYhzzD89jNSUjoJIeXb2sCFbg8UJjpi/FHxR2s8FmKk9Wh2yAeXrY4ig7lx1fbk uhKw== X-Gm-Message-State: AGRZ1gKjHGNpw5OyZHjDunMRJEt5rB802AQxjlIlQLQ3R9fVOShLvExM NueCqTfEK0aI2DtwpwTECWo= X-Google-Smtp-Source: AJdET5f8WSAo1r+yASJCCLVo/f7dN6rSkx0J1Ir4NQ6gzuzZob/aelqVPrliQMoack9I/rORP+uC8A== X-Received: by 2002:a19:d486:: with SMTP id l128mr3305420lfg.114.1542798375418; Wed, 21 Nov 2018 03:06:15 -0800 (PST) Received: from z50.intranet (78-10-164-223.static.ip.netia.com.pl. [78.10.164.223]) by smtp.gmail.com with ESMTPSA id x11sm7280047lfd.81.2018.11.21.03.06.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Nov 2018 03:06:14 -0800 (PST) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Cc: Tony Lindgren , Aaro Koskinen , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Linus Walleij , linux-mtd@lists.infradead.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Janusz Krzysztofik Subject: [PATCH v4 1/4] ARM: OMAP1: ams-delta: Provide GPIO lookup table for NAND data port Date: Wed, 21 Nov 2018 12:08:03 +0100 Message-Id: <20181121110806.32076-2-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20181121110806.32076-1-jmkrzyszt@gmail.com> References: <20180813223448.21316-1-jmkrzyszt@gmail.com> <20181121110806.32076-1-jmkrzyszt@gmail.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Data port used by Amstrad Delta NAND driver is actually an OMAP MPUIO device, already under control of gpio-omap driver. The NAND driver gets access to the port by ioremapping it and performs read/write operations. That is done without any proteciton from other users legally manipulating the port pins over GPIO API. The plan is to convert the driver to access the port over GPIO consumer API. Before that is implemented, the driver can already obtain exclusive access to the port by requesting an array of its GPIO descriptors. Add respective entries to the NAND GPIO lookup table. Signed-off-by: Janusz Krzysztofik Reviewed-by: Boris Brezillon Reviewed-by: Linus Walleij Acked-by: Tony Lindgren --- arch/arm/mach-omap1/board-ams-delta.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index 3d191fd52910..30c0d18f372e 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c @@ -312,7 +312,8 @@ static struct platform_device ams_delta_nand_device = { .resource = ams_delta_nand_resources, }; -#define OMAP_GPIO_LABEL "gpio-0-15" +#define OMAP_GPIO_LABEL "gpio-0-15" +#define OMAP_MPUIO_LABEL "mpuio" static struct gpiod_lookup_table ams_delta_nand_gpio_table = { .table = { @@ -324,6 +325,14 @@ static struct gpiod_lookup_table ams_delta_nand_gpio_table = { GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_NWE, "nwe", 0), GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_ALE, "ale", 0), GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_CLE, "cle", 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 0, "data", 0, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 1, "data", 1, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 2, "data", 2, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 3, "data", 3, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 4, "data", 4, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 5, "data", 5, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 6, "data", 6, 0), + GPIO_LOOKUP_IDX(OMAP_MPUIO_LABEL, 7, "data", 7, 0), { }, }, }; From patchwork Wed Nov 21 11:08:04 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 10692393 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9D23513BF for ; Wed, 21 Nov 2018 11:06:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8C2632B830 for ; Wed, 21 Nov 2018 11:06:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8038E2B854; Wed, 21 Nov 2018 11:06:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,HK_RANDOM_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 227FD2B832 for ; Wed, 21 Nov 2018 11:06:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729557AbeKUVkR (ORCPT ); Wed, 21 Nov 2018 16:40:17 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:35307 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728114AbeKUVkQ (ORCPT ); Wed, 21 Nov 2018 16:40:16 -0500 Received: by mail-lj1-f195.google.com with SMTP id x85-v6so4461719ljb.2; Wed, 21 Nov 2018 03:06:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xJzcdWUi5g1mmy1o8VxmoXAad6mTqA99FbBKb9Bxfrc=; b=r7kVjeMexgP6f9JebK5xtWxEWBrGaxE9aO7UAIPB/mkfz4LHZ5rZH+1b8rKYohtZlb X35+qLvQE4gUhVFlIQp7AbPOC6H45bVsAFgE1CLkLO4Eo1yoOvAITMQd7IWe9YvKK3+n 5Fnlxx4G335qYD00tikii/PZ72X3efGwJq7fRnjLk0MptiDINzN4yx4vzb5odvcd/bSI 2tcxAUKsBBacBnZvbRbjgrSnoDnP5f7hLugH9IWMbIOzwDGqLU77ecaommjrYaMkWclZ yYOMUtRFWbTbRlUW6m6hcPYgucMnZ13Upc8t6MKCSQqF+PARmsl6zmWOK1n04eEWTk0x mVIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=xJzcdWUi5g1mmy1o8VxmoXAad6mTqA99FbBKb9Bxfrc=; b=VxKFYnJC95XE5xUsdaFv3zhiPs9Drz/IZiYanyGPHa5DBFsErlrteqpQXYPrtnccRn vDBHjBRHatFmed7NQ2kvy+65L9TVcftfkMJLxW/jcLFlRMNSxqAxQsCFSAls2gT2+Xzv 7w5WycH98TDra94uvNUF7vc2nNm5C4E4Oi69W+IVfYtetbVPaIl9ZmwlN5eQLs0q+IJR 24KaPVs09gSwWoRRn/ZgIuWBK0kFR/YytUsupF7hmYVayStitBO3yOg7asOQVOMLLYYq BFLqKhColL9YSDjK1Ie7sxefQtC7D4F2L74bXP1AMq0e9TZOyew9H6t87WuhH6D3YxKK P6vQ== X-Gm-Message-State: AA+aEWYaPymhPTmPYr5ZnHs4N8la2zDUhiVIrROguw82mvGzyzkAgRU2 uTE42QxV6rqn0NCUBJhc/4c= X-Google-Smtp-Source: AFSGD/UxF4+6EgaFA+wlF99Claii+6Jao8pyHQxGqPr3OZRx9RKbJ/gQQiNoxL7Rl1quD08TtXxBpw== X-Received: by 2002:a2e:81a:: with SMTP id 26-v6mr4019750lji.14.1542798376943; Wed, 21 Nov 2018 03:06:16 -0800 (PST) Received: from z50.intranet (78-10-164-223.static.ip.netia.com.pl. [78.10.164.223]) by smtp.gmail.com with ESMTPSA id x11sm7280047lfd.81.2018.11.21.03.06.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Nov 2018 03:06:16 -0800 (PST) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Cc: Tony Lindgren , Aaro Koskinen , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Linus Walleij , linux-mtd@lists.infradead.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Janusz Krzysztofik Subject: [PATCH v4 2/4] mtd: rawnand: ams-delta: Request data port GPIO resource Date: Wed, 21 Nov 2018 12:08:04 +0100 Message-Id: <20181121110806.32076-3-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20181121110806.32076-1-jmkrzyszt@gmail.com> References: <20180813223448.21316-1-jmkrzyszt@gmail.com> <20181121110806.32076-1-jmkrzyszt@gmail.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Data port used by the driver is actually an OMAP MPUIO device, already under control of gpio-omap driver. For that reason we used to not request the memory region of the port as that would fail because the region is already busy. Despite that, we are still accessing the port by just ioremapping it and performing read/write operations. Moreover, we are doing that without any proteciton from other users legally manipulating the port pins over GPIO API. The plan is to convert the driver to access the port over GPIO consumer API. Before that happens, already prevent from other users accessing the port pins by requesting an array of its GPIO descriptors. Signed-off-by: Janusz Krzysztofik Reviewed-by: Boris Brezillon Reviewed-by: Linus Walleij --- drivers/mtd/nand/raw/ams-delta.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index f8eb4a419e77..bb50dda05654 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -190,6 +190,7 @@ static int ams_delta_init(struct platform_device *pdev) struct mtd_info *mtd; struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); void __iomem *io_base; + struct gpio_descs *data_gpiods; int err = 0; if (!res) @@ -275,8 +276,14 @@ static int ams_delta_init(struct platform_device *pdev) goto err_unmap; } - /* Initialize data port direction to a known state */ - ams_delta_dir_input(priv, true); + /* Request array of data pins, initialize them as input */ + data_gpiods = devm_gpiod_get_array(&pdev->dev, "data", GPIOD_IN); + if (IS_ERR(data_gpiods)) { + err = PTR_ERR(data_gpiods); + dev_err(&pdev->dev, "data GPIO request failed: %d\n", err); + goto err_unmap; + } + priv->data_in = true; /* Initialize the NAND controller object embedded in ams_delta_nand. */ priv->base.ops = &ams_delta_ops; From patchwork Wed Nov 21 11:08:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 10692389 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 24AF21709 for ; Wed, 21 Nov 2018 11:06:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0E7602B832 for ; Wed, 21 Nov 2018 11:06:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id F29282B830; Wed, 21 Nov 2018 11:06:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,HK_RANDOM_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4A3272B830 for ; Wed, 21 Nov 2018 11:06:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729904AbeKUVkU (ORCPT ); Wed, 21 Nov 2018 16:40:20 -0500 Received: from mail-lj1-f195.google.com ([209.85.208.195]:40647 "EHLO mail-lj1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728460AbeKUVkT (ORCPT ); Wed, 21 Nov 2018 16:40:19 -0500 Received: by mail-lj1-f195.google.com with SMTP id n18-v6so4446284lji.7; Wed, 21 Nov 2018 03:06:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=dbjQEEYBNaZckUZGHrMvPcr1fqrl0xAYangfA+beuMw=; b=We7MOnc04Ne+b7yh0iviKCHzID8Xe9dxg910h0Cr8uwJMW0F/th4jczdijKuwm3ryO 7DPGLONGGTi1rx8mSw4MCTyw1vp+JTM9FNsAWOiuaJmWqOKuY4C6zm5IyH14SMtEGlMm Xk0jHqIwv78IJ0zl/iBir4Mo82gNKCURQqh2S0HFdY0jIrKfS5gznCCXgwfQ5gjqhIOh LPaL8V7xpDaNdIpyEnlNbADkQAAWxMJ7JPIDBMeRpPGx+qkzJBjAEP30/BUxCBCJ5P43 MAWLRp6jtNf2ufv5NOPwq2gYlOAm+g10EiSDea2oZ52ewmvH/0Ro4Lv230C0f9bQ9lNR JlBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=dbjQEEYBNaZckUZGHrMvPcr1fqrl0xAYangfA+beuMw=; b=LoMYFMUwRkB+1EDwZ1iCTsZmLFsL41QgdMf/EkmfnX1qZtS5iyh+xQnDYCPur/EIH7 cZAsNHG9u+EkWyR39MxzDqhKhi3vLA/f3mzIVaWqo1KfNeLcUFhiCS44CZigKvFr1Ofu fXEb4rcZlsIzz6ewGSRBFf9NWAXuZU0VJ2KthqW4cqTC8pJyFkYT5+UEdg+UyqX5o8ur yf+cP6etNWY+maJh0kUmRcDcntNdqna278XBNCcYiU4QD9QuTkjTNSVeoyA81PI2NOTW cpoZ7w1W2jOV6+qM5QArAXXCyCYXNJ/kv+vtR8VE1X5+03HGydSmhgHJ4MD7tZ2IxHDj GE2A== X-Gm-Message-State: AA+aEWbZ2kwyfh+cLw2I6jtkA4mQrPL+hUuuOWMyQOz5mCucPOvTlz9j MQm5Uj/KGW35sOpHlkxnW5k= X-Google-Smtp-Source: AFSGD/Up9Tl2/tvudBOsU0aoTvuH2fVlAoSaFenV/k/po/ZvUnvx3wqcsbFYhQKJXndQJhLue/OspQ== X-Received: by 2002:a2e:5109:: with SMTP id f9-v6mr4000620ljb.52.1542798378755; Wed, 21 Nov 2018 03:06:18 -0800 (PST) Received: from z50.intranet (78-10-164-223.static.ip.netia.com.pl. [78.10.164.223]) by smtp.gmail.com with ESMTPSA id x11sm7280047lfd.81.2018.11.21.03.06.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Nov 2018 03:06:18 -0800 (PST) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Cc: Tony Lindgren , Aaro Koskinen , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Linus Walleij , linux-mtd@lists.infradead.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Janusz Krzysztofik Subject: [PATCH v4 3/4] mtd: rawnand: ams-delta: Use GPIO API for data I/O Date: Wed, 21 Nov 2018 12:08:05 +0100 Message-Id: <20181121110806.32076-4-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20181121110806.32076-1-jmkrzyszt@gmail.com> References: <20180813223448.21316-1-jmkrzyszt@gmail.com> <20181121110806.32076-1-jmkrzyszt@gmail.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Don't readw()/writew() data directly from/to GPIO port which is under control of gpio-omap driver, use GPIO consumer API instead. The driver should now work with any 8-bit bidirectional GPIO port, not only OMAP. Signed-off-by: Janusz Krzysztofik Reviewed-by: Linus Walleij Reviewed-by: Boris Brezillon --- drivers/mtd/nand/raw/ams-delta.c | 109 +++++++++++++++++-------------- 1 file changed, 61 insertions(+), 48 deletions(-) diff --git a/drivers/mtd/nand/raw/ams-delta.c b/drivers/mtd/nand/raw/ams-delta.c index bb50dda05654..8312182088c1 100644 --- a/drivers/mtd/nand/raw/ams-delta.c +++ b/drivers/mtd/nand/raw/ams-delta.c @@ -18,11 +18,10 @@ #include #include #include -#include #include #include #include -#include +#include #include /* @@ -38,7 +37,7 @@ struct ams_delta_nand { struct gpio_desc *gpiod_nwe; struct gpio_desc *gpiod_ale; struct gpio_desc *gpiod_cle; - void __iomem *io_base; + struct gpio_descs *data_gpiods; bool data_in; }; @@ -67,42 +66,78 @@ static const struct mtd_partition partition_info[] = { .size = 3 * SZ_256K }, }; -static void ams_delta_io_write(struct ams_delta_nand *priv, u8 byte) +static void ams_delta_write_commit(struct ams_delta_nand *priv) { - writew(byte, priv->io_base + OMAP_MPUIO_OUTPUT); gpiod_set_value(priv->gpiod_nwe, 0); ndelay(40); gpiod_set_value(priv->gpiod_nwe, 1); } +static void ams_delta_io_write(struct ams_delta_nand *priv, u8 byte) +{ + struct gpio_descs *data_gpiods = priv->data_gpiods; + DECLARE_BITMAP(values, BITS_PER_TYPE(byte)) = { byte, }; + + gpiod_set_raw_array_value(data_gpiods->ndescs, data_gpiods->desc, + data_gpiods->info, values); + + ams_delta_write_commit(priv); +} + +static void ams_delta_dir_output(struct ams_delta_nand *priv, u8 byte) +{ + struct gpio_descs *data_gpiods = priv->data_gpiods; + DECLARE_BITMAP(values, BITS_PER_TYPE(byte)) = { byte, }; + int i; + + for (i = 0; i < data_gpiods->ndescs; i++) + gpiod_direction_output_raw(data_gpiods->desc[i], + test_bit(i, values)); + + ams_delta_write_commit(priv); + + priv->data_in = false; +} + static u8 ams_delta_io_read(struct ams_delta_nand *priv) { u8 res; + struct gpio_descs *data_gpiods = priv->data_gpiods; + DECLARE_BITMAP(values, BITS_PER_TYPE(res)) = { 0, }; gpiod_set_value(priv->gpiod_nre, 0); ndelay(40); - res = readw(priv->io_base + OMAP_MPUIO_INPUT_LATCH); + + gpiod_get_raw_array_value(data_gpiods->ndescs, data_gpiods->desc, + data_gpiods->info, values); + gpiod_set_value(priv->gpiod_nre, 1); + res = values[0]; return res; } -static void ams_delta_dir_input(struct ams_delta_nand *priv, bool in) +static void ams_delta_dir_input(struct ams_delta_nand *priv) { - writew(in ? ~0 : 0, priv->io_base + OMAP_MPUIO_IO_CNTL); - priv->data_in = in; + struct gpio_descs *data_gpiods = priv->data_gpiods; + int i; + + for (i = 0; i < data_gpiods->ndescs; i++) + gpiod_direction_input(data_gpiods->desc[i]); + + priv->data_in = true; } static void ams_delta_write_buf(struct ams_delta_nand *priv, const u8 *buf, int len) { - int i; + int i = 0; - if (priv->data_in) - ams_delta_dir_input(priv, false); + if (len > 0 && priv->data_in) + ams_delta_dir_output(priv, buf[i++]); - for (i = 0; i < len; i++) - ams_delta_io_write(priv, buf[i]); + while (i < len) + ams_delta_io_write(priv, buf[i++]); } static void ams_delta_read_buf(struct ams_delta_nand *priv, u8 *buf, int len) @@ -110,7 +145,7 @@ static void ams_delta_read_buf(struct ams_delta_nand *priv, u8 *buf, int len) int i; if (!priv->data_in) - ams_delta_dir_input(priv, true); + ams_delta_dir_input(priv); for (i = 0; i < len; i++) buf[i] = ams_delta_io_read(priv); @@ -188,14 +223,9 @@ static int ams_delta_init(struct platform_device *pdev) struct ams_delta_nand *priv; struct nand_chip *this; struct mtd_info *mtd; - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - void __iomem *io_base; struct gpio_descs *data_gpiods; int err = 0; - if (!res) - return -ENXIO; - /* Allocate memory for MTD device structure and private data */ priv = devm_kzalloc(&pdev->dev, sizeof(struct ams_delta_nand), GFP_KERNEL); @@ -207,25 +237,13 @@ static int ams_delta_init(struct platform_device *pdev) mtd = nand_to_mtd(this); mtd->dev.parent = &pdev->dev; - /* - * Don't try to request the memory region from here, - * it should have been already requested from the - * gpio-omap driver and requesting it again would fail. - */ - io_base = ioremap(res->start, resource_size(res)); - if (!io_base) { - dev_err(&pdev->dev, "ioremap failed\n"); - return -EIO; - } - - priv->io_base = io_base; nand_set_controller_data(this, priv); priv->gpiod_rdy = devm_gpiod_get_optional(&pdev->dev, "rdy", GPIOD_IN); if (IS_ERR(priv->gpiod_rdy)) { err = PTR_ERR(priv->gpiod_rdy); dev_warn(&pdev->dev, "RDY GPIO request failed (%d)\n", err); - goto err_unmap; + return err; } this->ecc.mode = NAND_ECC_SOFT; @@ -238,42 +256,42 @@ static int ams_delta_init(struct platform_device *pdev) if (IS_ERR(priv->gpiod_nwp)) { err = PTR_ERR(priv->gpiod_nwp); dev_err(&pdev->dev, "NWP GPIO request failed (%d)\n", err); - goto err_unmap; + return err; } priv->gpiod_nce = devm_gpiod_get(&pdev->dev, "nce", GPIOD_OUT_HIGH); if (IS_ERR(priv->gpiod_nce)) { err = PTR_ERR(priv->gpiod_nce); dev_err(&pdev->dev, "NCE GPIO request failed (%d)\n", err); - goto err_unmap; + return err; } priv->gpiod_nre = devm_gpiod_get(&pdev->dev, "nre", GPIOD_OUT_HIGH); if (IS_ERR(priv->gpiod_nre)) { err = PTR_ERR(priv->gpiod_nre); dev_err(&pdev->dev, "NRE GPIO request failed (%d)\n", err); - goto err_unmap; + return err; } priv->gpiod_nwe = devm_gpiod_get(&pdev->dev, "nwe", GPIOD_OUT_HIGH); if (IS_ERR(priv->gpiod_nwe)) { err = PTR_ERR(priv->gpiod_nwe); dev_err(&pdev->dev, "NWE GPIO request failed (%d)\n", err); - goto err_unmap; + return err; } priv->gpiod_ale = devm_gpiod_get(&pdev->dev, "ale", GPIOD_OUT_LOW); if (IS_ERR(priv->gpiod_ale)) { err = PTR_ERR(priv->gpiod_ale); dev_err(&pdev->dev, "ALE GPIO request failed (%d)\n", err); - goto err_unmap; + return err; } priv->gpiod_cle = devm_gpiod_get(&pdev->dev, "cle", GPIOD_OUT_LOW); if (IS_ERR(priv->gpiod_cle)) { err = PTR_ERR(priv->gpiod_cle); dev_err(&pdev->dev, "CLE GPIO request failed (%d)\n", err); - goto err_unmap; + return err; } /* Request array of data pins, initialize them as input */ @@ -281,8 +299,9 @@ static int ams_delta_init(struct platform_device *pdev) if (IS_ERR(data_gpiods)) { err = PTR_ERR(data_gpiods); dev_err(&pdev->dev, "data GPIO request failed: %d\n", err); - goto err_unmap; + return err; } + priv->data_gpiods = data_gpiods; priv->data_in = true; /* Initialize the NAND controller object embedded in ams_delta_nand. */ @@ -293,7 +312,7 @@ static int ams_delta_init(struct platform_device *pdev) /* Scan to find existence of the device */ err = nand_scan(this, 1); if (err) - goto err_unmap; + return err; /* Register the partitions */ err = mtd_device_register(mtd, partition_info, @@ -306,9 +325,6 @@ static int ams_delta_init(struct platform_device *pdev) err_nand_cleanup: nand_cleanup(this); -err_unmap: - iounmap(io_base); - return err; } @@ -319,13 +335,10 @@ static int ams_delta_cleanup(struct platform_device *pdev) { struct ams_delta_nand *priv = platform_get_drvdata(pdev); struct mtd_info *mtd = nand_to_mtd(&priv->nand_chip); - void __iomem *io_base = priv->io_base; - /* Release resources, unregister device */ + /* Unregister device */ nand_release(mtd_to_nand(mtd)); - iounmap(io_base); - return 0; } From patchwork Wed Nov 21 11:08:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janusz Krzysztofik X-Patchwork-Id: 10692391 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 82E6D13BF for ; Wed, 21 Nov 2018 11:06:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 71C2F2B832 for ; Wed, 21 Nov 2018 11:06:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 65C172B854; Wed, 21 Nov 2018 11:06:41 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,HK_RANDOM_FROM,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0FE562B832 for ; Wed, 21 Nov 2018 11:06:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728460AbeKUVk0 (ORCPT ); Wed, 21 Nov 2018 16:40:26 -0500 Received: from mail-lj1-f193.google.com ([209.85.208.193]:39762 "EHLO mail-lj1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728114AbeKUVkU (ORCPT ); Wed, 21 Nov 2018 16:40:20 -0500 Received: by mail-lj1-f193.google.com with SMTP id t9-v6so4452120ljh.6; Wed, 21 Nov 2018 03:06:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=SvA8iB/0liNWiwDNiorEUVzgELHH4Zp2PaoIpXtjOyw=; b=tMxOU5k0cslZHMlIfUvBdUHmq1Ry2NwkQXvLX2RDOsV4RPSMHUkqjtJmbcfpyFeSfv NaByQ3siV6ebsZAm2D7yIJXG+kfozHtuM1ghNNPyJBcJ+rEEXnOKiclH92vhvFmsN8W7 ZSbps9crF1CcA7zRnIXE9W4hqHk9KJjhn/TgrZuxpHbifIhU6XBAg7Z3HIm/0UrlxPf6 E6DeKdoYYjhUSFU1NyD8YnbBEMy41T1+F2tPy2wBFbSB4Fnf9y9d5uMS42OCZ3iPEXio wM/H8ovVU1jWcEVULT74WkTtRsp+NZ/JzXY2vzpS+CGqBPLDybRcu13qLLVR5sP2ePyA AALQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=SvA8iB/0liNWiwDNiorEUVzgELHH4Zp2PaoIpXtjOyw=; b=BoWwSLFLMVqtnj6fz5b8XsQoD4amk3NFrWv8ZE0HmBm4gGcE2Ymg8dnH1DhhEeQdVD 2362Gm2yGhE/WUgwUyQdQaNnGuuQIe0jiXfZQQ+ZAjqYWa/HLmbDHnOgJF8lgSasS43z 7+c6x6xm/fj9u5gSQCY7DRksTUWX8hPElKJndW7DUbMNaDQB+wJdaOj1nlW08QiwICWT TGsCYI5H3/oFW+ODK4yvNw8ureUDDBZxmHKzZRVjeu4+cMnOzVZbE+daZZCngmTqfBql 98YpqrXvhCDILcFxDYbmurQYMnxmPJ8S0xzVje/jTFdx52yTxAm70vrduT7xCFIifEtX 7NQg== X-Gm-Message-State: AA+aEWYMjzmkHO+61UOu6qMumpR6dSDV+roq/Hx4fxsNvZ+5hBSg82d5 5WAqcvZjRx6DrksQ14Do+Oc= X-Google-Smtp-Source: AFSGD/VjM/e7X735C5hPDWPwF58hLzcvook6hT6+LOsvdb25HxWODcuqc+6gxeHPVQmOAyDOf9v0NA== X-Received: by 2002:a2e:302:: with SMTP id 2-v6mr3532493ljd.137.1542798380645; Wed, 21 Nov 2018 03:06:20 -0800 (PST) Received: from z50.intranet (78-10-164-223.static.ip.netia.com.pl. [78.10.164.223]) by smtp.gmail.com with ESMTPSA id x11sm7280047lfd.81.2018.11.21.03.06.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Nov 2018 03:06:19 -0800 (PST) From: Janusz Krzysztofik To: Boris Brezillon , Miquel Raynal Cc: Tony Lindgren , Aaro Koskinen , Richard Weinberger , David Woodhouse , Brian Norris , Marek Vasut , Linus Walleij , linux-mtd@lists.infradead.org, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Janusz Krzysztofik Subject: [PATCH v4 4/4] ARM: OMAP1: ams-delta: Drop obsolete NAND resources Date: Wed, 21 Nov 2018 12:08:06 +0100 Message-Id: <20181121110806.32076-5-jmkrzyszt@gmail.com> X-Mailer: git-send-email 2.18.1 In-Reply-To: <20181121110806.32076-1-jmkrzyszt@gmail.com> References: <20180813223448.21316-1-jmkrzyszt@gmail.com> <20181121110806.32076-1-jmkrzyszt@gmail.com> Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Amstrad Delta NAND driver now uses GPIO API for data I/O so there is no need to assign memory I/O resource to the device any longer. Drop it. Signed-off-by: Janusz Krzysztofik --- arch/arm/mach-omap1/board-ams-delta.c | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index 30c0d18f372e..d594f60c3224 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c @@ -296,20 +296,9 @@ struct modem_private_data { static struct modem_private_data modem_priv; -static struct resource ams_delta_nand_resources[] = { - [0] = { - .start = OMAP1_MPUIO_BASE, - .end = OMAP1_MPUIO_BASE + - OMAP_MPUIO_IO_CNTL + sizeof(u32) - 1, - .flags = IORESOURCE_MEM, - }, -}; - static struct platform_device ams_delta_nand_device = { .name = "ams-delta-nand", .id = -1, - .num_resources = ARRAY_SIZE(ams_delta_nand_resources), - .resource = ams_delta_nand_resources, }; #define OMAP_GPIO_LABEL "gpio-0-15"