Lines Matching +full:hsic +full:- +full:phy

1 // SPDX-License-Identifier: GPL-2.0-only
20 #include <linux/phy/phy.h>
42 struct phy *phy; member
56 static int mv_hsic_phy_init(struct phy *phy) in mv_hsic_phy_init() argument
58 struct mv_hsic_phy *mv_phy = phy_get_drvdata(phy); in mv_hsic_phy_init()
59 struct platform_device *pdev = mv_phy->pdev; in mv_hsic_phy_init()
60 void __iomem *base = mv_phy->base; in mv_hsic_phy_init()
63 clk_prepare_enable(mv_phy->clk); in mv_hsic_phy_init()
76 /* Make sure PHY PLL is locked */ in mv_hsic_phy_init()
80 dev_err(&pdev->dev, "HSIC PHY PLL not locked after 100mS."); in mv_hsic_phy_init()
81 clk_disable_unprepare(mv_phy->clk); in mv_hsic_phy_init()
87 static int mv_hsic_phy_power_on(struct phy *phy) in mv_hsic_phy_power_on() argument
89 struct mv_hsic_phy *mv_phy = phy_get_drvdata(phy); in mv_hsic_phy_power_on()
90 struct platform_device *pdev = mv_phy->pdev; in mv_hsic_phy_power_on()
91 void __iomem *base = mv_phy->base; in mv_hsic_phy_power_on()
98 reg |= PHY_28NM_HSIC_S2H_HSIC_EN; /* Enable HSIC PHY */ in mv_hsic_phy_power_on()
110 /* Make sure PHY Calibration is ready */ in mv_hsic_phy_power_on()
114 dev_warn(&pdev->dev, "HSIC PHY READY not set after 100mS."); in mv_hsic_phy_power_on()
118 /* Waiting for HSIC connect int*/ in mv_hsic_phy_power_on()
122 dev_warn(&pdev->dev, "HSIC wait for connect interrupt timeout."); in mv_hsic_phy_power_on()
127 static int mv_hsic_phy_power_off(struct phy *phy) in mv_hsic_phy_power_off() argument
129 struct mv_hsic_phy *mv_phy = phy_get_drvdata(phy); in mv_hsic_phy_power_off()
130 void __iomem *base = mv_phy->base; in mv_hsic_phy_power_off()
138 static int mv_hsic_phy_exit(struct phy *phy) in mv_hsic_phy_exit() argument
140 struct mv_hsic_phy *mv_phy = phy_get_drvdata(phy); in mv_hsic_phy_exit()
141 void __iomem *base = mv_phy->base; in mv_hsic_phy_exit()
148 clk_disable_unprepare(mv_phy->clk); in mv_hsic_phy_exit()
166 mv_phy = devm_kzalloc(&pdev->dev, sizeof(*mv_phy), GFP_KERNEL); in mv_hsic_phy_probe()
168 return -ENOMEM; in mv_hsic_phy_probe()
170 mv_phy->pdev = pdev; in mv_hsic_phy_probe()
172 mv_phy->clk = devm_clk_get(&pdev->dev, NULL); in mv_hsic_phy_probe()
173 if (IS_ERR(mv_phy->clk)) { in mv_hsic_phy_probe()
174 dev_err(&pdev->dev, "failed to get clock.\n"); in mv_hsic_phy_probe()
175 return PTR_ERR(mv_phy->clk); in mv_hsic_phy_probe()
178 mv_phy->base = devm_platform_ioremap_resource(pdev, 0); in mv_hsic_phy_probe()
179 if (IS_ERR(mv_phy->base)) in mv_hsic_phy_probe()
180 return PTR_ERR(mv_phy->base); in mv_hsic_phy_probe()
182 mv_phy->phy = devm_phy_create(&pdev->dev, pdev->dev.of_node, &hsic_ops); in mv_hsic_phy_probe()
183 if (IS_ERR(mv_phy->phy)) in mv_hsic_phy_probe()
184 return PTR_ERR(mv_phy->phy); in mv_hsic_phy_probe()
186 phy_set_drvdata(mv_phy->phy, mv_phy); in mv_hsic_phy_probe()
188 phy_provider = devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); in mv_hsic_phy_probe()
193 { .compatible = "marvell,pxa1928-hsic-phy", },
201 .name = "mv-hsic-phy",
208 MODULE_DESCRIPTION("Marvell HSIC phy driver");