Lines Matching defs:phydev

182 	struct phy_device *phydev = dev_get_drvdata(dev);
183 struct bcm54140_priv *priv = phydev->priv;
189 tmp = bcm_phy_read_rdb(phydev, BCM54140_RDB_MON_ISR);
206 struct phy_device *phydev = dev_get_drvdata(dev);
228 tmp = bcm_phy_read_rdb(phydev, reg);
240 struct phy_device *phydev = dev_get_drvdata(dev);
261 tmp = bcm_phy_read_rdb(phydev, reg);
311 struct phy_device *phydev = dev_get_drvdata(dev);
329 return bcm_phy_modify_rdb(phydev, reg, mask,
336 struct phy_device *phydev = dev_get_drvdata(dev);
353 return bcm_phy_modify_rdb(phydev, reg, mask,
395 static int bcm54140_enable_monitoring(struct phy_device *phydev)
410 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_MON_CTRL, mask, set);
413 static int bcm54140_probe_once(struct phy_device *phydev)
419 ret = bcm54140_enable_monitoring(phydev);
423 hwmon = devm_hwmon_device_register_with_info(&phydev->mdio.dev,
424 "BCM54140", phydev,
431 static int bcm54140_base_read_rdb(struct phy_device *phydev, u16 rdb)
435 phy_lock_mdio_bus(phydev);
436 ret = __phy_package_write(phydev, BCM54140_BASE_ADDR,
441 ret = __phy_package_read(phydev, BCM54140_BASE_ADDR,
445 phy_unlock_mdio_bus(phydev);
449 static int bcm54140_base_write_rdb(struct phy_device *phydev,
454 phy_lock_mdio_bus(phydev);
455 ret = __phy_package_write(phydev, BCM54140_BASE_ADDR,
460 ret = __phy_package_write(phydev, BCM54140_BASE_ADDR,
464 phy_unlock_mdio_bus(phydev);
472 static int bcm54140_b0_workaround(struct phy_device *phydev)
477 spare3 = bcm_phy_read_rdb(phydev, BCM54140_RDB_SPARE3);
483 ret = bcm_phy_write_rdb(phydev, BCM54140_RDB_SPARE3, spare3);
487 ret = phy_modify(phydev, MII_BMCR, 0, BMCR_PDOWN);
491 ret = phy_modify(phydev, MII_BMCR, BMCR_PDOWN, 0);
497 return bcm_phy_write_rdb(phydev, BCM54140_RDB_SPARE3, spare3);
504 static int bcm54140_get_base_addr_and_port(struct phy_device *phydev)
506 struct bcm54140_priv *priv = phydev->priv;
507 struct mii_bus *bus = phydev->mdio.bus;
513 min_addr = phydev->mdio.addr;
514 max_addr = phydev->mdio.addr;
515 addr = phydev->mdio.addr;
539 addr = phydev->mdio.addr;
555 if ((phy_id & phydev->drv->phy_id_mask) !=
556 (phydev->drv->phy_id & phydev->drv->phy_id_mask)) {
557 addr = phydev->mdio.addr;
567 dev_err(&phydev->mdio.dev,
573 priv->port = (phydev->mdio.addr - min_addr) % 4;
574 priv->base_addr = phydev->mdio.addr - priv->port;
579 static int bcm54140_probe(struct phy_device *phydev)
584 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(*priv), GFP_KERNEL);
588 phydev->priv = priv;
590 ret = bcm54140_get_base_addr_and_port(phydev);
594 devm_phy_package_join(&phydev->mdio.dev, phydev, priv->base_addr, 0);
599 if (phy_package_init_once(phydev)) {
600 ret = bcm54140_probe_once(phydev);
606 phydev_dbg(phydev, "probed (port %d, base PHY address %d)\n",
612 static int bcm54140_config_init(struct phy_device *phydev)
618 if (BCM54140_PHY_ID_REV(phydev->phy_id) == BCM54140_REV_B0) {
619 ret = bcm54140_b0_workaround(phydev);
628 ret = bcm_phy_write_rdb(phydev, BCM54140_RDB_IMR, reg);
633 ret = bcm_phy_modify_rdb(phydev, BCM54140_RDB_SPARE1,
638 ret = bcm_phy_modify_rdb(phydev, BCM54140_RDB_LED_CTRL,
644 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_C_PWR,
648 static irqreturn_t bcm54140_handle_interrupt(struct phy_device *phydev)
652 irq_status = bcm_phy_read_rdb(phydev, BCM54140_RDB_ISR);
654 phy_error(phydev);
658 irq_mask = bcm_phy_read_rdb(phydev, BCM54140_RDB_IMR);
660 phy_error(phydev);
668 phy_trigger_machine(phydev);
673 static int bcm54140_ack_intr(struct phy_device *phydev)
678 reg = bcm_phy_read_rdb(phydev, BCM54140_RDB_ISR);
685 static int bcm54140_config_intr(struct phy_device *phydev)
687 struct bcm54140_priv *priv = phydev->priv;
697 reg = bcm54140_base_read_rdb(phydev, BCM54140_RDB_TOP_IMR);
701 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) {
702 err = bcm54140_ack_intr(phydev);
707 err = bcm54140_base_write_rdb(phydev, BCM54140_RDB_TOP_IMR, reg);
710 err = bcm54140_base_write_rdb(phydev, BCM54140_RDB_TOP_IMR, reg);
714 err = bcm54140_ack_intr(phydev);
720 static int bcm54140_get_downshift(struct phy_device *phydev, u8 *data)
724 val = bcm_phy_read_rdb(phydev, BCM54140_RDB_C_MISC_CTRL);
733 val = bcm_phy_read_rdb(phydev, BCM54140_RDB_SPARE2);
745 static int bcm54140_set_downshift(struct phy_device *phydev, u8 cnt)
754 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_C_MISC_CTRL,
768 ret = bcm_phy_modify_rdb(phydev, BCM54140_RDB_SPARE2,
773 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_C_MISC_CTRL,
777 static int bcm54140_get_edpd(struct phy_device *phydev, u16 *tx_interval)
781 val = bcm_phy_read_rdb(phydev, BCM54140_RDB_C_APWR);
805 static int bcm54140_set_edpd(struct phy_device *phydev, u16 tx_interval)
835 return bcm_phy_modify_rdb(phydev, BCM54140_RDB_C_APWR, mask, set);
838 static int bcm54140_get_tunable(struct phy_device *phydev,
843 return bcm54140_get_downshift(phydev, data);
845 return bcm54140_get_edpd(phydev, data);
851 static int bcm54140_set_tunable(struct phy_device *phydev,
856 return bcm54140_set_downshift(phydev, *(const u8 *)data);
858 return bcm54140_set_edpd(phydev, *(const u16 *)data);