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>
31 ret = bus->write(bus, 0x1f, 0x1f, page); in mt7530_regmap_write()
35 ret = bus->write(bus, 0x1f, r, lo); in mt7530_regmap_write()
39 ret = bus->write(bus, 0x1f, 0x10, hi); in mt7530_regmap_write()
54 ret = bus->write(bus, 0x1f, 0x1f, page); in mt7530_regmap_read()
58 lo = bus->read(bus, 0x1f, r); in mt7530_regmap_read()
59 hi = bus->read(bus, 0x1f, 0x10); in mt7530_regmap_read()
95 mt7531_pcs_config[i] = devm_kzalloc(priv->dev, in mt7531_create_sgmii()
99 ret = -ENOMEM; in mt7531_create_sgmii()
103 mt7531_pcs_config[i]->name = i ? "port6" : "port5"; in mt7531_create_sgmii()
104 mt7531_pcs_config[i]->reg_bits = 16; in mt7531_create_sgmii()
105 mt7531_pcs_config[i]->val_bits = 32; in mt7531_create_sgmii()
106 mt7531_pcs_config[i]->reg_stride = 4; in mt7531_create_sgmii()
107 mt7531_pcs_config[i]->reg_base = MT7531_SGMII_REG_BASE(5 + i); in mt7531_create_sgmii()
108 mt7531_pcs_config[i]->max_register = 0x17c; in mt7531_create_sgmii()
109 mt7531_pcs_config[i]->lock = mt7530_mdio_regmap_lock; in mt7531_create_sgmii()
110 mt7531_pcs_config[i]->unlock = mt7530_mdio_regmap_unlock; in mt7531_create_sgmii()
111 mt7531_pcs_config[i]->lock_arg = &priv->bus->mdio_lock; in mt7531_create_sgmii()
113 regmap = devm_regmap_init(priv->dev, in mt7531_create_sgmii()
114 &mt7530_regmap_bus, priv->bus, in mt7531_create_sgmii()
120 pcs = mtk_pcs_lynxi_create(priv->dev, regmap, in mt7531_create_sgmii()
123 ret = -ENXIO; in mt7531_create_sgmii()
126 priv->ports[5 + i].sgmii_pcs = pcs; in mt7531_create_sgmii()
130 mtk_pcs_lynxi_destroy(priv->ports[5].sgmii_pcs); in mt7531_create_sgmii()
136 { .compatible = "mediatek,mt7621", .data = &mt753x_table[ID_MT7621], },
151 dn = mdiodev->dev.of_node; in mt7530_probe()
153 priv = devm_kzalloc(&mdiodev->dev, sizeof(*priv), GFP_KERNEL); in mt7530_probe()
155 return -ENOMEM; in mt7530_probe()
157 priv->bus = mdiodev->bus; in mt7530_probe()
158 priv->dev = &mdiodev->dev; in mt7530_probe()
165 * cause a little bit differences on power-on sequence. in mt7530_probe()
167 * integrated circuit so the GPIO pin would be used to complete in mt7530_probe()
168 * the reset, otherwise memory-mapped register accessing used in mt7530_probe()
171 priv->mcm = of_property_read_bool(dn, "mediatek,mcm"); in mt7530_probe()
172 if (priv->mcm) { in mt7530_probe()
173 dev_info(&mdiodev->dev, "MT7530 adapts as multi-chip module\n"); in mt7530_probe()
175 priv->rstc = devm_reset_control_get(&mdiodev->dev, "mcm"); in mt7530_probe()
176 if (IS_ERR(priv->rstc)) { in mt7530_probe()
177 dev_err(&mdiodev->dev, "Couldn't get our reset line\n"); in mt7530_probe()
178 return PTR_ERR(priv->rstc); in mt7530_probe()
181 priv->reset = devm_gpiod_get_optional(&mdiodev->dev, "reset", in mt7530_probe()
183 if (IS_ERR(priv->reset)) { in mt7530_probe()
184 dev_err(&mdiodev->dev, "Couldn't get our reset line\n"); in mt7530_probe()
185 return PTR_ERR(priv->reset); in mt7530_probe()
189 if (priv->id == ID_MT7530) { in mt7530_probe()
190 priv->core_pwr = devm_regulator_get(&mdiodev->dev, "core"); in mt7530_probe()
191 if (IS_ERR(priv->core_pwr)) in mt7530_probe()
192 return PTR_ERR(priv->core_pwr); in mt7530_probe()
194 priv->io_pwr = devm_regulator_get(&mdiodev->dev, "io"); in mt7530_probe()
195 if (IS_ERR(priv->io_pwr)) in mt7530_probe()
196 return PTR_ERR(priv->io_pwr); in mt7530_probe()
199 regmap_config = devm_kzalloc(&mdiodev->dev, sizeof(*regmap_config), in mt7530_probe()
202 return -ENOMEM; in mt7530_probe()
204 regmap_config->reg_bits = 16; in mt7530_probe()
205 regmap_config->val_bits = 32; in mt7530_probe()
206 regmap_config->reg_stride = 4; in mt7530_probe()
207 regmap_config->max_register = MT7530_CREV; in mt7530_probe()
208 regmap_config->disable_locking = true; in mt7530_probe()
209 priv->regmap = devm_regmap_init(priv->dev, &mt7530_regmap_bus, in mt7530_probe()
210 priv->bus, regmap_config); in mt7530_probe()
211 if (IS_ERR(priv->regmap)) in mt7530_probe()
212 return PTR_ERR(priv->regmap); in mt7530_probe()
214 if (priv->id == ID_MT7531) in mt7530_probe()
215 priv->create_sgmii = mt7531_create_sgmii; in mt7530_probe()
217 return dsa_register_switch(priv->ds); in mt7530_probe()
223 struct mt7530_priv *priv = dev_get_drvdata(&mdiodev->dev); in mt7530_remove()
229 ret = regulator_disable(priv->core_pwr); in mt7530_remove()
231 dev_err(priv->dev, in mt7530_remove()
234 ret = regulator_disable(priv->io_pwr); in mt7530_remove()
236 dev_err(priv->dev, "Failed to disable io pwr: %d\n", in mt7530_remove()
242 mtk_pcs_lynxi_destroy(priv->ports[5 + i].sgmii_pcs); in mt7530_remove()
247 struct mt7530_priv *priv = dev_get_drvdata(&mdiodev->dev); in mt7530_shutdown()
252 dsa_switch_shutdown(priv->ds); in mt7530_shutdown()
254 dev_set_drvdata(&mdiodev->dev, NULL); in mt7530_shutdown()
262 .name = "mt7530-mdio",