Lines Matching defs:phydev

178 	struct phy_device *phydev = dev_get_drvdata(dev);
179 struct bcm54140_priv *priv = phydev->priv;
185 tmp = bcm_phy_read_rdb(phydev, BCM54140_RDB_MON_ISR);
202 struct phy_device *phydev = dev_get_drvdata(dev);
224 tmp = bcm_phy_read_rdb(phydev, reg);
236 struct phy_device *phydev = dev_get_drvdata(dev);
257 tmp = bcm_phy_read_rdb(phydev, reg);
307 struct phy_device *phydev = dev_get_drvdata(dev);
325 return bcm_phy_modify_rdb(phydev, reg, mask,
332 struct phy_device *phydev = dev_get_drvdata(dev);
349 return bcm_phy_modify_rdb(phydev, reg, mask,
391 static int bcm54140_enable_monitoring(struct phy_device *phydev)
406 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_MON_CTRL, mask, set);
409 static int bcm54140_probe_once(struct phy_device *phydev)
415 ret = bcm54140_enable_monitoring(phydev);
419 hwmon = devm_hwmon_device_register_with_info(&phydev->mdio.dev,
420 "BCM54140", phydev,
427 static int bcm54140_base_read_rdb(struct phy_device *phydev, u16 rdb)
431 phy_lock_mdio_bus(phydev);
432 ret = __phy_package_write(phydev, MII_BCM54XX_RDB_ADDR, rdb);
436 ret = __phy_package_read(phydev, MII_BCM54XX_RDB_DATA);
439 phy_unlock_mdio_bus(phydev);
443 static int bcm54140_base_write_rdb(struct phy_device *phydev,
448 phy_lock_mdio_bus(phydev);
449 ret = __phy_package_write(phydev, MII_BCM54XX_RDB_ADDR, rdb);
453 ret = __phy_package_write(phydev, MII_BCM54XX_RDB_DATA, val);
456 phy_unlock_mdio_bus(phydev);
464 static int bcm54140_b0_workaround(struct phy_device *phydev)
469 spare3 = bcm_phy_read_rdb(phydev, BCM54140_RDB_SPARE3);
475 ret = bcm_phy_write_rdb(phydev, BCM54140_RDB_SPARE3, spare3);
479 ret = phy_modify(phydev, MII_BMCR, 0, BMCR_PDOWN);
483 ret = phy_modify(phydev, MII_BMCR, BMCR_PDOWN, 0);
489 return bcm_phy_write_rdb(phydev, BCM54140_RDB_SPARE3, spare3);
496 static int bcm54140_get_base_addr_and_port(struct phy_device *phydev)
498 struct bcm54140_priv *priv = phydev->priv;
499 struct mii_bus *bus = phydev->mdio.bus;
505 min_addr = phydev->mdio.addr;
506 max_addr = phydev->mdio.addr;
507 addr = phydev->mdio.addr;
531 addr = phydev->mdio.addr;
547 if ((phy_id & phydev->drv->phy_id_mask) !=
548 (phydev->drv->phy_id & phydev->drv->phy_id_mask)) {
549 addr = phydev->mdio.addr;
559 dev_err(&phydev->mdio.dev,
565 priv->port = (phydev->mdio.addr - min_addr) % 4;
566 priv->base_addr = phydev->mdio.addr - priv->port;
571 static int bcm54140_probe(struct phy_device *phydev)
576 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
580 phydev->priv = priv;
582 ret = bcm54140_get_base_addr_and_port(phydev);
586 devm_phy_package_join(&phydev->mdio.dev, phydev, priv->base_addr, 0);
591 if (phy_package_init_once(phydev)) {
592 ret = bcm54140_probe_once(phydev);
598 phydev_dbg(phydev, "probed (port %d, base PHY address %d)\n",
604 static int bcm54140_config_init(struct phy_device *phydev)
610 if (BCM54140_PHY_ID_REV(phydev->phy_id) == BCM54140_REV_B0) {
611 ret = bcm54140_b0_workaround(phydev);
620 ret = bcm_phy_write_rdb(phydev, BCM54140_RDB_IMR, reg);
625 ret = bcm_phy_modify_rdb(phydev, BCM54140_RDB_SPARE1,
630 ret = bcm_phy_modify_rdb(phydev, BCM54140_RDB_LED_CTRL,
636 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_C_PWR,
640 static irqreturn_t bcm54140_handle_interrupt(struct phy_device *phydev)
644 irq_status = bcm_phy_read_rdb(phydev, BCM54140_RDB_ISR);
646 phy_error(phydev);
650 irq_mask = bcm_phy_read_rdb(phydev, BCM54140_RDB_IMR);
652 phy_error(phydev);
660 phy_trigger_machine(phydev);
665 static int bcm54140_ack_intr(struct phy_device *phydev)
670 reg = bcm_phy_read_rdb(phydev, BCM54140_RDB_ISR);
677 static int bcm54140_config_intr(struct phy_device *phydev)
679 struct bcm54140_priv *priv = phydev->priv;
689 reg = bcm54140_base_read_rdb(phydev, BCM54140_RDB_TOP_IMR);
693 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
694 err = bcm54140_ack_intr(phydev);
699 err = bcm54140_base_write_rdb(phydev, BCM54140_RDB_TOP_IMR, reg);
702 err = bcm54140_base_write_rdb(phydev, BCM54140_RDB_TOP_IMR, reg);
706 err = bcm54140_ack_intr(phydev);
712 static int bcm54140_get_downshift(struct phy_device *phydev, u8 *data)
716 val = bcm_phy_read_rdb(phydev, BCM54140_RDB_C_MISC_CTRL);
725 val = bcm_phy_read_rdb(phydev, BCM54140_RDB_SPARE2);
737 static int bcm54140_set_downshift(struct phy_device *phydev, u8 cnt)
746 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_C_MISC_CTRL,
760 ret = bcm_phy_modify_rdb(phydev, BCM54140_RDB_SPARE2,
765 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_C_MISC_CTRL,
769 static int bcm54140_get_edpd(struct phy_device *phydev, u16 *tx_interval)
773 val = bcm_phy_read_rdb(phydev, BCM54140_RDB_C_APWR);
797 static int bcm54140_set_edpd(struct phy_device *phydev, u16 tx_interval)
827 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_C_APWR, mask, set);
830 static int bcm54140_get_tunable(struct phy_device *phydev,
835 return bcm54140_get_downshift(phydev, data);
837 return bcm54140_get_edpd(phydev, data);
843 static int bcm54140_set_tunable(struct phy_device *phydev,
848 return bcm54140_set_downshift(phydev, *(const u8 *)data);
850 return bcm54140_set_edpd(phydev, *(const u16 *)data);