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/omapdrm | |
| 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/omapdrm')
| -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; |
