Skip to content

Commit a2d265d

Browse files
6by9pelwell
authored andcommitted
drm/vc4: FKMS: Change of Broadcast RGB mode needs a mode change
The Broadcast RGB (aka HDMI limited/full range) property is only notified to the firmware on mode change, so this needs to be signalled when set. raspberrypi/firmware#1580 Signed-off-by: Dave Stevenson <[email protected]>
1 parent 5f69d93 commit a2d265d

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

drivers/gpu/drm/vc4/vc4_firmware_kms.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,6 +1549,34 @@ int vc4_connector_atomic_set_property(struct drm_connector *connector,
15491549
return -EINVAL;
15501550
}
15511551

1552+
int vc4_connector_atomic_check(struct drm_connector *connector,
1553+
struct drm_atomic_state *state)
1554+
{
1555+
struct drm_connector_state *old_state =
1556+
drm_atomic_get_old_connector_state(state, connector);
1557+
struct vc4_fkms_connector_state *vc4_old_state =
1558+
to_vc4_fkms_connector_state(old_state);
1559+
struct drm_connector_state *new_state =
1560+
drm_atomic_get_new_connector_state(state, connector);
1561+
struct vc4_fkms_connector_state *vc4_new_state =
1562+
to_vc4_fkms_connector_state(new_state);
1563+
struct drm_crtc *crtc = new_state->crtc;
1564+
1565+
if (!crtc)
1566+
return 0;
1567+
1568+
if (vc4_old_state->broadcast_rgb != vc4_new_state->broadcast_rgb) {
1569+
struct drm_crtc_state *crtc_state;
1570+
1571+
crtc_state = drm_atomic_get_crtc_state(state, crtc);
1572+
if (IS_ERR(crtc_state))
1573+
return PTR_ERR(crtc_state);
1574+
1575+
crtc_state->mode_changed = true;
1576+
}
1577+
return 0;
1578+
}
1579+
15521580
static void vc4_hdmi_connector_reset(struct drm_connector *connector)
15531581
{
15541582
drm_atomic_helper_connector_reset(connector);
@@ -1569,6 +1597,7 @@ static const struct drm_connector_funcs vc4_fkms_connector_funcs = {
15691597
static const struct drm_connector_helper_funcs vc4_fkms_connector_helper_funcs = {
15701598
.get_modes = vc4_fkms_connector_get_modes,
15711599
.best_encoder = vc4_fkms_connector_best_encoder,
1600+
.atomic_check = vc4_connector_atomic_check,
15721601
};
15731602

15741603
static const struct drm_connector_helper_funcs vc4_fkms_lcd_conn_helper_funcs = {

0 commit comments

Comments
 (0)