Lines Matching +full:dp +full:- +full:phy
1 // SPDX-License-Identifier: GPL-2.0
3 * MediaTek DisplayPort PHY driver
13 #include <linux/phy/phy.h>
85 static int mtk_dp_phy_init(struct phy *phy) in mtk_dp_phy_init() argument
87 struct mtk_dp_phy *dp_phy = phy_get_drvdata(phy); in mtk_dp_phy_init()
97 regmap_bulk_write(dp_phy->regs, MTK_DP_LANE0_DRIVING_PARAM_3, in mtk_dp_phy_init()
99 regmap_bulk_write(dp_phy->regs, MTK_DP_LANE1_DRIVING_PARAM_3, in mtk_dp_phy_init()
101 regmap_bulk_write(dp_phy->regs, MTK_DP_LANE2_DRIVING_PARAM_3, in mtk_dp_phy_init()
103 regmap_bulk_write(dp_phy->regs, MTK_DP_LANE3_DRIVING_PARAM_3, in mtk_dp_phy_init()
109 static int mtk_dp_phy_configure(struct phy *phy, union phy_configure_opts *opts) in mtk_dp_phy_configure() argument
111 struct mtk_dp_phy *dp_phy = phy_get_drvdata(phy); in mtk_dp_phy_configure()
114 if (opts->dp.set_rate) { in mtk_dp_phy_configure()
115 switch (opts->dp.link_rate) { in mtk_dp_phy_configure()
117 dev_err(&phy->dev, in mtk_dp_phy_configure()
119 opts->dp.link_rate); in mtk_dp_phy_configure()
120 return -EINVAL; in mtk_dp_phy_configure()
134 regmap_write(dp_phy->regs, MTK_DP_PHY_DIG_BIT_RATE, val); in mtk_dp_phy_configure()
137 regmap_update_bits(dp_phy->regs, MTK_DP_PHY_DIG_PLL_CTL_1, in mtk_dp_phy_configure()
138 TPLL_SSC_EN, opts->dp.ssc ? TPLL_SSC_EN : 0); in mtk_dp_phy_configure()
143 static int mtk_dp_phy_reset(struct phy *phy) in mtk_dp_phy_reset() argument
145 struct mtk_dp_phy *dp_phy = phy_get_drvdata(phy); in mtk_dp_phy_reset()
147 regmap_update_bits(dp_phy->regs, MTK_DP_PHY_DIG_SW_RST, in mtk_dp_phy_reset()
150 regmap_update_bits(dp_phy->regs, MTK_DP_PHY_DIG_SW_RST, in mtk_dp_phy_reset()
165 struct device *dev = &pdev->dev; in mtk_dp_phy_probe()
167 struct phy *phy; in mtk_dp_phy_probe() local
170 regs = *(struct regmap **)dev->platform_data; in mtk_dp_phy_probe()
172 return dev_err_probe(dev, -EINVAL, in mtk_dp_phy_probe()
177 return -ENOMEM; in mtk_dp_phy_probe()
179 dp_phy->regs = regs; in mtk_dp_phy_probe()
180 phy = devm_phy_create(dev, NULL, &mtk_dp_phy_dev_ops); in mtk_dp_phy_probe()
181 if (IS_ERR(phy)) in mtk_dp_phy_probe()
182 return dev_err_probe(dev, PTR_ERR(phy), in mtk_dp_phy_probe()
183 "Failed to create DP PHY\n"); in mtk_dp_phy_probe()
185 phy_set_drvdata(phy, dp_phy); in mtk_dp_phy_probe()
186 if (!dev->of_node) in mtk_dp_phy_probe()
187 phy_create_lookup(phy, "dp", dev_name(dev)); in mtk_dp_phy_probe()
195 .name = "mediatek-dp-phy",
200 MODULE_AUTHOR("Markus Schneider-Pargmann <msp@baylibre.com>");
201 MODULE_DESCRIPTION("MediaTek DP PHY Driver");