Lines Matching defs:gmac
36 * @syscon_field reg_field for the syscon's gmac register
549 struct sunxi_priv_data *gmac = priv;
552 if (gmac->regulator) {
553 ret = regulator_enable(gmac->regulator);
560 ret = clk_prepare_enable(gmac->tx_clk);
566 if (gmac->use_internal_phy) {
575 clk_disable_unprepare(gmac->tx_clk);
577 if (gmac->regulator)
578 regulator_disable(gmac->regulator);
745 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
766 gmac->ephy_clk = of_clk_get(iphynode, 0);
767 if (IS_ERR(gmac->ephy_clk))
769 gmac->rst_ephy = of_reset_control_get_exclusive(iphynode, NULL);
770 if (IS_ERR(gmac->rst_ephy)) {
771 ret = PTR_ERR(gmac->rst_ephy);
791 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
794 if (gmac->internal_phy_powered) {
800 ret = clk_prepare_enable(gmac->ephy_clk);
809 reset_control_assert(gmac->rst_ephy);
811 ret = reset_control_deassert(gmac->rst_ephy);
814 clk_disable_unprepare(gmac->ephy_clk);
818 gmac->internal_phy_powered = true;
823 static int sun8i_dwmac_unpower_internal_phy(struct sunxi_priv_data *gmac)
825 if (!gmac->internal_phy_powered)
828 clk_disable_unprepare(gmac->ephy_clk);
829 reset_control_assert(gmac->rst_ephy);
830 gmac->internal_phy_powered = false;
848 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
853 regmap_field_read(gmac->regmap_field, ®);
858 gmac->use_internal_phy = true;
863 gmac->use_internal_phy = false;
870 regmap_field_write(gmac->regmap_field, val);
871 if (gmac->use_internal_phy) {
876 sun8i_dwmac_unpower_internal_phy(gmac);
890 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
897 &gmac->mux_handle, priv, priv->mii);
905 struct sunxi_priv_data *gmac = plat->bsp_priv;
910 ret = regmap_field_read(gmac->regmap_field, &val);
916 reg = gmac->variant->default_syscon_value;
922 if (gmac->variant->soc_has_internal_phy) {
954 if (val <= gmac->variant->tx_delay_max) {
955 reg &= ~(gmac->variant->tx_delay_max <<
972 if (val <= gmac->variant->rx_delay_max) {
973 reg &= ~(gmac->variant->rx_delay_max <<
985 if (gmac->variant->support_rmii)
1007 regmap_field_write(gmac->regmap_field, reg);
1012 static void sun8i_dwmac_unset_syscon(struct sunxi_priv_data *gmac)
1014 u32 reg = gmac->variant->default_syscon_value;
1016 regmap_field_write(gmac->regmap_field, reg);
1021 struct sunxi_priv_data *gmac = priv;
1023 if (gmac->variant->soc_has_internal_phy) {
1024 if (gmac->internal_phy_powered)
1025 sun8i_dwmac_unpower_internal_phy(gmac);
1028 clk_disable_unprepare(gmac->tx_clk);
1030 if (gmac->regulator)
1031 regulator_disable(gmac->regulator);
1130 struct sunxi_priv_data *gmac;
1142 gmac = devm_kzalloc(dev, sizeof(*gmac), GFP_KERNEL);
1143 if (!gmac)
1146 gmac->variant = of_device_get_match_data(&pdev->dev);
1147 if (!gmac->variant) {
1152 gmac->tx_clk = devm_clk_get(dev, "stmmaceth");
1153 if (IS_ERR(gmac->tx_clk)) {
1155 return PTR_ERR(gmac->tx_clk);
1159 gmac->regulator = devm_regulator_get_optional(dev, "phy");
1160 if (IS_ERR(gmac->regulator)) {
1161 if (PTR_ERR(gmac->regulator) == -EPROBE_DEFER)
1164 gmac->regulator = NULL;
1194 gmac->regmap_field = devm_regmap_field_alloc(dev, regmap,
1195 *gmac->variant->syscon_field);
1196 if (IS_ERR(gmac->regmap_field)) {
1197 ret = PTR_ERR(gmac->regmap_field);
1217 plat_dat->bsp_priv = gmac;
1241 if (gmac->variant->soc_has_internal_phy) {
1258 reset_control_put(gmac->rst_ephy);
1259 clk_put(gmac->ephy_clk);
1263 sun8i_dwmac_exit(pdev, gmac);
1265 sun8i_dwmac_unset_syscon(gmac);
1276 struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
1278 if (gmac->variant->soc_has_internal_phy) {
1279 mdio_mux_uninit(gmac->mux_handle);
1280 sun8i_dwmac_unpower_internal_phy(gmac);
1281 reset_control_put(gmac->rst_ephy);
1282 clk_put(gmac->ephy_clk);
1286 sun8i_dwmac_unset_syscon(gmac);
1298 { .compatible = "allwinner,sun8i-r40-gmac",