2016. 4. 14. ì¤ì 1:12ì "Deucher, Alexander" <Alexander.Deucher at amd.com>ëì´ ìì±: > > > -----Original Message----- > > From: Hyungwon Hwang [mailto:hyungwon.hwang7 at gmail.com] > > Sent: Wednesday, April 13, 2016 11:55 AM > > To: Deucher, Alexander; Koenig, Christian; dri-devel at 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: -------------- next part -------------- An HTML attachment was scrubbed... URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20160414/44b6032b/attachment-0001.html>