Lines Matching +full:reg +full:- +full:names
1 // SPDX-License-Identifier: GPL-2.0-only
13 #include <linux/dma-mapping.h>
97 __raw_writel(val, dss->base + idx.idx); in dss_write_reg()
102 return __raw_readl(dss->base + idx.idx); in dss_read_reg()
105 #define SR(dss, reg) \ argument
106 dss->ctx[(DSS_##reg).idx / sizeof(u32)] = dss_read_reg(dss, DSS_##reg)
107 #define RR(dss, reg) \ argument
108 dss_write_reg(dss, DSS_##reg, dss->ctx[(DSS_##reg).idx / sizeof(u32)])
116 if (dss->feat->outputs[OMAP_DSS_CHANNEL_LCD] & OMAP_DSS_OUTPUT_SDI) { in dss_save_context()
121 dss->ctx_valid = true; in dss_save_context()
130 if (!dss->ctx_valid) in dss_restore_context()
135 if (dss->feat->outputs[OMAP_DSS_CHANNEL_LCD] & OMAP_DSS_OUTPUT_SDI) { in dss_restore_context()
151 if (!pll->dss->syscon_pll_ctrl) in dss_ctrl_pll_enable()
156 switch (pll->id) { in dss_ctrl_pll_enable()
167 DSSERR("illegal DSS PLL ID %d\n", pll->id); in dss_ctrl_pll_enable()
171 regmap_update_bits(pll->dss->syscon_pll_ctrl, in dss_ctrl_pll_enable()
172 pll->dss->syscon_pll_ctrl_offset, in dss_ctrl_pll_enable()
182 if (!dss->syscon_pll_ctrl) in dss_ctrl_pll_set_control_mux()
183 return -EINVAL; in dss_ctrl_pll_set_control_mux()
196 return -EINVAL; in dss_ctrl_pll_set_control_mux()
212 return -EINVAL; in dss_ctrl_pll_set_control_mux()
228 return -EINVAL; in dss_ctrl_pll_set_control_mux()
234 return -EINVAL; in dss_ctrl_pll_set_control_mux()
237 regmap_update_bits(dss->syscon_pll_ctrl, dss->syscon_pll_ctrl_offset, in dss_ctrl_pll_set_control_mux()
251 l = FLD_MOD(l, datapairs-1, 3, 2); /* SDI_PRSEL */ in dss_sdi_init()
266 dispc_pck_free_enable(dss->dispc, 1); in dss_sdi_enable()
296 dispc_lcd_enable_signal(dss->dispc, 1); in dss_sdi_enable()
310 dispc_lcd_enable_signal(dss->dispc, 0); in dss_sdi_enable()
315 dispc_pck_free_enable(dss->dispc, 0); in dss_sdi_enable()
317 return -ETIMEDOUT; in dss_sdi_enable()
322 dispc_lcd_enable_signal(dss->dispc, 0); in dss_sdi_disable()
324 dispc_pck_free_enable(dss->dispc, 0); in dss_sdi_disable()
343 seq_printf(s, "- DSS -\n"); in dss_dump_clocks()
346 fclk_rate = clk_get_rate(dss->dss_clk); in dss_dump_clocks()
357 struct dss_device *dss = s->private; in dss_dump_regs()
359 #define DUMPREG(dss, r) seq_printf(s, "%-35s %08x\n", #r, dss_read_reg(dss, r)) in dss_dump_regs()
369 if (dss->feat->outputs[OMAP_DSS_CHANNEL_LCD] & OMAP_DSS_OUTPUT_SDI) { in dss_dump_regs()
382 struct dss_device *dss = s->private; in dss_debug_dump_clocks()
385 dispc_dump_clocks(dss->dispc, s); in dss_debug_dump_clocks()
413 if (WARN_ON(dss->feat->has_lcd_clk_src && clk_src != DSS_CLK_SRC_FCK)) in dss_select_dispc_clk_source()
432 dss->feat->dispc_clk_switch.start, in dss_select_dispc_clk_source()
433 dss->feat->dispc_clk_switch.end); in dss_select_dispc_clk_source()
435 dss->dispc_clk_source = clk_src; in dss_select_dispc_clk_source()
463 dss->dsi_clk_source[dsi_module] = clk_src; in dss_select_dsi_clk_source()
482 return -EINVAL; in dss_lcd_clk_mux_dra7()
514 return -EINVAL; in dss_lcd_clk_mux_omap5()
518 return -EINVAL; in dss_lcd_clk_mux_omap5()
547 return -EINVAL; in dss_lcd_clk_mux_omap4()
561 if (!dss->feat->has_lcd_clk_src) { in dss_select_lcd_clk_source()
563 dss->lcd_clk_source[idx] = clk_src; in dss_select_lcd_clk_source()
567 r = dss->feat->ops->select_lcd_source(dss, channel, clk_src); in dss_select_lcd_clk_source()
571 dss->lcd_clk_source[idx] = clk_src; in dss_select_lcd_clk_source()
576 return dss->dispc_clk_source; in dss_get_dispc_clk_source()
582 return dss->dsi_clk_source[dsi_module]; in dss_get_dsi_clk_source()
588 if (dss->feat->has_lcd_clk_src) { in dss_get_lcd_clk_source()
590 return dss->lcd_clk_source[idx]; in dss_get_lcd_clk_source()
594 return dss->dispc_clk_source; in dss_get_lcd_clk_source()
608 fck_hw_max = dss->feat->fck_freq_max; in dss_div_calc()
610 if (dss->parent_clk == NULL) { in dss_div_calc()
617 fck = clk_round_rate(dss->dss_clk, fck); in dss_div_calc()
622 fckd_hw_max = dss->feat->fck_div_max; in dss_div_calc()
624 m = dss->feat->dss_fck_multiplier; in dss_div_calc()
625 prate = clk_get_rate(dss->parent_clk); in dss_div_calc()
632 for (fckd = fckd_start; fckd >= fckd_stop; --fckd) { in dss_div_calc()
648 r = clk_set_rate(dss->dss_clk, rate); in dss_set_fck_rate()
652 dss->dss_clk_rate = clk_get_rate(dss->dss_clk); in dss_set_fck_rate()
654 WARN_ONCE(dss->dss_clk_rate != rate, "clk rate mismatch: %lu != %lu", in dss_set_fck_rate()
655 dss->dss_clk_rate, rate); in dss_set_fck_rate()
662 return dss->dss_clk_rate; in dss_get_dispc_clk_rate()
667 return dss->feat->fck_freq_max; in dss_get_max_fck_rate()
677 max_dss_fck = dss->feat->fck_freq_max; in dss_setup_default_clock()
679 if (dss->parent_clk == NULL) { in dss_setup_default_clock()
680 fck = clk_round_rate(dss->dss_clk, max_dss_fck); in dss_setup_default_clock()
682 prate = clk_get_rate(dss->parent_clk); in dss_setup_default_clock()
684 fck_div = DIV_ROUND_UP(prate * dss->feat->dss_fck_multiplier, in dss_setup_default_clock()
687 * dss->feat->dss_fck_multiplier; in dss_setup_default_clock()
714 /* DAC Power-Down Control */ in dss_set_dac_pwrdn_bgz()
723 outputs = dss->feat->outputs[OMAP_DSS_CHANNEL_DIGIT]; in dss_select_hdmi_venc_clk_source()
740 return -EINVAL; in dss_dpi_select_source_omap2_omap3()
758 return -EINVAL; in dss_dpi_select_source_omap4()
785 return -EINVAL; in dss_dpi_select_source_omap5()
801 return -EINVAL; in dss_dpi_select_source_dra7xx()
805 return -EINVAL; in dss_dpi_select_source_dra7xx()
808 return -EINVAL; in dss_dpi_select_source_dra7xx()
817 return dss->feat->ops->dpi_select_source(dss, port, channel); in dss_dpi_select_source()
824 clk = devm_clk_get(&dss->pdev->dev, "fck"); in dss_get_clocks()
830 dss->dss_clk = clk; in dss_get_clocks()
832 if (dss->feat->parent_clk_name) { in dss_get_clocks()
833 clk = clk_get(NULL, dss->feat->parent_clk_name); in dss_get_clocks()
836 dss->feat->parent_clk_name); in dss_get_clocks()
843 dss->parent_clk = clk; in dss_get_clocks()
850 if (dss->parent_clk) in dss_put_clocks()
851 clk_put(dss->parent_clk); in dss_put_clocks()
860 r = pm_runtime_get_sync(&dss->pdev->dev); in dss_runtime_get()
871 r = pm_runtime_put_sync(&dss->pdev->dev); in dss_runtime_put()
872 WARN_ON(r < 0 && r != -ENOSYS && r != -EBUSY); in dss_runtime_put()
890 dss->debugfs.root = dir; in dss_initialize_debugfs()
897 debugfs_remove_recursive(dss->debugfs.root); in dss_uninitialize_debugfs()
908 struct dss_debugfs_entry *entry = inode->i_private; in dss_debug_open()
910 return single_open(file, entry->show_fn, entry->data); in dss_debug_open()
929 return ERR_PTR(-ENOMEM); in dss_debugfs_create_file()
931 entry->show_fn = show_fn; in dss_debugfs_create_file()
932 entry->data = data; in dss_debugfs_create_file()
933 entry->dentry = debugfs_create_file(name, 0444, dss->debugfs.root, in dss_debugfs_create_file()
944 debugfs_remove(entry->dentry); in dss_debugfs_remove_file()
1156 struct platform_device *pdev = dss->pdev; in __dss_uninit_ports()
1157 struct device_node *parent = pdev->dev.of_node; in __dss_uninit_ports()
1166 switch (dss->feat->ports[i]) { in __dss_uninit_ports()
1181 struct platform_device *pdev = dss->pdev; in dss_init_ports()
1182 struct device_node *parent = pdev->dev.of_node; in dss_init_ports()
1187 for (i = 0; i < dss->feat->num_ports; i++) { in dss_init_ports()
1192 switch (dss->feat->ports[i]) { in dss_init_ports()
1194 r = dpi_init_port(dss, pdev, port, dss->feat->model); in dss_init_ports()
1219 __dss_uninit_ports(dss, dss->feat->num_ports); in dss_uninit_ports()
1224 struct platform_device *pdev = dss->pdev; in dss_video_pll_probe()
1225 struct device_node *np = pdev->dev.of_node; in dss_video_pll_probe()
1232 if (of_property_read_bool(np, "syscon-pll-ctrl")) { in dss_video_pll_probe()
1233 dss->syscon_pll_ctrl = syscon_regmap_lookup_by_phandle(np, in dss_video_pll_probe()
1234 "syscon-pll-ctrl"); in dss_video_pll_probe()
1235 if (IS_ERR(dss->syscon_pll_ctrl)) { in dss_video_pll_probe()
1236 dev_err(&pdev->dev, in dss_video_pll_probe()
1237 "failed to get syscon-pll-ctrl regmap\n"); in dss_video_pll_probe()
1238 return PTR_ERR(dss->syscon_pll_ctrl); in dss_video_pll_probe()
1241 if (of_property_read_u32_index(np, "syscon-pll-ctrl", 1, in dss_video_pll_probe()
1242 &dss->syscon_pll_ctrl_offset)) { in dss_video_pll_probe()
1243 dev_err(&pdev->dev, in dss_video_pll_probe()
1244 "failed to get syscon-pll-ctrl offset\n"); in dss_video_pll_probe()
1245 return -EINVAL; in dss_video_pll_probe()
1249 pll_regulator = devm_regulator_get(&pdev->dev, "vdda_video"); in dss_video_pll_probe()
1254 case -ENOENT: in dss_video_pll_probe()
1258 case -EPROBE_DEFER: in dss_video_pll_probe()
1259 return -EPROBE_DEFER; in dss_video_pll_probe()
1267 if (of_property_match_string(np, "reg-names", "pll1") >= 0) { in dss_video_pll_probe()
1268 dss->video1_pll = dss_video_pll_init(dss, pdev, 0, in dss_video_pll_probe()
1270 if (IS_ERR(dss->video1_pll)) in dss_video_pll_probe()
1271 return PTR_ERR(dss->video1_pll); in dss_video_pll_probe()
1274 if (of_property_match_string(np, "reg-names", "pll2") >= 0) { in dss_video_pll_probe()
1275 dss->video2_pll = dss_video_pll_init(dss, pdev, 1, in dss_video_pll_probe()
1277 if (IS_ERR(dss->video2_pll)) { in dss_video_pll_probe()
1278 dss_video_pll_uninit(dss->video1_pll); in dss_video_pll_probe()
1279 return PTR_ERR(dss->video2_pll); in dss_video_pll_probe()
1288 { .compatible = "ti,omap2-dss", .data = &omap24xx_dss_feats },
1289 { .compatible = "ti,omap3-dss", .data = &omap3630_dss_feats },
1290 { .compatible = "ti,omap4-dss", .data = &omap44xx_dss_feats },
1291 { .compatible = "ti,omap5-dss", .data = &omap54xx_dss_feats },
1292 { .compatible = "ti,dra7-dss", .data = &dra7xx_dss_feats },
1324 dss->drm_pdev = drm_pdev; in dss_bind()
1333 platform_device_unregister(dss->drm_pdev); in dss_unbind()
1359 struct component_match **match = cmatch->match; in dss_add_child_component()
1376 if (strstr(dev_name(dev), "target-module")) in dss_add_child_component()
1380 component_match_add(cmatch->dev, match, dss_component_compare, dev); in dss_add_child_component()
1394 dss->dss_clk_rate = clk_get_rate(dss->dss_clk); in dss_probe_hardware()
1406 dss->dsi_clk_source[0] = DSS_CLK_SRC_FCK; in dss_probe_hardware()
1407 dss->dsi_clk_source[1] = DSS_CLK_SRC_FCK; in dss_probe_hardware()
1408 dss->dispc_clk_source = DSS_CLK_SRC_FCK; in dss_probe_hardware()
1409 dss->lcd_clk_source[0] = DSS_CLK_SRC_FCK; in dss_probe_hardware()
1410 dss->lcd_clk_source[1] = DSS_CLK_SRC_FCK; in dss_probe_hardware()
1431 return -ENOMEM; in dss_probe()
1433 dss->pdev = pdev; in dss_probe()
1436 r = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32)); in dss_probe()
1438 dev_err(&pdev->dev, "Failed to set the DMA mask\n"); in dss_probe()
1443 * The various OMAP3-based SoCs can't be told apart using the compatible in dss_probe()
1448 dss->feat = soc->data; in dss_probe()
1450 dss->feat = of_match_device(dss_of_match, &pdev->dev)->data; in dss_probe()
1454 dss->base = devm_ioremap_resource(&pdev->dev, dss_mem); in dss_probe()
1455 if (IS_ERR(dss->base)) { in dss_probe()
1456 r = PTR_ERR(dss->base); in dss_probe()
1478 pm_runtime_enable(&pdev->dev); in dss_probe()
1489 dss->debugfs.clk = dss_debugfs_create_file(dss, "clk", in dss_probe()
1491 dss->debugfs.dss = dss_debugfs_create_file(dss, "dss", dss_dump_regs, in dss_probe()
1495 r = of_platform_populate(pdev->dev.of_node, NULL, NULL, &pdev->dev); in dss_probe()
1499 omapdss_gather_components(&pdev->dev); in dss_probe()
1501 cmatch.dev = &pdev->dev; in dss_probe()
1503 device_for_each_child(&pdev->dev, &cmatch, dss_add_child_component); in dss_probe()
1505 r = component_master_add_with_match(&pdev->dev, &dss_component_ops, match); in dss_probe()
1512 of_platform_depopulate(&pdev->dev); in dss_probe()
1515 dss_debugfs_remove_file(dss->debugfs.clk); in dss_probe()
1516 dss_debugfs_remove_file(dss->debugfs.dss); in dss_probe()
1520 pm_runtime_disable(&pdev->dev); in dss_probe()
1524 if (dss->video1_pll) in dss_probe()
1525 dss_video_pll_uninit(dss->video1_pll); in dss_probe()
1526 if (dss->video2_pll) in dss_probe()
1527 dss_video_pll_uninit(dss->video2_pll); in dss_probe()
1542 of_platform_depopulate(&pdev->dev); in dss_remove()
1544 component_master_del(&pdev->dev, &dss_component_ops); in dss_remove()
1546 dss_debugfs_remove_file(dss->debugfs.clk); in dss_remove()
1547 dss_debugfs_remove_file(dss->debugfs.dss); in dss_remove()
1550 pm_runtime_disable(&pdev->dev); in dss_remove()
1554 if (dss->video1_pll) in dss_remove()
1555 dss_video_pll_uninit(dss->video1_pll); in dss_remove()
1557 if (dss->video2_pll) in dss_remove()
1558 dss_video_pll_uninit(dss->video2_pll); in dss_remove()
1574 if (dssdev->state == OMAP_DSS_DISPLAY_ACTIVE && in dss_shutdown()
1575 dssdev->ops && dssdev->ops->disable) in dss_shutdown()
1576 dssdev->ops->disable(dssdev); in dss_shutdown()