diff options
-rw-r--r-- | drivers/gpu/drm/imx/imx-drm-core.c | 42 | ||||
-rw-r--r-- | drivers/gpu/ipu-v3/ipu-common.c | 4 | ||||
-rw-r--r-- | drivers/gpu/ipu-v3/ipu-cpmem.c | 8 | ||||
-rw-r--r-- | drivers/gpu/ipu-v3/ipu-image-convert.c | 6 |
4 files changed, 20 insertions, 40 deletions
diff --git a/drivers/gpu/drm/imx/imx-drm-core.c b/drivers/gpu/drm/imx/imx-drm-core.c index f0122afcf2a8..5ea0c82f9957 100644 --- a/drivers/gpu/drm/imx/imx-drm-core.c +++ b/drivers/gpu/drm/imx/imx-drm-core.c | |||
@@ -35,11 +35,6 @@ | |||
35 | 35 | ||
36 | #define MAX_CRTC 4 | 36 | #define MAX_CRTC 4 |
37 | 37 | ||
38 | struct imx_drm_device { | ||
39 | struct drm_device *drm; | ||
40 | struct drm_atomic_state *state; | ||
41 | }; | ||
42 | |||
43 | #if IS_ENABLED(CONFIG_DRM_FBDEV_EMULATION) | 38 | #if IS_ENABLED(CONFIG_DRM_FBDEV_EMULATION) |
44 | static int legacyfb_depth = 16; | 39 | static int legacyfb_depth = 16; |
45 | module_param(legacyfb_depth, int, 0444); | 40 | module_param(legacyfb_depth, int, 0444); |
@@ -218,22 +213,12 @@ static int compare_of(struct device *dev, void *data) | |||
218 | static int imx_drm_bind(struct device *dev) | 213 | static int imx_drm_bind(struct device *dev) |
219 | { | 214 | { |
220 | struct drm_device *drm; | 215 | struct drm_device *drm; |
221 | struct imx_drm_device *imxdrm; | ||
222 | int ret; | 216 | int ret; |
223 | 217 | ||
224 | drm = drm_dev_alloc(&imx_drm_driver, dev); | 218 | drm = drm_dev_alloc(&imx_drm_driver, dev); |
225 | if (IS_ERR(drm)) | 219 | if (IS_ERR(drm)) |
226 | return PTR_ERR(drm); | 220 | return PTR_ERR(drm); |
227 | 221 | ||
228 | imxdrm = devm_kzalloc(dev, sizeof(*imxdrm), GFP_KERNEL); | ||
229 | if (!imxdrm) { | ||
230 | ret = -ENOMEM; | ||
231 | goto err_put; | ||
232 | } | ||
233 | |||
234 | imxdrm->drm = drm; | ||
235 | drm->dev_private = imxdrm; | ||
236 | |||
237 | /* | 222 | /* |
238 | * enable drm irq mode. | 223 | * enable drm irq mode. |
239 | * - with irq_enabled = true, we can use the vblank feature. | 224 | * - with irq_enabled = true, we can use the vblank feature. |
@@ -305,7 +290,6 @@ err_unbind: | |||
305 | component_unbind_all(drm->dev, drm); | 290 | component_unbind_all(drm->dev, drm); |
306 | err_kms: | 291 | err_kms: |
307 | drm_mode_config_cleanup(drm); | 292 | drm_mode_config_cleanup(drm); |
308 | err_put: | ||
309 | drm_dev_put(drm); | 293 | drm_dev_put(drm); |
310 | 294 | ||
311 | return ret; | 295 | return ret; |
@@ -354,37 +338,15 @@ static int imx_drm_platform_remove(struct platform_device *pdev) | |||
354 | static int imx_drm_suspend(struct device *dev) | 338 | static int imx_drm_suspend(struct device *dev) |
355 | { | 339 | { |
356 | struct drm_device *drm_dev = dev_get_drvdata(dev); | 340 | struct drm_device *drm_dev = dev_get_drvdata(dev); |
357 | struct imx_drm_device *imxdrm; | ||
358 | |||
359 | /* The drm_dev is NULL before .load hook is called */ | ||
360 | if (drm_dev == NULL) | ||
361 | return 0; | ||
362 | |||
363 | drm_kms_helper_poll_disable(drm_dev); | ||
364 | 341 | ||
365 | imxdrm = drm_dev->dev_private; | 342 | return drm_mode_config_helper_suspend(drm_dev); |
366 | imxdrm->state = drm_atomic_helper_suspend(drm_dev); | ||
367 | if (IS_ERR(imxdrm->state)) { | ||
368 | drm_kms_helper_poll_enable(drm_dev); | ||
369 | return PTR_ERR(imxdrm->state); | ||
370 | } | ||
371 | |||
372 | return 0; | ||
373 | } | 343 | } |
374 | 344 | ||
375 | static int imx_drm_resume(struct device *dev) | 345 | static int imx_drm_resume(struct device *dev) |
376 | { | 346 | { |
377 | struct drm_device *drm_dev = dev_get_drvdata(dev); | 347 | struct drm_device *drm_dev = dev_get_drvdata(dev); |
378 | struct imx_drm_device *imx_drm; | ||
379 | 348 | ||
380 | if (drm_dev == NULL) | 349 | return drm_mode_config_helper_resume(drm_dev); |
381 | return 0; | ||
382 | |||
383 | imx_drm = drm_dev->dev_private; | ||
384 | drm_atomic_helper_resume(drm_dev, imx_drm->state); | ||
385 | drm_kms_helper_poll_enable(drm_dev); | ||
386 | |||
387 | return 0; | ||
388 | } | 350 | } |
389 | #endif | 351 | #endif |
390 | 352 | ||
diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c index 48685cddbad1..66e9405faedc 100644 --- a/drivers/gpu/ipu-v3/ipu-common.c +++ b/drivers/gpu/ipu-v3/ipu-common.c | |||
@@ -122,6 +122,8 @@ enum ipu_color_space ipu_pixelformat_to_colorspace(u32 pixelformat) | |||
122 | case V4L2_PIX_FMT_NV16: | 122 | case V4L2_PIX_FMT_NV16: |
123 | case V4L2_PIX_FMT_NV61: | 123 | case V4L2_PIX_FMT_NV61: |
124 | return IPUV3_COLORSPACE_YUV; | 124 | return IPUV3_COLORSPACE_YUV; |
125 | case V4L2_PIX_FMT_XRGB32: | ||
126 | case V4L2_PIX_FMT_XBGR32: | ||
125 | case V4L2_PIX_FMT_RGB32: | 127 | case V4L2_PIX_FMT_RGB32: |
126 | case V4L2_PIX_FMT_BGR32: | 128 | case V4L2_PIX_FMT_BGR32: |
127 | case V4L2_PIX_FMT_RGB24: | 129 | case V4L2_PIX_FMT_RGB24: |
@@ -190,6 +192,8 @@ int ipu_stride_to_bytes(u32 pixel_stride, u32 pixelformat) | |||
190 | return (24 * pixel_stride) >> 3; | 192 | return (24 * pixel_stride) >> 3; |
191 | case V4L2_PIX_FMT_BGR32: | 193 | case V4L2_PIX_FMT_BGR32: |
192 | case V4L2_PIX_FMT_RGB32: | 194 | case V4L2_PIX_FMT_RGB32: |
195 | case V4L2_PIX_FMT_XBGR32: | ||
196 | case V4L2_PIX_FMT_XRGB32: | ||
193 | return (32 * pixel_stride) >> 3; | 197 | return (32 * pixel_stride) >> 3; |
194 | default: | 198 | default: |
195 | break; | 199 | break; |
diff --git a/drivers/gpu/ipu-v3/ipu-cpmem.c b/drivers/gpu/ipu-v3/ipu-cpmem.c index 125721a7f8b6..0f1155ea0fbd 100644 --- a/drivers/gpu/ipu-v3/ipu-cpmem.c +++ b/drivers/gpu/ipu-v3/ipu-cpmem.c | |||
@@ -188,6 +188,12 @@ static int v4l2_pix_fmt_to_drm_fourcc(u32 pixelformat) | |||
188 | case V4L2_PIX_FMT_RGB32: | 188 | case V4L2_PIX_FMT_RGB32: |
189 | /* R G B A <=> [32:0] A:B:G:R */ | 189 | /* R G B A <=> [32:0] A:B:G:R */ |
190 | return DRM_FORMAT_XBGR8888; | 190 | return DRM_FORMAT_XBGR8888; |
191 | case V4L2_PIX_FMT_XBGR32: | ||
192 | /* B G R X <=> [32:0] X:R:G:B */ | ||
193 | return DRM_FORMAT_XRGB8888; | ||
194 | case V4L2_PIX_FMT_XRGB32: | ||
195 | /* X R G B <=> [32:0] B:G:R:X */ | ||
196 | return DRM_FORMAT_BGRX8888; | ||
191 | case V4L2_PIX_FMT_UYVY: | 197 | case V4L2_PIX_FMT_UYVY: |
192 | return DRM_FORMAT_UYVY; | 198 | return DRM_FORMAT_UYVY; |
193 | case V4L2_PIX_FMT_YUYV: | 199 | case V4L2_PIX_FMT_YUYV: |
@@ -787,6 +793,8 @@ int ipu_cpmem_set_image(struct ipuv3_channel *ch, struct ipu_image *image) | |||
787 | break; | 793 | break; |
788 | case V4L2_PIX_FMT_RGB32: | 794 | case V4L2_PIX_FMT_RGB32: |
789 | case V4L2_PIX_FMT_BGR32: | 795 | case V4L2_PIX_FMT_BGR32: |
796 | case V4L2_PIX_FMT_XRGB32: | ||
797 | case V4L2_PIX_FMT_XBGR32: | ||
790 | offset = image->rect.left * 4 + | 798 | offset = image->rect.left * 4 + |
791 | image->rect.top * pix->bytesperline; | 799 | image->rect.top * pix->bytesperline; |
792 | break; | 800 | break; |
diff --git a/drivers/gpu/ipu-v3/ipu-image-convert.c b/drivers/gpu/ipu-v3/ipu-image-convert.c index 524a717ab28e..f4081962784c 100644 --- a/drivers/gpu/ipu-v3/ipu-image-convert.c +++ b/drivers/gpu/ipu-v3/ipu-image-convert.c | |||
@@ -227,6 +227,12 @@ static const struct ipu_image_pixfmt image_convert_formats[] = { | |||
227 | .fourcc = V4L2_PIX_FMT_BGR32, | 227 | .fourcc = V4L2_PIX_FMT_BGR32, |
228 | .bpp = 32, | 228 | .bpp = 32, |
229 | }, { | 229 | }, { |
230 | .fourcc = V4L2_PIX_FMT_XRGB32, | ||
231 | .bpp = 32, | ||
232 | }, { | ||
233 | .fourcc = V4L2_PIX_FMT_XBGR32, | ||
234 | .bpp = 32, | ||
235 | }, { | ||
230 | .fourcc = V4L2_PIX_FMT_YUYV, | 236 | .fourcc = V4L2_PIX_FMT_YUYV, |
231 | .bpp = 16, | 237 | .bpp = 16, |
232 | .uv_width_dec = 2, | 238 | .uv_width_dec = 2, |