Allwinner DRM driver fixes for 4.7, take 2 A new set of fixes for the sun4i driver, mostly related to vblank handling, and a minor fix to release a reference on the device tree nodes we're parsing in the probe logic. * tag 'sunxi-drm-fixes-for-4.7-2' of https://git.kernel.org/pub/scm/linux/kernel/git/mripard/linux: gpu: drm: sun4i_drv: add missing of_node_put after calling of_parse_phandle drm/sun4i: Send vblank event when the CRTC is disabled drm/sun4i: Report proper vblank
Unified · Split
| @@ -65,6 +65,14 @@ static void sun4i_crtc_disable(struct drm_crtc *crtc) · 64 unmodified lines | |||
| 65 | DRM_DEBUG_DRIVER("Disabling the CRTC\n"); | 65 | DRM_DEBUG_DRIVER("Disabling the CRTC\n"); |
| 66 | 66 | ||
| 67 | sun4i_tcon_disable(drv->tcon); | 67 | sun4i_tcon_disable(drv->tcon); |
| 68 | |||
| 69 | if (crtc->state->event && !crtc->state->active) { | ||
| 70 | spin_lock_irq(&crtc->dev->event_lock); | ||
| 71 | drm_crtc_send_vblank_event(crtc, crtc->state->event); | ||
| 72 | spin_unlock_irq(&crtc->dev->event_lock); | ||
| 73 | |||
| 74 | crtc->state->event = NULL; | ||
| 75 | } | ||
| 68 | } | 76 | } |
| 69 | 77 | ||
| 70 | static void sun4i_crtc_enable(struct drm_crtc *crtc) | 78 | static void sun4i_crtc_enable(struct drm_crtc *crtc) |
| @@ -92,7 +92,7 @@ static struct drm_driver sun4i_drv_driver = { · 91 unmodified lines | |||
| 92 | /* Frame Buffer Operations */ | 92 | /* Frame Buffer Operations */ |
| 93 | 93 | ||
| 94 | /* VBlank Operations */ | 94 | /* VBlank Operations */ |
| 95 | .get_vblank_counter = drm_vblank_count, | 95 | .get_vblank_counter = drm_vblank_no_hw_counter, |
| 96 | .enable_vblank = sun4i_drv_enable_vblank, | 96 | .enable_vblank = sun4i_drv_enable_vblank, |
| 97 | .disable_vblank = sun4i_drv_disable_vblank, | 97 | .disable_vblank = sun4i_drv_disable_vblank, |
| 98 | }; | 98 | }; |
| @@ -310,6 +310,7 @@ static int sun4i_drv_probe(struct platform_device *pdev) · 211 unmodified lines | |||
| 310 | 310 | ||
| 311 | count += sun4i_drv_add_endpoints(&pdev->dev, &match, | 311 | count += sun4i_drv_add_endpoints(&pdev->dev, &match, |
| 312 | pipeline); | 312 | pipeline); |
| 313 | of_node_put(pipeline); | ||
| 313 | 314 | ||
| 314 | DRM_DEBUG_DRIVER("Queued %d outputs on pipeline %d\n", | 315 | DRM_DEBUG_DRIVER("Queued %d outputs on pipeline %d\n", |
| 315 | count, i); | 316 | count, i); |