Skip to content

Commit

Permalink
net: dsa: mt7530: introduce mt7530_probe_common helper function
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Daniel Golle authored and David S. Miller committed Apr 3, 2023
1 parent 25d15de commit 37c9c0d
Showing 1 changed file with 54 additions and 44 deletions.
98 changes: 54 additions & 44 deletions drivers/net/dsa/mt7530.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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)) {
Expand All @@ -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);
Expand Down

0 comments on commit 37c9c0d

Please sign in to comment.