Lines Matching full:disp

121  * @disp: Back pointer to struct zynqmp_disp
130 struct zynqmp_disp *disp; member
403 static u32 zynqmp_disp_avbuf_read(struct zynqmp_disp *disp, int reg) in zynqmp_disp_avbuf_read() argument
405 return readl(disp->avbuf + reg); in zynqmp_disp_avbuf_read()
408 static void zynqmp_disp_avbuf_write(struct zynqmp_disp *disp, int reg, u32 val) in zynqmp_disp_avbuf_write() argument
410 writel(val, disp->avbuf + reg); in zynqmp_disp_avbuf_write()
420 * @disp: Display controller
426 static void zynqmp_disp_avbuf_set_format(struct zynqmp_disp *disp, in zynqmp_disp_avbuf_set_format() argument
436 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_FMT); in zynqmp_disp_avbuf_set_format()
441 zynqmp_disp_avbuf_write(disp, reg, val); in zynqmp_disp_avbuf_set_format()
447 zynqmp_disp_avbuf_write(disp, reg, val); in zynqmp_disp_avbuf_set_format()
455 zynqmp_disp_avbuf_write(disp, reg, fmt->sf[i]); in zynqmp_disp_avbuf_set_format()
461 * @disp: Display controller
471 zynqmp_disp_avbuf_set_clocks_sources(struct zynqmp_disp *disp, in zynqmp_disp_avbuf_set_clocks_sources() argument
484 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_CLK_SRC, val); in zynqmp_disp_avbuf_set_clocks_sources()
489 * @disp: Display controller
493 static void zynqmp_disp_avbuf_enable_channels(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_enable_channels() argument
503 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_CHBUF(i), in zynqmp_disp_avbuf_enable_channels()
511 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_CHBUF(i), in zynqmp_disp_avbuf_enable_channels()
517 * @disp: Display controller
521 static void zynqmp_disp_avbuf_disable_channels(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_disable_channels() argument
526 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_CHBUF(i), in zynqmp_disp_avbuf_disable_channels()
532 * @disp: Display controller
536 static void zynqmp_disp_avbuf_enable_audio(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_enable_audio() argument
540 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT); in zynqmp_disp_avbuf_enable_audio()
544 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_OUTPUT, val); in zynqmp_disp_avbuf_enable_audio()
549 * @disp: Display controller
553 static void zynqmp_disp_avbuf_disable_audio(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_disable_audio() argument
557 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT); in zynqmp_disp_avbuf_disable_audio()
561 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_OUTPUT, val); in zynqmp_disp_avbuf_disable_audio()
566 * @disp: Display controller
571 static void zynqmp_disp_avbuf_enable_video(struct zynqmp_disp *disp, in zynqmp_disp_avbuf_enable_video() argument
576 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT); in zynqmp_disp_avbuf_enable_video()
591 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_OUTPUT, val); in zynqmp_disp_avbuf_enable_video()
596 * @disp: Display controller
601 static void zynqmp_disp_avbuf_disable_video(struct zynqmp_disp *disp, in zynqmp_disp_avbuf_disable_video() argument
606 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT); in zynqmp_disp_avbuf_disable_video()
614 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_OUTPUT, val); in zynqmp_disp_avbuf_disable_video()
619 * @disp: Display controller
623 static void zynqmp_disp_avbuf_enable(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_enable() argument
625 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_SRST_REG, 0); in zynqmp_disp_avbuf_enable()
630 * @disp: Display controller
634 static void zynqmp_disp_avbuf_disable(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_disable() argument
636 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_SRST_REG, in zynqmp_disp_avbuf_disable()
644 static void zynqmp_disp_blend_write(struct zynqmp_disp *disp, int reg, u32 val) in zynqmp_disp_blend_write() argument
646 writel(val, disp->blend + reg); in zynqmp_disp_blend_write()
692 * @disp: Display controller
697 static void zynqmp_disp_blend_set_output_format(struct zynqmp_disp *disp, in zynqmp_disp_blend_set_output_format() argument
713 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_OUTPUT_VID_FMT, fmt); in zynqmp_disp_blend_set_output_format()
723 zynqmp_disp_blend_write(disp, in zynqmp_disp_blend_set_output_format()
728 zynqmp_disp_blend_write(disp, in zynqmp_disp_blend_set_output_format()
735 * @disp: Display controller
744 static void zynqmp_disp_blend_set_bg_color(struct zynqmp_disp *disp, in zynqmp_disp_blend_set_bg_color() argument
747 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_BG_CLR_0, rcr); in zynqmp_disp_blend_set_bg_color()
748 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_BG_CLR_1, gy); in zynqmp_disp_blend_set_bg_color()
749 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_BG_CLR_2, bcb); in zynqmp_disp_blend_set_bg_color()
754 * @disp: Display controller
758 void zynqmp_disp_blend_set_global_alpha(struct zynqmp_disp *disp, in zynqmp_disp_blend_set_global_alpha() argument
761 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_SET_GLOBAL_ALPHA, in zynqmp_disp_blend_set_global_alpha()
768 * @disp: Display controller
777 static void zynqmp_disp_blend_layer_set_csc(struct zynqmp_disp *disp, in zynqmp_disp_blend_layer_set_csc() argument
804 zynqmp_disp_blend_write(disp, reg + 0, coeffs[i + swap[0]]); in zynqmp_disp_blend_layer_set_csc()
805 zynqmp_disp_blend_write(disp, reg + 4, coeffs[i + swap[1]]); in zynqmp_disp_blend_layer_set_csc()
806 zynqmp_disp_blend_write(disp, reg + 8, coeffs[i + swap[2]]); in zynqmp_disp_blend_layer_set_csc()
815 zynqmp_disp_blend_write(disp, reg + i * 4, offsets[i]); in zynqmp_disp_blend_layer_set_csc()
820 * @disp: Display controller
823 static void zynqmp_disp_blend_layer_enable(struct zynqmp_disp *disp, in zynqmp_disp_blend_layer_enable() argument
835 zynqmp_disp_blend_write(disp, in zynqmp_disp_blend_layer_enable()
847 zynqmp_disp_blend_layer_set_csc(disp, layer, coeffs, offsets); in zynqmp_disp_blend_layer_enable()
852 * @disp: Display controller
855 static void zynqmp_disp_blend_layer_disable(struct zynqmp_disp *disp, in zynqmp_disp_blend_layer_disable() argument
858 zynqmp_disp_blend_write(disp, in zynqmp_disp_blend_layer_disable()
862 zynqmp_disp_blend_layer_set_csc(disp, layer, csc_zero_matrix, in zynqmp_disp_blend_layer_disable()
1005 zynqmp_disp_avbuf_enable_video(layer->disp, layer); in zynqmp_disp_layer_enable()
1006 zynqmp_disp_blend_layer_enable(layer->disp, layer); in zynqmp_disp_layer_enable()
1025 zynqmp_disp_avbuf_disable_video(layer->disp, layer); in zynqmp_disp_layer_disable()
1026 zynqmp_disp_blend_layer_disable(layer->disp, layer); in zynqmp_disp_layer_disable()
1052 zynqmp_disp_avbuf_set_format(layer->disp, layer, layer->disp_fmt); in zynqmp_disp_layer_set_format()
1094 zynqmp_disp_avbuf_set_format(layer->disp, layer, layer->disp_fmt); in zynqmp_disp_layer_set_live_format()
1141 dev_err(layer->disp->dev, in zynqmp_disp_layer_update()
1155 * @disp: Display controller
1160 static void zynqmp_disp_layer_release_dma(struct zynqmp_disp *disp, in zynqmp_disp_layer_release_dma() argument
1182 * @disp: Display controller
1184 static void zynqmp_disp_destroy_layers(struct zynqmp_disp *disp) in zynqmp_disp_destroy_layers() argument
1188 for (i = 0; i < ARRAY_SIZE(disp->layers); i++) in zynqmp_disp_destroy_layers()
1189 zynqmp_disp_layer_release_dma(disp, &disp->layers[i]); in zynqmp_disp_destroy_layers()
1194 * @disp: Display controller
1201 static int zynqmp_disp_layer_request_dma(struct zynqmp_disp *disp, in zynqmp_disp_layer_request_dma() argument
1214 dma->chan = dma_request_chan(disp->dev, dma_channel_name); in zynqmp_disp_layer_request_dma()
1216 ret = dev_err_probe(disp->dev, PTR_ERR(dma->chan), in zynqmp_disp_layer_request_dma()
1228 * @disp: Display controller
1232 static int zynqmp_disp_create_layers(struct zynqmp_disp *disp) in zynqmp_disp_create_layers() argument
1255 for (i = 0; i < ARRAY_SIZE(disp->layers); i++) { in zynqmp_disp_create_layers()
1256 struct zynqmp_disp_layer *layer = &disp->layers[i]; in zynqmp_disp_create_layers()
1259 layer->disp = disp; in zynqmp_disp_create_layers()
1264 if (disp->dpsub->dma_enabled) { in zynqmp_disp_create_layers()
1272 ret = zynqmp_disp_layer_request_dma(disp, layer); in zynqmp_disp_create_layers()
1276 disp->dpsub->layers[i] = layer; in zynqmp_disp_create_layers()
1282 zynqmp_disp_destroy_layers(disp); in zynqmp_disp_create_layers()
1292 * @disp: Display controller
1294 void zynqmp_disp_enable(struct zynqmp_disp *disp) in zynqmp_disp_enable() argument
1296 zynqmp_disp_blend_set_output_format(disp, ZYNQMP_DPSUB_FORMAT_RGB); in zynqmp_disp_enable()
1297 zynqmp_disp_blend_set_bg_color(disp, 0, 0, 0); in zynqmp_disp_enable()
1299 zynqmp_disp_avbuf_enable(disp); in zynqmp_disp_enable()
1301 zynqmp_disp_avbuf_set_clocks_sources(disp, disp->dpsub->vid_clk_from_ps, in zynqmp_disp_enable()
1302 disp->dpsub->aud_clk_from_ps, in zynqmp_disp_enable()
1303 disp->dpsub->vid_clk_from_ps); in zynqmp_disp_enable()
1304 zynqmp_disp_avbuf_enable_channels(disp); in zynqmp_disp_enable()
1305 zynqmp_disp_avbuf_enable_audio(disp); in zynqmp_disp_enable()
1310 * @disp: Display controller
1312 void zynqmp_disp_disable(struct zynqmp_disp *disp) in zynqmp_disp_disable() argument
1314 zynqmp_disp_avbuf_disable_audio(disp); in zynqmp_disp_disable()
1315 zynqmp_disp_avbuf_disable_channels(disp); in zynqmp_disp_disable()
1316 zynqmp_disp_avbuf_disable(disp); in zynqmp_disp_disable()
1321 * @disp: Display controller
1326 int zynqmp_disp_setup_clock(struct zynqmp_disp *disp, in zynqmp_disp_setup_clock() argument
1333 ret = clk_set_rate(disp->dpsub->vid_clk, mode_clock); in zynqmp_disp_setup_clock()
1335 dev_err(disp->dev, "failed to set the video clock\n"); in zynqmp_disp_setup_clock()
1339 rate = clk_get_rate(disp->dpsub->vid_clk); in zynqmp_disp_setup_clock()
1342 dev_info(disp->dev, in zynqmp_disp_setup_clock()
1346 dev_dbg(disp->dev, in zynqmp_disp_setup_clock()
1360 struct zynqmp_disp *disp; in zynqmp_disp_probe() local
1363 disp = kzalloc(sizeof(*disp), GFP_KERNEL); in zynqmp_disp_probe()
1364 if (!disp) in zynqmp_disp_probe()
1367 disp->dev = &pdev->dev; in zynqmp_disp_probe()
1368 disp->dpsub = dpsub; in zynqmp_disp_probe()
1370 disp->blend = devm_platform_ioremap_resource_byname(pdev, "blend"); in zynqmp_disp_probe()
1371 if (IS_ERR(disp->blend)) { in zynqmp_disp_probe()
1372 ret = PTR_ERR(disp->blend); in zynqmp_disp_probe()
1376 disp->avbuf = devm_platform_ioremap_resource_byname(pdev, "av_buf"); in zynqmp_disp_probe()
1377 if (IS_ERR(disp->avbuf)) { in zynqmp_disp_probe()
1378 ret = PTR_ERR(disp->avbuf); in zynqmp_disp_probe()
1382 ret = zynqmp_disp_create_layers(disp); in zynqmp_disp_probe()
1386 if (disp->dpsub->dma_enabled) { in zynqmp_disp_probe()
1389 layer = &disp->layers[ZYNQMP_DPSUB_LAYER_VID]; in zynqmp_disp_probe()
1393 dpsub->disp = disp; in zynqmp_disp_probe()
1398 kfree(disp); in zynqmp_disp_probe()
1404 struct zynqmp_disp *disp = dpsub->disp; in zynqmp_disp_remove() local
1406 zynqmp_disp_destroy_layers(disp); in zynqmp_disp_remove()