Lines Matching +full:dsp +full:- +full:gpio5

1 // SPDX-License-Identifier: GPL-2.0+
6 * - Only full duplex supported
7 * - Forced speed (AN off) is not supported by hardware (100Mbps)
15 #include <linux/clk-provider.h>
25 #define EN8811H_MD32_DSP "airoha/EthMD32.DSP.bin"
135 * GPIO5 <-> LED0 On: Link detected, blink Rx/Tx
136 * GPIO4 <-> LED1 On: Link detected at 2500 or 1000 Mbps
137 * GPIO3 <-> LED2 On: Link detected at 2500 or 100 Mbps
413 for (offset = 0; offset < fw->size; offset += 4) { in __air_write_buf()
414 val = get_unaligned_le16(&fw->data[offset + 2]); in __air_write_buf()
419 val = get_unaligned_le16(&fw->data[offset]); in __air_write_buf()
450 /* Because of mdio-lock, may have to wait for multiple loads */ in en8811h_wait_mcu_ready()
457 return -ENODEV; in en8811h_wait_mcu_ready()
465 struct en8811h_priv *priv = phydev->priv; in en8811h_load_firmware()
466 struct device *dev = &phydev->mdio.dev; in en8811h_load_firmware()
510 &priv->firmware_version); in en8811h_load_firmware()
512 priv->firmware_version); in en8811h_load_firmware()
545 struct en8811h_priv *priv = phydev->priv; in air_hw_led_on_set()
549 return -EINVAL; in air_hw_led_on_set()
553 &priv->led[index].state); in air_hw_led_on_set()
556 &priv->led[index].state); in air_hw_led_on_set()
558 changed |= (priv->led[index].rules != 0); in air_hw_led_on_set()
562 priv->led[index].rules = 0; in air_hw_led_on_set()
576 struct en8811h_priv *priv = phydev->priv; in air_hw_led_blink_set()
580 return -EINVAL; in air_hw_led_blink_set()
584 &priv->led[index].state); in air_hw_led_blink_set()
587 &priv->led[index].state); in air_hw_led_blink_set()
589 changed |= (priv->led[index].rules != 0); in air_hw_led_blink_set()
604 struct en8811h_priv *priv = phydev->priv; in air_led_blink_set()
609 return -EINVAL; in air_led_blink_set()
621 /* led-blink set, so switch led-on off */ in air_led_blink_set()
626 /* hw-control is off*/ in air_led_blink_set()
627 if (!!test_bit(AIR_PHY_LED_STATE_FORCE_BLINK, &priv->led[index].state)) in air_led_blink_set()
628 priv->led[index].rules = 0; in air_led_blink_set()
636 struct en8811h_priv *priv = phydev->priv; in air_led_brightness_set()
640 return -EINVAL; in air_led_brightness_set()
642 /* led-on set, so switch led-blink off */ in air_led_brightness_set()
651 /* hw-control is off */ in air_led_brightness_set()
652 if (!!test_bit(AIR_PHY_LED_STATE_FORCE_ON, &priv->led[index].state)) in air_led_brightness_set()
653 priv->led[index].rules = 0; in air_led_brightness_set()
661 struct en8811h_priv *priv = phydev->priv; in air_led_hw_control_get()
664 return -EINVAL; in air_led_hw_control_get()
666 *rules = priv->led[index].rules; in air_led_hw_control_get()
674 struct en8811h_priv *priv = phydev->priv; in air_led_hw_control_set()
679 return -EINVAL; in air_led_hw_control_set()
681 priv->led[index].rules = rules; in air_led_hw_control_set()
713 /* switch hw-control on, so led-on and led-blink are off */ in air_led_hw_control_set()
715 &priv->led[index].state); in air_led_hw_control_set()
717 &priv->led[index].state); in air_led_hw_control_set()
719 priv->led[index].rules = 0; in air_led_hw_control_set()
738 return -EINVAL; in air_led_init()
762 struct en8811h_priv *priv = phydev->priv; in air_leds_init()
794 return -EINVAL; in air_leds_init()
803 air_led_hw_control_set(phydev, i, priv->led[i].rules); in air_leds_init()
813 return -EINVAL; in en8811h_led_hw_is_supported()
817 return -EOPNOTSUPP; in en8811h_led_hw_is_supported()
826 struct phy_device *phydev = priv->phydev; in en8811h_clk_recalc_rate()
840 struct phy_device *phydev = priv->phydev; in en8811h_clk_enable()
850 struct phy_device *phydev = priv->phydev; in en8811h_clk_disable()
859 struct phy_device *phydev = priv->phydev; in en8811h_clk_is_enabled()
874 priv->cko_is_enabled = en8811h_clk_is_enabled(hw); in en8811h_clk_save_context()
883 if (!priv->cko_is_enabled) in en8811h_clk_restore_context()
904 init.name = devm_kasprintf(dev, GFP_KERNEL, "%s-cko", in en8811h_clk_provider_setup()
907 return -ENOMEM; in en8811h_clk_provider_setup()
912 hw->init = &init; in en8811h_clk_provider_setup()
926 priv = devm_kzalloc(&phydev->mdio.dev, sizeof(struct en8811h_priv), in en8811h_probe()
929 return -ENOMEM; in en8811h_probe()
930 phydev->priv = priv; in en8811h_probe()
937 priv->mcu_needs_restart = false; in en8811h_probe()
939 priv->led[0].rules = AIR_DEFAULT_TRIGGER_LED0; in en8811h_probe()
940 priv->led[1].rules = AIR_DEFAULT_TRIGGER_LED1; in en8811h_probe()
941 priv->led[2].rules = AIR_DEFAULT_TRIGGER_LED2; in en8811h_probe()
944 phydev->c45_ids.mmds_present |= MDIO_DEVS_PMAPMD | MDIO_DEVS_AN; in en8811h_probe()
953 priv->phydev = phydev; in en8811h_probe()
954 /* Co-Clock Output */ in en8811h_probe()
955 ret = en8811h_clk_provider_setup(&phydev->mdio.dev, &priv->hw); in en8811h_probe()
971 struct en8811h_priv *priv = phydev->priv; in en8811h_config_init()
972 struct device *dev = &phydev->mdio.dev; in en8811h_config_init()
977 if (priv->mcu_needs_restart) { in en8811h_config_init()
983 priv->mcu_needs_restart = true; in en8811h_config_init()
987 * Configures the SerDes for 2500Base-X with rate adaptation in en8811h_config_init()
1008 if (device_property_read_bool(dev, "airoha,pnswap-rx")) in en8811h_config_init()
1012 if (device_property_read_bool(dev, "airoha,pnswap-tx")) in en8811h_config_init()
1036 phydev->supported); in en8811h_get_features()
1053 if (phydev->autoneg == AUTONEG_DISABLE) { in en8811h_config_aneg()
1055 return -EINVAL; in en8811h_config_aneg()
1058 adv = linkmode_adv_to_mii_10gbt_adv_t(phydev->advertising); in en8811h_config_aneg()
1072 struct en8811h_priv *priv = phydev->priv; in en8811h_read_status()
1080 phydev->master_slave_get = MASTER_SLAVE_CFG_UNSUPPORTED; in en8811h_read_status()
1081 phydev->master_slave_state = MASTER_SLAVE_STATE_UNSUPPORTED; in en8811h_read_status()
1082 phydev->speed = SPEED_UNKNOWN; in en8811h_read_status()
1083 phydev->duplex = DUPLEX_UNKNOWN; in en8811h_read_status()
1084 phydev->pause = 0; in en8811h_read_status()
1085 phydev->asym_pause = 0; in en8811h_read_status()
1086 phydev->rate_matching = RATE_MATCH_PAUSE; in en8811h_read_status()
1096 /* Get link partner 2.5GBASE-T ability from vendor register */ in en8811h_read_status()
1101 phydev->lp_advertising, in en8811h_read_status()
1104 if (phydev->autoneg_complete) in en8811h_read_status()
1107 if (!phydev->link) in en8811h_read_status()
1116 phydev->speed = SPEED_2500; in en8811h_read_status()
1119 phydev->speed = SPEED_1000; in en8811h_read_status()
1122 phydev->speed = SPEED_100; in en8811h_read_status()
1129 if (priv->firmware_version < 0x24011202) { in en8811h_read_status()
1131 phydev->lp_advertising, in en8811h_read_status()
1132 phydev->speed == SPEED_2500); in en8811h_read_status()
1136 phydev->duplex = DUPLEX_FULL; in en8811h_read_status()