Lines Matching full:dp83869
2 /* Driver for the Texas Instruments DP83869 PHY
16 #include <dt-bindings/net/ti-dp83869.h>
158 struct dp83869_private *dp83869 = phydev->priv; in dp83869_config_aneg() local
160 if (dp83869->mode != DP83869_RGMII_1000_BASE) in dp83869_config_aneg()
168 struct dp83869_private *dp83869 = phydev->priv; in dp83869_read_status() local
172 if (dp83869->mode == DP83869_RGMII_1000_BASE) in dp83869_read_status()
179 if (dp83869->mode == DP83869_RGMII_100_BASE) { in dp83869_read_status()
510 struct dp83869_private *dp83869 = phydev->priv; in dp83869_config_port_mirroring() local
512 if (dp83869->port_mirroring == DP83869_PORT_MIRRORING_EN) in dp83869_config_port_mirroring()
524 struct dp83869_private *dp83869 = phydev->priv; in dp83869_set_strapped_mode() local
531 dp83869->mode = FIELD_GET(DP83869_STRAP_OP_MODE_MASK, val); in dp83869_set_strapped_mode()
544 struct dp83869_private *dp83869 = phydev->priv; in dp83869_of_init() local
551 dp83869->io_impedance = -EINVAL; in dp83869_of_init()
555 &dp83869->clk_output_sel); in dp83869_of_init()
556 if (ret || dp83869->clk_output_sel > DP83869_CLK_O_SEL_REF_CLK) in dp83869_of_init()
557 dp83869->clk_output_sel = DP83869_CLK_O_SEL_REF_CLK; in dp83869_of_init()
559 ret = of_property_read_u32(of_node, "ti,op-mode", &dp83869->mode); in dp83869_of_init()
561 if (dp83869->mode < DP83869_RGMII_COPPER_ETHERNET || in dp83869_of_init()
562 dp83869->mode > DP83869_SGMII_COPPER_ETHERNET) in dp83869_of_init()
571 dp83869->io_impedance = DP83869_IO_MUX_CFG_IO_IMPEDANCE_MAX; in dp83869_of_init()
573 dp83869->io_impedance = DP83869_IO_MUX_CFG_IO_IMPEDANCE_MIN; in dp83869_of_init()
576 dp83869->port_mirroring = DP83869_PORT_MIRRORING_EN; in dp83869_of_init()
584 dp83869->port_mirroring = DP83869_PORT_MIRRORING_EN; in dp83869_of_init()
586 dp83869->port_mirroring = DP83869_PORT_MIRRORING_DIS; in dp83869_of_init()
592 &dp83869->rx_fifo_depth)) in dp83869_of_init()
593 dp83869->rx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB; in dp83869_of_init()
596 &dp83869->tx_fifo_depth)) in dp83869_of_init()
597 dp83869->tx_fifo_depth = DP83869_PHYCR_FIFO_DEPTH_4_B_NIB; in dp83869_of_init()
599 dp83869->rx_int_delay = phy_get_internal_delay(phydev, in dp83869_of_init()
602 if (dp83869->rx_int_delay < 0) in dp83869_of_init()
603 dp83869->rx_int_delay = DP83869_CLK_DELAY_DEF; in dp83869_of_init()
605 dp83869->tx_int_delay = phy_get_internal_delay(phydev, in dp83869_of_init()
608 if (dp83869->tx_int_delay < 0) in dp83869_of_init()
609 dp83869->tx_int_delay = DP83869_CLK_DELAY_DEF; in dp83869_of_init()
621 struct dp83869_private *dp83869) in dp83869_configure_rgmii() argument
631 val |= (dp83869->tx_fifo_depth << DP83869_TX_FIFO_SHIFT); in dp83869_configure_rgmii()
632 val |= (dp83869->rx_fifo_depth << DP83869_RX_FIFO_SHIFT); in dp83869_configure_rgmii()
639 if (dp83869->io_impedance >= 0) in dp83869_configure_rgmii()
643 dp83869->io_impedance & in dp83869_configure_rgmii()
650 struct dp83869_private *dp83869) in dp83869_configure_fiber() argument
661 if (dp83869->mode == DP83869_RGMII_1000_BASE) { in dp83869_configure_fiber()
694 struct dp83869_private *dp83869) in dp83869_configure_mode() argument
699 if (dp83869->mode < DP83869_RGMII_COPPER_ETHERNET || in dp83869_configure_mode()
700 dp83869->mode > DP83869_SGMII_COPPER_ETHERNET) in dp83869_configure_mode()
706 phy_ctrl_val = dp83869->mode; in dp83869_configure_mode()
708 if (dp83869->mode == DP83869_100M_MEDIA_CONVERT || in dp83869_configure_mode()
709 dp83869->mode == DP83869_RGMII_100_BASE || in dp83869_configure_mode()
710 dp83869->mode == DP83869_RGMII_COPPER_ETHERNET) { in dp83869_configure_mode()
727 phy_ctrl_val = (dp83869->rx_fifo_depth << DP83869_RX_FIFO_SHIFT | in dp83869_configure_mode()
728 dp83869->tx_fifo_depth << DP83869_TX_FIFO_SHIFT | in dp83869_configure_mode()
731 switch (dp83869->mode) { in dp83869_configure_mode()
742 ret = dp83869_configure_rgmii(phydev, dp83869); in dp83869_configure_mode()
794 ret = dp83869_configure_fiber(phydev, dp83869); in dp83869_configure_mode()
805 struct dp83869_private *dp83869 = phydev->priv; in dp83869_config_init() local
814 ret = dp83869_configure_mode(phydev, dp83869); in dp83869_config_init()
825 if (dp83869->port_mirroring != DP83869_PORT_MIRRORING_KEEP) in dp83869_config_init()
829 if (dp83869->clk_output_sel != DP83869_CLK_O_SEL_REF_CLK) in dp83869_config_init()
833 dp83869->clk_output_sel << in dp83869_config_init()
838 dp83869->rx_int_delay | in dp83869_config_init()
839 dp83869->tx_int_delay << DP83869_RGMII_CLK_DELAY_SHIFT); in dp83869_config_init()
866 struct dp83869_private *dp83869; in dp83869_probe() local
869 dp83869 = devm_kzalloc(&phydev->mdio.dev, sizeof(*dp83869), in dp83869_probe()
871 if (!dp83869) in dp83869_probe()
874 phydev->priv = dp83869; in dp83869_probe()
880 if (dp83869->mode == DP83869_RGMII_100_BASE || in dp83869_probe()
881 dp83869->mode == DP83869_RGMII_1000_BASE) in dp83869_probe()
924 DP83869_PHY_DRIVER(DP83869_PHY_ID, "TI DP83869"),
937 MODULE_DESCRIPTION("Texas Instruments DP83869 PHY driver");