net: dsa: mt7530: introduce mt7530_probe_common helper function
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>
This commit is contained in:
parent
25d15dee34
commit
37c9c0d8d0
@ -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;
|
||||
struct device *dev = priv->dev;
|
||||
|
||||
dn = mdiodev->dev.of_node;
|
||||
|
||||
priv = devm_kzalloc(&mdiodev->dev, sizeof(*priv), GFP_KERNEL);
|
||||
if (!priv)
|
||||
return -ENOMEM;
|
||||
|
||||
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,6 +3170,60 @@ 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);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
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.
|
||||
*/
|
||||
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)) {
|
||||
dev_err(&mdiodev->dev, "Couldn't get our reset line\n");
|
||||
return PTR_ERR(priv->reset);
|
||||
}
|
||||
}
|
||||
|
||||
if (priv->id == ID_MT7530) {
|
||||
priv->core_pwr = devm_regulator_get(&mdiodev->dev, "core");
|
||||
@ -3204,27 +3235,6 @@ mt7530_probe(struct mdio_device *mdiodev)
|
||||
return PTR_ERR(priv->io_pwr);
|
||||
}
|
||||
|
||||
/* 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->reset = devm_gpiod_get_optional(&mdiodev->dev, "reset",
|
||||
GPIOD_OUT_LOW);
|
||||
if (IS_ERR(priv->reset)) {
|
||||
dev_err(&mdiodev->dev, "Couldn't get our reset line\n");
|
||||
return PTR_ERR(priv->reset);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
regmap_config = devm_kzalloc(&mdiodev->dev, sizeof(*regmap_config),
|
||||
GFP_KERNEL);
|
||||
if (!regmap_config)
|
||||
|
Loading…
Reference in New Issue
Block a user