Received: by 2002:a05:7412:37c9:b0:e2:908c:2ebd with SMTP id jz9csp692604rdb; Tue, 19 Sep 2023 07:35:20 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGLkeixjtK7p62pfGPYtduOEwV9+A2Y3A5fxdVvq6znsEIVzQSpMMBbUdHldUIJ/NzYCtxP X-Received: by 2002:a05:6358:e488:b0:143:5469:230d with SMTP id by8-20020a056358e48800b001435469230dmr17834rwb.0.1695134119695; Tue, 19 Sep 2023 07:35:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695134119; cv=none; d=google.com; s=arc-20160816; b=SO4rIEPN2hdPMs8ESyk1pTv0tx5JPbtkiBJk2X0AUrvQ3DMJ3nN+qy/LBi4GhykwgD KW+u0iYB5gZ2Os+CvBYH0hwMqDa6as5EOf/UfZ2EAM96E+o827My5iblOY/6YsXp4Mka /7dC4uBQMoV/Qj0vT9lqTQ9+CJ8VziuskjijVO96XWmzlIm0rCAscQtnhkHy9EUShZfu nuj8ESxuIvP2FB+cRh+bLBXeJ1tXV1dDsI3yvYWYMMky+LwiPQFYdv4p+xgbtFUyjKjT hyj9GFUPMmx/rJCUk9YiY0Cew5onre++B25+FWuWuicV3A/acdmiZ2kPGu2VK3lYbM33 aYyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:user-agent:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date; bh=4qhqcsM298v8yjwQDGxiP4r8sUIFqF4c4JD35L0uUQk=; fh=uOxur3/Eo7heQQCV7uAbAsMgLjKtI7XBA76MQ6YSK0M=; b=K1MW0wxPg9yAVMQ5ch+XlhtQqnxq704MSRa+aZO6Dya/zncLWn/UyDhP1DZcDol2cg 2WMCAgrm1KxZQOAsFmmtN3CcYuGJr6kzGSlP8nvXkTmfmH2AFbd+taa3WKMqDEi8DwJQ rYtGEWfi77z+PgYk/di/iI92M1HdP/gvQq8j2xu1lTMSJMCo1nxWsZU1vsCC/Ky78oe5 yfNiRzvzX09p5dI+VnKtGMnOCxKPHnPe+4knwyoT/bckyW7Qz+AsY5TuDEarc03W9Ioa 6vP5eUD+E2MZGkisI6u+AkZmoJimQOgUuV+ye6jO89WtYn4iQa5f3plSVDIeQlSqdT1h Vztw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from pete.vger.email (pete.vger.email. [2620:137:e000::3:6]) by mx.google.com with ESMTPS id m1-20020a656a01000000b0056532fbe28csi10089533pgu.459.2023.09.19.07.35.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 07:35:19 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) client-ip=2620:137:e000::3:6; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:6 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id B181E80AC46C; Tue, 19 Sep 2023 07:23:47 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232707AbjISOXn (ORCPT + 99 others); Tue, 19 Sep 2023 10:23:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37766 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232686AbjISOXg (ORCPT ); Tue, 19 Sep 2023 10:23:36 -0400 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [IPv6:2a0a:edc0:2:b01:1d::104]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9628513E for ; Tue, 19 Sep 2023 07:23:29 -0700 (PDT) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qibdB-0002Ps-MM; Tue, 19 Sep 2023 16:23:13 +0200 Received: from [2a0a:edc0:2:b01:1d::c0] (helo=ptx.whiteo.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qibdA-007TfL-DJ; Tue, 19 Sep 2023 16:23:12 +0200 Received: from mfe by ptx.whiteo.stw.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1qibdA-009fzF-AF; Tue, 19 Sep 2023 16:23:12 +0200 Date: Tue, 19 Sep 2023 16:23:12 +0200 From: Marco Felsch To: "Peng Fan (OSS)" Cc: Linus Walleij , Bartosz Golaszewski , Andy Shevchenko , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Stefan Agner , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , linux-gpio@vger.kernel.org, Peng Fan , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org Subject: Re: [PATCH v3 4/6] gpio: vf610: add i.MX8ULP of_device_id entry Message-ID: <20230919142312.erbn64n52y4f5vl5@pengutronix.de> References: <20230918-vf610-gpio-v3-0-ada82a17adc5@nxp.com> <20230918-vf610-gpio-v3-4-ada82a17adc5@nxp.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230918-vf610-gpio-v3-4-ada82a17adc5@nxp.com> User-Agent: NeoMutt/20180716 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: mfe@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Tue, 19 Sep 2023 07:23:48 -0700 (PDT) Hi Peng, please see my notes below. On 23-09-18, Peng Fan (OSS) wrote: > From: Peng Fan > > i.MX8ULP GPIO supports similar feature as i.MX7ULP GPIO, but i.MX8ULP is > not compatible with i.MX7ULP per binding doc. i.MX8ULP only has one > register base, not two base. > > Add a new of_device_id entry for i.MX8ULP. But to make the driver could > also support old bindings, check the compatible string first, before > check the device data. > > Signed-off-by: Peng Fan > --- > drivers/gpio/gpio-vf610.c | 55 +++++++++++++++++++++++++++++++++++++++++------ > 1 file changed, 49 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpio/gpio-vf610.c b/drivers/gpio/gpio-vf610.c > index dbc7ba0ee72c..ef2455093708 100644 > --- a/drivers/gpio/gpio-vf610.c > +++ b/drivers/gpio/gpio-vf610.c > @@ -25,6 +25,7 @@ > struct fsl_gpio_soc_data { > /* SoCs has a Port Data Direction Register (PDDR) */ > bool have_paddr; > + bool is_imx8ulp; I would invert the logic: bool have_dual_base; > }; > > struct vf610_gpio_port { > @@ -60,13 +61,22 @@ struct vf610_gpio_port { > #define PORT_INT_EITHER_EDGE 0xb > #define PORT_INT_LOGIC_ONE 0xc > > +#define IMX8ULP_GPIO_BASE_OFF 0x40 > +#define IMX8ULP_BASE_OFF 0x80 > + static const struct fsl_gpio_soc_data vf610_data = { .have_dual_base = true, }; static const struct fsl_gpio_soc_data imx_data = { .have_paddr = true, .have_dual_base = true, }; static const struct fsl_gpio_soc_data imx8ulp_data = { .have_paddr = true, }; This also introduces .data pointer for the vf610 case and we could drop the 'port->sdata' guard from the 'if (port->sdata && port->sdata->paddr)' pattern. This of course would be an additional patch. > + > static const struct of_device_id vf610_gpio_dt_ids[] = { > { .compatible = "fsl,vf610-gpio", .data = NULL, }, > { .compatible = "fsl,imx7ulp-gpio", .data = &imx_data, }, > + { .compatible = "fsl,imx8ulp-gpio", .data = &imx8ulp_data, }, > { /* sentinel */ } > }; > > @@ -255,6 +265,42 @@ static void vf610_gpio_disable_clk(void *data) > clk_disable_unprepare(data); > } > > +static int vf610_gpio_map_base(struct platform_device *pdev, struct vf610_gpio_port *port) > +{ > + struct device *dev = &pdev->dev; > + bool dual_base; > + > + /* support old compatible strings */ > + if (device_is_compatible(dev, "fsl,imx7ulp-gpio") && > + (device_is_compatible(dev, "fsl,imx93-gpio") || > + (device_is_compatible(dev, "fsl,imx8ulp-gpio")))) { > + dual_base = true; Move this part into probe() (see below) and drop the rest. > + } else if (port->sdata && port->sdata->is_imx8ulp) { > + dual_base = false; > + } else { > + dual_base = true; > + }; > + > + if (dual_base) { if (port->sdata-have_dual_base) { > + port->base = devm_platform_ioremap_resource(pdev, 0); > + if (IS_ERR(port->base)) > + return PTR_ERR(port->base); > + > + port->gpio_base = devm_platform_ioremap_resource(pdev, 1); > + if (IS_ERR(port->gpio_base)) > + return PTR_ERR(port->gpio_base); > + } else { > + port->base = devm_platform_ioremap_resource(pdev, 0); > + if (IS_ERR(port->base)) > + return PTR_ERR(port->base); > + > + port->gpio_base = port->base + IMX8ULP_GPIO_BASE_OFF; > + port->base = port->base + IMX8ULP_BASE_OFF; > + } > + > + return 0; > +} > + > static int vf610_gpio_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > @@ -269,13 +315,10 @@ static int vf610_gpio_probe(struct platform_device *pdev) > return -ENOMEM; > > port->sdata = of_device_get_match_data(dev); /* Handle old device-tree bindings */ if (device_is_compatible(dev, "fsl,imx7ulp-gpio") && (device_is_compatible(dev, "fsl,imx93-gpio") || (device_is_compatible(dev, "fsl,imx8ulp-gpio")))) port->sdata->have_dual_base = true; > - port->base = devm_platform_ioremap_resource(pdev, 0); > - if (IS_ERR(port->base)) > - return PTR_ERR(port->base); > > - port->gpio_base = devm_platform_ioremap_resource(pdev, 1); > - if (IS_ERR(port->gpio_base)) > - return PTR_ERR(port->gpio_base); > + ret = vf610_gpio_map_base(pdev, port); > + if (ret) > + return ret; > > port->irq = platform_get_irq(pdev, 0); > if (port->irq < 0) Regards, Marco