Lines Matching defs:dphy
17 #include <linux/phy/phy-mipi-dphy.h>
94 int (*probe)(struct cdns_dphy *dphy);
95 void (*remove)(struct cdns_dphy *dphy);
96 void (*set_psm_div)(struct cdns_dphy *dphy, u8 div);
97 void (*set_clk_lane_cfg)(struct cdns_dphy *dphy,
99 void (*set_pll_cfg)(struct cdns_dphy *dphy,
101 unsigned long (*get_wakeup_time_ns)(struct cdns_dphy *dphy);
119 static int cdns_dsi_get_dphy_pll_cfg(struct cdns_dphy *dphy,
124 unsigned long pll_ref_hz = clk_get_rate(dphy->pll_ref_clk);
160 static int cdns_dphy_setup_psm(struct cdns_dphy *dphy)
162 unsigned long psm_clk_hz = clk_get_rate(dphy->psm_clk);
169 if (dphy->ops->set_psm_div)
170 dphy->ops->set_psm_div(dphy, psm_div);
175 static void cdns_dphy_set_clk_lane_cfg(struct cdns_dphy *dphy,
178 if (dphy->ops->set_clk_lane_cfg)
179 dphy->ops->set_clk_lane_cfg(dphy, cfg);
182 static void cdns_dphy_set_pll_cfg(struct cdns_dphy *dphy,
185 if (dphy->ops->set_pll_cfg)
186 dphy->ops->set_pll_cfg(dphy, cfg);
189 static unsigned long cdns_dphy_get_wakeup_time_ns(struct cdns_dphy *dphy)
191 return dphy->ops->get_wakeup_time_ns(dphy);
194 static unsigned long cdns_dphy_ref_get_wakeup_time_ns(struct cdns_dphy *dphy)
200 static void cdns_dphy_ref_set_pll_cfg(struct cdns_dphy *dphy,
211 dphy->regs + DPHY_CMN_OPIPDIV);
214 dphy->regs + DPHY_CMN_FBDIV);
217 dphy->regs + DPHY_CMN_PWM);
220 static void cdns_dphy_ref_set_psm_div(struct cdns_dphy *dphy, u8 div)
223 dphy->regs + DPHY_PSM_CFG);
226 static unsigned long cdns_dphy_j721e_get_wakeup_time_ns(struct cdns_dphy *dphy)
232 static void cdns_dphy_j721e_set_pll_cfg(struct cdns_dphy *dphy,
243 dphy->regs + DPHY_CMN_PWM);
248 dphy->regs + DPHY_TX_J721E_WIZ_PLL_CTRL);
251 dphy->regs + DPHY_TX_J721E_WIZ_RST_CTRL);
253 readl_poll_timeout(dphy->regs + DPHY_TX_J721E_WIZ_PLL_CTRL, status,
256 readl_poll_timeout(dphy->regs + DPHY_TX_J721E_WIZ_STATUS, status,
261 static void cdns_dphy_j721e_set_psm_div(struct cdns_dphy *dphy, u8 div)
263 writel(div, dphy->regs + DPHY_TX_J721E_WIZ_PSM_FREQ);
287 struct cdns_dphy *dphy = phy_get_drvdata(phy);
295 ret = cdns_dsi_get_dphy_pll_cfg(dphy, cfg,
300 opts->wakeup = cdns_dphy_get_wakeup_time_ns(dphy) / 1000;
336 struct cdns_dphy *dphy = phy_get_drvdata(phy);
349 ret = cdns_dphy_setup_psm(dphy);
360 cdns_dphy_set_clk_lane_cfg(dphy, DPHY_CLK_CFG_LEFT_DRIVES_LEFT);
366 cdns_dphy_set_pll_cfg(dphy, &cfg);
374 writel(reg, dphy->regs + DPHY_BAND_CFG);
381 struct cdns_dphy *dphy = phy_get_drvdata(phy);
383 clk_prepare_enable(dphy->psm_clk);
384 clk_prepare_enable(dphy->pll_ref_clk);
388 dphy->regs + DPHY_CMN_SSM);
395 struct cdns_dphy *dphy = phy_get_drvdata(phy);
397 clk_disable_unprepare(dphy->pll_ref_clk);
398 clk_disable_unprepare(dphy->psm_clk);
413 struct cdns_dphy *dphy;
416 dphy = devm_kzalloc(&pdev->dev, sizeof(*dphy), GFP_KERNEL);
417 if (!dphy)
419 dev_set_drvdata(&pdev->dev, dphy);
421 dphy->ops = of_device_get_match_data(&pdev->dev);
422 if (!dphy->ops)
425 dphy->regs = devm_platform_ioremap_resource(pdev, 0);
426 if (IS_ERR(dphy->regs))
427 return PTR_ERR(dphy->regs);
429 dphy->psm_clk = devm_clk_get(&pdev->dev, "psm");
430 if (IS_ERR(dphy->psm_clk))
431 return PTR_ERR(dphy->psm_clk);
433 dphy->pll_ref_clk = devm_clk_get(&pdev->dev, "pll_ref");
434 if (IS_ERR(dphy->pll_ref_clk))
435 return PTR_ERR(dphy->pll_ref_clk);
437 if (dphy->ops->probe) {
438 ret = dphy->ops->probe(dphy);
443 dphy->phy = devm_phy_create(&pdev->dev, NULL, &cdns_dphy_ops);
444 if (IS_ERR(dphy->phy)) {
446 if (dphy->ops->remove)
447 dphy->ops->remove(dphy);
448 return PTR_ERR(dphy->phy);
451 phy_set_drvdata(dphy->phy, dphy);
460 struct cdns_dphy *dphy = dev_get_drvdata(&pdev->dev);
462 if (dphy->ops->remove)
463 dphy->ops->remove(dphy);
467 { .compatible = "cdns,dphy", .data = &ref_dphy_ops },
468 { .compatible = "ti,j721e-dphy", .data = &j721e_dphy_ops },
477 .name = "cdns-mipi-dphy",