Lines Matching full:hdmi
38 /* need to be unset if hdmi or i2c should control voltage */
62 * @lcdsel_big: reg value of selecting vop big for HDMI
63 * @lcdsel_lit: reg value of selecting vop little for HDMI
82 struct dw_hdmi *hdmi;
199 static int rockchip_hdmi_parse_dt(struct rockchip_hdmi *hdmi)
201 struct device_node *np = hdmi->dev->of_node;
204 hdmi->regmap = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
205 if (IS_ERR(hdmi->regmap)) {
206 dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
207 return PTR_ERR(hdmi->regmap);
210 hdmi->ref_clk = devm_clk_get_optional_enabled(hdmi->dev, "ref");
211 if (!hdmi->ref_clk)
212 hdmi->ref_clk = devm_clk_get_optional_enabled(hdmi->dev, "vpll");
214 if (IS_ERR(hdmi->ref_clk)) {
215 ret = PTR_ERR(hdmi->ref_clk);
216 return dev_err_probe(hdmi->dev, ret, "failed to get reference clock\n");
219 hdmi->grf_clk = devm_clk_get_optional(hdmi->dev, "grf");
220 if (IS_ERR(hdmi->grf_clk)) {
221 ret = PTR_ERR(hdmi->grf_clk);
222 return dev_err_probe(hdmi->dev, ret, "failed to get grf clock\n");
225 ret = devm_regulator_get_enable(hdmi->dev, "avdd-0v9");
229 ret = devm_regulator_get_enable(hdmi->dev, "avdd-1v8");
239 struct rockchip_hdmi *hdmi = data;
242 if (hdmi->chip_data->max_tmds_clock &&
243 mode->clock > hdmi->chip_data->max_tmds_clock)
246 if (hdmi->ref_clk) {
247 int rpclk = clk_round_rate(hdmi->ref_clk, pclk);
253 if (hdmi->hdmiphy_clk) {
254 int rpclk = clk_round_rate(hdmi->hdmiphy_clk, pclk);
279 struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder);
281 clk_set_rate(hdmi->ref_clk, adj_mode->clock * 1000);
286 struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder);
290 if (hdmi->chip_data->lcdsel_grf_reg < 0)
293 ret = drm_of_encoder_active_endpoint_id(hdmi->dev->of_node, encoder);
295 val = hdmi->chip_data->lcdsel_lit;
297 val = hdmi->chip_data->lcdsel_big;
299 ret = clk_prepare_enable(hdmi->grf_clk);
301 dev_err(hdmi->dev, "failed to enable grfclk %d\n", ret);
305 ret = regmap_write(hdmi->regmap, hdmi->chip_data->lcdsel_grf_reg, val);
307 dev_err(hdmi->dev, "Could not write to GRF: %d\n", ret);
309 clk_disable_unprepare(hdmi->grf_clk);
310 dev_dbg(hdmi->dev, "vop %s output to hdmi\n", ret ? "LIT" : "BIG");
338 struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
342 return phy_power_on(hdmi->phy);
347 struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
349 phy_power_off(hdmi->phy);
354 struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
358 regmap_write(hdmi->regmap,
365 regmap_write(hdmi->regmap,
374 struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
380 regmap_write(hdmi->regmap,
385 regmap_write(hdmi->regmap,
394 struct rockchip_hdmi *hdmi = (struct rockchip_hdmi *)data;
399 regmap_write(hdmi->regmap,
404 regmap_write(hdmi->regmap,
409 regmap_write(hdmi->regmap,
507 { .compatible = "rockchip,rk3228-dw-hdmi",
510 { .compatible = "rockchip,rk3288-dw-hdmi",
513 { .compatible = "rockchip,rk3328-dw-hdmi",
516 { .compatible = "rockchip,rk3399-dw-hdmi",
519 { .compatible = "rockchip,rk3568-dw-hdmi",
534 struct rockchip_hdmi *hdmi;
540 hdmi = devm_kzalloc(&pdev->dev, sizeof(*hdmi), GFP_KERNEL);
541 if (!hdmi)
550 hdmi->dev = &pdev->dev;
551 hdmi->plat_data = plat_data;
552 hdmi->chip_data = plat_data->phy_data;
553 plat_data->phy_data = hdmi;
554 plat_data->priv_data = hdmi;
555 encoder = &hdmi->encoder.encoder;
558 rockchip_drm_encoder_set_crtc_endpoint_id(&hdmi->encoder,
570 ret = rockchip_hdmi_parse_dt(hdmi);
572 return dev_err_probe(hdmi->dev, ret, "Unable to parse OF data\n");
575 hdmi->phy = devm_phy_optional_get(dev, "hdmi");
576 if (IS_ERR(hdmi->phy)) {
577 ret = PTR_ERR(hdmi->phy);
578 return dev_err_probe(hdmi->dev, ret, "failed to get phy\n");
581 if (hdmi->phy) {
584 clkspec.np = hdmi->phy->dev.of_node;
585 hdmi->hdmiphy_clk = of_clk_get_from_provider(&clkspec);
586 if (IS_ERR(hdmi->hdmiphy_clk))
587 hdmi->hdmiphy_clk = NULL;
590 if (hdmi->chip_data == &rk3568_chip_data) {
591 regmap_write(hdmi->regmap, RK3568_GRF_VO_CON1,
601 platform_set_drvdata(pdev, hdmi);
603 hdmi->hdmi = dw_hdmi_bind(pdev, encoder, plat_data);
609 if (IS_ERR(hdmi->hdmi)) {
610 ret = PTR_ERR(hdmi->hdmi);
625 struct rockchip_hdmi *hdmi = dev_get_drvdata(dev);
627 dw_hdmi_unbind(hdmi->hdmi);
628 drm_encoder_cleanup(&hdmi->encoder.encoder);
648 struct rockchip_hdmi *hdmi = dev_get_drvdata(dev);
650 dw_hdmi_resume(hdmi->hdmi);