Commit 53c5da85 authored by Dave Stevenson's avatar Dave Stevenson Committed by Maxime Ripard

drm/vc4: Add monochrome mode to the VEC.

The VEC supports not producing colour bursts for monochrome output.
It also has an option for disabling the chroma input to remove
chroma from the signal.

Now that there is a DRM_MODE_TV_MODE_MONOCHROME defined, plumb
this in.
Signed-off-by: default avatarDave Stevenson <dave.stevenson@raspberrypi.com>
Signed-off-by: default avatarMaxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240619153913.2804051-3-dave.stevenson@raspberrypi.com
parent f85376c8
...@@ -234,6 +234,7 @@ enum vc4_vec_tv_mode_id { ...@@ -234,6 +234,7 @@ enum vc4_vec_tv_mode_id {
VC4_VEC_TV_MODE_PAL_60, VC4_VEC_TV_MODE_PAL_60,
VC4_VEC_TV_MODE_PAL_N, VC4_VEC_TV_MODE_PAL_N,
VC4_VEC_TV_MODE_SECAM, VC4_VEC_TV_MODE_SECAM,
VC4_VEC_TV_MODE_MONOCHROME,
}; };
struct vc4_vec_tv_mode { struct vc4_vec_tv_mode {
...@@ -324,6 +325,22 @@ static const struct vc4_vec_tv_mode vc4_vec_tv_modes[] = { ...@@ -324,6 +325,22 @@ static const struct vc4_vec_tv_mode vc4_vec_tv_modes[] = {
.config1 = VEC_CONFIG1_C_CVBS_CVBS, .config1 = VEC_CONFIG1_C_CVBS_CVBS,
.custom_freq = 0x29c71c72, .custom_freq = 0x29c71c72,
}, },
{
/* 50Hz mono */
.mode = DRM_MODE_TV_MODE_MONOCHROME,
.expected_htotal = 864,
.config0 = VEC_CONFIG0_PAL_BDGHI_STD | VEC_CONFIG0_BURDIS |
VEC_CONFIG0_CHRDIS,
.config1 = VEC_CONFIG1_C_CVBS_CVBS,
},
{
/* 60Hz mono */
.mode = DRM_MODE_TV_MODE_MONOCHROME,
.expected_htotal = 858,
.config0 = VEC_CONFIG0_PAL_M_STD | VEC_CONFIG0_BURDIS |
VEC_CONFIG0_CHRDIS,
.config1 = VEC_CONFIG1_C_CVBS_CVBS,
},
}; };
static inline const struct vc4_vec_tv_mode * static inline const struct vc4_vec_tv_mode *
...@@ -351,6 +368,7 @@ static const struct drm_prop_enum_list legacy_tv_mode_names[] = { ...@@ -351,6 +368,7 @@ static const struct drm_prop_enum_list legacy_tv_mode_names[] = {
{ VC4_VEC_TV_MODE_PAL_M, "PAL-M", }, { VC4_VEC_TV_MODE_PAL_M, "PAL-M", },
{ VC4_VEC_TV_MODE_PAL_N, "PAL-N", }, { VC4_VEC_TV_MODE_PAL_N, "PAL-N", },
{ VC4_VEC_TV_MODE_SECAM, "SECAM", }, { VC4_VEC_TV_MODE_SECAM, "SECAM", },
{ VC4_VEC_TV_MODE_MONOCHROME, "Mono", },
}; };
static enum drm_connector_status static enum drm_connector_status
...@@ -406,6 +424,10 @@ vc4_vec_connector_set_property(struct drm_connector *connector, ...@@ -406,6 +424,10 @@ vc4_vec_connector_set_property(struct drm_connector *connector,
state->tv.mode = DRM_MODE_TV_MODE_SECAM; state->tv.mode = DRM_MODE_TV_MODE_SECAM;
break; break;
case VC4_VEC_TV_MODE_MONOCHROME:
state->tv.mode = DRM_MODE_TV_MODE_MONOCHROME;
break;
default: default:
return -EINVAL; return -EINVAL;
} }
...@@ -453,6 +475,10 @@ vc4_vec_connector_get_property(struct drm_connector *connector, ...@@ -453,6 +475,10 @@ vc4_vec_connector_get_property(struct drm_connector *connector,
*val = VC4_VEC_TV_MODE_SECAM; *val = VC4_VEC_TV_MODE_SECAM;
break; break;
case DRM_MODE_TV_MODE_MONOCHROME:
*val = VC4_VEC_TV_MODE_MONOCHROME;
break;
default: default:
return -EINVAL; return -EINVAL;
} }
...@@ -754,7 +780,8 @@ static int vc4_vec_bind(struct device *dev, struct device *master, void *data) ...@@ -754,7 +780,8 @@ static int vc4_vec_bind(struct device *dev, struct device *master, void *data)
BIT(DRM_MODE_TV_MODE_PAL) | BIT(DRM_MODE_TV_MODE_PAL) |
BIT(DRM_MODE_TV_MODE_PAL_M) | BIT(DRM_MODE_TV_MODE_PAL_M) |
BIT(DRM_MODE_TV_MODE_PAL_N) | BIT(DRM_MODE_TV_MODE_PAL_N) |
BIT(DRM_MODE_TV_MODE_SECAM)); BIT(DRM_MODE_TV_MODE_SECAM) |
BIT(DRM_MODE_TV_MODE_MONOCHROME));
if (ret) if (ret)
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment