diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2017-05-16 04:05:09 -0400 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2017-06-02 04:05:32 -0400 |
commit | 0bd97c42d975a1e0849105bb8f23a68490683aab (patch) | |
tree | 2cf19d4c4d1b8adf187e463cd2f7a54c09826bba /drivers/gpu/drm | |
parent | 218ed5358a4045382674f8feeee0efb526f9431b (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.c | 60 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/omapdss.h | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_plane.c | 2 |
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 */ | ||
153 | enum 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 | |||
160 | enum omap_overlay_caps { | 152 | enum 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; |