mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-13 05:54:23 +08:00
net: dsa: mt7530: refactor SGMII PCS creation
Instead of macro templates use a dedidated function and allocated regmap_config when creating the regmaps for the pcs-mtk-lynxi instances. This is in preparation to switching to use unlocked regmap accessors and have regmap's locking API handle locking for us. 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
b6f56cddb5
commit
9ecc00164d
@ -2927,26 +2927,56 @@ static const struct regmap_bus mt7531_regmap_bus = {
|
|||||||
.reg_update_bits = mt7530_regmap_update_bits,
|
.reg_update_bits = mt7530_regmap_update_bits,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MT7531_PCS_REGMAP_CONFIG(_name, _reg_base) \
|
static int
|
||||||
{ \
|
mt7531_create_sgmii(struct mt7530_priv *priv)
|
||||||
.name = _name, \
|
{
|
||||||
.reg_bits = 16, \
|
struct regmap_config *mt7531_pcs_config[2];
|
||||||
.val_bits = 32, \
|
struct phylink_pcs *pcs;
|
||||||
.reg_stride = 4, \
|
struct regmap *regmap;
|
||||||
.reg_base = _reg_base, \
|
int i, ret = 0;
|
||||||
.max_register = 0x17c, \
|
|
||||||
|
for (i = 0; i < 2; i++) {
|
||||||
|
mt7531_pcs_config[i] = devm_kzalloc(priv->dev,
|
||||||
|
sizeof(struct regmap_config),
|
||||||
|
GFP_KERNEL);
|
||||||
|
if (!mt7531_pcs_config[i]) {
|
||||||
|
ret = -ENOMEM;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
mt7531_pcs_config[i]->name = i ? "port6" : "port5";
|
||||||
|
mt7531_pcs_config[i]->reg_bits = 16;
|
||||||
|
mt7531_pcs_config[i]->val_bits = 32;
|
||||||
|
mt7531_pcs_config[i]->reg_stride = 4;
|
||||||
|
mt7531_pcs_config[i]->reg_base = MT7531_SGMII_REG_BASE(5 + i);
|
||||||
|
mt7531_pcs_config[i]->max_register = 0x17c;
|
||||||
|
|
||||||
|
regmap = devm_regmap_init(priv->dev,
|
||||||
|
&mt7531_regmap_bus, priv,
|
||||||
|
mt7531_pcs_config[i]);
|
||||||
|
if (IS_ERR(regmap)) {
|
||||||
|
ret = PTR_ERR(regmap);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pcs = mtk_pcs_lynxi_create(priv->dev, regmap,
|
||||||
|
MT7531_PHYA_CTRL_SIGNAL3, 0);
|
||||||
|
if (!pcs) {
|
||||||
|
ret = -ENXIO;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
priv->ports[5 + i].sgmii_pcs = pcs;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct regmap_config mt7531_pcs_config[] = {
|
if (ret && i)
|
||||||
MT7531_PCS_REGMAP_CONFIG("port5", MT7531_SGMII_REG_BASE(5)),
|
mtk_pcs_lynxi_destroy(priv->ports[5].sgmii_pcs);
|
||||||
MT7531_PCS_REGMAP_CONFIG("port6", MT7531_SGMII_REG_BASE(6)),
|
|
||||||
};
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
mt753x_setup(struct dsa_switch *ds)
|
mt753x_setup(struct dsa_switch *ds)
|
||||||
{
|
{
|
||||||
struct mt7530_priv *priv = ds->priv;
|
struct mt7530_priv *priv = ds->priv;
|
||||||
struct regmap *regmap;
|
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
|
||||||
/* Initialise the PCS devices */
|
/* Initialise the PCS devices */
|
||||||
@ -2968,15 +2998,11 @@ mt753x_setup(struct dsa_switch *ds)
|
|||||||
if (ret && priv->irq)
|
if (ret && priv->irq)
|
||||||
mt7530_free_irq_common(priv);
|
mt7530_free_irq_common(priv);
|
||||||
|
|
||||||
if (priv->id == ID_MT7531)
|
if (priv->id == ID_MT7531) {
|
||||||
for (i = 0; i < 2; i++) {
|
ret = mt7531_create_sgmii(priv);
|
||||||
regmap = devm_regmap_init(ds->dev,
|
if (ret && priv->irq)
|
||||||
&mt7531_regmap_bus, priv,
|
mt7530_free_irq_common(priv);
|
||||||
&mt7531_pcs_config[i]);
|
}
|
||||||
priv->ports[5 + i].sgmii_pcs =
|
|
||||||
mtk_pcs_lynxi_create(ds->dev, regmap,
|
|
||||||
MT7531_PHYA_CTRL_SIGNAL3, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user