Lines Matching +full:link +full:- +full:signal +full:- +full:sources
1 // SPDX-License-Identifier: GPL-2.0
143 #define DP83822_LED_FN_LINK 0x0 /* Link established */
148 #define DP83822_LED_FN_LINK_100_BTX 0x5 /* 100 BTX link established */
149 #define DP83822_LED_FN_LINK_10_BT 0x6 /* 10BT link established */
151 #define DP83822_LED_FN_LINK_RX_TX 0x8 /* Link established, blink for rx or tx activity */
152 #define DP83822_LED_FN_ACTIVE_STRETCH 0x9 /* Active Stretch Signal */
153 #define DP83822_LED_FN_MII_LINK 0xa /* MII LINK (100BT+FD) */
156 #define DP83822_LED_FN_LINK_LOST 0xd /* Link Lost */
210 struct net_device *ndev = phydev->attached_dev; in dp83822_config_wol()
214 if (wol->wolopts & (WAKE_MAGIC | WAKE_MAGICSECURE)) { in dp83822_config_wol()
215 mac = (const u8 *)ndev->dev_addr; in dp83822_config_wol()
218 return -EINVAL; in dp83822_config_wol()
232 if (wol->wolopts & WAKE_MAGIC) in dp83822_config_wol()
237 if (wol->wolopts & WAKE_MAGICSECURE) { in dp83822_config_wol()
240 (wol->sopass[1] << 8) | wol->sopass[0]); in dp83822_config_wol()
243 (wol->sopass[3] << 8) | wol->sopass[2]); in dp83822_config_wol()
246 (wol->sopass[5] << 8) | wol->sopass[4]); in dp83822_config_wol()
272 struct dp83822_private *dp83822 = phydev->priv; in dp83822_set_wol()
277 memcpy(&dp83822->wol, wol, sizeof(*wol)); in dp83822_set_wol()
287 wol->supported = (WAKE_MAGIC | WAKE_MAGICSECURE); in dp83822_get_wol()
288 wol->wolopts = 0; in dp83822_get_wol()
293 wol->wolopts |= WAKE_MAGIC; in dp83822_get_wol()
298 wol->sopass[0] = (sopass_val & 0xff); in dp83822_get_wol()
299 wol->sopass[1] = (sopass_val >> 8); in dp83822_get_wol()
303 wol->sopass[2] = (sopass_val & 0xff); in dp83822_get_wol()
304 wol->sopass[3] = (sopass_val >> 8); in dp83822_get_wol()
308 wol->sopass[4] = (sopass_val & 0xff); in dp83822_get_wol()
309 wol->sopass[5] = (sopass_val >> 8); in dp83822_get_wol()
311 wol->wolopts |= WAKE_MAGICSECURE; in dp83822_get_wol()
316 wol->wolopts = 0; in dp83822_get_wol()
321 struct dp83822_private *dp83822 = phydev->priv; in dp83822_config_intr()
326 if (phydev->interrupts == PHY_INTERRUPT_ENABLED) { in dp83822_config_intr()
335 if (!dp83822->fx_enabled) in dp83822_config_intr()
355 if (!dp83822->fx_enabled) in dp83822_config_intr()
396 * sources. To determine the possible interrupt sources, just read the in dp83822_handle_interrupt()
426 struct dp83822_private *dp83822 = phydev->priv; in dp83822_read_status()
431 if (dp83822->fx_enabled) { in dp83822_read_status()
433 phydev->speed = SPEED_UNKNOWN; in dp83822_read_status()
434 phydev->duplex = DUPLEX_UNKNOWN; in dp83822_read_status()
457 phydev->duplex = DUPLEX_FULL; in dp83822_read_status()
459 phydev->duplex = DUPLEX_HALF; in dp83822_read_status()
462 phydev->speed = SPEED_10; in dp83822_read_status()
464 phydev->speed = SPEED_100; in dp83822_read_status()
471 struct dp83822_private *dp83822 = phydev->priv; in dp83822_config_init_leds()
474 if (dp83822->led_pin_enable[DP83822_LED_INDEX_LED_0]) { in dp83822_config_init_leds()
481 } else if (dp83822->led_pin_enable[DP83822_LED_INDEX_COL_GPIO2]) { in dp83822_config_init_leds()
490 if (dp83822->led_pin_enable[DP83822_LED_INDEX_LED_1_GPIO1]) { in dp83822_config_init_leds()
499 if (dp83822->led_pin_enable[DP83822_LED_INDEX_RX_D3_GPIO3]) { in dp83822_config_init_leds()
513 struct dp83822_private *dp83822 = phydev->priv; in dp83822_config_init()
514 struct device *dev = &phydev->mdio.dev; in dp83822_config_init()
521 if (dp83822->set_gpio2_clk_out) in dp83822_config_init()
528 dp83822->gpio2_clk_out)); in dp83822_config_init()
530 if (dp83822->tx_amplitude_100base_tx_index >= 0) in dp83822_config_init()
534 dp83822->tx_amplitude_100base_tx_index)); in dp83822_config_init()
573 if (dp83822->fx_enabled) { in dp83822_config_init()
580 linkmode_and(phydev->advertising, phydev->advertising, in dp83822_config_init()
581 phydev->supported); in dp83822_config_init()
584 phydev->supported); in dp83822_config_init()
586 phydev->advertising); in dp83822_config_init()
588 phydev->supported); in dp83822_config_init()
590 phydev->supported); in dp83822_config_init()
592 phydev->advertising); in dp83822_config_init()
594 phydev->advertising); in dp83822_config_init()
606 phydev->autoneg = AUTONEG_DISABLE; in dp83822_config_init()
608 phydev->supported); in dp83822_config_init()
610 phydev->advertising); in dp83822_config_init()
620 if (dp83822->fx_signal_det_low) { in dp83822_config_init()
628 return dp83822_config_wol(phydev, &dp83822->wol); in dp83822_config_init()
633 struct device *dev = &phydev->mdio.dev; in dp8382x_config_rmii_mode()
637 if (!device_property_read_string(dev, "ti,rmii-mode", &of_val)) { in dp8382x_config_rmii_mode()
645 phydev_err(phydev, "Invalid value for ti,rmii-mode property (%s)\n", in dp8382x_config_rmii_mode()
647 ret = -EINVAL; in dp8382x_config_rmii_mode()
659 struct dp83822_private *dp83822 = phydev->priv; in dp83826_config_init()
663 if (phydev->interface == PHY_INTERFACE_MODE_RMII) { in dp83826_config_init()
679 if (dp83822->cfg_dac_minus != DP83826_CFG_DAC_MINUS_DEFAULT) { in dp83826_config_init()
680 val = FIELD_PREP(DP83826_VOD_CFG1_MINUS_MDI_MASK, dp83822->cfg_dac_minus) | in dp83826_config_init()
683 dp83822->cfg_dac_minus)); in dp83826_config_init()
691 dp83822->cfg_dac_minus)); in dp83826_config_init()
698 if (dp83822->cfg_dac_plus != DP83826_CFG_DAC_PLUS_DEFAULT) { in dp83826_config_init()
699 val = FIELD_PREP(DP83826_VOD_CFG2_PLUS_MDIX_MASK, dp83822->cfg_dac_plus) | in dp83826_config_init()
700 FIELD_PREP(DP83826_VOD_CFG2_PLUS_MDI_MASK, dp83822->cfg_dac_plus); in dp83826_config_init()
707 return dp83822_config_wol(phydev, &dp83822->wol); in dp83826_config_init()
712 struct dp83822_private *dp83822 = phydev->priv; in dp83825_config_init()
719 return dp83822_config_wol(phydev, &dp83822->wol); in dp83825_config_init()
730 return phydev->drv->config_init(phydev); in dp83822_phy_reset()
741 struct device_node *node = phydev->mdio.dev.of_node; in dp83822_of_init_leds()
742 struct dp83822_private *dp83822 = phydev->priv; in dp83822_of_init_leds()
762 dp83822->led_pin_enable[index] = true; in dp83822_of_init_leds()
765 return -EINVAL; in dp83822_of_init_leds()
773 if (dp83822->led_pin_enable[DP83822_LED_INDEX_LED_0] && in dp83822_of_init_leds()
774 dp83822->led_pin_enable[DP83822_LED_INDEX_COL_GPIO2]) { in dp83822_of_init_leds()
776 return -EINVAL; in dp83822_of_init_leds()
779 if (dp83822->led_pin_enable[DP83822_LED_INDEX_COL_GPIO2] && in dp83822_of_init_leds()
780 dp83822->set_gpio2_clk_out) { in dp83822_of_init_leds()
782 return -EINVAL; in dp83822_of_init_leds()
785 if (dp83822->led_pin_enable[DP83822_LED_INDEX_RX_D3_GPIO3] && in dp83822_of_init_leds()
786 phydev->interface != PHY_INTERFACE_MODE_RMII) { in dp83822_of_init_leds()
788 return -EINVAL; in dp83822_of_init_leds()
796 struct dp83822_private *dp83822 = phydev->priv; in dp83822_of_init()
797 struct device *dev = &phydev->mdio.dev; in dp83822_of_init()
802 /* Signal detection for the PHY is only enabled if the FX_EN and the in dp83822_of_init()
803 * SD_EN pins are strapped. Signal detection can only enabled if FX_EN in dp83822_of_init()
804 * is strapped otherwise signal detection is disabled for the PHY. in dp83822_of_init()
806 if (dp83822->fx_enabled && dp83822->fx_sd_enable) in dp83822_of_init()
807 dp83822->fx_signal_det_low = device_property_present(dev, in dp83822_of_init()
808 "ti,link-loss-low"); in dp83822_of_init()
809 if (!dp83822->fx_enabled) in dp83822_of_init()
810 dp83822->fx_enabled = device_property_present(dev, in dp83822_of_init()
811 "ti,fiber-mode"); in dp83822_of_init()
813 if (!device_property_read_string(dev, "ti,gpio2-clk-out", &of_val)) { in dp83822_of_init()
814 if (strcmp(of_val, "mac-if") == 0) { in dp83822_of_init()
815 dp83822->gpio2_clk_out = DP83822_CLK_SRC_MAC_IF; in dp83822_of_init()
817 dp83822->gpio2_clk_out = DP83822_CLK_SRC_XI; in dp83822_of_init()
818 } else if (strcmp(of_val, "int-ref") == 0) { in dp83822_of_init()
819 dp83822->gpio2_clk_out = DP83822_CLK_SRC_INT_REF; in dp83822_of_init()
820 } else if (strcmp(of_val, "rmii-master-mode-ref") == 0) { in dp83822_of_init()
821 dp83822->gpio2_clk_out = DP83822_CLK_SRC_RMII_MASTER_MODE_REF; in dp83822_of_init()
822 } else if (strcmp(of_val, "free-running") == 0) { in dp83822_of_init()
823 dp83822->gpio2_clk_out = DP83822_CLK_SRC_FREE_RUNNING; in dp83822_of_init()
825 dp83822->gpio2_clk_out = DP83822_CLK_SRC_RECOVERED; in dp83822_of_init()
828 "Invalid value for ti,gpio2-clk-out property (%s)\n", in dp83822_of_init()
830 return -EINVAL; in dp83822_of_init()
833 dp83822->set_gpio2_clk_out = true; in dp83822_of_init()
842 dp83822->tx_amplitude_100base_tx_index = i; in dp83822_of_init()
847 if (dp83822->tx_amplitude_100base_tx_index < 0) { in dp83822_of_init()
849 "Invalid value for tx-amplitude-100base-tx-percent property (%u)\n", in dp83822_of_init()
851 return -EINVAL; in dp83822_of_init()
860 int tmp = DP83826_CFG_DAC_PERCENT_DEFAULT - percent; in dp83826_to_dac_minus_one_regval()
867 int tmp = percent - DP83826_CFG_DAC_PERCENT_DEFAULT; in dp83826_to_dac_plus_one_regval()
874 struct dp83822_private *dp83822 = phydev->priv; in dp83826_of_init()
875 struct device *dev = &phydev->mdio.dev; in dp83826_of_init()
878 dp83822->cfg_dac_minus = DP83826_CFG_DAC_MINUS_DEFAULT; in dp83826_of_init()
879 if (!device_property_read_u32(dev, "ti,cfg-dac-minus-one-bp", &val)) in dp83826_of_init()
880 dp83822->cfg_dac_minus += dp83826_to_dac_minus_one_regval(val); in dp83826_of_init()
882 dp83822->cfg_dac_plus = DP83826_CFG_DAC_PLUS_DEFAULT; in dp83826_of_init()
883 if (!device_property_read_u32(dev, "ti,cfg-dac-plus-one-bp", &val)) in dp83826_of_init()
884 dp83822->cfg_dac_plus += dp83826_to_dac_plus_one_regval(val); in dp83826_of_init()
899 struct dp83822_private *dp83822 = phydev->priv; in dp83822_read_straps()
912 dp83822->fx_enabled = 1; in dp83822_read_straps()
914 if (dp83822->fx_enabled) { in dp83822_read_straps()
918 dp83822->fx_sd_enable = 1; in dp83822_read_straps()
928 dp83822 = devm_kzalloc(&phydev->mdio.dev, sizeof(*dp83822), in dp8382x_probe()
931 return -ENOMEM; in dp8382x_probe()
933 dp83822->tx_amplitude_100base_tx_index = -1; in dp8382x_probe()
934 phydev->priv = dp83822; in dp8382x_probe()
948 dp83822 = phydev->priv; in dp83822_probe()
958 if (dp83822->fx_enabled) in dp83822_probe()
959 phydev->port = PORT_FIBRE; in dp83822_probe()
1025 return -EOPNOTSUPP; in dp83822_led_mode()