Lines Matching refs:ctx

167 static void mixer_regs_dump(struct mixer_context *ctx)  in mixer_regs_dump()  argument
172 (u32)readl(ctx->mixer_res.mixer_regs + reg_id)); \ in mixer_regs_dump()
199 static void vp_regs_dump(struct mixer_context *ctx) in vp_regs_dump() argument
204 (u32) readl(ctx->mixer_res.vp_regs + reg_id)); \ in vp_regs_dump()
256 static void mixer_vsync_set_update(struct mixer_context *ctx, bool enable) in mixer_vsync_set_update() argument
258 struct mixer_resources *res = &ctx->mixer_res; in mixer_vsync_set_update()
264 if (ctx->vp_enabled) in mixer_vsync_set_update()
269 static void mixer_cfg_scan(struct mixer_context *ctx, unsigned int height) in mixer_cfg_scan() argument
271 struct mixer_resources *res = &ctx->mixer_res; in mixer_cfg_scan()
275 val = (ctx->interlace ? MXR_CFG_SCAN_INTERLACE : in mixer_cfg_scan()
278 if (ctx->mxr_ver != MXR_VER_128_0_0_184) { in mixer_cfg_scan()
295 static void mixer_cfg_rgb_fmt(struct mixer_context *ctx, unsigned int height) in mixer_cfg_rgb_fmt() argument
297 struct mixer_resources *res = &ctx->mixer_res; in mixer_cfg_rgb_fmt()
336 static void mixer_cfg_layer(struct mixer_context *ctx, unsigned int win, in mixer_cfg_layer() argument
339 struct mixer_resources *res = &ctx->mixer_res; in mixer_cfg_layer()
350 if (ctx->vp_enabled) { in mixer_cfg_layer()
364 static void mixer_run(struct mixer_context *ctx) in mixer_run() argument
366 struct mixer_resources *res = &ctx->mixer_res; in mixer_run()
371 static void mixer_stop(struct mixer_context *ctx) in mixer_stop() argument
373 struct mixer_resources *res = &ctx->mixer_res; in mixer_stop()
383 static void vp_video_buffer(struct mixer_context *ctx, unsigned int win) in vp_video_buffer() argument
385 struct mixer_resources *res = &ctx->mixer_res; in vp_video_buffer()
393 plane = &ctx->planes[win]; in vp_video_buffer()
412 ctx->interlace = true; in vp_video_buffer()
421 ctx->interlace = false; in vp_video_buffer()
427 mixer_vsync_set_update(ctx, false); in vp_video_buffer()
430 val = (ctx->interlace ? ~0 : 0); in vp_video_buffer()
453 if (ctx->interlace) { in vp_video_buffer()
472 mixer_cfg_scan(ctx, plane->mode_height); in vp_video_buffer()
473 mixer_cfg_rgb_fmt(ctx, plane->mode_height); in vp_video_buffer()
474 mixer_cfg_layer(ctx, win, true); in vp_video_buffer()
475 mixer_run(ctx); in vp_video_buffer()
477 mixer_vsync_set_update(ctx, true); in vp_video_buffer()
480 mixer_regs_dump(ctx); in vp_video_buffer()
481 vp_regs_dump(ctx); in vp_video_buffer()
484 static void mixer_layer_update(struct mixer_context *ctx) in mixer_layer_update() argument
486 struct mixer_resources *res = &ctx->mixer_res; in mixer_layer_update()
515 static void mixer_graph_buffer(struct mixer_context *ctx, unsigned int win) in mixer_graph_buffer() argument
517 struct mixer_resources *res = &ctx->mixer_res; in mixer_graph_buffer()
526 plane = &ctx->planes[win]; in mixer_graph_buffer()
566 ctx->interlace = true; in mixer_graph_buffer()
568 ctx->interlace = false; in mixer_graph_buffer()
571 mixer_vsync_set_update(ctx, false); in mixer_graph_buffer()
582 if (ctx->mxr_ver == MXR_VER_128_0_0_184 && in mixer_graph_buffer()
608 mixer_cfg_scan(ctx, plane->mode_height); in mixer_graph_buffer()
609 mixer_cfg_rgb_fmt(ctx, plane->mode_height); in mixer_graph_buffer()
610 mixer_cfg_layer(ctx, win, true); in mixer_graph_buffer()
613 if (ctx->mxr_ver == MXR_VER_16_0_33_0 || in mixer_graph_buffer()
614 ctx->mxr_ver == MXR_VER_128_0_0_184) in mixer_graph_buffer()
615 mixer_layer_update(ctx); in mixer_graph_buffer()
617 mixer_run(ctx); in mixer_graph_buffer()
619 mixer_vsync_set_update(ctx, true); in mixer_graph_buffer()
622 mixer_regs_dump(ctx); in mixer_graph_buffer()
625 static void vp_win_reset(struct mixer_context *ctx) in vp_win_reset() argument
627 struct mixer_resources *res = &ctx->mixer_res; in vp_win_reset()
640 static void mixer_win_reset(struct mixer_context *ctx) in mixer_win_reset() argument
642 struct mixer_resources *res = &ctx->mixer_res; in mixer_win_reset()
647 mixer_vsync_set_update(ctx, false); in mixer_win_reset()
666 if (ctx->vp_enabled) in mixer_win_reset()
692 if (ctx->vp_enabled) { in mixer_win_reset()
694 vp_win_reset(ctx); in mixer_win_reset()
701 if (ctx->vp_enabled) in mixer_win_reset()
704 mixer_vsync_set_update(ctx, true); in mixer_win_reset()
710 struct mixer_context *ctx = arg; in mixer_irq_handler() local
711 struct mixer_resources *res = &ctx->mixer_res; in mixer_irq_handler()
722 if (ctx->interlace) { in mixer_irq_handler()
734 drm_handle_vblank(ctx->drm_dev, ctx->pipe); in mixer_irq_handler()
735 exynos_drm_crtc_finish_pageflip(ctx->drm_dev, ctx->pipe); in mixer_irq_handler()
738 if (atomic_read(&ctx->wait_vsync_event)) { in mixer_irq_handler()
739 atomic_set(&ctx->wait_vsync_event, 0); in mixer_irq_handler()
740 wake_up(&ctx->wait_vsync_queue); in mixer_irq_handler()
899 struct mixer_context *mixer_ctx = crtc->ctx; in mixer_enable_vblank()
916 struct mixer_context *mixer_ctx = crtc->ctx; in mixer_disable_vblank()
925 struct mixer_context *mixer_ctx = crtc->ctx; in mixer_win_commit()
946 struct mixer_context *mixer_ctx = crtc->ctx; in mixer_win_disable()
973 struct mixer_context *mixer_ctx = crtc->ctx; in mixer_wait_for_vblank()
1003 static void mixer_window_suspend(struct mixer_context *ctx) in mixer_window_suspend() argument
1009 plane = &ctx->planes[i]; in mixer_window_suspend()
1011 mixer_win_disable(ctx->crtc, i); in mixer_window_suspend()
1013 mixer_wait_for_vblank(ctx->crtc); in mixer_window_suspend()
1016 static void mixer_window_resume(struct mixer_context *ctx) in mixer_window_resume() argument
1022 plane = &ctx->planes[i]; in mixer_window_resume()
1026 mixer_win_commit(ctx->crtc, i); in mixer_window_resume()
1030 static void mixer_poweron(struct mixer_context *ctx) in mixer_poweron() argument
1032 struct mixer_resources *res = &ctx->mixer_res; in mixer_poweron()
1034 mutex_lock(&ctx->mixer_mutex); in mixer_poweron()
1035 if (ctx->powered) { in mixer_poweron()
1036 mutex_unlock(&ctx->mixer_mutex); in mixer_poweron()
1040 mutex_unlock(&ctx->mixer_mutex); in mixer_poweron()
1042 pm_runtime_get_sync(ctx->dev); in mixer_poweron()
1046 if (ctx->vp_enabled) { in mixer_poweron()
1048 if (ctx->has_sclk) in mixer_poweron()
1052 mutex_lock(&ctx->mixer_mutex); in mixer_poweron()
1053 ctx->powered = true; in mixer_poweron()
1054 mutex_unlock(&ctx->mixer_mutex); in mixer_poweron()
1058 mixer_reg_write(res, MXR_INT_EN, ctx->int_en); in mixer_poweron()
1059 mixer_win_reset(ctx); in mixer_poweron()
1061 mixer_window_resume(ctx); in mixer_poweron()
1064 static void mixer_poweroff(struct mixer_context *ctx) in mixer_poweroff() argument
1066 struct mixer_resources *res = &ctx->mixer_res; in mixer_poweroff()
1068 mutex_lock(&ctx->mixer_mutex); in mixer_poweroff()
1069 if (!ctx->powered) { in mixer_poweroff()
1070 mutex_unlock(&ctx->mixer_mutex); in mixer_poweroff()
1073 mutex_unlock(&ctx->mixer_mutex); in mixer_poweroff()
1075 mixer_stop(ctx); in mixer_poweroff()
1076 mixer_regs_dump(ctx); in mixer_poweroff()
1077 mixer_window_suspend(ctx); in mixer_poweroff()
1079 ctx->int_en = mixer_reg_read(res, MXR_INT_EN); in mixer_poweroff()
1081 mutex_lock(&ctx->mixer_mutex); in mixer_poweroff()
1082 ctx->powered = false; in mixer_poweroff()
1083 mutex_unlock(&ctx->mixer_mutex); in mixer_poweroff()
1087 if (ctx->vp_enabled) { in mixer_poweroff()
1089 if (ctx->has_sclk) in mixer_poweroff()
1093 pm_runtime_put_sync(ctx->dev); in mixer_poweroff()
1100 mixer_poweron(crtc->ctx); in mixer_dpms()
1105 mixer_poweroff(crtc->ctx); in mixer_dpms()
1199 struct mixer_context *ctx = dev_get_drvdata(dev); in mixer_bind() local
1206 ret = mixer_initialize(ctx, drm_dev); in mixer_bind()
1213 ret = exynos_plane_init(drm_dev, &ctx->planes[zpos], in mixer_bind()
1214 1 << ctx->pipe, type, zpos); in mixer_bind()
1219 exynos_plane = &ctx->planes[MIXER_DEFAULT_WIN]; in mixer_bind()
1220 ctx->crtc = exynos_drm_crtc_create(drm_dev, &exynos_plane->base, in mixer_bind()
1221 ctx->pipe, EXYNOS_DISPLAY_TYPE_HDMI, in mixer_bind()
1222 &mixer_crtc_ops, ctx); in mixer_bind()
1223 if (IS_ERR(ctx->crtc)) { in mixer_bind()
1224 mixer_ctx_remove(ctx); in mixer_bind()
1225 ret = PTR_ERR(ctx->crtc); in mixer_bind()
1232 devm_kfree(dev, ctx); in mixer_bind()
1238 struct mixer_context *ctx = dev_get_drvdata(dev); in mixer_unbind() local
1240 mixer_ctx_remove(ctx); in mixer_unbind()
1252 struct mixer_context *ctx; in mixer_probe() local
1255 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); in mixer_probe()
1256 if (!ctx) { in mixer_probe()
1261 mutex_init(&ctx->mixer_mutex); in mixer_probe()
1273 ctx->pdev = pdev; in mixer_probe()
1274 ctx->dev = dev; in mixer_probe()
1275 ctx->vp_enabled = drv->is_vp_enabled; in mixer_probe()
1276 ctx->has_sclk = drv->has_sclk; in mixer_probe()
1277 ctx->mxr_ver = drv->version; in mixer_probe()
1278 init_waitqueue_head(&ctx->wait_vsync_queue); in mixer_probe()
1279 atomic_set(&ctx->wait_vsync_event, 0); in mixer_probe()
1281 platform_set_drvdata(pdev, ctx); in mixer_probe()