Lines Matching +full:mt7621 +full:- +full:gpio
1 // SPDX-License-Identifier: GPL-2.0-only
3 #include <linux/gpio/consumer.h>
6 #include <linux/pcs/pcs-mtk-lynxi.h>
22 struct mii_bus *bus = priv->bus; in mt7530_regmap_write()
31 ret = bus->write(bus, priv->mdiodev->addr, 0x1f, page); in mt7530_regmap_write()
35 ret = bus->write(bus, priv->mdiodev->addr, r, lo); in mt7530_regmap_write()
39 ret = bus->write(bus, priv->mdiodev->addr, 0x10, hi); in mt7530_regmap_write()
47 struct mii_bus *bus = priv->bus; in mt7530_regmap_read()
54 ret = bus->write(bus, priv->mdiodev->addr, 0x1f, page); in mt7530_regmap_read()
58 lo = bus->read(bus, priv->mdiodev->addr, r); in mt7530_regmap_read()
59 hi = bus->read(bus, priv->mdiodev->addr, 0x10); in mt7530_regmap_read()
91 for (i = priv->p5_sgmii ? 0 : 1; i < 2; i++) { in mt7531_create_sgmii()
92 mt7531_pcs_config[i] = devm_kzalloc(priv->dev, in mt7531_create_sgmii()
96 ret = -ENOMEM; in mt7531_create_sgmii()
100 mt7531_pcs_config[i]->name = i ? "port6" : "port5"; in mt7531_create_sgmii()
101 mt7531_pcs_config[i]->reg_bits = 16; in mt7531_create_sgmii()
102 mt7531_pcs_config[i]->val_bits = 32; in mt7531_create_sgmii()
103 mt7531_pcs_config[i]->reg_stride = 4; in mt7531_create_sgmii()
104 mt7531_pcs_config[i]->reg_base = MT7531_SGMII_REG_BASE(5 + i); in mt7531_create_sgmii()
105 mt7531_pcs_config[i]->max_register = 0x17c; in mt7531_create_sgmii()
106 mt7531_pcs_config[i]->lock = mt7530_mdio_regmap_lock; in mt7531_create_sgmii()
107 mt7531_pcs_config[i]->unlock = mt7530_mdio_regmap_unlock; in mt7531_create_sgmii()
108 mt7531_pcs_config[i]->lock_arg = &priv->bus->mdio_lock; in mt7531_create_sgmii()
110 regmap = devm_regmap_init(priv->dev, &mt7530_regmap_bus, priv, in mt7531_create_sgmii()
116 pcs = mtk_pcs_lynxi_create(priv->dev, regmap, in mt7531_create_sgmii()
119 ret = -ENXIO; in mt7531_create_sgmii()
122 priv->ports[5 + i].sgmii_pcs = pcs; in mt7531_create_sgmii()
126 mtk_pcs_lynxi_destroy(priv->ports[5].sgmii_pcs); in mt7531_create_sgmii()
132 { .compatible = "mediatek,mt7621", .data = &mt753x_table[ID_MT7621], },
147 dn = mdiodev->dev.of_node; in mt7530_probe()
149 priv = devm_kzalloc(&mdiodev->dev, sizeof(*priv), GFP_KERNEL); in mt7530_probe()
151 return -ENOMEM; in mt7530_probe()
153 priv->bus = mdiodev->bus; in mt7530_probe()
154 priv->dev = &mdiodev->dev; in mt7530_probe()
155 priv->mdiodev = mdiodev; in mt7530_probe()
162 * cause a little bit differences on power-on sequence. in mt7530_probe()
164 * integrated circuit so the GPIO pin would be used to complete in mt7530_probe()
165 * the reset, otherwise memory-mapped register accessing used in mt7530_probe()
168 priv->mcm = of_property_read_bool(dn, "mediatek,mcm"); in mt7530_probe()
169 if (priv->mcm) { in mt7530_probe()
170 dev_info(&mdiodev->dev, "MT7530 adapts as multi-chip module\n"); in mt7530_probe()
172 priv->rstc = devm_reset_control_get(&mdiodev->dev, "mcm"); in mt7530_probe()
173 if (IS_ERR(priv->rstc)) { in mt7530_probe()
174 dev_err(&mdiodev->dev, "Couldn't get our reset line\n"); in mt7530_probe()
175 return PTR_ERR(priv->rstc); in mt7530_probe()
178 priv->reset = devm_gpiod_get_optional(&mdiodev->dev, "reset", in mt7530_probe()
180 if (IS_ERR(priv->reset)) { in mt7530_probe()
181 dev_err(&mdiodev->dev, "Couldn't get our reset line\n"); in mt7530_probe()
182 return PTR_ERR(priv->reset); in mt7530_probe()
186 if (priv->id == ID_MT7530) { in mt7530_probe()
187 priv->core_pwr = devm_regulator_get(&mdiodev->dev, "core"); in mt7530_probe()
188 if (IS_ERR(priv->core_pwr)) in mt7530_probe()
189 return PTR_ERR(priv->core_pwr); in mt7530_probe()
191 priv->io_pwr = devm_regulator_get(&mdiodev->dev, "io"); in mt7530_probe()
192 if (IS_ERR(priv->io_pwr)) in mt7530_probe()
193 return PTR_ERR(priv->io_pwr); in mt7530_probe()
196 regmap_config = devm_kzalloc(&mdiodev->dev, sizeof(*regmap_config), in mt7530_probe()
199 return -ENOMEM; in mt7530_probe()
201 regmap_config->reg_bits = 16; in mt7530_probe()
202 regmap_config->val_bits = 32; in mt7530_probe()
203 regmap_config->reg_stride = 4; in mt7530_probe()
204 regmap_config->max_register = MT7530_CREV; in mt7530_probe()
205 regmap_config->disable_locking = true; in mt7530_probe()
206 priv->regmap = devm_regmap_init(priv->dev, &mt7530_regmap_bus, priv, in mt7530_probe()
208 if (IS_ERR(priv->regmap)) in mt7530_probe()
209 return PTR_ERR(priv->regmap); in mt7530_probe()
211 if (priv->id == ID_MT7531) in mt7530_probe()
212 priv->create_sgmii = mt7531_create_sgmii; in mt7530_probe()
214 return dsa_register_switch(priv->ds); in mt7530_probe()
220 struct mt7530_priv *priv = dev_get_drvdata(&mdiodev->dev); in mt7530_remove()
226 ret = regulator_disable(priv->core_pwr); in mt7530_remove()
228 dev_err(priv->dev, in mt7530_remove()
231 ret = regulator_disable(priv->io_pwr); in mt7530_remove()
233 dev_err(priv->dev, "Failed to disable io pwr: %d\n", in mt7530_remove()
239 mtk_pcs_lynxi_destroy(priv->ports[5 + i].sgmii_pcs); in mt7530_remove()
244 struct mt7530_priv *priv = dev_get_drvdata(&mdiodev->dev); in mt7530_shutdown()
249 dsa_switch_shutdown(priv->ds); in mt7530_shutdown()
251 dev_set_drvdata(&mdiodev->dev, NULL); in mt7530_shutdown()
259 .name = "mt7530-mdio",