Lines Matching full:hda

260 	struct sti_hda *hda;
271 static u32 hda_read(struct sti_hda *hda, int offset)
273 return readl(hda->regs + offset);
276 static void hda_write(struct sti_hda *hda, u32 val, int offset)
278 writel(val, hda->regs + offset);
304 * @hda: pointer to HD analog structure
307 static void hda_enable_hd_dacs(struct sti_hda *hda, bool enable)
309 if (hda->video_dacs_ctrl) {
312 val = readl(hda->video_dacs_ctrl);
318 writel(val, hda->video_dacs_ctrl);
323 readl(hda->regs + reg))
335 seq_puts(s, "\n\n HDA AWG microcode:");
355 struct sti_hda *hda = (struct sti_hda *)node->info_ent->data;
357 seq_printf(s, "HD Analog: (vaddr = 0x%p)", hda->regs);
359 hda_dbg_cfg(s, readl(hda->regs + HDA_ANA_CFG));
366 hda_dbg_awg_microcode(s, hda->regs + HDA_SYNC_AWGI);
367 if (hda->video_dacs_ctrl)
368 hda_dbg_video_dacs_ctrl(s, hda->video_dacs_ctrl);
374 { "hda", hda_dbg_show, 0, NULL },
377 static void hda_debugfs_init(struct sti_hda *hda, struct drm_minor *minor)
382 hda_debugfs_files[i].data = hda;
392 * @hda: pointer to HD analog structure
396 static void sti_hda_configure_awg(struct sti_hda *hda, u32 *awg_instr, int nb)
403 hda_write(hda, awg_instr[i], HDA_SYNC_AWGI + i * 4);
405 hda_write(hda, 0, HDA_SYNC_AWGI + i * 4);
410 struct sti_hda *hda = drm_bridge_to_sti_hda(bridge);
413 if (!hda->enabled)
419 val = hda_read(hda, HDA_ANA_CFG);
421 hda_write(hda, val, HDA_ANA_CFG);
422 hda_write(hda, 0, HDA_ANA_ANC_CTRL);
424 hda_enable_hd_dacs(hda, false);
426 /* Disable/unprepare hda clock */
427 clk_disable_unprepare(hda->clk_hddac);
428 clk_disable_unprepare(hda->clk_pix);
430 hda->enabled = false;
435 struct sti_hda *hda = drm_bridge_to_sti_hda(bridge);
443 if (hda->enabled)
447 if (clk_prepare_enable(hda->clk_pix))
449 if (clk_prepare_enable(hda->clk_hddac))
452 if (!hda_get_mode_idx(&hda->mode, &mode_idx)) {
484 DRM_DEBUG_DRIVER("Using HDA mode #%d\n", mode_idx);
487 hda_enable_hd_dacs(hda, true);
490 hda_write(hda, SCALE_CTRL_Y_DFLT, HDA_ANA_SCALE_CTRL_Y);
491 hda_write(hda, SCALE_CTRL_CB_DFLT, HDA_ANA_SCALE_CTRL_CB);
492 hda_write(hda, SCALE_CTRL_CR_DFLT, HDA_ANA_SCALE_CTRL_CR);
495 hda_write(hda , src_filter_y, HDA_ANA_SRC_Y_CFG);
496 hda_write(hda, src_filter_c, HDA_ANA_SRC_C_CFG);
498 hda_write(hda, coef_y[i], HDA_COEFF_Y_PH1_TAP123 + i * 4);
499 hda_write(hda, coef_c[i], HDA_COEFF_C_PH1_TAP123 + i * 4);
504 val |= (hda->mode.flags & DRM_MODE_FLAG_INTERLACE) ?
508 hda_write(hda, val, HDA_ANA_CFG);
511 sti_hda_configure_awg(hda, hda_supported_modes[mode_idx].awg_instr,
515 val = hda_read(hda, HDA_ANA_CFG);
517 hda_write(hda, val, HDA_ANA_CFG);
519 hda->enabled = true;
526 struct sti_hda *hda = drm_bridge_to_sti_hda(bridge);
533 drm_mode_copy(&hda->mode, mode);
535 if (!hda_get_mode_idx(&hda->mode, &mode_idx)) {
555 ret = clk_set_rate(hda->clk_hddac, hddac_rate);
561 ret = clk_set_rate(hda->clk_pix, mode->clock * 1000);
586 struct sti_hda *hda = hda_connector->hda;
592 drm_mode_duplicate(hda->drm_dev,
621 struct sti_hda *hda = hda_connector->hda;
626 result = clk_round_rate(hda->clk_pix, target);
632 DRM_DEBUG_DRIVER("hda pixclk=%d not supported\n",
651 struct sti_hda *hda = hda_connector->hda;
653 hda_debugfs_init(hda, hda->drm_dev->primary);
681 struct sti_hda *hda = dev_get_drvdata(dev);
689 hda->drm_dev = drm_dev;
699 connector->hda = hda;
701 drm_bridge_attach(encoder, &hda->bridge, NULL, 0);
721 hda_enable_hd_dacs(hda, false);
742 struct sti_hda *hda;
747 hda = devm_drm_bridge_alloc(dev, struct sti_hda, bridge, &sti_hda_bridge_funcs);
748 if (IS_ERR(hda))
749 return PTR_ERR(hda);
751 hda->dev = pdev->dev;
752 hda->regs = devm_platform_ioremap_resource_byname(pdev, "hda-reg");
753 if (IS_ERR(hda->regs))
754 return PTR_ERR(hda->regs);
759 hda->video_dacs_ctrl = devm_ioremap(dev, res->start,
761 if (!hda->video_dacs_ctrl)
766 hda->video_dacs_ctrl = NULL;
770 hda->clk_pix = devm_clk_get(dev, "pix");
771 if (IS_ERR(hda->clk_pix)) {
773 return PTR_ERR(hda->clk_pix);
776 hda->clk_hddac = devm_clk_get(dev, "hddac");
777 if (IS_ERR(hda->clk_hddac)) {
779 return PTR_ERR(hda->clk_hddac);
782 platform_set_drvdata(pdev, hda);
793 { .compatible = "st,stih416-hda", },
794 { .compatible = "st,stih407-hda", },
801 .name = "sti-hda",