Lines Matching refs:hdmi

14 void msm_hdmi_set_mode(struct hdmi *hdmi, bool power_on)  in msm_hdmi_set_mode()  argument
19 spin_lock_irqsave(&hdmi->reg_lock, flags); in msm_hdmi_set_mode()
22 if (!hdmi->hdmi_mode) { in msm_hdmi_set_mode()
24 hdmi_write(hdmi, REG_HDMI_CTRL, ctrl); in msm_hdmi_set_mode()
33 hdmi_write(hdmi, REG_HDMI_CTRL, ctrl); in msm_hdmi_set_mode()
34 spin_unlock_irqrestore(&hdmi->reg_lock, flags); in msm_hdmi_set_mode()
41 struct hdmi *hdmi = dev_id; in msm_hdmi_irq() local
44 msm_hdmi_connector_irq(hdmi->connector); in msm_hdmi_irq()
47 msm_hdmi_i2c_irq(hdmi->i2c); in msm_hdmi_irq()
50 if (hdmi->hdcp_ctrl) in msm_hdmi_irq()
51 msm_hdmi_hdcp_irq(hdmi->hdcp_ctrl); in msm_hdmi_irq()
58 static void msm_hdmi_destroy(struct hdmi *hdmi) in msm_hdmi_destroy() argument
64 if (hdmi->workq) in msm_hdmi_destroy()
65 destroy_workqueue(hdmi->workq); in msm_hdmi_destroy()
66 msm_hdmi_hdcp_destroy(hdmi); in msm_hdmi_destroy()
68 if (hdmi->phy_dev) { in msm_hdmi_destroy()
69 put_device(hdmi->phy_dev); in msm_hdmi_destroy()
70 hdmi->phy = NULL; in msm_hdmi_destroy()
71 hdmi->phy_dev = NULL; in msm_hdmi_destroy()
74 if (hdmi->i2c) in msm_hdmi_destroy()
75 msm_hdmi_i2c_destroy(hdmi->i2c); in msm_hdmi_destroy()
77 platform_set_drvdata(hdmi->pdev, NULL); in msm_hdmi_destroy()
80 static int msm_hdmi_get_phy(struct hdmi *hdmi) in msm_hdmi_get_phy() argument
82 struct platform_device *pdev = hdmi->pdev; in msm_hdmi_get_phy()
94 hdmi->phy = platform_get_drvdata(phy_pdev); in msm_hdmi_get_phy()
98 if (!phy_pdev || !hdmi->phy) { in msm_hdmi_get_phy()
103 hdmi->phy_dev = get_device(&phy_pdev->dev); in msm_hdmi_get_phy()
112 static struct hdmi *msm_hdmi_init(struct platform_device *pdev) in msm_hdmi_init()
115 struct hdmi *hdmi = NULL; in msm_hdmi_init() local
119 hdmi = devm_kzalloc(&pdev->dev, sizeof(*hdmi), GFP_KERNEL); in msm_hdmi_init()
120 if (!hdmi) { in msm_hdmi_init()
125 hdmi->pdev = pdev; in msm_hdmi_init()
126 hdmi->config = config; in msm_hdmi_init()
127 spin_lock_init(&hdmi->reg_lock); in msm_hdmi_init()
129 hdmi->mmio = msm_ioremap(pdev, config->mmio_name, "HDMI"); in msm_hdmi_init()
130 if (IS_ERR(hdmi->mmio)) { in msm_hdmi_init()
131 ret = PTR_ERR(hdmi->mmio); in msm_hdmi_init()
138 hdmi->mmio_phy_addr = res->start; in msm_hdmi_init()
140 hdmi->qfprom_mmio = msm_ioremap(pdev, in msm_hdmi_init()
142 if (IS_ERR(hdmi->qfprom_mmio)) { in msm_hdmi_init()
144 hdmi->qfprom_mmio = NULL; in msm_hdmi_init()
147 hdmi->hpd_regs = devm_kcalloc(&pdev->dev, in msm_hdmi_init()
149 sizeof(hdmi->hpd_regs[0]), in msm_hdmi_init()
151 if (!hdmi->hpd_regs) { in msm_hdmi_init()
156 hdmi->hpd_regs[i].supply = config->hpd_reg_names[i]; in msm_hdmi_init()
158 ret = devm_regulator_bulk_get(&pdev->dev, config->hpd_reg_cnt, hdmi->hpd_regs); in msm_hdmi_init()
164 hdmi->pwr_regs = devm_kcalloc(&pdev->dev, in msm_hdmi_init()
166 sizeof(hdmi->pwr_regs[0]), in msm_hdmi_init()
168 if (!hdmi->pwr_regs) { in msm_hdmi_init()
173 ret = devm_regulator_bulk_get(&pdev->dev, config->pwr_reg_cnt, hdmi->pwr_regs); in msm_hdmi_init()
179 hdmi->hpd_clks = devm_kcalloc(&pdev->dev, in msm_hdmi_init()
181 sizeof(hdmi->hpd_clks[0]), in msm_hdmi_init()
183 if (!hdmi->hpd_clks) { in msm_hdmi_init()
198 hdmi->hpd_clks[i] = clk; in msm_hdmi_init()
201 hdmi->pwr_clks = devm_kcalloc(&pdev->dev, in msm_hdmi_init()
203 sizeof(hdmi->pwr_clks[0]), in msm_hdmi_init()
205 if (!hdmi->pwr_clks) { in msm_hdmi_init()
220 hdmi->pwr_clks[i] = clk; in msm_hdmi_init()
225 hdmi->workq = alloc_ordered_workqueue("msm_hdmi", 0); in msm_hdmi_init()
227 hdmi->i2c = msm_hdmi_i2c_init(hdmi); in msm_hdmi_init()
228 if (IS_ERR(hdmi->i2c)) { in msm_hdmi_init()
229 ret = PTR_ERR(hdmi->i2c); in msm_hdmi_init()
231 hdmi->i2c = NULL; in msm_hdmi_init()
235 ret = msm_hdmi_get_phy(hdmi); in msm_hdmi_init()
241 hdmi->hdcp_ctrl = msm_hdmi_hdcp_init(hdmi); in msm_hdmi_init()
242 if (IS_ERR(hdmi->hdcp_ctrl)) { in msm_hdmi_init()
244 hdmi->hdcp_ctrl = NULL; in msm_hdmi_init()
247 return hdmi; in msm_hdmi_init()
250 if (hdmi) in msm_hdmi_init()
251 msm_hdmi_destroy(hdmi); in msm_hdmi_init()
264 int msm_hdmi_modeset_init(struct hdmi *hdmi, in msm_hdmi_modeset_init() argument
268 struct platform_device *pdev = hdmi->pdev; in msm_hdmi_modeset_init()
271 hdmi->dev = dev; in msm_hdmi_modeset_init()
272 hdmi->encoder = encoder; in msm_hdmi_modeset_init()
274 hdmi_audio_infoframe_init(&hdmi->audio.infoframe); in msm_hdmi_modeset_init()
276 hdmi->bridge = msm_hdmi_bridge_init(hdmi); in msm_hdmi_modeset_init()
277 if (IS_ERR(hdmi->bridge)) { in msm_hdmi_modeset_init()
278 ret = PTR_ERR(hdmi->bridge); in msm_hdmi_modeset_init()
280 hdmi->bridge = NULL; in msm_hdmi_modeset_init()
284 hdmi->connector = msm_hdmi_connector_init(hdmi); in msm_hdmi_modeset_init()
285 if (IS_ERR(hdmi->connector)) { in msm_hdmi_modeset_init()
286 ret = PTR_ERR(hdmi->connector); in msm_hdmi_modeset_init()
288 hdmi->connector = NULL; in msm_hdmi_modeset_init()
292 hdmi->irq = irq_of_parse_and_map(pdev->dev.of_node, 0); in msm_hdmi_modeset_init()
293 if (hdmi->irq < 0) { in msm_hdmi_modeset_init()
294 ret = hdmi->irq; in msm_hdmi_modeset_init()
299 ret = devm_request_irq(&pdev->dev, hdmi->irq, in msm_hdmi_modeset_init()
301 "hdmi_isr", hdmi); in msm_hdmi_modeset_init()
304 hdmi->irq, ret); in msm_hdmi_modeset_init()
308 ret = msm_hdmi_hpd_enable(hdmi->connector); in msm_hdmi_modeset_init()
310 DRM_DEV_ERROR(&hdmi->pdev->dev, "failed to enable HPD: %d\n", ret); in msm_hdmi_modeset_init()
314 priv->bridges[priv->num_bridges++] = hdmi->bridge; in msm_hdmi_modeset_init()
315 priv->connectors[priv->num_connectors++] = hdmi->connector; in msm_hdmi_modeset_init()
317 platform_set_drvdata(pdev, hdmi); in msm_hdmi_modeset_init()
323 if (hdmi->bridge) { in msm_hdmi_modeset_init()
324 msm_hdmi_bridge_destroy(hdmi->bridge); in msm_hdmi_modeset_init()
325 hdmi->bridge = NULL; in msm_hdmi_modeset_init()
327 if (hdmi->connector) { in msm_hdmi_modeset_init()
328 hdmi->connector->funcs->destroy(hdmi->connector); in msm_hdmi_modeset_init()
329 hdmi->connector = NULL; in msm_hdmi_modeset_init()
417 struct hdmi *hdmi = dev_get_drvdata(dev); in msm_hdmi_audio_hw_params() local
480 msm_hdmi_audio_set_sample_rate(hdmi, rate); in msm_hdmi_audio_hw_params()
481 msm_hdmi_audio_info_setup(hdmi, 1, chan, channel_allocation, in msm_hdmi_audio_hw_params()
489 struct hdmi *hdmi = dev_get_drvdata(dev); in msm_hdmi_audio_shutdown() local
491 msm_hdmi_audio_info_setup(hdmi, 0, 0, 0, 0, 0); in msm_hdmi_audio_shutdown()
505 static int msm_hdmi_register_audio_driver(struct hdmi *hdmi, struct device *dev) in msm_hdmi_register_audio_driver() argument
507 hdmi->audio_pdev = platform_device_register_data(dev, in msm_hdmi_register_audio_driver()
512 return PTR_ERR_OR_ZERO(hdmi->audio_pdev); in msm_hdmi_register_audio_driver()
520 struct hdmi *hdmi; in msm_hdmi_bind() local
572 hdmi = msm_hdmi_init(to_platform_device(dev)); in msm_hdmi_bind()
573 if (IS_ERR(hdmi)) in msm_hdmi_bind()
574 return PTR_ERR(hdmi); in msm_hdmi_bind()
575 priv->hdmi = hdmi; in msm_hdmi_bind()
577 err = msm_hdmi_register_audio_driver(hdmi, dev); in msm_hdmi_bind()
580 hdmi->audio_pdev = NULL; in msm_hdmi_bind()
591 if (priv->hdmi) { in msm_hdmi_unbind()
592 if (priv->hdmi->audio_pdev) in msm_hdmi_unbind()
593 platform_device_unregister(priv->hdmi->audio_pdev); in msm_hdmi_unbind()
595 msm_hdmi_destroy(priv->hdmi); in msm_hdmi_unbind()
596 priv->hdmi = NULL; in msm_hdmi_unbind()