Lines Matching refs:disp
117 struct zynqmp_disp *disp; member
357 static u32 zynqmp_disp_avbuf_read(struct zynqmp_disp *disp, int reg) in zynqmp_disp_avbuf_read() argument
359 return readl(disp->avbuf.base + reg); in zynqmp_disp_avbuf_read()
362 static void zynqmp_disp_avbuf_write(struct zynqmp_disp *disp, int reg, u32 val) in zynqmp_disp_avbuf_write() argument
364 writel(val, disp->avbuf.base + reg); in zynqmp_disp_avbuf_write()
380 static void zynqmp_disp_avbuf_set_format(struct zynqmp_disp *disp, in zynqmp_disp_avbuf_set_format() argument
387 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_FMT); in zynqmp_disp_avbuf_set_format()
392 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_FMT, val); in zynqmp_disp_avbuf_set_format()
399 zynqmp_disp_avbuf_write(disp, reg, fmt->sf[i]); in zynqmp_disp_avbuf_set_format()
415 zynqmp_disp_avbuf_set_clocks_sources(struct zynqmp_disp *disp, in zynqmp_disp_avbuf_set_clocks_sources() argument
428 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_CLK_SRC, val); in zynqmp_disp_avbuf_set_clocks_sources()
437 static void zynqmp_disp_avbuf_enable_channels(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_enable_channels() argument
447 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_CHBUF(i), in zynqmp_disp_avbuf_enable_channels()
455 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_CHBUF(i), in zynqmp_disp_avbuf_enable_channels()
465 static void zynqmp_disp_avbuf_disable_channels(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_disable_channels() argument
470 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_CHBUF(i), in zynqmp_disp_avbuf_disable_channels()
480 static void zynqmp_disp_avbuf_enable_audio(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_enable_audio() argument
484 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT); in zynqmp_disp_avbuf_enable_audio()
488 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_OUTPUT, val); in zynqmp_disp_avbuf_enable_audio()
497 static void zynqmp_disp_avbuf_disable_audio(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_disable_audio() argument
501 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT); in zynqmp_disp_avbuf_disable_audio()
505 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_OUTPUT, val); in zynqmp_disp_avbuf_disable_audio()
515 static void zynqmp_disp_avbuf_enable_video(struct zynqmp_disp *disp, in zynqmp_disp_avbuf_enable_video() argument
520 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT); in zynqmp_disp_avbuf_enable_video()
535 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_OUTPUT, val); in zynqmp_disp_avbuf_enable_video()
545 static void zynqmp_disp_avbuf_disable_video(struct zynqmp_disp *disp, in zynqmp_disp_avbuf_disable_video() argument
550 val = zynqmp_disp_avbuf_read(disp, ZYNQMP_DISP_AV_BUF_OUTPUT); in zynqmp_disp_avbuf_disable_video()
558 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_OUTPUT, val); in zynqmp_disp_avbuf_disable_video()
567 static void zynqmp_disp_avbuf_enable(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_enable() argument
569 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_SRST_REG, 0); in zynqmp_disp_avbuf_enable()
578 static void zynqmp_disp_avbuf_disable(struct zynqmp_disp *disp) in zynqmp_disp_avbuf_disable() argument
580 zynqmp_disp_avbuf_write(disp, ZYNQMP_DISP_AV_BUF_SRST_REG, in zynqmp_disp_avbuf_disable()
588 static void zynqmp_disp_blend_write(struct zynqmp_disp *disp, int reg, u32 val) in zynqmp_disp_blend_write() argument
590 writel(val, disp->blend.base + reg); in zynqmp_disp_blend_write()
641 static void zynqmp_disp_blend_set_output_format(struct zynqmp_disp *disp, in zynqmp_disp_blend_set_output_format() argument
657 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_OUTPUT_VID_FMT, fmt); in zynqmp_disp_blend_set_output_format()
667 zynqmp_disp_blend_write(disp, in zynqmp_disp_blend_set_output_format()
672 zynqmp_disp_blend_write(disp, in zynqmp_disp_blend_set_output_format()
688 static void zynqmp_disp_blend_set_bg_color(struct zynqmp_disp *disp, in zynqmp_disp_blend_set_bg_color() argument
691 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_BG_CLR_0, rcr); in zynqmp_disp_blend_set_bg_color()
692 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_BG_CLR_1, gy); in zynqmp_disp_blend_set_bg_color()
693 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_BG_CLR_2, bcb); in zynqmp_disp_blend_set_bg_color()
702 void zynqmp_disp_blend_set_global_alpha(struct zynqmp_disp *disp, in zynqmp_disp_blend_set_global_alpha() argument
705 zynqmp_disp_blend_write(disp, ZYNQMP_DISP_V_BLEND_SET_GLOBAL_ALPHA, in zynqmp_disp_blend_set_global_alpha()
721 static void zynqmp_disp_blend_layer_set_csc(struct zynqmp_disp *disp, in zynqmp_disp_blend_layer_set_csc() argument
748 zynqmp_disp_blend_write(disp, reg + 0, coeffs[i + swap[0]]); in zynqmp_disp_blend_layer_set_csc()
749 zynqmp_disp_blend_write(disp, reg + 4, coeffs[i + swap[1]]); in zynqmp_disp_blend_layer_set_csc()
750 zynqmp_disp_blend_write(disp, reg + 8, coeffs[i + swap[2]]); in zynqmp_disp_blend_layer_set_csc()
759 zynqmp_disp_blend_write(disp, reg + i * 4, offsets[i]); in zynqmp_disp_blend_layer_set_csc()
767 static void zynqmp_disp_blend_layer_enable(struct zynqmp_disp *disp, in zynqmp_disp_blend_layer_enable() argument
779 zynqmp_disp_blend_write(disp, in zynqmp_disp_blend_layer_enable()
791 zynqmp_disp_blend_layer_set_csc(disp, layer, coeffs, offsets); in zynqmp_disp_blend_layer_enable()
799 static void zynqmp_disp_blend_layer_disable(struct zynqmp_disp *disp, in zynqmp_disp_blend_layer_disable() argument
802 zynqmp_disp_blend_write(disp, in zynqmp_disp_blend_layer_disable()
806 zynqmp_disp_blend_layer_set_csc(disp, layer, csc_zero_matrix, in zynqmp_disp_blend_layer_disable()
814 static void zynqmp_disp_audio_write(struct zynqmp_disp *disp, int reg, u32 val) in zynqmp_disp_audio_write() argument
816 writel(val, disp->audio.base + reg); in zynqmp_disp_audio_write()
826 static void zynqmp_disp_audio_enable(struct zynqmp_disp *disp) in zynqmp_disp_audio_enable() argument
829 zynqmp_disp_audio_write(disp, ZYNQMP_DISP_AUD_SOFT_RESET, 0); in zynqmp_disp_audio_enable()
830 zynqmp_disp_audio_write(disp, ZYNQMP_DISP_AUD_MIXER_VOLUME, in zynqmp_disp_audio_enable()
840 static void zynqmp_disp_audio_disable(struct zynqmp_disp *disp) in zynqmp_disp_audio_disable() argument
842 zynqmp_disp_audio_write(disp, ZYNQMP_DISP_AUD_SOFT_RESET, in zynqmp_disp_audio_disable()
914 zynqmp_disp_avbuf_enable_video(layer->disp, layer); in zynqmp_disp_layer_enable()
915 zynqmp_disp_blend_layer_enable(layer->disp, layer); in zynqmp_disp_layer_enable()
929 if (layer->disp->dpsub->dma_enabled) { in zynqmp_disp_layer_disable()
934 zynqmp_disp_avbuf_disable_video(layer->disp, layer); in zynqmp_disp_layer_disable()
935 zynqmp_disp_blend_layer_disable(layer->disp, layer); in zynqmp_disp_layer_disable()
953 zynqmp_disp_avbuf_set_format(layer->disp, layer, layer->disp_fmt); in zynqmp_disp_layer_set_format()
955 if (!layer->disp->dpsub->dma_enabled) in zynqmp_disp_layer_set_format()
993 if (!layer->disp->dpsub->dma_enabled) in zynqmp_disp_layer_update()
1019 dev_err(layer->disp->dev, in zynqmp_disp_layer_update()
1038 static void zynqmp_disp_layer_release_dma(struct zynqmp_disp *disp, in zynqmp_disp_layer_release_dma() argument
1043 if (!layer->info || !disp->dpsub->dma_enabled) in zynqmp_disp_layer_release_dma()
1062 static void zynqmp_disp_destroy_layers(struct zynqmp_disp *disp) in zynqmp_disp_destroy_layers() argument
1066 for (i = 0; i < ARRAY_SIZE(disp->layers); i++) in zynqmp_disp_destroy_layers()
1067 zynqmp_disp_layer_release_dma(disp, &disp->layers[i]); in zynqmp_disp_destroy_layers()
1079 static int zynqmp_disp_layer_request_dma(struct zynqmp_disp *disp, in zynqmp_disp_layer_request_dma() argument
1086 if (!disp->dpsub->dma_enabled) in zynqmp_disp_layer_request_dma()
1095 dma->chan = dma_request_chan(disp->dev, dma_channel_name); in zynqmp_disp_layer_request_dma()
1097 dev_err(disp->dev, "failed to request dma channel\n"); in zynqmp_disp_layer_request_dma()
1113 static int zynqmp_disp_create_layers(struct zynqmp_disp *disp) in zynqmp_disp_create_layers() argument
1131 for (i = 0; i < ARRAY_SIZE(disp->layers); i++) { in zynqmp_disp_create_layers()
1132 struct zynqmp_disp_layer *layer = &disp->layers[i]; in zynqmp_disp_create_layers()
1135 layer->disp = disp; in zynqmp_disp_create_layers()
1138 ret = zynqmp_disp_layer_request_dma(disp, layer); in zynqmp_disp_create_layers()
1142 disp->dpsub->layers[i] = layer; in zynqmp_disp_create_layers()
1148 zynqmp_disp_destroy_layers(disp); in zynqmp_disp_create_layers()
1160 void zynqmp_disp_enable(struct zynqmp_disp *disp) in zynqmp_disp_enable() argument
1162 zynqmp_disp_blend_set_output_format(disp, ZYNQMP_DPSUB_FORMAT_RGB); in zynqmp_disp_enable()
1163 zynqmp_disp_blend_set_bg_color(disp, 0, 0, 0); in zynqmp_disp_enable()
1165 zynqmp_disp_avbuf_enable(disp); in zynqmp_disp_enable()
1167 zynqmp_disp_avbuf_set_clocks_sources(disp, disp->dpsub->vid_clk_from_ps, in zynqmp_disp_enable()
1168 disp->dpsub->aud_clk_from_ps, in zynqmp_disp_enable()
1170 zynqmp_disp_avbuf_enable_channels(disp); in zynqmp_disp_enable()
1171 zynqmp_disp_avbuf_enable_audio(disp); in zynqmp_disp_enable()
1173 zynqmp_disp_audio_enable(disp); in zynqmp_disp_enable()
1180 void zynqmp_disp_disable(struct zynqmp_disp *disp) in zynqmp_disp_disable() argument
1182 zynqmp_disp_audio_disable(disp); in zynqmp_disp_disable()
1184 zynqmp_disp_avbuf_disable_audio(disp); in zynqmp_disp_disable()
1185 zynqmp_disp_avbuf_disable_channels(disp); in zynqmp_disp_disable()
1186 zynqmp_disp_avbuf_disable(disp); in zynqmp_disp_disable()
1196 int zynqmp_disp_setup_clock(struct zynqmp_disp *disp, in zynqmp_disp_setup_clock() argument
1203 ret = clk_set_rate(disp->dpsub->vid_clk, mode_clock); in zynqmp_disp_setup_clock()
1205 dev_err(disp->dev, "failed to set the video clock\n"); in zynqmp_disp_setup_clock()
1209 rate = clk_get_rate(disp->dpsub->vid_clk); in zynqmp_disp_setup_clock()
1212 dev_info(disp->dev, in zynqmp_disp_setup_clock()
1216 dev_dbg(disp->dev, in zynqmp_disp_setup_clock()
1230 struct zynqmp_disp *disp; in zynqmp_disp_probe() local
1234 disp = kzalloc(sizeof(*disp), GFP_KERNEL); in zynqmp_disp_probe()
1235 if (!disp) in zynqmp_disp_probe()
1238 disp->dev = &pdev->dev; in zynqmp_disp_probe()
1239 disp->dpsub = dpsub; in zynqmp_disp_probe()
1242 disp->blend.base = devm_ioremap_resource(disp->dev, res); in zynqmp_disp_probe()
1243 if (IS_ERR(disp->blend.base)) { in zynqmp_disp_probe()
1244 ret = PTR_ERR(disp->blend.base); in zynqmp_disp_probe()
1249 disp->avbuf.base = devm_ioremap_resource(disp->dev, res); in zynqmp_disp_probe()
1250 if (IS_ERR(disp->avbuf.base)) { in zynqmp_disp_probe()
1251 ret = PTR_ERR(disp->avbuf.base); in zynqmp_disp_probe()
1256 disp->audio.base = devm_ioremap_resource(disp->dev, res); in zynqmp_disp_probe()
1257 if (IS_ERR(disp->audio.base)) { in zynqmp_disp_probe()
1258 ret = PTR_ERR(disp->audio.base); in zynqmp_disp_probe()
1262 ret = zynqmp_disp_create_layers(disp); in zynqmp_disp_probe()
1266 if (disp->dpsub->dma_enabled) { in zynqmp_disp_probe()
1269 layer = &disp->layers[ZYNQMP_DPSUB_LAYER_VID]; in zynqmp_disp_probe()
1273 dpsub->disp = disp; in zynqmp_disp_probe()
1278 kfree(disp); in zynqmp_disp_probe()
1284 struct zynqmp_disp *disp = dpsub->disp; in zynqmp_disp_remove() local
1286 zynqmp_disp_destroy_layers(disp); in zynqmp_disp_remove()