]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
gpio: renesas: Wrap quirks in struct rcar_gpio_data
authorMarek Vasut <marek.vasut+renesas@mailbox.org>
Mon, 27 Oct 2025 16:35:36 +0000 (17:35 +0100)
committerMarek Vasut <marek.vasut+renesas@mailbox.org>
Thu, 6 Nov 2025 19:09:58 +0000 (20:09 +0100)
Wrap the RCAR_GPIO_HAS_INEN quirk in more flexible struct rcar_gpio_data {}
in preparation for addition of Renesas R-Car Gen5 GPIO controller support.
The Renesas R-Car Gen5 GPIO controller requires more than a single quirk
to properly describe it, therefore increase the flexibility and introduce
full match data structure, and use it throughout the driver. No functional
change.

Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
drivers/gpio/gpio-rcar.c

index 8853187e64ec476c484645b5df2d79687011f8f4..fada6f4c6248c4fe1d318b9d6b056b238e08a679 100644 (file)
 
 DECLARE_GLOBAL_DATA_PTR;
 
+struct rcar_gpio_data {
+       u32                             quirks;
+};
+
 struct rcar_gpio_priv {
-       void __iomem            *regs;
-       u32                     quirks;
+       void __iomem                    *regs;
+       const struct rcar_gpio_data     *data;
 };
 
 static int rcar_gpio_get_value(struct udevice *dev, unsigned offset)
@@ -65,6 +69,7 @@ static void rcar_gpio_set_direction(struct udevice *dev, unsigned offset,
                                    bool output)
 {
        struct rcar_gpio_priv *priv = dev_get_priv(dev);
+       const struct rcar_gpio_data *data = priv->data;
        void __iomem *regs = priv->regs;
 
        /*
@@ -77,7 +82,7 @@ static void rcar_gpio_set_direction(struct udevice *dev, unsigned offset,
        clrbits_le32(regs + GPIO_POSNEG, BIT(offset));
 
        /* Select "Input Enable/Disable" in INEN */
-       if (priv->quirks & RCAR_GPIO_HAS_INEN) {
+       if (data->quirks & RCAR_GPIO_HAS_INEN) {
                if (output)
                        clrbits_le32(regs + GPIO_INEN, BIT(offset));
                else
@@ -141,7 +146,7 @@ static int rcar_gpio_probe(struct udevice *dev)
        int ret;
 
        priv->regs = dev_read_addr_ptr(dev);
-       priv->quirks = dev_get_driver_data(dev);
+       priv->data = (const struct rcar_gpio_data *)dev_get_driver_data(dev);
        uc_priv->bank_name = dev->name;
 
        ret = fdtdec_parse_phandle_with_args(gd->fdt_blob, node, "gpio-ranges",
@@ -163,17 +168,24 @@ static int rcar_gpio_probe(struct udevice *dev)
        return 0;
 }
 
+static const struct rcar_gpio_data rcar_gpio_gen2_data = {
+};
+
+static const struct rcar_gpio_data rcar_gpio_gen3_data = {
+       .quirks = RCAR_GPIO_HAS_INEN,
+};
+
 static const struct udevice_id rcar_gpio_ids[] = {
-       { .compatible = "renesas,gpio-r8a7795" },
-       { .compatible = "renesas,gpio-r8a7796" },
-       { .compatible = "renesas,gpio-r8a77965" },
-       { .compatible = "renesas,gpio-r8a77970" },
-       { .compatible = "renesas,gpio-r8a77990" },
-       { .compatible = "renesas,gpio-r8a77995" },
-       { .compatible = "renesas,gpio-r8a779a0", .data = RCAR_GPIO_HAS_INEN },
-       { .compatible = "renesas,rcar-gen2-gpio" },
-       { .compatible = "renesas,rcar-gen3-gpio" },
-       { .compatible = "renesas,rcar-gen4-gpio", .data = RCAR_GPIO_HAS_INEN },
+       { .compatible = "renesas,gpio-r8a7795", .data = (ulong)&rcar_gpio_gen2_data },
+       { .compatible = "renesas,gpio-r8a7796", .data = (ulong)&rcar_gpio_gen2_data },
+       { .compatible = "renesas,gpio-r8a77965", .data = (ulong)&rcar_gpio_gen2_data },
+       { .compatible = "renesas,gpio-r8a77970", .data = (ulong)&rcar_gpio_gen2_data },
+       { .compatible = "renesas,gpio-r8a77990", .data = (ulong)&rcar_gpio_gen2_data },
+       { .compatible = "renesas,gpio-r8a77995", .data = (ulong)&rcar_gpio_gen2_data },
+       { .compatible = "renesas,gpio-r8a779a0", .data = (ulong)&rcar_gpio_gen3_data },
+       { .compatible = "renesas,rcar-gen2-gpio", .data = (ulong)&rcar_gpio_gen2_data },
+       { .compatible = "renesas,rcar-gen3-gpio", .data = (ulong)&rcar_gpio_gen2_data },
+       { .compatible = "renesas,rcar-gen4-gpio", .data = (ulong)&rcar_gpio_gen3_data },
        { /* sentinel */ }
 };