net: dsa: realtek: keep variant reference in realtek_priv
authorLuiz Angelo Daros de Luca <luizluca@gmail.com>
Fri, 9 Feb 2024 05:03:40 +0000 (02:03 -0300)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Feb 2024 10:42:17 +0000 (10:42 +0000)
Instead of copying values from the variant, we can keep a reference in
realtek_priv.

This is a preliminary change for sharing code betwen interfaces. It will
allow to move most of the probe into a common module while still allow
code specific to each interface to read variant fields.

Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
Reviewed-by: Vladimir Oltean <olteanv@gmail.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/realtek/realtek-mdio.c
drivers/net/dsa/realtek/realtek-smi.c
drivers/net/dsa/realtek/realtek.h

index 7c5372561587a76794253be205ba51c4e18c67f4..7be00aa2a9e7bb5637f3e24bba203b9ae7862884 100644 (file)
@@ -196,9 +196,7 @@ int realtek_mdio_probe(struct mdio_device *mdiodev)
        priv->dev = &mdiodev->dev;
        priv->chip_data = (void *)priv + sizeof(*priv);
 
-       priv->clk_delay = var->clk_delay;
-       priv->cmd_read = var->cmd_read;
-       priv->cmd_write = var->cmd_write;
+       priv->variant = var;
        priv->ops = var->ops;
 
        priv->write_reg_noack = realtek_mdio_write;
index 2a6a884bb45e98a350cb17b0b27b2f008df041b9..ad3b5731101523ea6618824002c8ecbe0dbbf71e 100644 (file)
@@ -46,7 +46,7 @@
 
 static inline void realtek_smi_clk_delay(struct realtek_priv *priv)
 {
-       ndelay(priv->clk_delay);
+       ndelay(priv->variant->clk_delay);
 }
 
 static void realtek_smi_start(struct realtek_priv *priv)
@@ -209,7 +209,7 @@ static int realtek_smi_read_reg(struct realtek_priv *priv, u32 addr, u32 *data)
        realtek_smi_start(priv);
 
        /* Send READ command */
-       ret = realtek_smi_write_byte(priv, priv->cmd_read);
+       ret = realtek_smi_write_byte(priv, priv->variant->cmd_read);
        if (ret)
                goto out;
 
@@ -250,7 +250,7 @@ static int realtek_smi_write_reg(struct realtek_priv *priv,
        realtek_smi_start(priv);
 
        /* Send WRITE command */
-       ret = realtek_smi_write_byte(priv, priv->cmd_write);
+       ret = realtek_smi_write_byte(priv, priv->variant->cmd_write);
        if (ret)
                goto out;
 
@@ -459,9 +459,7 @@ int realtek_smi_probe(struct platform_device *pdev)
 
        /* Link forward and backward */
        priv->dev = dev;
-       priv->clk_delay = var->clk_delay;
-       priv->cmd_read = var->cmd_read;
-       priv->cmd_write = var->cmd_write;
+       priv->variant = var;
        priv->ops = var->ops;
 
        priv->setup_interface = realtek_smi_setup_mdio;
index e9ee778665b2f7ecf6f1fae22820d5971b302988..c7d5ef99e9db8a337749721aa88abf89783e538a 100644 (file)
@@ -58,9 +58,8 @@ struct realtek_priv {
        struct mii_bus          *bus;
        int                     mdio_addr;
 
-       unsigned int            clk_delay;
-       u8                      cmd_read;
-       u8                      cmd_write;
+       const struct realtek_variant *variant;
+
        spinlock_t              lock; /* Locks around command writes */
        struct dsa_switch       *ds;
        struct irq_domain       *irqdomain;