diff options
Diffstat (limited to 'drivers/gpu/drm/tinydrm/ili9225.c')
-rw-r--r-- | drivers/gpu/drm/tinydrm/ili9225.c | 23 |
1 files changed, 6 insertions, 17 deletions
diff --git a/drivers/gpu/drm/tinydrm/ili9225.c b/drivers/gpu/drm/tinydrm/ili9225.c index 089d22798c8b..0874e877b111 100644 --- a/drivers/gpu/drm/tinydrm/ili9225.c +++ b/drivers/gpu/drm/tinydrm/ili9225.c | |||
@@ -88,14 +88,8 @@ static int ili9225_fb_dirty(struct drm_framebuffer *fb, | |||
88 | bool full; | 88 | bool full; |
89 | void *tr; | 89 | void *tr; |
90 | 90 | ||
91 | mutex_lock(&tdev->dirty_lock); | ||
92 | |||
93 | if (!mipi->enabled) | 91 | if (!mipi->enabled) |
94 | goto out_unlock; | 92 | return 0; |
95 | |||
96 | /* fbdev can flush even when we're not interested */ | ||
97 | if (tdev->pipe.plane.fb != fb) | ||
98 | goto out_unlock; | ||
99 | 93 | ||
100 | full = tinydrm_merge_clips(&clip, clips, num_clips, flags, | 94 | full = tinydrm_merge_clips(&clip, clips, num_clips, flags, |
101 | fb->width, fb->height); | 95 | fb->width, fb->height); |
@@ -108,7 +102,7 @@ static int ili9225_fb_dirty(struct drm_framebuffer *fb, | |||
108 | tr = mipi->tx_buf; | 102 | tr = mipi->tx_buf; |
109 | ret = mipi_dbi_buf_copy(mipi->tx_buf, fb, &clip, swap); | 103 | ret = mipi_dbi_buf_copy(mipi->tx_buf, fb, &clip, swap); |
110 | if (ret) | 104 | if (ret) |
111 | goto out_unlock; | 105 | return ret; |
112 | } else { | 106 | } else { |
113 | tr = cma_obj->vaddr; | 107 | tr = cma_obj->vaddr; |
114 | } | 108 | } |
@@ -159,20 +153,13 @@ static int ili9225_fb_dirty(struct drm_framebuffer *fb, | |||
159 | ret = mipi_dbi_command_buf(mipi, ILI9225_WRITE_DATA_TO_GRAM, tr, | 153 | ret = mipi_dbi_command_buf(mipi, ILI9225_WRITE_DATA_TO_GRAM, tr, |
160 | (clip.x2 - clip.x1) * (clip.y2 - clip.y1) * 2); | 154 | (clip.x2 - clip.x1) * (clip.y2 - clip.y1) * 2); |
161 | 155 | ||
162 | out_unlock: | ||
163 | mutex_unlock(&tdev->dirty_lock); | ||
164 | |||
165 | if (ret) | ||
166 | dev_err_once(fb->dev->dev, "Failed to update display %d\n", | ||
167 | ret); | ||
168 | |||
169 | return ret; | 156 | return ret; |
170 | } | 157 | } |
171 | 158 | ||
172 | static const struct drm_framebuffer_funcs ili9225_fb_funcs = { | 159 | static const struct drm_framebuffer_funcs ili9225_fb_funcs = { |
173 | .destroy = drm_gem_fb_destroy, | 160 | .destroy = drm_gem_fb_destroy, |
174 | .create_handle = drm_gem_fb_create_handle, | 161 | .create_handle = drm_gem_fb_create_handle, |
175 | .dirty = ili9225_fb_dirty, | 162 | .dirty = tinydrm_fb_dirty, |
176 | }; | 163 | }; |
177 | 164 | ||
178 | static void ili9225_pipe_enable(struct drm_simple_display_pipe *pipe, | 165 | static void ili9225_pipe_enable(struct drm_simple_display_pipe *pipe, |
@@ -269,7 +256,7 @@ static void ili9225_pipe_enable(struct drm_simple_display_pipe *pipe, | |||
269 | 256 | ||
270 | ili9225_command(mipi, ILI9225_DISPLAY_CONTROL_1, 0x1017); | 257 | ili9225_command(mipi, ILI9225_DISPLAY_CONTROL_1, 0x1017); |
271 | 258 | ||
272 | mipi_dbi_enable_flush(mipi); | 259 | mipi_dbi_enable_flush(mipi, crtc_state, plane_state); |
273 | } | 260 | } |
274 | 261 | ||
275 | static void ili9225_pipe_disable(struct drm_simple_display_pipe *pipe) | 262 | static void ili9225_pipe_disable(struct drm_simple_display_pipe *pipe) |
@@ -342,6 +329,8 @@ static int ili9225_init(struct device *dev, struct mipi_dbi *mipi, | |||
342 | if (ret) | 329 | if (ret) |
343 | return ret; | 330 | return ret; |
344 | 331 | ||
332 | tdev->fb_dirty = ili9225_fb_dirty; | ||
333 | |||
345 | ret = tinydrm_display_pipe_init(tdev, pipe_funcs, | 334 | ret = tinydrm_display_pipe_init(tdev, pipe_funcs, |
346 | DRM_MODE_CONNECTOR_VIRTUAL, | 335 | DRM_MODE_CONNECTOR_VIRTUAL, |
347 | ili9225_formats, | 336 | ili9225_formats, |