diff options
| author | Dave Airlie <airlied@redhat.com> | 2015-11-04 20:06:56 -0500 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2015-11-04 20:06:56 -0500 |
| commit | cb0fb271213e8a06ca8815a459dfaddd5bb47b4b (patch) | |
| tree | 068308d5dc785d8e3c0c4e003632ed817f4de8f3 /drivers/gpu/ipu-v3 | |
| parent | 793423ffcb229ae5654b382a1356906f81da2018 (diff) | |
| parent | a5f4185c4b8c131c0ccafa6b1b00cd4e5413e47e (diff) | |
Merge tag 'imx-drm-next-2015-10-30' of git://git.pengutronix.de/git/pza/linux into drm-next
imx-drm fixes and color format updates
- Some correctness fixes found by coccinelle
- Add drivers/gpu/ipu-v3 directory to MAINTAINERS
- Add support for more color formats
- Fix a regression, making displays larger than FullHD work again
* tag 'imx-drm-next-2015-10-30' of git://git.pengutronix.de/git/pza/linux:
drm/imx: hdmi: fix HDMI setup to allow modes larger than FullHD
gpu: ipu-v3: fix div_ratio type
gpu: ipu-v3: csi: add support for 8 bpp grayscale sensors.
drm/imx: enable ARGB4444 16-bit color format
gpu: ipu-v3: add support for ARGB4444 16-bit color format
drm/imx: ipuv3-plane: enable support for RGBX8888 and RGBA8888 pixel formats
gpu: ipu-v3: add support for RGBX8888 and RGBA8888 pixel formats
drm/imx: enable 15-bit RGB with 1-bit alpha formats
gpu: ipu-v3: add support for 15-bit RGB with 1-bit alpha formats
MAINTAINERS: Add IPUv3 core driver to the i.MX DRM driver section
gpu: ipu-v3: ipu-csi: bool test doesn't need a comparison to false
Diffstat (limited to 'drivers/gpu/ipu-v3')
| -rw-r--r-- | drivers/gpu/ipu-v3/ipu-common.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/ipu-v3/ipu-cpmem.c | 87 | ||||
| -rw-r--r-- | drivers/gpu/ipu-v3/ipu-csi.c | 5 |
3 files changed, 91 insertions, 6 deletions
diff --git a/drivers/gpu/ipu-v3/ipu-common.c b/drivers/gpu/ipu-v3/ipu-common.c index e5a38d202a21..ba47b30d28fa 100644 --- a/drivers/gpu/ipu-v3/ipu-common.c +++ b/drivers/gpu/ipu-v3/ipu-common.c | |||
| @@ -57,10 +57,15 @@ EXPORT_SYMBOL_GPL(ipu_srm_dp_sync_update); | |||
| 57 | enum ipu_color_space ipu_drm_fourcc_to_colorspace(u32 drm_fourcc) | 57 | enum ipu_color_space ipu_drm_fourcc_to_colorspace(u32 drm_fourcc) |
| 58 | { | 58 | { |
| 59 | switch (drm_fourcc) { | 59 | switch (drm_fourcc) { |
| 60 | case DRM_FORMAT_ARGB1555: | ||
| 61 | case DRM_FORMAT_ABGR1555: | ||
| 62 | case DRM_FORMAT_RGBA5551: | ||
| 63 | case DRM_FORMAT_BGRA5551: | ||
| 60 | case DRM_FORMAT_RGB565: | 64 | case DRM_FORMAT_RGB565: |
| 61 | case DRM_FORMAT_BGR565: | 65 | case DRM_FORMAT_BGR565: |
| 62 | case DRM_FORMAT_RGB888: | 66 | case DRM_FORMAT_RGB888: |
| 63 | case DRM_FORMAT_BGR888: | 67 | case DRM_FORMAT_BGR888: |
| 68 | case DRM_FORMAT_ARGB4444: | ||
| 64 | case DRM_FORMAT_XRGB8888: | 69 | case DRM_FORMAT_XRGB8888: |
| 65 | case DRM_FORMAT_XBGR8888: | 70 | case DRM_FORMAT_XBGR8888: |
| 66 | case DRM_FORMAT_RGBX8888: | 71 | case DRM_FORMAT_RGBX8888: |
diff --git a/drivers/gpu/ipu-v3/ipu-cpmem.c b/drivers/gpu/ipu-v3/ipu-cpmem.c index 3bf05bc4ab67..63eb16bf2cf0 100644 --- a/drivers/gpu/ipu-v3/ipu-cpmem.c +++ b/drivers/gpu/ipu-v3/ipu-cpmem.c | |||
| @@ -452,7 +452,7 @@ void ipu_cpmem_set_yuv_planar(struct ipuv3_channel *ch, | |||
| 452 | } | 452 | } |
| 453 | EXPORT_SYMBOL_GPL(ipu_cpmem_set_yuv_planar); | 453 | EXPORT_SYMBOL_GPL(ipu_cpmem_set_yuv_planar); |
| 454 | 454 | ||
| 455 | static const struct ipu_rgb def_rgb_32 = { | 455 | static const struct ipu_rgb def_xrgb_32 = { |
| 456 | .red = { .offset = 16, .length = 8, }, | 456 | .red = { .offset = 16, .length = 8, }, |
| 457 | .green = { .offset = 8, .length = 8, }, | 457 | .green = { .offset = 8, .length = 8, }, |
| 458 | .blue = { .offset = 0, .length = 8, }, | 458 | .blue = { .offset = 0, .length = 8, }, |
| @@ -460,7 +460,7 @@ static const struct ipu_rgb def_rgb_32 = { | |||
| 460 | .bits_per_pixel = 32, | 460 | .bits_per_pixel = 32, |
| 461 | }; | 461 | }; |
| 462 | 462 | ||
| 463 | static const struct ipu_rgb def_bgr_32 = { | 463 | static const struct ipu_rgb def_xbgr_32 = { |
| 464 | .red = { .offset = 0, .length = 8, }, | 464 | .red = { .offset = 0, .length = 8, }, |
| 465 | .green = { .offset = 8, .length = 8, }, | 465 | .green = { .offset = 8, .length = 8, }, |
| 466 | .blue = { .offset = 16, .length = 8, }, | 466 | .blue = { .offset = 16, .length = 8, }, |
| @@ -468,6 +468,22 @@ static const struct ipu_rgb def_bgr_32 = { | |||
| 468 | .bits_per_pixel = 32, | 468 | .bits_per_pixel = 32, |
| 469 | }; | 469 | }; |
| 470 | 470 | ||
| 471 | static const struct ipu_rgb def_rgbx_32 = { | ||
| 472 | .red = { .offset = 24, .length = 8, }, | ||
| 473 | .green = { .offset = 16, .length = 8, }, | ||
| 474 | .blue = { .offset = 8, .length = 8, }, | ||
| 475 | .transp = { .offset = 0, .length = 8, }, | ||
| 476 | .bits_per_pixel = 32, | ||
| 477 | }; | ||
| 478 | |||
| 479 | static const struct ipu_rgb def_bgrx_32 = { | ||
| 480 | .red = { .offset = 8, .length = 8, }, | ||
| 481 | .green = { .offset = 16, .length = 8, }, | ||
| 482 | .blue = { .offset = 24, .length = 8, }, | ||
| 483 | .transp = { .offset = 0, .length = 8, }, | ||
| 484 | .bits_per_pixel = 32, | ||
| 485 | }; | ||
| 486 | |||
| 471 | static const struct ipu_rgb def_rgb_24 = { | 487 | static const struct ipu_rgb def_rgb_24 = { |
| 472 | .red = { .offset = 16, .length = 8, }, | 488 | .red = { .offset = 16, .length = 8, }, |
| 473 | .green = { .offset = 8, .length = 8, }, | 489 | .green = { .offset = 8, .length = 8, }, |
| @@ -500,6 +516,46 @@ static const struct ipu_rgb def_bgr_16 = { | |||
| 500 | .bits_per_pixel = 16, | 516 | .bits_per_pixel = 16, |
| 501 | }; | 517 | }; |
| 502 | 518 | ||
| 519 | static const struct ipu_rgb def_argb_16 = { | ||
| 520 | .red = { .offset = 10, .length = 5, }, | ||
| 521 | .green = { .offset = 5, .length = 5, }, | ||
| 522 | .blue = { .offset = 0, .length = 5, }, | ||
| 523 | .transp = { .offset = 15, .length = 1, }, | ||
| 524 | .bits_per_pixel = 16, | ||
| 525 | }; | ||
| 526 | |||
| 527 | static const struct ipu_rgb def_argb_16_4444 = { | ||
| 528 | .red = { .offset = 8, .length = 4, }, | ||
| 529 | .green = { .offset = 4, .length = 4, }, | ||
| 530 | .blue = { .offset = 0, .length = 4, }, | ||
| 531 | .transp = { .offset = 12, .length = 4, }, | ||
| 532 | .bits_per_pixel = 16, | ||
| 533 | }; | ||
| 534 | |||
| 535 | static const struct ipu_rgb def_abgr_16 = { | ||
| 536 | .red = { .offset = 0, .length = 5, }, | ||
| 537 | .green = { .offset = 5, .length = 5, }, | ||
| 538 | .blue = { .offset = 10, .length = 5, }, | ||
| 539 | .transp = { .offset = 15, .length = 1, }, | ||
| 540 | .bits_per_pixel = 16, | ||
| 541 | }; | ||
| 542 | |||
| 543 | static const struct ipu_rgb def_rgba_16 = { | ||
| 544 | .red = { .offset = 11, .length = 5, }, | ||
| 545 | .green = { .offset = 6, .length = 5, }, | ||
| 546 | .blue = { .offset = 1, .length = 5, }, | ||
| 547 | .transp = { .offset = 0, .length = 1, }, | ||
| 548 | .bits_per_pixel = 16, | ||
| 549 | }; | ||
| 550 | |||
| 551 | static const struct ipu_rgb def_bgra_16 = { | ||
| 552 | .red = { .offset = 1, .length = 5, }, | ||
| 553 | .green = { .offset = 6, .length = 5, }, | ||
| 554 | .blue = { .offset = 11, .length = 5, }, | ||
| 555 | .transp = { .offset = 0, .length = 1, }, | ||
| 556 | .bits_per_pixel = 16, | ||
| 557 | }; | ||
| 558 | |||
| 503 | #define Y_OFFSET(pix, x, y) ((x) + pix->width * (y)) | 559 | #define Y_OFFSET(pix, x, y) ((x) + pix->width * (y)) |
| 504 | #define U_OFFSET(pix, x, y) ((pix->width * pix->height) + \ | 560 | #define U_OFFSET(pix, x, y) ((pix->width * pix->height) + \ |
| 505 | (pix->width * (y) / 4) + (x) / 2) | 561 | (pix->width * (y) / 4) + (x) / 2) |
| @@ -563,11 +619,19 @@ int ipu_cpmem_set_fmt(struct ipuv3_channel *ch, u32 drm_fourcc) | |||
| 563 | break; | 619 | break; |
| 564 | case DRM_FORMAT_ABGR8888: | 620 | case DRM_FORMAT_ABGR8888: |
| 565 | case DRM_FORMAT_XBGR8888: | 621 | case DRM_FORMAT_XBGR8888: |
| 566 | ipu_cpmem_set_format_rgb(ch, &def_bgr_32); | 622 | ipu_cpmem_set_format_rgb(ch, &def_xbgr_32); |
| 567 | break; | 623 | break; |
| 568 | case DRM_FORMAT_ARGB8888: | 624 | case DRM_FORMAT_ARGB8888: |
| 569 | case DRM_FORMAT_XRGB8888: | 625 | case DRM_FORMAT_XRGB8888: |
| 570 | ipu_cpmem_set_format_rgb(ch, &def_rgb_32); | 626 | ipu_cpmem_set_format_rgb(ch, &def_xrgb_32); |
| 627 | break; | ||
| 628 | case DRM_FORMAT_RGBA8888: | ||
| 629 | case DRM_FORMAT_RGBX8888: | ||
| 630 | ipu_cpmem_set_format_rgb(ch, &def_rgbx_32); | ||
| 631 | break; | ||
| 632 | case DRM_FORMAT_BGRA8888: | ||
| 633 | case DRM_FORMAT_BGRX8888: | ||
| 634 | ipu_cpmem_set_format_rgb(ch, &def_bgrx_32); | ||
| 571 | break; | 635 | break; |
| 572 | case DRM_FORMAT_BGR888: | 636 | case DRM_FORMAT_BGR888: |
| 573 | ipu_cpmem_set_format_rgb(ch, &def_bgr_24); | 637 | ipu_cpmem_set_format_rgb(ch, &def_bgr_24); |
| @@ -581,6 +645,21 @@ int ipu_cpmem_set_fmt(struct ipuv3_channel *ch, u32 drm_fourcc) | |||
| 581 | case DRM_FORMAT_BGR565: | 645 | case DRM_FORMAT_BGR565: |
| 582 | ipu_cpmem_set_format_rgb(ch, &def_bgr_16); | 646 | ipu_cpmem_set_format_rgb(ch, &def_bgr_16); |
| 583 | break; | 647 | break; |
| 648 | case DRM_FORMAT_ARGB1555: | ||
| 649 | ipu_cpmem_set_format_rgb(ch, &def_argb_16); | ||
| 650 | break; | ||
| 651 | case DRM_FORMAT_ABGR1555: | ||
| 652 | ipu_cpmem_set_format_rgb(ch, &def_abgr_16); | ||
| 653 | break; | ||
| 654 | case DRM_FORMAT_RGBA5551: | ||
| 655 | ipu_cpmem_set_format_rgb(ch, &def_rgba_16); | ||
| 656 | break; | ||
| 657 | case DRM_FORMAT_BGRA5551: | ||
| 658 | ipu_cpmem_set_format_rgb(ch, &def_bgra_16); | ||
| 659 | break; | ||
| 660 | case DRM_FORMAT_ARGB4444: | ||
| 661 | ipu_cpmem_set_format_rgb(ch, &def_argb_16_4444); | ||
| 662 | break; | ||
| 584 | default: | 663 | default: |
| 585 | return -EINVAL; | 664 | return -EINVAL; |
| 586 | } | 665 | } |
diff --git a/drivers/gpu/ipu-v3/ipu-csi.c b/drivers/gpu/ipu-v3/ipu-csi.c index 752cdd2da89a..06631ac61b04 100644 --- a/drivers/gpu/ipu-v3/ipu-csi.c +++ b/drivers/gpu/ipu-v3/ipu-csi.c | |||
| @@ -202,7 +202,7 @@ static int ipu_csi_set_testgen_mclk(struct ipu_csi *csi, u32 pixel_clk, | |||
| 202 | u32 ipu_clk) | 202 | u32 ipu_clk) |
| 203 | { | 203 | { |
| 204 | u32 temp; | 204 | u32 temp; |
| 205 | u32 div_ratio; | 205 | int div_ratio; |
| 206 | 206 | ||
| 207 | div_ratio = (ipu_clk / pixel_clk) - 1; | 207 | div_ratio = (ipu_clk / pixel_clk) - 1; |
| 208 | 208 | ||
| @@ -271,6 +271,7 @@ static int mbus_code_to_bus_cfg(struct ipu_csi_bus_config *cfg, u32 mbus_code) | |||
| 271 | case MEDIA_BUS_FMT_SGBRG8_1X8: | 271 | case MEDIA_BUS_FMT_SGBRG8_1X8: |
| 272 | case MEDIA_BUS_FMT_SGRBG8_1X8: | 272 | case MEDIA_BUS_FMT_SGRBG8_1X8: |
| 273 | case MEDIA_BUS_FMT_SRGGB8_1X8: | 273 | case MEDIA_BUS_FMT_SRGGB8_1X8: |
| 274 | case MEDIA_BUS_FMT_Y8_1X8: | ||
| 274 | cfg->data_fmt = CSI_SENS_CONF_DATA_FMT_BAYER; | 275 | cfg->data_fmt = CSI_SENS_CONF_DATA_FMT_BAYER; |
| 275 | cfg->mipi_dt = MIPI_DT_RAW8; | 276 | cfg->mipi_dt = MIPI_DT_RAW8; |
| 276 | cfg->data_width = IPU_CSI_DATA_WIDTH_8; | 277 | |
