net: dsa: mt7530: introduce mt7530_probe_common helper function
authorDaniel Golle <daniel@makrotopia.org>
Mon, 3 Apr 2023 01:18:39 +0000 (02:18 +0100)
committerDavid S. Miller <davem@davemloft.net>
Mon, 3 Apr 2023 09:13:00 +0000 (10:13 +0100)
Move commonly used parts from mt7530_probe into new mt7530_probe_common
helper function which will be used by both, mt7530_probe and the
to-be-introduced mt7988_probe.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/mt7530.c

index 1215d5e..a60ed87 100644 (file)
@@ -3142,44 +3142,21 @@ static const struct of_device_id mt7530_of_match[] = {
 MODULE_DEVICE_TABLE(of, mt7530_of_match);
 
 static int
-mt7530_probe(struct mdio_device *mdiodev)
+mt7530_probe_common(struct mt7530_priv *priv)
 {
-       static struct regmap_config *regmap_config;
-       struct mt7530_priv *priv;
-       struct device_node *dn;
-       int ret;
-
-       dn = mdiodev->dev.of_node;
-
-       priv = devm_kzalloc(&mdiodev->dev, sizeof(*priv), GFP_KERNEL);
-       if (!priv)
-               return -ENOMEM;
+       struct device *dev = priv->dev;
 
-       priv->ds = devm_kzalloc(&mdiodev->dev, sizeof(*priv->ds), GFP_KERNEL);
+       priv->ds = devm_kzalloc(dev, sizeof(*priv->ds), GFP_KERNEL);
        if (!priv->ds)
                return -ENOMEM;
 
-       priv->ds->dev = &mdiodev->dev;
+       priv->ds->dev = dev;
        priv->ds->num_ports = MT7530_NUM_PORTS;
 
-       /* Use medatek,mcm property to distinguish hardware type that would
-        * casues a little bit differences on power-on sequence.
-        */
-       priv->mcm = of_property_read_bool(dn, "mediatek,mcm");
-       if (priv->mcm) {
-               dev_info(&mdiodev->dev, "MT7530 adapts as multi-chip module\n");
-
-               priv->rstc = devm_reset_control_get(&mdiodev->dev, "mcm");
-               if (IS_ERR(priv->rstc)) {
-                       dev_err(&mdiodev->dev, "Couldn't get our reset line\n");
-                       return PTR_ERR(priv->rstc);
-               }
-       }
-
        /* Get the hardware identifier from the devicetree node.
         * We will need it for some of the clock and regulator setup.
         */
-       priv->info = of_device_get_match_data(&mdiodev->dev);
+       priv->info = of_device_get_match_data(dev);
        if (!priv->info)
                return -EINVAL;
 
@@ -3193,23 +3170,53 @@ mt7530_probe(struct mdio_device *mdiodev)
                return -EINVAL;
 
        priv->id = priv->info->id;
+       priv->dev = dev;
+       priv->ds->priv = priv;
+       priv->ds->ops = &mt7530_switch_ops;
+       mutex_init(&priv->reg_mutex);
+       dev_set_drvdata(dev, priv);
 
-       if (priv->id == ID_MT7530) {
-               priv->core_pwr = devm_regulator_get(&mdiodev->dev, "core");
-               if (IS_ERR(priv->core_pwr))
-                       return PTR_ERR(priv->core_pwr);
+       return 0;
+}
 
-               priv->io_pwr = devm_regulator_get(&mdiodev->dev, "io");
-               if (IS_ERR(priv->io_pwr))
-                       return PTR_ERR(priv->io_pwr);
-       }
+static int
+mt7530_probe(struct mdio_device *mdiodev)
+{
+       static struct regmap_config *regmap_config;
+       struct mt7530_priv *priv;
+       struct device_node *dn;
+       int ret;
+
+       dn = mdiodev->dev.of_node;
 
-       /* Not MCM that indicates switch works as the remote standalone
+       priv = devm_kzalloc(&mdiodev->dev, sizeof(*priv), GFP_KERNEL);
+       if (!priv)
+               return -ENOMEM;
+
+       priv->bus = mdiodev->bus;
+       priv->dev = &mdiodev->dev;
+
+       ret = mt7530_probe_common(priv);
+       if (ret)
+               return ret;
+
+       /* Use medatek,mcm property to distinguish hardware type that would
+        * cause a little bit differences on power-on sequence.
+        * Not MCM that indicates switch works as the remote standalone
         * integrated circuit so the GPIO pin would be used to complete
         * the reset, otherwise memory-mapped register accessing used
         * through syscon provides in the case of MCM.
         */
-       if (!priv->mcm) {
+       priv->mcm = of_property_read_bool(dn, "mediatek,mcm");
+       if (priv->mcm) {
+               dev_info(&mdiodev->dev, "MT7530 adapts as multi-chip module\n");
+
+               priv->rstc = devm_reset_control_get(&mdiodev->dev, "mcm");
+               if (IS_ERR(priv->rstc)) {
+                       dev_err(&mdiodev->dev, "Couldn't get our reset line\n");
+                       return PTR_ERR(priv->rstc);
+               }
+       } else {
                priv->reset = devm_gpiod_get_optional(&mdiodev->dev, "reset",
                                                      GPIOD_OUT_LOW);
                if (IS_ERR(priv->reset)) {
@@ -3218,12 +3225,15 @@ mt7530_probe(struct mdio_device *mdiodev)
                }
        }
 
-       priv->bus = mdiodev->bus;
-       priv->dev = &mdiodev->dev;
-       priv->ds->priv = priv;
-       priv->ds->ops = &mt7530_switch_ops;
-       mutex_init(&priv->reg_mutex);
-       dev_set_drvdata(&mdiodev->dev, priv);
+       if (priv->id == ID_MT7530) {
+               priv->core_pwr = devm_regulator_get(&mdiodev->dev, "core");
+               if (IS_ERR(priv->core_pwr))
+                       return PTR_ERR(priv->core_pwr);
+
+               priv->io_pwr = devm_regulator_get(&mdiodev->dev, "io");
+               if (IS_ERR(priv->io_pwr))
+                       return PTR_ERR(priv->io_pwr);
+       }
 
        regmap_config = devm_kzalloc(&mdiodev->dev, sizeof(*regmap_config),
                                     GFP_KERNEL);