aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/tinydrm/ili9225.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/tinydrm/ili9225.c')
-rw-r--r--drivers/gpu/drm/tinydrm/ili9225.c23
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
162out_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
172static const struct drm_framebuffer_funcs ili9225_fb_funcs = { 159static 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
178static void ili9225_pipe_enable(struct drm_simple_display_pipe *pipe, 165static 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
275static void ili9225_pipe_disable(struct drm_simple_display_pipe *pipe) 262static 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,