Lines Matching refs:hdmi

16 #include <sound/hdmi-codec.h>
17 #include "hdmi.h"
19 void msm_hdmi_set_mode(struct hdmi *hdmi, bool power_on)
24 spin_lock_irqsave(&hdmi->reg_lock, flags);
27 if (!hdmi->hdmi_mode) {
29 hdmi_write(hdmi, REG_HDMI_CTRL, ctrl);
38 hdmi_write(hdmi, REG_HDMI_CTRL, ctrl);
39 spin_unlock_irqrestore(&hdmi->reg_lock, flags);
46 struct hdmi *hdmi = dev_id;
49 msm_hdmi_hpd_irq(hdmi->bridge);
52 msm_hdmi_i2c_irq(hdmi->i2c);
55 if (hdmi->hdcp_ctrl)
56 msm_hdmi_hdcp_irq(hdmi->hdcp_ctrl);
63 static void msm_hdmi_destroy(struct hdmi *hdmi)
69 if (hdmi->workq)
70 destroy_workqueue(hdmi->workq);
71 msm_hdmi_hdcp_destroy(hdmi);
73 if (hdmi->i2c)
74 msm_hdmi_i2c_destroy(hdmi->i2c);
77 static void msm_hdmi_put_phy(struct hdmi *hdmi)
79 if (hdmi->phy_dev) {
80 put_device(hdmi->phy_dev);
81 hdmi->phy = NULL;
82 hdmi->phy_dev = NULL;
86 static int msm_hdmi_get_phy(struct hdmi *hdmi)
88 struct platform_device *pdev = hdmi->pdev;
104 hdmi->phy = platform_get_drvdata(phy_pdev);
105 if (!hdmi->phy) {
110 hdmi->phy_dev = &phy_pdev->dev;
115 /* construct hdmi at bind/probe time, grab all the resources. If
119 static int msm_hdmi_init(struct hdmi *hdmi)
121 struct platform_device *pdev = hdmi->pdev;
124 hdmi->workq = alloc_ordered_workqueue("msm_hdmi", 0);
125 if (!hdmi->workq) {
130 hdmi->i2c = msm_hdmi_i2c_init(hdmi);
131 if (IS_ERR(hdmi->i2c)) {
132 ret = PTR_ERR(hdmi->i2c);
134 hdmi->i2c = NULL;
138 hdmi->hdcp_ctrl = msm_hdmi_hdcp_init(hdmi);
139 if (IS_ERR(hdmi->hdcp_ctrl)) {
141 hdmi->hdcp_ctrl = NULL;
147 msm_hdmi_destroy(hdmi);
154 * driver (not hdmi sub-device's probe/bind!)
158 * hdmi sub-device's probe.
160 int msm_hdmi_modeset_init(struct hdmi *hdmi,
171 hdmi->dev = dev;
172 hdmi->encoder = encoder;
174 hdmi_audio_infoframe_init(&hdmi->audio.infoframe);
176 hdmi->bridge = msm_hdmi_bridge_init(hdmi);
177 if (IS_ERR(hdmi->bridge)) {
178 ret = PTR_ERR(hdmi->bridge);
180 hdmi->bridge = NULL;
184 if (hdmi->next_bridge) {
185 ret = drm_bridge_attach(hdmi->encoder, hdmi->next_bridge, hdmi->bridge,
193 hdmi->connector = drm_bridge_connector_init(hdmi->dev, encoder);
194 if (IS_ERR(hdmi->connector)) {
195 ret = PTR_ERR(hdmi->connector);
197 hdmi->connector = NULL;
201 drm_connector_attach_encoder(hdmi->connector, hdmi->encoder);
203 ret = devm_request_irq(dev->dev, hdmi->irq,
205 "hdmi_isr", hdmi);
208 hdmi->irq, ret);
212 ret = msm_hdmi_hpd_enable(hdmi->bridge);
214 DRM_DEV_ERROR(&hdmi->pdev->dev, "failed to enable HPD: %d\n", ret);
218 priv->bridges[priv->num_bridges++] = hdmi->bridge;
224 if (hdmi->bridge) {
225 msm_hdmi_bridge_destroy(hdmi->bridge);
226 hdmi->bridge = NULL;
228 if (hdmi->connector) {
229 hdmi->connector->funcs->destroy(hdmi->connector);
230 hdmi->connector = NULL;
237 * The hdmi device:
271 struct hdmi *hdmi = dev_get_drvdata(dev);
334 msm_hdmi_audio_set_sample_rate(hdmi, rate);
335 msm_hdmi_audio_info_setup(hdmi, 1, chan, channel_allocation,
343 struct hdmi *hdmi = dev_get_drvdata(dev);
345 msm_hdmi_audio_info_setup(hdmi, 0, 0, 0, 0, 0);
359 static int msm_hdmi_register_audio_driver(struct hdmi *hdmi, struct device *dev)
361 hdmi->audio_pdev = platform_device_register_data(dev,
366 return PTR_ERR_OR_ZERO(hdmi->audio_pdev);
372 struct hdmi *hdmi = dev_get_drvdata(dev);
375 err = msm_hdmi_init(hdmi);
378 priv->hdmi = hdmi;
380 err = msm_hdmi_register_audio_driver(hdmi, dev);
383 hdmi->audio_pdev = NULL;
394 if (priv->hdmi) {
395 if (priv->hdmi->audio_pdev)
396 platform_device_unregister(priv->hdmi->audio_pdev);
398 msm_hdmi_destroy(priv->hdmi);
399 priv->hdmi = NULL;
412 struct hdmi *hdmi;
420 hdmi = devm_kzalloc(&pdev->dev, sizeof(*hdmi), GFP_KERNEL);
421 if (!hdmi)
424 hdmi->pdev = pdev;
425 hdmi->config = config;
426 spin_lock_init(&hdmi->reg_lock);
428 ret = drm_of_find_panel_or_bridge(pdev->dev.of_node, 1, 0, NULL, &hdmi->next_bridge);
432 hdmi->mmio = msm_ioremap(pdev, "core_physical");
433 if (IS_ERR(hdmi->mmio))
434 return PTR_ERR(hdmi->mmio);
436 /* HDCP needs physical address of hdmi register */
441 hdmi->mmio_phy_addr = res->start;
443 hdmi->qfprom_mmio = msm_ioremap(pdev, "qfprom_physical");
444 if (IS_ERR(hdmi->qfprom_mmio)) {
446 hdmi->qfprom_mmio = NULL;
449 hdmi->irq = platform_get_irq(pdev, 0);
450 if (hdmi->irq < 0)
451 return hdmi->irq;
453 hdmi->hpd_regs = devm_kcalloc(&pdev->dev,
455 sizeof(hdmi->hpd_regs[0]),
457 if (!hdmi->hpd_regs)
461 hdmi->hpd_regs[i].supply = config->hpd_reg_names[i];
463 ret = devm_regulator_bulk_get(&pdev->dev, config->hpd_reg_cnt, hdmi->hpd_regs);
467 hdmi->pwr_regs = devm_kcalloc(&pdev->dev,
469 sizeof(hdmi->pwr_regs[0]),
471 if (!hdmi->pwr_regs)
475 hdmi->pwr_regs[i].supply = config->pwr_reg_names[i];
477 ret = devm_regulator_bulk_get(&pdev->dev, config->pwr_reg_cnt, hdmi->pwr_regs);
481 hdmi->hpd_clks = devm_kcalloc(&pdev->dev,
483 sizeof(hdmi->hpd_clks[0]),
485 if (!hdmi->hpd_clks)
497 hdmi->hpd_clks[i] = clk;
500 hdmi->pwr_clks = devm_kcalloc(&pdev->dev,
502 sizeof(hdmi->pwr_clks[0]),
504 if (!hdmi->pwr_clks)
516 hdmi->pwr_clks[i] = clk;
519 hdmi->hpd_gpiod = devm_gpiod_get_optional(&pdev->dev, "hpd", GPIOD_IN);
521 if (IS_ERR(hdmi->hpd_gpiod))
522 return dev_err_probe(dev, PTR_ERR(hdmi->hpd_gpiod),
525 if (!hdmi->hpd_gpiod)
528 if (hdmi->hpd_gpiod)
529 gpiod_set_consumer_name(hdmi->hpd_gpiod, "HDMI_HPD");
531 ret = msm_hdmi_get_phy(hdmi);
541 platform_set_drvdata(pdev, hdmi);
550 msm_hdmi_put_phy(hdmi);
556 struct hdmi *hdmi = dev_get_drvdata(&pdev->dev);
560 msm_hdmi_put_phy(hdmi);
566 { .compatible = "qcom,hdmi-tx-8996", .data = &hdmi_tx_8974_config },
567 { .compatible = "qcom,hdmi-tx-8994", .data = &hdmi_tx_8974_config },
568 { .compatible = "qcom,hdmi-tx-8084", .data = &hdmi_tx_8974_config },
569 { .compatible = "qcom,hdmi-tx-8974", .data = &hdmi_tx_8974_config },
570 { .compatible = "qcom,hdmi-tx-8960", .data = &hdmi_tx_8960_config },
571 { .compatible = "qcom,hdmi-tx-8660", .data = &hdmi_tx_8960_config },