• Home
  • Raw
  • Download

Lines Matching refs:hdmi

71 static inline unsigned long tegra_hdmi_readl(struct tegra_hdmi *hdmi,  in tegra_hdmi_readl()  argument
74 return readl(hdmi->regs + (reg << 2)); in tegra_hdmi_readl()
77 static inline void tegra_hdmi_writel(struct tegra_hdmi *hdmi, unsigned long val, in tegra_hdmi_writel() argument
80 writel(val, hdmi->regs + (reg << 2)); in tegra_hdmi_writel()
281 static void tegra_hdmi_setup_audio_fs_tables(struct tegra_hdmi *hdmi) in tegra_hdmi_setup_audio_fs_tables() argument
304 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_AUDIO_FS(i)); in tegra_hdmi_setup_audio_fs_tables()
308 static int tegra_hdmi_setup_audio(struct tegra_hdmi *hdmi, unsigned int pclk) in tegra_hdmi_setup_audio() argument
310 struct device_node *node = hdmi->dev->of_node; in tegra_hdmi_setup_audio()
315 switch (hdmi->audio_source) { in tegra_hdmi_setup_audio()
332 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_AUDIO_CNTRL0); in tegra_hdmi_setup_audio()
335 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_AUDIO_CNTRL0); in tegra_hdmi_setup_audio()
339 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_AUDIO_CNTRL0); in tegra_hdmi_setup_audio()
342 config = tegra_hdmi_get_audio_config(hdmi->audio_freq, pclk); in tegra_hdmi_setup_audio()
344 dev_err(hdmi->dev, "cannot set audio to %u at %u pclk\n", in tegra_hdmi_setup_audio()
345 hdmi->audio_freq, pclk); in tegra_hdmi_setup_audio()
349 tegra_hdmi_writel(hdmi, 0, HDMI_NV_PDISP_HDMI_ACR_CTRL); in tegra_hdmi_setup_audio()
353 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_AUDIO_N); in tegra_hdmi_setup_audio()
355 tegra_hdmi_writel(hdmi, ACR_SUBPACK_N(config->n) | ACR_ENABLE, in tegra_hdmi_setup_audio()
359 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_ACR_0441_SUBPACK_LOW); in tegra_hdmi_setup_audio()
362 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_SPARE); in tegra_hdmi_setup_audio()
364 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_AUDIO_N); in tegra_hdmi_setup_audio()
366 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_AUDIO_N); in tegra_hdmi_setup_audio()
369 switch (hdmi->audio_freq) { in tegra_hdmi_setup_audio()
399 tegra_hdmi_writel(hdmi, config->aval, offset); in tegra_hdmi_setup_audio()
402 tegra_hdmi_setup_audio_fs_tables(hdmi); in tegra_hdmi_setup_audio()
418 static void tegra_hdmi_write_infopack(struct tegra_hdmi *hdmi, const void *data, in tegra_hdmi_write_infopack() argument
440 dev_err(hdmi->dev, "unsupported infoframe type: %02x\n", in tegra_hdmi_write_infopack()
448 tegra_hdmi_writel(hdmi, value, offset); in tegra_hdmi_write_infopack()
460 tegra_hdmi_writel(hdmi, value, offset++); in tegra_hdmi_write_infopack()
465 tegra_hdmi_writel(hdmi, value, offset++); in tegra_hdmi_write_infopack()
469 static void tegra_hdmi_setup_avi_infoframe(struct tegra_hdmi *hdmi, in tegra_hdmi_setup_avi_infoframe() argument
476 if (hdmi->dvi) { in tegra_hdmi_setup_avi_infoframe()
477 tegra_hdmi_writel(hdmi, 0, in tegra_hdmi_setup_avi_infoframe()
484 dev_err(hdmi->dev, "failed to setup AVI infoframe: %zd\n", err); in tegra_hdmi_setup_avi_infoframe()
490 dev_err(hdmi->dev, "failed to pack AVI infoframe: %zd\n", err); in tegra_hdmi_setup_avi_infoframe()
494 tegra_hdmi_write_infopack(hdmi, buffer, err); in tegra_hdmi_setup_avi_infoframe()
496 tegra_hdmi_writel(hdmi, INFOFRAME_CTRL_ENABLE, in tegra_hdmi_setup_avi_infoframe()
500 static void tegra_hdmi_setup_audio_infoframe(struct tegra_hdmi *hdmi) in tegra_hdmi_setup_audio_infoframe() argument
506 if (hdmi->dvi) { in tegra_hdmi_setup_audio_infoframe()
507 tegra_hdmi_writel(hdmi, 0, in tegra_hdmi_setup_audio_infoframe()
514 dev_err(hdmi->dev, "failed to initialize audio infoframe: %d\n", in tegra_hdmi_setup_audio_infoframe()
523 dev_err(hdmi->dev, "failed to pack audio infoframe: %zd\n", in tegra_hdmi_setup_audio_infoframe()
534 tegra_hdmi_write_infopack(hdmi, buffer, min(10, err)); in tegra_hdmi_setup_audio_infoframe()
536 tegra_hdmi_writel(hdmi, INFOFRAME_CTRL_ENABLE, in tegra_hdmi_setup_audio_infoframe()
540 static void tegra_hdmi_setup_stereo_infoframe(struct tegra_hdmi *hdmi) in tegra_hdmi_setup_stereo_infoframe() argument
547 if (!hdmi->stereo) { in tegra_hdmi_setup_stereo_infoframe()
548 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); in tegra_hdmi_setup_stereo_infoframe()
550 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); in tegra_hdmi_setup_stereo_infoframe()
575 dev_err(hdmi->dev, "failed to pack vendor infoframe: %zd\n", in tegra_hdmi_setup_stereo_infoframe()
580 tegra_hdmi_write_infopack(hdmi, buffer, err); in tegra_hdmi_setup_stereo_infoframe()
582 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); in tegra_hdmi_setup_stereo_infoframe()
584 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_GENERIC_CTRL); in tegra_hdmi_setup_stereo_infoframe()
587 static void tegra_hdmi_setup_tmds(struct tegra_hdmi *hdmi, in tegra_hdmi_setup_tmds() argument
592 tegra_hdmi_writel(hdmi, tmds->pll0, HDMI_NV_PDISP_SOR_PLL0); in tegra_hdmi_setup_tmds()
593 tegra_hdmi_writel(hdmi, tmds->pll1, HDMI_NV_PDISP_SOR_PLL1); in tegra_hdmi_setup_tmds()
594 tegra_hdmi_writel(hdmi, tmds->pe_current, HDMI_NV_PDISP_PE_CURRENT); in tegra_hdmi_setup_tmds()
597 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_LANE_DRIVE_CURRENT); in tegra_hdmi_setup_tmds()
605 struct tegra_hdmi *hdmi = to_hdmi(output); in tegra_output_hdmi_enable() local
606 struct device_node *node = hdmi->dev->of_node; in tegra_output_hdmi_enable()
619 err = regulator_enable(hdmi->vdd); in tegra_output_hdmi_enable()
621 dev_err(hdmi->dev, "failed to enable VDD regulator: %d\n", err); in tegra_output_hdmi_enable()
625 err = regulator_enable(hdmi->pll); in tegra_output_hdmi_enable()
627 dev_err(hdmi->dev, "failed to enable PLL regulator: %d\n", err); in tegra_output_hdmi_enable()
635 err = tegra_output_setup_clock(output, hdmi->clk, pclk * 2); in tegra_output_hdmi_enable()
637 dev_err(hdmi->dev, "failed to setup clock: %d\n", err); in tegra_output_hdmi_enable()
641 err = clk_set_rate(hdmi->clk, pclk); in tegra_output_hdmi_enable()
645 err = clk_enable(hdmi->clk); in tegra_output_hdmi_enable()
647 dev_err(hdmi->dev, "failed to enable clock: %d\n", err); in tegra_output_hdmi_enable()
651 tegra_periph_reset_assert(hdmi->clk); in tegra_output_hdmi_enable()
653 tegra_periph_reset_deassert(hdmi->clk); in tegra_output_hdmi_enable()
674 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_VSYNC_WINDOW); in tegra_output_hdmi_enable()
683 tegra_hdmi_writel(hdmi, in tegra_output_hdmi_enable()
687 tegra_hdmi_writel(hdmi, in tegra_output_hdmi_enable()
691 div82 = clk_get_rate(hdmi->clk) / 1000000 * 4; in tegra_output_hdmi_enable()
693 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_REFCLK); in tegra_output_hdmi_enable()
695 if (!hdmi->dvi) { in tegra_output_hdmi_enable()
696 err = tegra_hdmi_setup_audio(hdmi, pclk); in tegra_output_hdmi_enable()
698 hdmi->dvi = true; in tegra_output_hdmi_enable()
712 if (!hdmi->dvi) in tegra_output_hdmi_enable()
715 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_HDMI_CTRL); in tegra_output_hdmi_enable()
717 if (hdmi->dvi) in tegra_output_hdmi_enable()
718 tegra_hdmi_writel(hdmi, 0x0, in tegra_output_hdmi_enable()
721 tegra_hdmi_writel(hdmi, GENERIC_CTRL_AUDIO, in tegra_output_hdmi_enable()
724 tegra_hdmi_setup_avi_infoframe(hdmi, mode); in tegra_output_hdmi_enable()
725 tegra_hdmi_setup_audio_infoframe(hdmi); in tegra_output_hdmi_enable()
726 tegra_hdmi_setup_stereo_infoframe(hdmi); in tegra_output_hdmi_enable()
739 tegra_hdmi_setup_tmds(hdmi, &tmds[i]); in tegra_output_hdmi_enable()
744 tegra_hdmi_writel(hdmi, in tegra_output_hdmi_enable()
758 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_SEQ_INST(0)); in tegra_output_hdmi_enable()
759 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_SEQ_INST(8)); in tegra_output_hdmi_enable()
764 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_CSTM); in tegra_output_hdmi_enable()
771 tegra_hdmi_writel(hdmi, in tegra_output_hdmi_enable()
777 tegra_hdmi_writel(hdmi, in tegra_output_hdmi_enable()
786 value = tegra_hdmi_readl(hdmi, HDMI_NV_PDISP_SOR_PWR); in tegra_output_hdmi_enable()
808 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_STATE2); in tegra_output_hdmi_enable()
811 tegra_hdmi_writel(hdmi, value, HDMI_NV_PDISP_SOR_STATE1); in tegra_output_hdmi_enable()
813 tegra_hdmi_writel(hdmi, 0, HDMI_NV_PDISP_SOR_STATE0); in tegra_output_hdmi_enable()
814 tegra_hdmi_writel(hdmi, SOR_STATE_UPDATE, HDMI_NV_PDISP_SOR_STATE0); in tegra_output_hdmi_enable()
815 tegra_hdmi_writel(hdmi, value | SOR_STATE_ATTACHED, in tegra_output_hdmi_enable()
817 tegra_hdmi_writel(hdmi, 0, HDMI_NV_PDISP_SOR_STATE0); in tegra_output_hdmi_enable()
838 struct tegra_hdmi *hdmi = to_hdmi(output); in tegra_output_hdmi_disable() local
840 tegra_periph_reset_assert(hdmi->clk); in tegra_output_hdmi_disable()
841 clk_disable(hdmi->clk); in tegra_output_hdmi_disable()
842 regulator_disable(hdmi->pll); in tegra_output_hdmi_disable()
843 regulator_disable(hdmi->vdd); in tegra_output_hdmi_disable()
851 struct tegra_hdmi *hdmi = to_hdmi(output); in tegra_output_hdmi_setup_clock() local
855 err = clk_set_parent(clk, hdmi->clk_parent); in tegra_output_hdmi_setup_clock()
861 base = clk_get_parent(hdmi->clk_parent); in tegra_output_hdmi_setup_clock()
880 struct tegra_hdmi *hdmi = to_hdmi(output); in tegra_output_hdmi_check_mode() local
885 parent = clk_get_parent(hdmi->clk_parent); in tegra_output_hdmi_check_mode()
906 struct tegra_hdmi *hdmi = node->info_ent->data; in tegra_hdmi_show_regs() local
910 tegra_hdmi_readl(hdmi, name)) in tegra_hdmi_show_regs()
1079 static int tegra_hdmi_debugfs_init(struct tegra_hdmi *hdmi, in tegra_hdmi_debugfs_init() argument
1085 hdmi->debugfs = debugfs_create_dir("hdmi", minor->debugfs_root); in tegra_hdmi_debugfs_init()
1086 if (!hdmi->debugfs) in tegra_hdmi_debugfs_init()
1089 hdmi->debugfs_files = kmemdup(debugfs_files, sizeof(debugfs_files), in tegra_hdmi_debugfs_init()
1091 if (!hdmi->debugfs_files) { in tegra_hdmi_debugfs_init()
1097 hdmi->debugfs_files[i].data = hdmi; in tegra_hdmi_debugfs_init()
1099 err = drm_debugfs_create_files(hdmi->debugfs_files, in tegra_hdmi_debugfs_init()
1101 hdmi->debugfs, minor); in tegra_hdmi_debugfs_init()
1105 hdmi->minor = minor; in tegra_hdmi_debugfs_init()
1110 kfree(hdmi->debugfs_files); in tegra_hdmi_debugfs_init()
1111 hdmi->debugfs_files = NULL; in tegra_hdmi_debugfs_init()
1113 debugfs_remove(hdmi->debugfs); in tegra_hdmi_debugfs_init()
1114 hdmi->debugfs = NULL; in tegra_hdmi_debugfs_init()
1119 static int tegra_hdmi_debugfs_exit(struct tegra_hdmi *hdmi) in tegra_hdmi_debugfs_exit() argument
1121 drm_debugfs_remove_files(hdmi->debugfs_files, ARRAY_SIZE(debugfs_files), in tegra_hdmi_debugfs_exit()
1122 hdmi->minor); in tegra_hdmi_debugfs_exit()
1123 hdmi->minor = NULL; in tegra_hdmi_debugfs_exit()
1125 kfree(hdmi->debugfs_files); in tegra_hdmi_debugfs_exit()
1126 hdmi->debugfs_files = NULL; in tegra_hdmi_debugfs_exit()
1128 debugfs_remove(hdmi->debugfs); in tegra_hdmi_debugfs_exit()
1129 hdmi->debugfs = NULL; in tegra_hdmi_debugfs_exit()
1137 struct tegra_hdmi *hdmi = host1x_client_to_hdmi(client); in tegra_hdmi_drm_init() local
1140 hdmi->output.type = TEGRA_OUTPUT_HDMI; in tegra_hdmi_drm_init()
1141 hdmi->output.dev = client->dev; in tegra_hdmi_drm_init()
1142 hdmi->output.ops = &hdmi_ops; in tegra_hdmi_drm_init()
1144 err = tegra_output_init(drm, &hdmi->output); in tegra_hdmi_drm_init()
1151 err = tegra_hdmi_debugfs_init(hdmi, drm->primary); in tegra_hdmi_drm_init()
1161 struct tegra_hdmi *hdmi = host1x_client_to_hdmi(client); in tegra_hdmi_drm_exit() local
1165 err = tegra_hdmi_debugfs_exit(hdmi); in tegra_hdmi_drm_exit()
1171 err = tegra_output_disable(&hdmi->output); in tegra_hdmi_drm_exit()
1177 err = tegra_output_exit(&hdmi->output); in tegra_hdmi_drm_exit()
1194 struct tegra_hdmi *hdmi; in tegra_hdmi_probe() local
1198 hdmi = devm_kzalloc(&pdev->dev, sizeof(*hdmi), GFP_KERNEL); in tegra_hdmi_probe()
1199 if (!hdmi) in tegra_hdmi_probe()
1202 hdmi->dev = &pdev->dev; in tegra_hdmi_probe()
1203 hdmi->audio_source = AUTO; in tegra_hdmi_probe()
1204 hdmi->audio_freq = 44100; in tegra_hdmi_probe()
1205 hdmi->stereo = false; in tegra_hdmi_probe()
1206 hdmi->dvi = false; in tegra_hdmi_probe()
1208 hdmi->clk = devm_clk_get(&pdev->dev, NULL); in tegra_hdmi_probe()
1209 if (IS_ERR(hdmi->clk)) { in tegra_hdmi_probe()
1211 return PTR_ERR(hdmi->clk); in tegra_hdmi_probe()
1214 err = clk_prepare(hdmi->clk); in tegra_hdmi_probe()
1218 hdmi->clk_parent = devm_clk_get(&pdev->dev, "parent"); in tegra_hdmi_probe()
1219 if (IS_ERR(hdmi->clk_parent)) in tegra_hdmi_probe()
1220 return PTR_ERR(hdmi->clk_parent); in tegra_hdmi_probe()
1222 err = clk_prepare(hdmi->clk_parent); in tegra_hdmi_probe()
1226 err = clk_set_parent(hdmi->clk, hdmi->clk_parent); in tegra_hdmi_probe()
1232 hdmi->vdd = devm_regulator_get(&pdev->dev, "vdd"); in tegra_hdmi_probe()
1233 if (IS_ERR(hdmi->vdd)) { in tegra_hdmi_probe()
1235 return PTR_ERR(hdmi->vdd); in tegra_hdmi_probe()
1238 hdmi->pll = devm_regulator_get(&pdev->dev, "pll"); in tegra_hdmi_probe()
1239 if (IS_ERR(hdmi->pll)) { in tegra_hdmi_probe()
1241 return PTR_ERR(hdmi->pll); in tegra_hdmi_probe()
1244 hdmi->output.dev = &pdev->dev; in tegra_hdmi_probe()
1246 err = tegra_output_parse_dt(&hdmi->output); in tegra_hdmi_probe()
1254 hdmi->regs = devm_ioremap_resource(&pdev->dev, regs); in tegra_hdmi_probe()
1255 if (IS_ERR(hdmi->regs)) in tegra_hdmi_probe()
1256 return PTR_ERR(hdmi->regs); in tegra_hdmi_probe()
1262 hdmi->irq = err; in tegra_hdmi_probe()
1264 hdmi->client.ops = &hdmi_client_ops; in tegra_hdmi_probe()
1265 INIT_LIST_HEAD(&hdmi->client.list); in tegra_hdmi_probe()
1266 hdmi->client.dev = &pdev->dev; in tegra_hdmi_probe()
1268 err = host1x_register_client(host1x, &hdmi->client); in tegra_hdmi_probe()
1275 platform_set_drvdata(pdev, hdmi); in tegra_hdmi_probe()
1283 struct tegra_hdmi *hdmi = platform_get_drvdata(pdev); in tegra_hdmi_remove() local
1286 err = host1x_unregister_client(host1x, &hdmi->client); in tegra_hdmi_remove()
1293 clk_unprepare(hdmi->clk_parent); in tegra_hdmi_remove()
1294 clk_unprepare(hdmi->clk); in tegra_hdmi_remove()