• Home
  • Raw
  • Download

Lines Matching full:hdmi

22 #include <sound/hdmi-codec.h>
23 #include "hdmi.h"
25 void msm_hdmi_set_mode(struct hdmi *hdmi, bool power_on) in msm_hdmi_set_mode() argument
30 spin_lock_irqsave(&hdmi->reg_lock, flags); in msm_hdmi_set_mode()
33 if (!hdmi->hdmi_mode) { in msm_hdmi_set_mode()
35 hdmi_write(hdmi, REG_HDMI_CTRL, ctrl); in msm_hdmi_set_mode()
44 hdmi_write(hdmi, REG_HDMI_CTRL, ctrl); in msm_hdmi_set_mode()
45 spin_unlock_irqrestore(&hdmi->reg_lock, flags); in msm_hdmi_set_mode()
46 DBG("HDMI Core: %s, HDMI_CTRL=0x%08x", in msm_hdmi_set_mode()
52 struct hdmi *hdmi = dev_id; in msm_hdmi_irq() local
55 msm_hdmi_connector_irq(hdmi->connector); in msm_hdmi_irq()
58 msm_hdmi_i2c_irq(hdmi->i2c); in msm_hdmi_irq()
61 if (hdmi->hdcp_ctrl) in msm_hdmi_irq()
62 msm_hdmi_hdcp_irq(hdmi->hdcp_ctrl); in msm_hdmi_irq()
69 static void msm_hdmi_destroy(struct hdmi *hdmi) in msm_hdmi_destroy() argument
75 if (hdmi->workq) { in msm_hdmi_destroy()
76 flush_workqueue(hdmi->workq); in msm_hdmi_destroy()
77 destroy_workqueue(hdmi->workq); in msm_hdmi_destroy()
79 msm_hdmi_hdcp_destroy(hdmi); in msm_hdmi_destroy()
81 if (hdmi->phy_dev) { in msm_hdmi_destroy()
82 put_device(hdmi->phy_dev); in msm_hdmi_destroy()
83 hdmi->phy = NULL; in msm_hdmi_destroy()
84 hdmi->phy_dev = NULL; in msm_hdmi_destroy()
87 if (hdmi->i2c) in msm_hdmi_destroy()
88 msm_hdmi_i2c_destroy(hdmi->i2c); in msm_hdmi_destroy()
90 platform_set_drvdata(hdmi->pdev, NULL); in msm_hdmi_destroy()
93 static int msm_hdmi_get_phy(struct hdmi *hdmi) in msm_hdmi_get_phy() argument
95 struct platform_device *pdev = hdmi->pdev; in msm_hdmi_get_phy()
107 hdmi->phy = platform_get_drvdata(phy_pdev); in msm_hdmi_get_phy()
111 if (!phy_pdev || !hdmi->phy) { in msm_hdmi_get_phy()
116 hdmi->phy_dev = get_device(&phy_pdev->dev); in msm_hdmi_get_phy()
121 /* construct hdmi at bind/probe time, grab all the resources. If
125 static struct hdmi *msm_hdmi_init(struct platform_device *pdev) in msm_hdmi_init()
128 struct hdmi *hdmi = NULL; in msm_hdmi_init() local
132 hdmi = devm_kzalloc(&pdev->dev, sizeof(*hdmi), GFP_KERNEL); in msm_hdmi_init()
133 if (!hdmi) { in msm_hdmi_init()
138 hdmi->pdev = pdev; in msm_hdmi_init()
139 hdmi->config = config; in msm_hdmi_init()
140 spin_lock_init(&hdmi->reg_lock); in msm_hdmi_init()
142 hdmi->mmio = msm_ioremap(pdev, config->mmio_name, "HDMI"); in msm_hdmi_init()
143 if (IS_ERR(hdmi->mmio)) { in msm_hdmi_init()
144 ret = PTR_ERR(hdmi->mmio); in msm_hdmi_init()
148 /* HDCP needs physical address of hdmi register */ in msm_hdmi_init()
151 hdmi->mmio_phy_addr = res->start; in msm_hdmi_init()
153 hdmi->qfprom_mmio = msm_ioremap(pdev, in msm_hdmi_init()
155 if (IS_ERR(hdmi->qfprom_mmio)) { in msm_hdmi_init()
157 hdmi->qfprom_mmio = NULL; in msm_hdmi_init()
160 hdmi->hpd_regs = devm_kcalloc(&pdev->dev, in msm_hdmi_init()
162 sizeof(hdmi->hpd_regs[0]), in msm_hdmi_init()
164 if (!hdmi->hpd_regs) { in msm_hdmi_init()
180 hdmi->hpd_regs[i] = reg; in msm_hdmi_init()
183 hdmi->pwr_regs = devm_kcalloc(&pdev->dev, in msm_hdmi_init()
185 sizeof(hdmi->pwr_regs[0]), in msm_hdmi_init()
187 if (!hdmi->pwr_regs) { in msm_hdmi_init()
203 hdmi->pwr_regs[i] = reg; in msm_hdmi_init()
206 hdmi->hpd_clks = devm_kcalloc(&pdev->dev, in msm_hdmi_init()
208 sizeof(hdmi->hpd_clks[0]), in msm_hdmi_init()
210 if (!hdmi->hpd_clks) { in msm_hdmi_init()
225 hdmi->hpd_clks[i] = clk; in msm_hdmi_init()
228 hdmi->pwr_clks = devm_kcalloc(&pdev->dev, in msm_hdmi_init()
230 sizeof(hdmi->pwr_clks[0]), in msm_hdmi_init()
232 if (!hdmi->pwr_clks) { in msm_hdmi_init()
247 hdmi->pwr_clks[i] = clk; in msm_hdmi_init()
252 hdmi->workq = alloc_ordered_workqueue("msm_hdmi", 0); in msm_hdmi_init()
254 hdmi->i2c = msm_hdmi_i2c_init(hdmi); in msm_hdmi_init()
255 if (IS_ERR(hdmi->i2c)) { in msm_hdmi_init()
256 ret = PTR_ERR(hdmi->i2c); in msm_hdmi_init()
258 hdmi->i2c = NULL; in msm_hdmi_init()
262 ret = msm_hdmi_get_phy(hdmi); in msm_hdmi_init()
268 hdmi->hdcp_ctrl = msm_hdmi_hdcp_init(hdmi); in msm_hdmi_init()
269 if (IS_ERR(hdmi->hdcp_ctrl)) { in msm_hdmi_init()
271 hdmi->hdcp_ctrl = NULL; in msm_hdmi_init()
274 return hdmi; in msm_hdmi_init()
277 if (hdmi) in msm_hdmi_init()
278 msm_hdmi_destroy(hdmi); in msm_hdmi_init()
285 * driver (not hdmi sub-device's probe/bind!)
289 * hdmi sub-device's probe.
291 int msm_hdmi_modeset_init(struct hdmi *hdmi, in msm_hdmi_modeset_init() argument
295 struct platform_device *pdev = hdmi->pdev; in msm_hdmi_modeset_init()
298 hdmi->dev = dev; in msm_hdmi_modeset_init()
299 hdmi->encoder = encoder; in msm_hdmi_modeset_init()
301 hdmi_audio_infoframe_init(&hdmi->audio.infoframe); in msm_hdmi_modeset_init()
303 hdmi->bridge = msm_hdmi_bridge_init(hdmi); in msm_hdmi_modeset_init()
304 if (IS_ERR(hdmi->bridge)) { in msm_hdmi_modeset_init()
305 ret = PTR_ERR(hdmi->bridge); in msm_hdmi_modeset_init()
306 dev_err(dev->dev, "failed to create HDMI bridge: %d\n", ret); in msm_hdmi_modeset_init()
307 hdmi->bridge = NULL; in msm_hdmi_modeset_init()
311 hdmi->connector = msm_hdmi_connector_init(hdmi); in msm_hdmi_modeset_init()
312 if (IS_ERR(hdmi->connector)) { in msm_hdmi_modeset_init()
313 ret = PTR_ERR(hdmi->connector); in msm_hdmi_modeset_init()
314 dev_err(dev->dev, "failed to create HDMI connector: %d\n", ret); in msm_hdmi_modeset_init()
315 hdmi->connector = NULL; in msm_hdmi_modeset_init()
319 hdmi->irq = irq_of_parse_and_map(pdev->dev.of_node, 0); in msm_hdmi_modeset_init()
320 if (hdmi->irq < 0) { in msm_hdmi_modeset_init()
321 ret = hdmi->irq; in msm_hdmi_modeset_init()
326 ret = devm_request_irq(&pdev->dev, hdmi->irq, in msm_hdmi_modeset_init()
328 "hdmi_isr", hdmi); in msm_hdmi_modeset_init()
331 hdmi->irq, ret); in msm_hdmi_modeset_init()
335 ret = msm_hdmi_hpd_enable(hdmi->connector); in msm_hdmi_modeset_init()
337 DRM_DEV_ERROR(&hdmi->pdev->dev, "failed to enable HPD: %d\n", ret); in msm_hdmi_modeset_init()
341 encoder->bridge = hdmi->bridge; in msm_hdmi_modeset_init()
343 priv->bridges[priv->num_bridges++] = hdmi->bridge; in msm_hdmi_modeset_init()
344 priv->connectors[priv->num_connectors++] = hdmi->connector; in msm_hdmi_modeset_init()
346 platform_set_drvdata(pdev, hdmi); in msm_hdmi_modeset_init()
352 if (hdmi->bridge) { in msm_hdmi_modeset_init()
353 msm_hdmi_bridge_destroy(hdmi->bridge); in msm_hdmi_modeset_init()
354 hdmi->bridge = NULL; in msm_hdmi_modeset_init()
356 if (hdmi->connector) { in msm_hdmi_modeset_init()
357 hdmi->connector->funcs->destroy(hdmi->connector); in msm_hdmi_modeset_init()
358 hdmi->connector = NULL; in msm_hdmi_modeset_init()
365 * The hdmi device:
377 static const char *hpd_reg_names_8960[] = {"core-vdda", "hdmi-mux"};
431 { "qcom,hdmi-tx-ddc-clk", true, 1, "HDMI_DDC_CLK" },
432 { "qcom,hdmi-tx-ddc-data", true, 1, "HDMI_DDC_DATA" },
433 { "qcom,hdmi-tx-hpd", false, 1, "HDMI_HPD" },
434 { "qcom,hdmi-tx-mux-en", true, 1, "HDMI_MUX_EN" },
435 { "qcom,hdmi-tx-mux-sel", true, 0, "HDMI_MUX_SEL" },
436 { "qcom,hdmi-tx-mux-lpm", true, 1, "HDMI_MUX_LPM" },
455 * try again after stripping out the "qcom,hdmi-tx" in msm_hdmi_get_gpio()
459 if (sscanf(name2, "qcom,hdmi-tx-%s", name3)) in msm_hdmi_get_gpio()
472 * HDMI audio codec callbacks
478 struct hdmi *hdmi = dev_get_drvdata(dev); in msm_hdmi_audio_hw_params() local
541 msm_hdmi_audio_set_sample_rate(hdmi, rate); in msm_hdmi_audio_hw_params()
542 msm_hdmi_audio_info_setup(hdmi, 1, chan, channel_allocation, in msm_hdmi_audio_hw_params()
550 struct hdmi *hdmi = dev_get_drvdata(dev); in msm_hdmi_audio_shutdown() local
552 msm_hdmi_audio_info_setup(hdmi, 0, 0, 0, 0, 0); in msm_hdmi_audio_shutdown()
566 static int msm_hdmi_register_audio_driver(struct hdmi *hdmi, struct device *dev) in msm_hdmi_register_audio_driver() argument
568 hdmi->audio_pdev = platform_device_register_data(dev, in msm_hdmi_register_audio_driver()
573 return PTR_ERR_OR_ZERO(hdmi->audio_pdev); in msm_hdmi_register_audio_driver()
581 struct hdmi *hdmi; in msm_hdmi_bind() local
605 hdmi = msm_hdmi_init(to_platform_device(dev)); in msm_hdmi_bind()
606 if (IS_ERR(hdmi)) in msm_hdmi_bind()
607 return PTR_ERR(hdmi); in msm_hdmi_bind()
608 priv->hdmi = hdmi; in msm_hdmi_bind()
610 err = msm_hdmi_register_audio_driver(hdmi, dev); in msm_hdmi_bind()
613 hdmi->audio_pdev = NULL; in msm_hdmi_bind()
624 if (priv->hdmi) { in msm_hdmi_unbind()
625 if (priv->hdmi->audio_pdev) in msm_hdmi_unbind()
626 platform_device_unregister(priv->hdmi->audio_pdev); in msm_hdmi_unbind()
628 msm_hdmi_destroy(priv->hdmi); in msm_hdmi_unbind()
629 priv->hdmi = NULL; in msm_hdmi_unbind()
650 { .compatible = "qcom,hdmi-tx-8996", .data = &hdmi_tx_8996_config },
651 { .compatible = "qcom,hdmi-tx-8994", .data = &hdmi_tx_8994_config },
652 { .compatible = "qcom,hdmi-tx-8084", .data = &hdmi_tx_8084_config },
653 { .compatible = "qcom,hdmi-tx-8974", .data = &hdmi_tx_8974_config },
654 { .compatible = "qcom,hdmi-tx-8960", .data = &hdmi_tx_8960_config },
655 { .compatible = "qcom,hdmi-tx-8660", .data = &hdmi_tx_8660_config },