Lines Matching refs:priv
46 static inline void realtek_smi_clk_delay(struct realtek_priv *priv)
48 ndelay(priv->clk_delay);
51 static void realtek_smi_start(struct realtek_priv *priv)
56 gpiod_direction_output(priv->mdc, 0);
57 gpiod_direction_output(priv->mdio, 1);
58 realtek_smi_clk_delay(priv);
61 gpiod_set_value(priv->mdc, 1);
62 realtek_smi_clk_delay(priv);
63 gpiod_set_value(priv->mdc, 0);
64 realtek_smi_clk_delay(priv);
67 gpiod_set_value(priv->mdc, 1);
68 realtek_smi_clk_delay(priv);
69 gpiod_set_value(priv->mdio, 0);
70 realtek_smi_clk_delay(priv);
71 gpiod_set_value(priv->mdc, 0);
72 realtek_smi_clk_delay(priv);
73 gpiod_set_value(priv->mdio, 1);
76 static void realtek_smi_stop(struct realtek_priv *priv)
78 realtek_smi_clk_delay(priv);
79 gpiod_set_value(priv->mdio, 0);
80 gpiod_set_value(priv->mdc, 1);
81 realtek_smi_clk_delay(priv);
82 gpiod_set_value(priv->mdio, 1);
83 realtek_smi_clk_delay(priv);
84 gpiod_set_value(priv->mdc, 1);
85 realtek_smi_clk_delay(priv);
86 gpiod_set_value(priv->mdc, 0);
87 realtek_smi_clk_delay(priv);
88 gpiod_set_value(priv->mdc, 1);
91 realtek_smi_clk_delay(priv);
92 gpiod_set_value(priv->mdc, 0);
93 realtek_smi_clk_delay(priv);
94 gpiod_set_value(priv->mdc, 1);
97 gpiod_direction_input(priv->mdio);
98 gpiod_direction_input(priv->mdc);
101 static void realtek_smi_write_bits(struct realtek_priv *priv, u32 data, u32 len)
104 realtek_smi_clk_delay(priv);
107 gpiod_set_value(priv->mdio, !!(data & (1 << (len - 1))));
108 realtek_smi_clk_delay(priv);
111 gpiod_set_value(priv->mdc, 1);
112 realtek_smi_clk_delay(priv);
113 gpiod_set_value(priv->mdc, 0);
117 static void realtek_smi_read_bits(struct realtek_priv *priv, u32 len, u32 *data)
119 gpiod_direction_input(priv->mdio);
124 realtek_smi_clk_delay(priv);
127 gpiod_set_value(priv->mdc, 1);
128 realtek_smi_clk_delay(priv);
129 u = !!gpiod_get_value(priv->mdio);
130 gpiod_set_value(priv->mdc, 0);
135 gpiod_direction_output(priv->mdio, 0);
138 static int realtek_smi_wait_for_ack(struct realtek_priv *priv)
146 realtek_smi_read_bits(priv, 1, &ack);
151 dev_err(priv->dev, "ACK timeout\n");
159 static int realtek_smi_write_byte(struct realtek_priv *priv, u8 data)
161 realtek_smi_write_bits(priv, data, 8);
162 return realtek_smi_wait_for_ack(priv);
165 static int realtek_smi_write_byte_noack(struct realtek_priv *priv, u8 data)
167 realtek_smi_write_bits(priv, data, 8);
171 static int realtek_smi_read_byte0(struct realtek_priv *priv, u8 *data)
176 realtek_smi_read_bits(priv, 8, &t);
180 realtek_smi_write_bits(priv, 0x00, 1);
185 static int realtek_smi_read_byte1(struct realtek_priv *priv, u8 *data)
190 realtek_smi_read_bits(priv, 8, &t);
194 realtek_smi_write_bits(priv, 0x01, 1);
199 static int realtek_smi_read_reg(struct realtek_priv *priv, u32 addr, u32 *data)
206 spin_lock_irqsave(&priv->lock, flags);
208 realtek_smi_start(priv);
211 ret = realtek_smi_write_byte(priv, priv->cmd_read);
216 ret = realtek_smi_write_byte(priv, addr & 0xff);
221 ret = realtek_smi_write_byte(priv, addr >> 8);
226 realtek_smi_read_byte0(priv, &lo);
228 realtek_smi_read_byte1(priv, &hi);
235 realtek_smi_stop(priv);
236 spin_unlock_irqrestore(&priv->lock, flags);
241 static int realtek_smi_write_reg(struct realtek_priv *priv,
247 spin_lock_irqsave(&priv->lock, flags);
249 realtek_smi_start(priv);
252 ret = realtek_smi_write_byte(priv, priv->cmd_write);
257 ret = realtek_smi_write_byte(priv, addr & 0xff);
262 ret = realtek_smi_write_byte(priv, addr >> 8);
267 ret = realtek_smi_write_byte(priv, data & 0xff);
273 ret = realtek_smi_write_byte(priv, data >> 8);
275 ret = realtek_smi_write_byte_noack(priv, data >> 8);
282 realtek_smi_stop(priv);
283 spin_unlock_irqrestore(&priv->lock, flags);
301 struct realtek_priv *priv = ctx;
303 return realtek_smi_write_reg(priv, reg, val, true);
308 struct realtek_priv *priv = ctx;
310 return realtek_smi_read_reg(priv, reg, val);
315 struct realtek_priv *priv = ctx;
317 mutex_lock(&priv->map_lock);
322 struct realtek_priv *priv = ctx;
324 mutex_unlock(&priv->map_lock);
356 struct realtek_priv *priv = bus->priv;
358 return priv->ops->phy_read(priv, addr, regnum);
364 struct realtek_priv *priv = bus->priv;
366 return priv->ops->phy_write(priv, addr, regnum, val);
371 struct realtek_priv *priv = ds->priv;
375 mdio_np = of_get_compatible_child(priv->dev->of_node, "realtek,smi-mdio");
377 dev_err(priv->dev, "no MDIO bus node\n");
381 priv->slave_mii_bus = devm_mdiobus_alloc(priv->dev);
382 if (!priv->slave_mii_bus) {
386 priv->slave_mii_bus->priv = priv;
387 priv->slave_mii_bus->name = "SMI slave MII";
388 priv->slave_mii_bus->read = realtek_smi_mdio_read;
389 priv->slave_mii_bus->write = realtek_smi_mdio_write;
390 snprintf(priv->slave_mii_bus->id, MII_BUS_ID_SIZE, "SMI-%d",
392 priv->slave_mii_bus->dev.of_node = mdio_np;
393 priv->slave_mii_bus->parent = priv->dev;
394 ds->slave_mii_bus = priv->slave_mii_bus;
396 ret = devm_of_mdiobus_register(priv->dev, priv->slave_mii_bus, mdio_np);
398 dev_err(priv->dev, "unable to register MDIO bus %s\n",
399 priv->slave_mii_bus->id);
415 struct realtek_priv *priv;
423 priv = devm_kzalloc(dev, sizeof(*priv) + var->chip_data_sz, GFP_KERNEL);
424 if (!priv)
426 priv->chip_data = (void *)priv + sizeof(*priv);
428 mutex_init(&priv->map_lock);
431 rc.lock_arg = priv;
432 priv->map = devm_regmap_init(dev, NULL, priv, &rc);
433 if (IS_ERR(priv->map)) {
434 ret = PTR_ERR(priv->map);
440 priv->map_nolock = devm_regmap_init(dev, NULL, priv, &rc);
441 if (IS_ERR(priv->map_nolock)) {
442 ret = PTR_ERR(priv->map_nolock);
448 priv->dev = dev;
449 priv->clk_delay = var->clk_delay;
450 priv->cmd_read = var->cmd_read;
451 priv->cmd_write = var->cmd_write;
452 priv->ops = var->ops;
454 priv->setup_interface = realtek_smi_setup_mdio;
455 priv->write_reg_noack = realtek_smi_write_reg_noack;
457 dev_set_drvdata(dev, priv);
458 spin_lock_init(&priv->lock);
462 priv->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
463 if (IS_ERR(priv->reset)) {
465 return PTR_ERR(priv->reset);
467 if (priv->reset) {
468 gpiod_set_value(priv->reset, 1);
471 gpiod_set_value(priv->reset, 0);
477 priv->mdc = devm_gpiod_get_optional(dev, "mdc", GPIOD_OUT_LOW);
478 if (IS_ERR(priv->mdc))
479 return PTR_ERR(priv->mdc);
480 priv->mdio = devm_gpiod_get_optional(dev, "mdio", GPIOD_OUT_LOW);
481 if (IS_ERR(priv->mdio))
482 return PTR_ERR(priv->mdio);
484 priv->leds_disabled = of_property_read_bool(np, "realtek,disable-leds");
486 ret = priv->ops->detect(priv);
492 priv->ds = devm_kzalloc(dev, sizeof(*priv->ds), GFP_KERNEL);
493 if (!priv->ds)
496 priv->ds->dev = dev;
497 priv->ds->num_ports = priv->num_ports;
498 priv->ds->priv = priv;
500 priv->ds->ops = var->ds_ops_smi;
501 ret = dsa_register_switch(priv->ds);
511 struct realtek_priv *priv = platform_get_drvdata(pdev);
513 if (!priv)
516 dsa_unregister_switch(priv->ds);
517 if (priv->slave_mii_bus)
518 of_node_put(priv->slave_mii_bus->dev.of_node);
521 if (priv->reset)
522 gpiod_set_value(priv->reset, 1);
529 struct realtek_priv *priv = platform_get_drvdata(pdev);
531 if (!priv)
534 dsa_switch_shutdown(priv->ds);