diff options
author | Dave Airlie <airlied@redhat.com> | 2016-04-13 23:06:19 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-04-13 23:06:19 -0400 |
commit | ff3e84e8e479c3ba7148f8dc35a56cf091ab56d9 (patch) | |
tree | c22633a65174e3455c9690e377dce85ccf9049c9 | |
parent | 25451c195a4e5097d4e74f2165e57f35a58197e4 (diff) | |
parent | 2072fe51466f86e1f0eedf12bff7106913807efc (diff) |
Merge branch 'exynos-drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos into drm-fixes
fix some exynos regressions.
* 'exynos-drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos:
drm/exynos: Use VIDEO_SAMSUNG_S5P_G2D=n as G2D Kconfig dependency
drm/exynos: fix a warning message
drm/exynos: mic: fix an error code
drm/exynos: fimd: fix broken dp_clock control
drm/exynos: build fbdev code conditionally
drm/exynos: fix adjusted_mode pointer in exynos_plane_mode_set
drm/exynos: fix error handling in exynos_drm_subdrv_open
-rw-r--r-- | drivers/gpu/drm/exynos/Kconfig | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/Makefile | 6 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_core.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_fb.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_fbdev.c | 11 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_fbdev.h | 23 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_fimd.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_mic.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_plane.c | 12 |
9 files changed, 48 insertions, 24 deletions
diff --git a/drivers/gpu/drm/exynos/Kconfig b/drivers/gpu/drm/exynos/Kconfig index f17d39279596..baddf33fb475 100644 --- a/drivers/gpu/drm/exynos/Kconfig +++ b/drivers/gpu/drm/exynos/Kconfig | |||
@@ -94,7 +94,7 @@ comment "Sub-drivers" | |||
94 | 94 | ||
95 | config DRM_EXYNOS_G2D | 95 | config DRM_EXYNOS_G2D |
96 | bool "G2D" | 96 | bool "G2D" |
97 | depends on !VIDEO_SAMSUNG_S5P_G2D | 97 | depends on VIDEO_SAMSUNG_S5P_G2D=n |
98 | select FRAME_VECTOR | 98 | select FRAME_VECTOR |
99 | help | 99 | help |
100 | Choose this option if you want to use Exynos G2D for DRM. | 100 | Choose this option if you want to use Exynos G2D for DRM. |
diff --git a/drivers/gpu/drm/exynos/Makefile b/drivers/gpu/drm/exynos/Makefile index 968b31c522b2..23d2f958739b 100644 --- a/drivers/gpu/drm/exynos/Makefile +++ b/drivers/gpu/drm/exynos/Makefile | |||
@@ -2,10 +2,10 @@ | |||
2 | # Makefile for the drm device driver. This driver provides support for the | 2 | # Makefile for the drm device driver. This driver provides support for the |
3 | # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. | 3 | # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher. |
4 | 4 | ||
5 | exynosdrm-y := exynos_drm_drv.o exynos_drm_crtc.o exynos_drm_fbdev.o \ | 5 | exynosdrm-y := exynos_drm_drv.o exynos_drm_crtc.o exynos_drm_fb.o \ |
6 | exynos_drm_fb.o exynos_drm_gem.o exynos_drm_core.o \ | 6 | exynos_drm_gem.o exynos_drm_core.o exynos_drm_plane.o |
7 | exynos_drm_plane.o | ||
8 | 7 | ||
8 | exynosdrm-$(CONFIG_DRM_FBDEV_EMULATION) += exynos_drm_fbdev.o | ||
9 | exynosdrm-$(CONFIG_DRM_EXYNOS_IOMMU) += exynos_drm_iommu.o | 9 | exynosdrm-$(CONFIG_DRM_EXYNOS_IOMMU) += exynos_drm_iommu.o |
10 | exynosdrm-$(CONFIG_DRM_EXYNOS_FIMD) += exynos_drm_fimd.o | 10 | exynosdrm-$(CONFIG_DRM_EXYNOS_FIMD) += exynos_drm_fimd.o |
11 | exynosdrm-$(CONFIG_DRM_EXYNOS5433_DECON) += exynos5433_drm_decon.o | 11 | exynosdrm-$(CONFIG_DRM_EXYNOS5433_DECON) += exynos5433_drm_decon.o |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_core.c b/drivers/gpu/drm/exynos/exynos_drm_core.c index 7f55ba6771c6..011211e4167d 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_core.c +++ b/drivers/gpu/drm/exynos/exynos_drm_core.c | |||
@@ -101,7 +101,7 @@ int exynos_drm_subdrv_open(struct drm_device *dev, struct drm_file *file) | |||
101 | return 0; | 101 | return 0; |
102 | 102 | ||
103 | err: | 103 | err: |
104 | list_for_each_entry_reverse(subdrv, &subdrv->list, list) { | 104 | list_for_each_entry_continue_reverse(subdrv, &exynos_drm_subdrv_list, list) { |
105 | if (subdrv->close) | 105 | if (subdrv->close) |
106 | subdrv->close(dev, subdrv->dev, file); | 106 | subdrv->close(dev, subdrv->dev, file); |
107 | } | 107 | } |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fb.c b/drivers/gpu/drm/exynos/exynos_drm_fb.c index d614194644c8..81cc5537cf25 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fb.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fb.c | |||
@@ -199,17 +199,6 @@ dma_addr_t exynos_drm_fb_dma_addr(struct drm_framebuffer *fb, int index) | |||
199 | return exynos_fb->dma_addr[index]; | 199 | return exynos_fb->dma_addr[index]; |
200 | } | 200 | } |
201 | 201 | ||
202 | static void exynos_drm_output_poll_changed(struct drm_device *dev) | ||
203 | { | ||
204 | struct exynos_drm_private *private = dev->dev_private; | ||
205 | struct drm_fb_helper *fb_helper = private->fb_helper; | ||
206 | |||
207 | if (fb_helper) | ||
208 | drm_fb_helper_hotplug_event(fb_helper); | ||
209 | else | ||
210 | exynos_drm_fbdev_init(dev); | ||
211 | } | ||
212 | |||
213 | static const struct drm_mode_config_funcs exynos_drm_mode_config_funcs = { | 202 | static const struct drm_mode_config_funcs exynos_drm_mode_config_funcs = { |
214 | .fb_create = exynos_user_fb_create, | 203 | .fb_create = exynos_user_fb_create, |
215 | .output_poll_changed = exynos_drm_output_poll_changed, | 204 | .output_poll_changed = exynos_drm_output_poll_changed, |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c index 4ae860c44f1d..72d7c0b7c216 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.c | |||
@@ -317,3 +317,14 @@ void exynos_drm_fbdev_restore_mode(struct drm_device *dev) | |||
317 | 317 | ||
318 | drm_fb_helper_restore_fbdev_mode_unlocked(private->fb_helper); | 318 | drm_fb_helper_restore_fbdev_mode_unlocked(private->fb_helper); |
319 | } | 319 | } |
320 | |||
321 | void exynos_drm_output_poll_changed(struct drm_device *dev) | ||
322 | { | ||
323 | struct exynos_drm_private *private = dev->dev_private; | ||
324 | struct drm_fb_helper *fb_helper = private->fb_helper; | ||
325 | |||
326 | if (fb_helper) | ||
327 | drm_fb_helper_hotplug_event(fb_helper); | ||
328 | else | ||
329 | exynos_drm_fbdev_init(dev); | ||
330 | } | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fbdev.h b/drivers/gpu/drm/exynos/exynos_drm_fbdev.h index e16d7f0ae192..330eef87f718 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fbdev.h +++ b/drivers/gpu/drm/exynos/exynos_drm_fbdev.h | |||
@@ -15,9 +15,30 @@ | |||
15 | #ifndef _EXYNOS_DRM_FBDEV_H_ | 15 | #ifndef _EXYNOS_DRM_FBDEV_H_ |
16 | #define _EXYNOS_DRM_FBDEV_H_ | 16 | #define _EXYNOS_DRM_FBDEV_H_ |
17 | 17 | ||
18 | #ifdef CONFIG_DRM_FBDEV_EMULATION | ||
19 | |||
18 | int exynos_drm_fbdev_init(struct drm_device *dev); | 20 | int exynos_drm_fbdev_init(struct drm_device *dev); |
19 | int exynos_drm_fbdev_reinit(struct drm_device *dev); | ||
20 | void exynos_drm_fbdev_fini(struct drm_device *dev); | 21 | void exynos_drm_fbdev_fini(struct drm_device *dev); |
21 | void exynos_drm_fbdev_restore_mode(struct drm_device *dev); | 22 | void exynos_drm_fbdev_restore_mode(struct drm_device *dev); |
23 | void exynos_drm_output_poll_changed(struct drm_device *dev); | ||
24 | |||
25 | #else | ||
26 | |||
27 | static inline int exynos_drm_fbdev_init(struct drm_device *dev) | ||
28 | { | ||
29 | return 0; | ||
30 | } | ||
31 | |||
32 | static inline void exynos_drm_fbdev_fini(struct drm_device *dev) | ||
33 | { | ||
34 | } | ||
35 | |||
36 | static inline void exynos_drm_fbdev_restore_mode(struct drm_device *dev) | ||
37 | { | ||
38 | } | ||
39 | |||
40 | #define exynos_drm_output_poll_changed (NULL) | ||
41 | |||
42 | #endif | ||
22 | 43 | ||
23 | #endif | 44 | #endif |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 51d484ae9f49..018449f8d557 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c | |||
@@ -888,7 +888,7 @@ static void fimd_dp_clock_enable(struct exynos_drm_crtc *crtc, bool enable) | |||
888 | * clock. On these SoCs the bootloader may enable it but any | 888 | * clock. On these SoCs the bootloader may enable it but any |
889 | * power domain off/on will reset it to disable state. | 889 | * power domain off/on will reset it to disable state. |
890 | */ | 890 | */ |
891 | if (ctx->driver_data != &exynos5_fimd_driver_data || | 891 | if (ctx->driver_data != &exynos5_fimd_driver_data && |
892 | ctx->driver_data != &exynos5420_fimd_driver_data) | 892 | ctx->driver_data != &exynos5420_fimd_driver_data) |
893 | return; | 893 | return; |
894 | 894 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_mic.c b/drivers/gpu/drm/exynos/exynos_drm_mic.c index 9869d70e9e54..a0def0be6d65 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_mic.c +++ b/drivers/gpu/drm/exynos/exynos_drm_mic.c | |||
@@ -129,7 +129,7 @@ static void mic_set_path(struct exynos_mic *mic, bool enable) | |||
129 | } else | 129 | } else |
130 | val &= ~(MIC0_RGB_MUX | MIC0_I80_MUX | MIC0_ON_MUX); | 130 | val &= ~(MIC0_RGB_MUX | MIC0_I80_MUX | MIC0_ON_MUX); |
131 | 131 | ||
132 | regmap_write(mic->sysreg, DSD_CFG_MUX, val); | 132 | ret = regmap_write(mic->sysreg, DSD_CFG_MUX, val); |
133 | if (ret) | 133 | if (ret) |
134 | DRM_ERROR("mic: Failed to read system register\n"); | 134 | DRM_ERROR("mic: Failed to read system register\n"); |
135 | } | 135 | } |
@@ -457,6 +457,7 @@ static int exynos_mic_probe(struct platform_device *pdev) | |||
457 | "samsung,disp-syscon"); | 457 | "samsung,disp-syscon"); |
458 | if (IS_ERR(mic->sysreg)) { | 458 | if (IS_ERR(mic->sysreg)) { |
459 | DRM_ERROR("mic: Failed to get system register.\n"); | 459 | DRM_ERROR("mic: Failed to get system register.\n"); |
460 | ret = PTR_ERR(mic->sysreg); | ||
460 | goto err; | 461 | goto err; |
461 | } | 462 | } |
462 | 463 | ||
diff --git a/drivers/gpu/drm/exynos/exynos_drm_plane.c b/drivers/gpu/drm/exynos/exynos_drm_plane.c index d86227236f55..50185ac347b2 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_plane.c +++ b/drivers/gpu/drm/exynos/exynos_drm_plane.c | |||
@@ -11,9 +11,10 @@ | |||
11 | 11 | ||
12 | #include <drm/drmP.h> | 12 | #include <drm/drmP.h> |
13 | 13 | ||
14 | #include <drm/exynos_drm.h> | 14 | #include <drm/drm_atomic.h> |
15 | #include <drm/drm_plane_helper.h> | ||
16 | #include <drm/drm_atomic_helper.h> | 15 | #include <drm/drm_atomic_helper.h> |
16 | #include <drm/drm_plane_helper.h> | ||
17 | #include <drm/exynos_drm.h> | ||
17 | #include "exynos_drm_drv.h" | 18 | #include "exynos_drm_drv.h" |
18 | #include "exynos_drm_crtc.h" | 19 | #include "exynos_drm_crtc.h" |
19 | #include "exynos_drm_fb.h" | 20 | #include "exynos_drm_fb.h" |
@@ -57,11 +58,12 @@ static int exynos_plane_get_size(int start, unsigned length, unsigned last) | |||
57 | } | 58 | } |
58 | 59 | ||
59 | static void exynos_plane_mode_set(struct exynos_drm_plane_state *exynos_state) | 60 | static void exynos_plane_mode_set(struct exynos_drm_plane_state *exynos_state) |
60 | |||
61 | { | 61 | { |
62 | struct drm_plane_state *state = &exynos_state->base; | 62 | struct drm_plane_state *state = &exynos_state->base; |
63 | struct drm_crtc *crtc = exynos_state->base.crtc; | 63 | struct drm_crtc *crtc = state->crtc; |
64 | struct drm_display_mode *mode = &crtc->state->adjusted_mode; | 64 | struct drm_crtc_state *crtc_state = |
65 | drm_atomic_get_existing_crtc_state(state->state, crtc); | ||
66 | struct drm_display_mode *mode = &crtc_state->adjusted_mode; | ||
65 | int crtc_x, crtc_y; | 67 | int crtc_x, crtc_y; |
66 | unsigned int crtc_w, crtc_h; | 68 | unsigned int crtc_w, crtc_h; |
67 | unsigned int src_x, src_y; | 69 | unsigned int src_x, src_y; |