aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2017-05-16 04:05:09 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2017-06-02 04:05:32 -0400
commit0bd97c42d975a1e0849105bb8f23a68490683aab (patch)
tree2cf19d4c4d1b8adf187e463cd2f7a54c09826bba /drivers/gpu/drm
parent218ed5358a4045382674f8feeee0efb526f9431b (diff)
drm/omap: use DRM_MODE_ROTATE_* instead of OMAP_DSS_ROT_*
At the moment the dispc driver uses a custom enum for rotation. Change it to use the DRM's DRM_MODE_ROTATE_*. Note that mirroring is at the moment handled as a separate boolean in the dispc driver, so we only use the DRM_MODE_ROTATE_* values. Note, DSS HW uses clockwise rotation, DRM counter-clockwise. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/omapdrm/dss/dispc.c60
-rw-r--r--drivers/gpu/drm/omapdrm/dss/omapdss.h8
-rw-r--r--drivers/gpu/drm/omapdrm/omap_plane.c2
3 files changed, 31 insertions, 39 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c
index 7ccbcfc1d011..34c6a2aca014 100644
--- a/drivers/gpu/drm/omapdrm/dss/dispc.c
+++ b/drivers/gpu/drm/omapdrm/dss/dispc.c
@@ -41,6 +41,7 @@
41#include <linux/of.h> 41#include <linux/of.h>
42#include <linux/component.h> 42#include <linux/component.h>
43#include <drm/drm_fourcc.h> 43#include <drm/drm_fourcc.h>
44#include <drm/drm_blend.h>
44 45
45#include "omapdss.h" 46#include "omapdss.h"
46#include "dss.h" 47#include "dss.h"
@@ -1600,22 +1601,21 @@ static void dispc_ovl_set_accu_uv(enum omap_plane_id plane,
1600 { 0, 1, 0, 1, -1, 1, 0, 1 }, 1601 { 0, 1, 0, 1, -1, 1, 0, 1 },
1601 }; 1602 };
1602 1603
1603 switch (rotation) { 1604 /* Note: DSS HW rotates clockwise, DRM_MODE_ROTATE_* counter-clockwise */
1604 case OMAP_DSS_ROT_0: 1605 switch (rotation & DRM_MODE_ROTATE_MASK) {
1606 default:
1607 case DRM_MODE_ROTATE_0:
1605 idx = 0; 1608 idx = 0;
1606 break; 1609 break;
1607 case OMAP_DSS_ROT_90: 1610 case DRM_MODE_ROTATE_90:
1608 idx = 1; 1611 idx = 3;
1609 break; 1612 break;
1610 case OMAP_DSS_ROT_180: 1613 case DRM_MODE_ROTATE_180:
1611 idx = 2; 1614 idx = 2;
1612 break; 1615 break;
1613 case OMAP_DSS_ROT_270: 1616 case DRM_MODE_ROTATE_270:
1614 idx = 3; 1617 idx = 1;
1615 break; 1618 break;
1616 default:
1617 BUG();
1618 return;
1619 } 1619 }
1620 1620
1621 switch (fourcc) { 1621 switch (fourcc) {
@@ -1742,8 +1742,7 @@ static void dispc_ovl_set_scaling_uv(enum omap_plane_id plane,
1742 case DRM_FORMAT_YUYV: 1742 case DRM_FORMAT_YUYV:
1743 case DRM_FORMAT_UYVY: 1743 case DRM_FORMAT_UYVY:
1744 /* For YUV422 with 90/270 rotation, we don't upsample chroma */ 1744 /* For YUV422 with 90/270 rotation, we don't upsample chroma */
1745 if (rotation == OMAP_DSS_ROT_0 || 1745 if (!drm_rotation_90_or_270(rotation)) {
1746 rotation == OMAP_DSS_ROT_180) {
1747 if (chroma_upscale) 1746 if (chroma_upscale)
1748 /* UV is subsampled by 2 horizontally */ 1747 /* UV is subsampled by 2 horizontally */
1749 orig_width >>= 1; 1748 orig_width >>= 1;
@@ -1753,7 +1752,7 @@ static void dispc_ovl_set_scaling_uv(enum omap_plane_id plane,
1753 } 1752 }
1754 1753
1755 /* must use FIR for YUV422 if rotated */ 1754 /* must use FIR for YUV422 if rotated */
1756 if (rotation != OMAP_DSS_ROT_0) 1755 if ((rotation & DRM_MODE_ROTATE_MASK) != DRM_MODE_ROTATE_0)
1757 scale_x = scale_y = true; 1756 scale_x = scale_y = true;
1758 1757
1759 break; 1758 break;
@@ -1812,41 +1811,42 @@ static void dispc_ovl_set_rotation_attrs(enum omap_plane_id plane, u8 rotation,
1812 bool row_repeat = false; 1811 bool row_repeat = false;
1813 int vidrot = 0; 1812 int vidrot = 0;
1814 1813
1814 /* Note: DSS HW rotates clockwise, DRM_MODE_ROTATE_* counter-clockwise */
1815 if (fourcc == DRM_FORMAT_YUYV || fourcc == DRM_FORMAT_UYVY) { 1815 if (fourcc == DRM_FORMAT_YUYV || fourcc == DRM_FORMAT_UYVY) {
1816 1816
1817 if (mirroring) { 1817 if (mirroring) {
1818 switch (rotation) { 1818 switch (rotation & DRM_MODE_ROTATE_MASK) {
1819 case OMAP_DSS_ROT_0: 1819 case DRM_MODE_ROTATE_0:
1820 vidrot = 2; 1820 vidrot = 2;
1821 break; 1821 break;
1822 case OMAP_DSS_ROT_90: 1822 case DRM_MODE_ROTATE_90:
1823 vidrot = 1; 1823 vidrot = 3;
1824 break; 1824 break;
1825 case OMAP_DSS_ROT_180: 1825 case DRM_MODE_ROTATE_180:
1826 vidrot = 0; 1826 vidrot = 0;
1827 break; 1827 break;
1828 case OMAP_DSS_ROT_270: 1828 case DRM_MODE_ROTATE_270:
1829 vidrot = 3; 1829 vidrot = 1;
1830 break; 1830 break;
1831 } 1831 }
1832 } else { 1832 } else {
1833 switch (rotation) { 1833 switch (rotation & DRM_MODE_ROTATE_MASK) {
1834 case OMAP_DSS_ROT_0: 1834 case DRM_MODE_ROTATE_0:
1835 vidrot = 0; 1835 vidrot = 0;
1836 break; 1836 break;
1837 case OMAP_DSS_ROT_90: 1837 case DRM_MODE_ROTATE_90:
1838 vidrot = 1; 1838 vidrot = 3;
1839 break; 1839 break;
1840 case OMAP_DSS_ROT_180: 1840 case DRM_MODE_ROTATE_180:
1841 vidrot = 2; 1841 vidrot = 2;
1842 break; 1842 break;
1843 case OMAP_DSS_ROT_270: 1843 case DRM_MODE_ROTATE_270:
1844 vidrot = 3; 1844 vidrot = 1;
1845 break; 1845 break;
1846 } 1846 }
1847 } 1847 }
1848 1848
1849 if (rotation == OMAP_DSS_ROT_90 || rotation == OMAP_DSS_ROT_270) 1849 if (drm_rotation_90_or_270(rotation))
1850 row_repeat = true; 1850 row_repeat = true;
1851 else 1851 else
1852 row_repeat = false; 1852 row_repeat = false;
@@ -1869,7 +1869,7 @@ static void dispc_ovl_set_rotation_attrs(enum omap_plane_id plane, u8 rotation,
1869 bool doublestride = 1869 bool doublestride =
1870 fourcc == DRM_FORMAT_NV12 && 1870 fourcc == DRM_FORMAT_NV12 &&
1871 rotation_type == OMAP_DSS_ROT_TILER && 1871 rotation_type == OMAP_DSS_ROT_TILER &&
1872 (rotation == OMAP_DSS_ROT_0 || rotation == OMAP_DSS_ROT_180); 1872 !drm_rotation_90_or_270(rotation);
1873 1873
1874 /* DOUBLESTRIDE */ 1874 /* DOUBLESTRIDE */
1875 REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane), doublestride, 22, 22); 1875 REG_FLD_MOD(DISPC_OVL_ATTRIBUTES(plane), doublestride, 22, 22);
@@ -3916,7 +3916,7 @@ static const struct dispc_errata_i734_data {
3916 .screen_width = 1, 3916 .screen_width = 1,
3917 .width = 1, .height = 1, 3917 .width = 1, .height = 1,
3918 .fourcc = DRM_FORMAT_XRGB8888, 3918 .fourcc = DRM_FORMAT_XRGB8888,
3919 .rotation = OMAP_DSS_ROT_0, 3919 .rotation = DRM_MODE_ROTATE_0,
3920 .rotation_type = OMAP_DSS_ROT_NONE, 3920 .rotation_type = OMAP_DSS_ROT_NONE,
3921 .mirror = 0, 3921 .mirror = 0,
3922 .pos_x = 0, .pos_y = 0, 3922 .pos_x = 0, .pos_y = 0,
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
index bbda9357241b..7e2fbc2a7e44 100644
--- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
+++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
@@ -149,14 +149,6 @@ enum omap_dss_rotation_type {
149 OMAP_DSS_ROT_TILER = 1 << 0, 149 OMAP_DSS_ROT_TILER = 1 << 0,
150}; 150};
151 151
152/* clockwise rotation angle */
153enum omap_dss_rotation_angle {
154 OMAP_DSS_ROT_0 = 0,
155 OMAP_DSS_ROT_90 = 1,
156 OMAP_DSS_ROT_180 = 2,
157 OMAP_DSS_ROT_270 = 3,
158};
159
160enum omap_overlay_caps { 152enum omap_overlay_caps {
161 OMAP_DSS_OVL_CAP_SCALE = 1 << 0, 153 OMAP_DSS_OVL_CAP_SCALE = 1 << 0,
162 OMAP_DSS_OVL_CAP_GLOBAL_ALPHA = 1 << 1, 154 OMAP_DSS_OVL_CAP_GLOBAL_ALPHA = 1 << 1,
diff --git a/drivers/gpu/drm/omapdrm/omap_plane.c b/drivers/gpu/drm/omapdrm/omap_plane.c
index 08a446463afa..688b358a13e5 100644
--- a/drivers/gpu/drm/omapdrm/omap_plane.c
+++ b/drivers/gpu/drm/omapdrm/omap_plane.c
@@ -65,7 +65,7 @@ static void omap_plane_atomic_update(struct drm_plane *plane,
65 65
66 memset(&info, 0, sizeof(info)); 66 memset(&info, 0, sizeof(info));
67 info.rotation_type = OMAP_DSS_ROT_NONE; 67 info.rotation_type = OMAP_DSS_ROT_NONE;
68 info.rotation = OMAP_DSS_ROT_0; 68 info.rotation = DRM_MODE_ROTATE_0;
69 info.global_alpha = 0xff; 69 info.global_alpha = 0xff;
70 info.mirror = 0; 70 info.mirror = 0;
71 info.zorder = state->zpos; 71 info.zorder = state->zpos;