Lines Matching defs:gmac
38 * @syscon_field reg_field for the syscon's gmac register
588 struct sunxi_priv_data *gmac = priv;
591 if (gmac->regulator) {
592 ret = regulator_enable(gmac->regulator);
599 if (gmac->use_internal_phy) {
608 if (gmac->regulator)
609 regulator_disable(gmac->regulator);
776 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
797 gmac->ephy_clk = of_clk_get(iphynode, 0);
798 if (IS_ERR(gmac->ephy_clk))
800 gmac->rst_ephy = of_reset_control_get_exclusive(iphynode, NULL);
801 if (IS_ERR(gmac->rst_ephy)) {
802 ret = PTR_ERR(gmac->rst_ephy);
822 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
825 if (gmac->internal_phy_powered) {
831 ret = clk_prepare_enable(gmac->ephy_clk);
842 ret = reset_control_reset(gmac->rst_ephy);
845 clk_disable_unprepare(gmac->ephy_clk);
849 gmac->internal_phy_powered = true;
854 static void sun8i_dwmac_unpower_internal_phy(struct sunxi_priv_data *gmac)
856 if (!gmac->internal_phy_powered)
859 clk_disable_unprepare(gmac->ephy_clk);
860 reset_control_assert(gmac->rst_ephy);
861 gmac->internal_phy_powered = false;
878 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
883 regmap_field_read(gmac->regmap_field, ®);
888 gmac->use_internal_phy = true;
893 gmac->use_internal_phy = false;
900 regmap_field_write(gmac->regmap_field, val);
901 if (gmac->use_internal_phy) {
906 sun8i_dwmac_unpower_internal_phy(gmac);
920 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
927 &gmac->mux_handle, priv, priv->mii);
935 struct sunxi_priv_data *gmac = plat->bsp_priv;
940 ret = regmap_field_read(gmac->regmap_field, &val);
946 reg = gmac->variant->default_syscon_value;
952 if (gmac->variant->soc_has_internal_phy) {
984 if (val <= gmac->variant->tx_delay_max) {
985 reg &= ~(gmac->variant->tx_delay_max <<
1002 if (val <= gmac->variant->rx_delay_max) {
1003 reg &= ~(gmac->variant->rx_delay_max <<
1015 if (gmac->variant->support_rmii)
1037 regmap_field_write(gmac->regmap_field, reg);
1042 static void sun8i_dwmac_unset_syscon(struct sunxi_priv_data *gmac)
1044 u32 reg = gmac->variant->default_syscon_value;
1046 regmap_field_write(gmac->regmap_field, reg);
1051 struct sunxi_priv_data *gmac = priv;
1053 if (gmac->variant->soc_has_internal_phy)
1054 sun8i_dwmac_unpower_internal_phy(gmac);
1056 if (gmac->regulator)
1057 regulator_disable(gmac->regulator);
1156 struct sunxi_priv_data *gmac;
1168 gmac = devm_kzalloc(dev, sizeof(*gmac), GFP_KERNEL);
1169 if (!gmac)
1172 gmac->variant = of_device_get_match_data(&pdev->dev);
1173 if (!gmac->variant) {
1179 gmac->regulator = devm_regulator_get_optional(dev, "phy");
1180 if (IS_ERR(gmac->regulator)) {
1181 if (PTR_ERR(gmac->regulator) == -EPROBE_DEFER)
1184 gmac->regulator = NULL;
1214 gmac->regmap_field = devm_regmap_field_alloc(dev, regmap,
1215 *gmac->variant->syscon_field);
1216 if (IS_ERR(gmac->regmap_field)) {
1217 ret = PTR_ERR(gmac->regmap_field);
1237 plat_dat->bsp_priv = gmac;
1268 if (gmac->variant->soc_has_internal_phy) {
1288 reset_control_put(gmac->rst_ephy);
1289 clk_put(gmac->ephy_clk);
1294 sun8i_dwmac_exit(pdev, gmac);
1296 sun8i_dwmac_unset_syscon(gmac);
1307 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
1309 if (gmac->variant->soc_has_internal_phy) {
1310 mdio_mux_uninit(gmac->mux_handle);
1311 sun8i_dwmac_unpower_internal_phy(gmac);
1312 reset_control_put(gmac->rst_ephy);
1313 clk_put(gmac->ephy_clk);
1317 sun8i_dwmac_unset_syscon(gmac);
1324 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
1326 sun8i_dwmac_exit(pdev, gmac);
1336 { .compatible = "allwinner,sun8i-r40-gmac",