* radeon_connector->audio is set by RADEON_AUDIO_DISABLE as default. @ 2016-04-13 15:54 Hyungwon Hwang 2016-04-13 16:12 ` Deucher, Alexander 0 siblings, 1 reply; 5+ messages in thread From: Hyungwon Hwang @ 2016-04-13 15:54 UTC (permalink / raw) To: alexander.deucher, christian.koenig, dri-devel Dear all, I switched my desktop environment to GNOME wayland recently, and I found that no sound in this environment. In X desktop environment, the ioctl DRM_IOCTL_MODE_SETPROPERTY(I confused it with DRM_IOCTL_MODE_OBJ_SETPROPERTY - I deleted the log already :( ) is called by userspace and it makes the sound works. But in Gnome wayland desktop environment, the ioctl is not called. I tried to fixed it, and found that it is because radeon_connector->audio is set by RADEON_AUDIO_DISABLE. In atombios_encoders.c, atombios_get_encoder_mode() if (radeon_connector->audio == RADEON_AUDIO_ENABLE) return ATOM_ENCODER_MODE_HDMI; else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) && (radeon_connector->audio == RADEON_AUDIO_AUTO)) return ATOM_ENCODER_MODE_HDMI; else return ATOM_ENCODER_MODE_DVI; This code returns ATOM_ENCODER_MODE_DVI. In atombios_encoders.c, radeon_atom_encoder_mode_set(): encoder_mode = atombios_get_encoder_mode(encoder); if (connector && (radeon_audio != 0) && ((encoder_mode == ATOM_ENCODER_MODE_HDMI) || ENCODER_MODE_IS_DP(encoder_mode))) radeon_audio_mode_set(encoder, adjusted_mode);b So this code bypasses the calling of radeon_audio_mode_set(). I think that radeon_connector->audio should be set by RADEON_AUDIO_AUTO, at least for connectors which can output audio. I fixed the code like below, and it works for me. But I am not familiar with radeon DRM driver, and can't see the big picture. Can you review this code? Thanks, Hyungwon Hwang diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index cfcc099..cf52ea5 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -1975,11 +1975,12 @@ radeon_add_atom_connector(struct drm_device *dev, rdev->mode_info.output_csc_property, RADEON_OUTPUT_CSC_BYPASS); break; - case DRM_MODE_CONNECTOR_DVII: - case DRM_MODE_CONNECTOR_DVID: case DRM_MODE_CONNECTOR_HDMIA: case DRM_MODE_CONNECTOR_HDMIB: case DRM_MODE_CONNECTOR_DisplayPort: + radeon_connector->audio = RADEON_AUDIO_AUTO; + case DRM_MODE_CONNECTOR_DVII: + case DRM_MODE_CONNECTOR_DVID: drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type); drm_connector_helper_add(&radeon_connector->base, @@ -2024,8 +2025,9 @@ radeon_add_atom_connector(struct drm_device *dev, 1); } break; - case DRM_MODE_CONNECTOR_LVDS: case DRM_MODE_CONNECTOR_eDP: + radeon_connector->audio = RADEON_AUDIO_AUTO; + case DRM_MODE_CONNECTOR_LVDS: drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_bridge_connector_funcs, connector_type); drm_connector_helper_add(&radeon_connector->base, @@ -2196,6 +2198,7 @@ radeon_add_atom_connector(struct drm_device *dev, connector->doublescan_allowed = true; else connector->doublescan_allowed = false; + radeon_connector->audio = RADEON_AUDIO_AUTO; break; case DRM_MODE_CONNECTOR_DisplayPort: radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); @@ -2245,6 +2248,7 @@ radeon_add_atom_connector(struct drm_device *dev, connector->interlace_allowed = true; /* in theory with a DP to VGA converter... */ connector->doublescan_allowed = false; + radeon_connector->audio = RADEON_AUDIO_AUTO; break; case DRM_MODE_CONNECTOR_eDP: radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); @@ -2267,6 +2271,7 @@ radeon_add_atom_connector(struct drm_device *dev, subpixel_order = SubPixelHorizontalRGB; connector->interlace_allowed = false; connector->doublescan_allowed = false; + radeon_connector->audio = RADEON_AUDIO_AUTO; break; case DRM_MODE_CONNECTOR_SVIDEO: case DRM_MODE_CONNECTOR_Composite: _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply related [flat|nested] 5+ messages in thread
* RE: radeon_connector->audio is set by RADEON_AUDIO_DISABLE as default. 2016-04-13 15:54 radeon_connector->audio is set by RADEON_AUDIO_DISABLE as default Hyungwon Hwang @ 2016-04-13 16:12 ` Deucher, Alexander 2016-04-14 2:59 ` Hyungwon Hwang 2016-04-14 14:02 ` Hyungwon Hwang 0 siblings, 2 replies; 5+ messages in thread From: Deucher, Alexander @ 2016-04-13 16:12 UTC (permalink / raw) To: 'Hyungwon Hwang', Koenig, Christian, dri-devel [-- Attachment #1: Type: text/plain, Size: 5373 bytes --] > -----Original Message----- > From: Hyungwon Hwang [mailto:hyungwon.hwang7@gmail.com] > Sent: Wednesday, April 13, 2016 11:55 AM > To: Deucher, Alexander; Koenig, Christian; dri-devel@lists.freedesktop.org > Subject: radeon_connector->audio is set by RADEON_AUDIO_DISABLE as > default. > > Dear all, > > I switched my desktop environment to GNOME wayland recently, and I > found > that no sound in this environment. In X desktop environment, the ioctl > DRM_IOCTL_MODE_SETPROPERTY(I confused it with > DRM_IOCTL_MODE_OBJ_SETPROPERTY - I deleted the log already :( ) is > called by userspace and it makes the sound works. But in Gnome wayland > desktop environment, the ioctl is not called. I tried to fixed it, and > found that it is because radeon_connector->audio is set by > RADEON_AUDIO_DISABLE. Thanks for spotting this. Does the attached patch fix it? Alex > > In atombios_encoders.c, atombios_get_encoder_mode() > if (radeon_connector->audio == RADEON_AUDIO_ENABLE) > return ATOM_ENCODER_MODE_HDMI; > else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) && > (radeon_connector->audio == RADEON_AUDIO_AUTO)) > return ATOM_ENCODER_MODE_HDMI; > else > return ATOM_ENCODER_MODE_DVI; > > This code returns ATOM_ENCODER_MODE_DVI. > > In atombios_encoders.c, radeon_atom_encoder_mode_set(): > encoder_mode = atombios_get_encoder_mode(encoder); > > if (connector && (radeon_audio != 0) && > > ((encoder_mode == ATOM_ENCODER_MODE_HDMI) || > > ENCODER_MODE_IS_DP(encoder_mode))) > > radeon_audio_mode_set(encoder, adjusted_mode);b > > So this code bypasses the calling of radeon_audio_mode_set(). > > I think that radeon_connector->audio should be set by > RADEON_AUDIO_AUTO, at least for connectors which can output audio. I > fixed the code like below, and it works for me. But I am not familiar > with radeon DRM driver, and can't see the big picture. Can you review > this code? > > Thanks, > Hyungwon Hwang > > diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c > b/drivers/gpu/drm/radeon/radeon_connectors.c > index cfcc099..cf52ea5 100644 > --- a/drivers/gpu/drm/radeon/radeon_connectors.c > +++ b/drivers/gpu/drm/radeon/radeon_connectors.c > @@ -1975,11 +1975,12 @@ radeon_add_atom_connector(struct drm_device > *dev, > > rdev->mode_info.output_csc_property, > > RADEON_OUTPUT_CSC_BYPASS); > break; > - case DRM_MODE_CONNECTOR_DVII: > - case DRM_MODE_CONNECTOR_DVID: > case DRM_MODE_CONNECTOR_HDMIA: > case DRM_MODE_CONNECTOR_HDMIB: > case DRM_MODE_CONNECTOR_DisplayPort: > + radeon_connector->audio = RADEON_AUDIO_AUTO; > + case DRM_MODE_CONNECTOR_DVII: > + case DRM_MODE_CONNECTOR_DVID: > drm_connector_init(dev, &radeon_connector->base, > &radeon_dp_connector_funcs, > connector_type); > drm_connector_helper_add(&radeon_connector->base, > @@ -2024,8 +2025,9 @@ radeon_add_atom_connector(struct drm_device > *dev, > 1); > } > break; > - case DRM_MODE_CONNECTOR_LVDS: > case DRM_MODE_CONNECTOR_eDP: > + radeon_connector->audio = RADEON_AUDIO_AUTO; > + case DRM_MODE_CONNECTOR_LVDS: > drm_connector_init(dev, &radeon_connector->base, > > &radeon_lvds_bridge_connector_funcs, connector_type); > drm_connector_helper_add(&radeon_connector->base, > @@ -2196,6 +2198,7 @@ radeon_add_atom_connector(struct drm_device > *dev, > connector->doublescan_allowed = true; > else > connector->doublescan_allowed = false; > + radeon_connector->audio = RADEON_AUDIO_AUTO; > break; > case DRM_MODE_CONNECTOR_DisplayPort: > radeon_dig_connector = kzalloc(sizeof(struct > radeon_connector_atom_dig), GFP_KERNEL); > @@ -2245,6 +2248,7 @@ radeon_add_atom_connector(struct drm_device > *dev, > connector->interlace_allowed = true; > /* in theory with a DP to VGA converter... */ > connector->doublescan_allowed = false; > + radeon_connector->audio = RADEON_AUDIO_AUTO; > break; > case DRM_MODE_CONNECTOR_eDP: > radeon_dig_connector = kzalloc(sizeof(struct > radeon_connector_atom_dig), GFP_KERNEL); > @@ -2267,6 +2271,7 @@ radeon_add_atom_connector(struct drm_device > *dev, > subpixel_order = SubPixelHorizontalRGB; > connector->interlace_allowed = false; > connector->doublescan_allowed = false; > + radeon_connector->audio = RADEON_AUDIO_AUTO; > break; > case DRM_MODE_CONNECTOR_SVIDEO: > case DRM_MODE_CONNECTOR_Composite: [-- Attachment #2: 0001-drm-radeon-fix-initial-connector-audio-value.patch --] [-- Type: application/octet-stream, Size: 2423 bytes --] From 725c49e8f05f6f5daa91099ccb84ce01881bdb95 Mon Sep 17 00:00:00 2001 From: Alex Deucher <alexander.deucher@amd.com> Date: Wed, 13 Apr 2016 12:08:27 -0400 Subject: [PATCH] drm/radeon: fix initial connector audio value This got lost somewhere along the way. This fixes audio not working until set_property was called. Noticed-by: Hyungwon Hwang <hyungwon.hwang7@gmail.com> Cc: stable@vger.kernel.org Signed-off-by: Alex Deucher <alexander.deucher@amd.com> --- drivers/gpu/drm/radeon/radeon_connectors.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index cfcc099..81a63d7 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -2002,10 +2002,12 @@ radeon_add_atom_connector(struct drm_device *dev, rdev->mode_info.dither_property, RADEON_FMT_DITHER_DISABLE); - if (radeon_audio != 0) + if (radeon_audio != 0) { drm_object_attach_property(&radeon_connector->base.base, rdev->mode_info.audio_property, RADEON_AUDIO_AUTO); + radeon_connector->audio = RADEON_AUDIO_AUTO; + } if (ASIC_IS_DCE5(rdev)) drm_object_attach_property(&radeon_connector->base.base, rdev->mode_info.output_csc_property, @@ -2130,6 +2132,7 @@ radeon_add_atom_connector(struct drm_device *dev, drm_object_attach_property(&radeon_connector->base.base, rdev->mode_info.audio_property, RADEON_AUDIO_AUTO); + radeon_connector->audio = RADEON_AUDIO_AUTO; } if (connector_type == DRM_MODE_CONNECTOR_DVII) { radeon_connector->dac_load_detect = true; @@ -2185,6 +2188,7 @@ radeon_add_atom_connector(struct drm_device *dev, drm_object_attach_property(&radeon_connector->base.base, rdev->mode_info.audio_property, RADEON_AUDIO_AUTO); + radeon_connector->audio = RADEON_AUDIO_AUTO; } if (ASIC_IS_DCE5(rdev)) drm_object_attach_property(&radeon_connector->base.base, @@ -2237,6 +2241,7 @@ radeon_add_atom_connector(struct drm_device *dev, drm_object_attach_property(&radeon_connector->base.base, rdev->mode_info.audio_property, RADEON_AUDIO_AUTO); + radeon_connector->audio = RADEON_AUDIO_AUTO; } if (ASIC_IS_DCE5(rdev)) drm_object_attach_property(&radeon_connector->base.base, -- 2.5.5 [-- Attachment #3: Type: text/plain, Size: 160 bytes --] _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply related [flat|nested] 5+ messages in thread
* RE: radeon_connector->audio is set by RADEON_AUDIO_DISABLE as default. 2016-04-13 16:12 ` Deucher, Alexander @ 2016-04-14 2:59 ` Hyungwon Hwang 2016-04-14 3:03 ` Hyungwon Hwang 2016-04-14 14:02 ` Hyungwon Hwang 1 sibling, 1 reply; 5+ messages in thread From: Hyungwon Hwang @ 2016-04-14 2:59 UTC (permalink / raw) To: Deucher, Alexander; +Cc: christian.koenig, dri-devel [-- Attachment #1.1: Type: text/plain, Size: 5766 bytes --] 2016. 4. 14. 오전 1:12에 "Deucher, Alexander" <Alexander.Deucher@amd.com>님이 작성: > > > -----Original Message----- > > From: Hyungwon Hwang [mailto:hyungwon.hwang7@gmail.com] > > Sent: Wednesday, April 13, 2016 11:55 AM > > To: Deucher, Alexander; Koenig, Christian; dri-devel@lists.freedesktop.org > > Subject: radeon_connector->audio is set by RADEON_AUDIO_DISABLE as > > default. > > > > Dear all, > > > > I switched my desktop environment to GNOME wayland recently, and I > > found > > that no sound in this environment. In X desktop environment, the ioctl > > DRM_IOCTL_MODE_SETPROPERTY(I confused it with > > DRM_IOCTL_MODE_OBJ_SETPROPERTY - I deleted the log already :( ) is > > called by userspace and it makes the sound works. But in Gnome wayland > > desktop environment, the ioctl is not called. I tried to fixed it, and > > found that it is because radeon_connector->audio is set by > > RADEON_AUDIO_DISABLE. > > Thanks for spotting this. Does the attached patch fix it? > > Alex Yes. But I could test it only in my environment (radeon hd 5700 + hdmi monitor). Thanks, Hyungwon Hwang > > > > > In atombios_encoders.c, atombios_get_encoder_mode() > > if (radeon_connector->audio == RADEON_AUDIO_ENABLE) > > return ATOM_ENCODER_MODE_HDMI; > > else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) && > > (radeon_connector->audio == RADEON_AUDIO_AUTO)) > > return ATOM_ENCODER_MODE_HDMI; > > else > > return ATOM_ENCODER_MODE_DVI; > > > > This code returns ATOM_ENCODER_MODE_DVI. > > > > In atombios_encoders.c, radeon_atom_encoder_mode_set(): > > encoder_mode = atombios_get_encoder_mode(encoder); > > > > if (connector && (radeon_audio != 0) && > > > > ((encoder_mode == ATOM_ENCODER_MODE_HDMI) || > > > > ENCODER_MODE_IS_DP(encoder_mode))) > > > > radeon_audio_mode_set(encoder, adjusted_mode);b > > > > So this code bypasses the calling of radeon_audio_mode_set(). > > > > I think that radeon_connector->audio should be set by > > RADEON_AUDIO_AUTO, at least for connectors which can output audio. I > > fixed the code like below, and it works for me. But I am not familiar > > with radeon DRM driver, and can't see the big picture. Can you review > > this code? > > > > Thanks, > > Hyungwon Hwang > > > > diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c > > b/drivers/gpu/drm/radeon/radeon_connectors.c > > index cfcc099..cf52ea5 100644 > > --- a/drivers/gpu/drm/radeon/radeon_connectors.c > > +++ b/drivers/gpu/drm/radeon/radeon_connectors.c > > @@ -1975,11 +1975,12 @@ radeon_add_atom_connector(struct drm_device > > *dev, > > > > rdev->mode_info.output_csc_property, > > > > RADEON_OUTPUT_CSC_BYPASS); > > break; > > - case DRM_MODE_CONNECTOR_DVII: > > - case DRM_MODE_CONNECTOR_DVID: > > case DRM_MODE_CONNECTOR_HDMIA: > > case DRM_MODE_CONNECTOR_HDMIB: > > case DRM_MODE_CONNECTOR_DisplayPort: > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > + case DRM_MODE_CONNECTOR_DVII: > > + case DRM_MODE_CONNECTOR_DVID: > > drm_connector_init(dev, &radeon_connector->base, > > &radeon_dp_connector_funcs, > > connector_type); > > drm_connector_helper_add(&radeon_connector->base, > > @@ -2024,8 +2025,9 @@ radeon_add_atom_connector(struct drm_device > > *dev, > > 1); > > } > > break; > > - case DRM_MODE_CONNECTOR_LVDS: > > case DRM_MODE_CONNECTOR_eDP: > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > + case DRM_MODE_CONNECTOR_LVDS: > > drm_connector_init(dev, &radeon_connector->base, > > > > &radeon_lvds_bridge_connector_funcs, connector_type); > > drm_connector_helper_add(&radeon_connector->base, > > @@ -2196,6 +2198,7 @@ radeon_add_atom_connector(struct drm_device > > *dev, > > connector->doublescan_allowed = true; > > else > > connector->doublescan_allowed = false; > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > break; > > case DRM_MODE_CONNECTOR_DisplayPort: > > radeon_dig_connector = kzalloc(sizeof(struct > > radeon_connector_atom_dig), GFP_KERNEL); > > @@ -2245,6 +2248,7 @@ radeon_add_atom_connector(struct drm_device > > *dev, > > connector->interlace_allowed = true; > > /* in theory with a DP to VGA converter... */ > > connector->doublescan_allowed = false; > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > break; > > case DRM_MODE_CONNECTOR_eDP: > > radeon_dig_connector = kzalloc(sizeof(struct > > radeon_connector_atom_dig), GFP_KERNEL); > > @@ -2267,6 +2271,7 @@ radeon_add_atom_connector(struct drm_device > > *dev, > > subpixel_order = SubPixelHorizontalRGB; > > connector->interlace_allowed = false; > > connector->doublescan_allowed = false; > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > break; > > case DRM_MODE_CONNECTOR_SVIDEO: > > case DRM_MODE_CONNECTOR_Composite: [-- Attachment #1.2: Type: text/html, Size: 7930 bytes --] [-- Attachment #2: Type: text/plain, Size: 160 bytes --] _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: radeon_connector->audio is set by RADEON_AUDIO_DISABLE as default. 2016-04-14 2:59 ` Hyungwon Hwang @ 2016-04-14 3:03 ` Hyungwon Hwang 0 siblings, 0 replies; 5+ messages in thread From: Hyungwon Hwang @ 2016-04-14 3:03 UTC (permalink / raw) To: Deucher, Alexander; +Cc: christian.koenig, dri-devel [-- Attachment #1.1: Type: text/plain, Size: 6325 bytes --] 2016. 4. 14. 오전 11:59에 "Hyungwon Hwang" <hyungwon.hwang7@gmail.com>님이 작성: > > > 2016. 4. 14. 오전 1:12에 "Deucher, Alexander" <Alexander.Deucher@amd.com>님이 작성: > > > > > > -----Original Message----- > > > From: Hyungwon Hwang [mailto:hyungwon.hwang7@gmail.com] > > > Sent: Wednesday, April 13, 2016 11:55 AM > > > To: Deucher, Alexander; Koenig, Christian; dri-devel@lists.freedesktop.org > > > Subject: radeon_connector->audio is set by RADEON_AUDIO_DISABLE as > > > default. > > > > > > Dear all, > > > > > > I switched my desktop environment to GNOME wayland recently, and I > > > found > > > that no sound in this environment. In X desktop environment, the ioctl > > > DRM_IOCTL_MODE_SETPROPERTY(I confused it with > > > DRM_IOCTL_MODE_OBJ_SETPROPERTY - I deleted the log already :( ) is > > > called by userspace and it makes the sound works. But in Gnome wayland > > > desktop environment, the ioctl is not called. I tried to fixed it, and > > > found that it is because radeon_connector->audio is set by > > > RADEON_AUDIO_DISABLE. > > > > Thanks for spotting this. Does the attached patch fix it? > > > > Alex > > Yes. But I could test it only in my environment (radeon hd 5700 + hdmi monitor). > > Thanks, > Hyungwon Hwang Oh. Sorry. I couldn't see that there was an attached patch, becaue I checked it in mailing archive. I can test it at night. After that, I will send the reply again. Thanks, Hyungwon Hwang > > > > > > > > > In atombios_encoders.c, atombios_get_encoder_mode() > > > if (radeon_connector->audio == RADEON_AUDIO_ENABLE) > > > return ATOM_ENCODER_MODE_HDMI; > > > else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) && > > > (radeon_connector->audio == RADEON_AUDIO_AUTO)) > > > return ATOM_ENCODER_MODE_HDMI; > > > else > > > return ATOM_ENCODER_MODE_DVI; > > > > > > This code returns ATOM_ENCODER_MODE_DVI. > > > > > > In atombios_encoders.c, radeon_atom_encoder_mode_set(): > > > encoder_mode = atombios_get_encoder_mode(encoder); > > > > > > if (connector && (radeon_audio != 0) && > > > > > > ((encoder_mode == ATOM_ENCODER_MODE_HDMI) || > > > > > > ENCODER_MODE_IS_DP(encoder_mode))) > > > > > > radeon_audio_mode_set(encoder, adjusted_mode);b > > > > > > So this code bypasses the calling of radeon_audio_mode_set(). > > > > > > I think that radeon_connector->audio should be set by > > > RADEON_AUDIO_AUTO, at least for connectors which can output audio. I > > > fixed the code like below, and it works for me. But I am not familiar > > > with radeon DRM driver, and can't see the big picture. Can you review > > > this code? > > > > > > Thanks, > > > Hyungwon Hwang > > > > > > diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c > > > b/drivers/gpu/drm/radeon/radeon_connectors.c > > > index cfcc099..cf52ea5 100644 > > > --- a/drivers/gpu/drm/radeon/radeon_connectors.c > > > +++ b/drivers/gpu/drm/radeon/radeon_connectors.c > > > @@ -1975,11 +1975,12 @@ radeon_add_atom_connector(struct drm_device > > > *dev, > > > > > > rdev->mode_info.output_csc_property, > > > > > > RADEON_OUTPUT_CSC_BYPASS); > > > break; > > > - case DRM_MODE_CONNECTOR_DVII: > > > - case DRM_MODE_CONNECTOR_DVID: > > > case DRM_MODE_CONNECTOR_HDMIA: > > > case DRM_MODE_CONNECTOR_HDMIB: > > > case DRM_MODE_CONNECTOR_DisplayPort: > > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > > + case DRM_MODE_CONNECTOR_DVII: > > > + case DRM_MODE_CONNECTOR_DVID: > > > drm_connector_init(dev, &radeon_connector->base, > > > &radeon_dp_connector_funcs, > > > connector_type); > > > drm_connector_helper_add(&radeon_connector->base, > > > @@ -2024,8 +2025,9 @@ radeon_add_atom_connector(struct drm_device > > > *dev, > > > 1); > > > } > > > break; > > > - case DRM_MODE_CONNECTOR_LVDS: > > > case DRM_MODE_CONNECTOR_eDP: > > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > > + case DRM_MODE_CONNECTOR_LVDS: > > > drm_connector_init(dev, &radeon_connector->base, > > > > > > &radeon_lvds_bridge_connector_funcs, connector_type); > > > drm_connector_helper_add(&radeon_connector->base, > > > @@ -2196,6 +2198,7 @@ radeon_add_atom_connector(struct drm_device > > > *dev, > > > connector->doublescan_allowed = true; > > > else > > > connector->doublescan_allowed = false; > > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > > break; > > > case DRM_MODE_CONNECTOR_DisplayPort: > > > radeon_dig_connector = kzalloc(sizeof(struct > > > radeon_connector_atom_dig), GFP_KERNEL); > > > @@ -2245,6 +2248,7 @@ radeon_add_atom_connector(struct drm_device > > > *dev, > > > connector->interlace_allowed = true; > > > /* in theory with a DP to VGA converter... */ > > > connector->doublescan_allowed = false; > > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > > break; > > > case DRM_MODE_CONNECTOR_eDP: > > > radeon_dig_connector = kzalloc(sizeof(struct > > > radeon_connector_atom_dig), GFP_KERNEL); > > > @@ -2267,6 +2271,7 @@ radeon_add_atom_connector(struct drm_device > > > *dev, > > > subpixel_order = SubPixelHorizontalRGB; > > > connector->interlace_allowed = false; > > > connector->doublescan_allowed = false; > > > + radeon_connector->audio = RADEON_AUDIO_AUTO; > > > break; > > > case DRM_MODE_CONNECTOR_SVIDEO: > > > case DRM_MODE_CONNECTOR_Composite: [-- Attachment #1.2: Type: text/html, Size: 8993 bytes --] [-- Attachment #2: Type: text/plain, Size: 160 bytes --] _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: radeon_connector->audio is set by RADEON_AUDIO_DISABLE as default. 2016-04-13 16:12 ` Deucher, Alexander 2016-04-14 2:59 ` Hyungwon Hwang @ 2016-04-14 14:02 ` Hyungwon Hwang 1 sibling, 0 replies; 5+ messages in thread From: Hyungwon Hwang @ 2016-04-14 14:02 UTC (permalink / raw) To: Deucher, Alexander, Koenig, Christian, dri-devel 2016년 04월 14일 01:12에 Deucher, Alexander 이(가) 쓴 글: >> -----Original Message----- >> From: Hyungwon Hwang [mailto:hyungwon.hwang7@gmail.com] >> Sent: Wednesday, April 13, 2016 11:55 AM >> To: Deucher, Alexander; Koenig, Christian; dri-devel@lists.freedesktop.org >> Subject: radeon_connector->audio is set by RADEON_AUDIO_DISABLE as >> default. >> >> Dear all, >> >> I switched my desktop environment to GNOME wayland recently, and I >> found >> that no sound in this environment. In X desktop environment, the ioctl >> DRM_IOCTL_MODE_SETPROPERTY(I confused it with >> DRM_IOCTL_MODE_OBJ_SETPROPERTY - I deleted the log already :( ) is >> called by userspace and it makes the sound works. But in Gnome wayland >> desktop environment, the ioctl is not called. I tried to fixed it, and >> found that it is because radeon_connector->audio is set by >> RADEON_AUDIO_DISABLE. > > Thanks for spotting this. Does the attached patch fix it? > > Alex Great. Now it works with your patch. Thanks for your work. Best regards, Hyungwon Hwang > >> >> In atombios_encoders.c, atombios_get_encoder_mode() >> if (radeon_connector->audio == RADEON_AUDIO_ENABLE) >> return ATOM_ENCODER_MODE_HDMI; >> else if (drm_detect_hdmi_monitor(radeon_connector_edid(connector)) && >> (radeon_connector->audio == RADEON_AUDIO_AUTO)) >> return ATOM_ENCODER_MODE_HDMI; >> else >> return ATOM_ENCODER_MODE_DVI; >> >> This code returns ATOM_ENCODER_MODE_DVI. >> >> In atombios_encoders.c, radeon_atom_encoder_mode_set(): >> encoder_mode = atombios_get_encoder_mode(encoder); >> >> if (connector && (radeon_audio != 0) && >> >> ((encoder_mode == ATOM_ENCODER_MODE_HDMI) || >> >> ENCODER_MODE_IS_DP(encoder_mode))) >> >> radeon_audio_mode_set(encoder, adjusted_mode);b >> >> So this code bypasses the calling of radeon_audio_mode_set(). >> >> I think that radeon_connector->audio should be set by >> RADEON_AUDIO_AUTO, at least for connectors which can output audio. I >> fixed the code like below, and it works for me. But I am not familiar >> with radeon DRM driver, and can't see the big picture. Can you review >> this code? >> >> Thanks, >> Hyungwon Hwang >> >> diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c >> b/drivers/gpu/drm/radeon/radeon_connectors.c >> index cfcc099..cf52ea5 100644 >> --- a/drivers/gpu/drm/radeon/radeon_connectors.c >> +++ b/drivers/gpu/drm/radeon/radeon_connectors.c >> @@ -1975,11 +1975,12 @@ radeon_add_atom_connector(struct drm_device >> *dev, >> >> rdev->mode_info.output_csc_property, >> >> RADEON_OUTPUT_CSC_BYPASS); >> break; >> - case DRM_MODE_CONNECTOR_DVII: >> - case DRM_MODE_CONNECTOR_DVID: >> case DRM_MODE_CONNECTOR_HDMIA: >> case DRM_MODE_CONNECTOR_HDMIB: >> case DRM_MODE_CONNECTOR_DisplayPort: >> + radeon_connector->audio = RADEON_AUDIO_AUTO; >> + case DRM_MODE_CONNECTOR_DVII: >> + case DRM_MODE_CONNECTOR_DVID: >> drm_connector_init(dev, &radeon_connector->base, >> &radeon_dp_connector_funcs, >> connector_type); >> drm_connector_helper_add(&radeon_connector->base, >> @@ -2024,8 +2025,9 @@ radeon_add_atom_connector(struct drm_device >> *dev, >> 1); >> } >> break; >> - case DRM_MODE_CONNECTOR_LVDS: >> case DRM_MODE_CONNECTOR_eDP: >> + radeon_connector->audio = RADEON_AUDIO_AUTO; >> + case DRM_MODE_CONNECTOR_LVDS: >> drm_connector_init(dev, &radeon_connector->base, >> >> &radeon_lvds_bridge_connector_funcs, connector_type); >> drm_connector_helper_add(&radeon_connector->base, >> @@ -2196,6 +2198,7 @@ radeon_add_atom_connector(struct drm_device >> *dev, >> connector->doublescan_allowed = true; >> else >> connector->doublescan_allowed = false; >> + radeon_connector->audio = RADEON_AUDIO_AUTO; >> break; >> case DRM_MODE_CONNECTOR_DisplayPort: >> radeon_dig_connector = kzalloc(sizeof(struct >> radeon_connector_atom_dig), GFP_KERNEL); >> @@ -2245,6 +2248,7 @@ radeon_add_atom_connector(struct drm_device >> *dev, >> connector->interlace_allowed = true; >> /* in theory with a DP to VGA converter... */ >> connector->doublescan_allowed = false; >> + radeon_connector->audio = RADEON_AUDIO_AUTO; >> break; >> case DRM_MODE_CONNECTOR_eDP: >> radeon_dig_connector = kzalloc(sizeof(struct >> radeon_connector_atom_dig), GFP_KERNEL); >> @@ -2267,6 +2271,7 @@ radeon_add_atom_connector(struct drm_device >> *dev, >> subpixel_order = SubPixelHorizontalRGB; >> connector->interlace_allowed = false; >> connector->doublescan_allowed = false; >> + radeon_connector->audio = RADEON_AUDIO_AUTO; >> break; >> case DRM_MODE_CONNECTOR_SVIDEO: >> case DRM_MODE_CONNECTOR_Composite: _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-04-14 14:02 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-04-13 15:54 radeon_connector->audio is set by RADEON_AUDIO_DISABLE as default Hyungwon Hwang 2016-04-13 16:12 ` Deucher, Alexander 2016-04-14 2:59 ` Hyungwon Hwang 2016-04-14 3:03 ` Hyungwon Hwang 2016-04-14 14:02 ` Hyungwon Hwang
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.