radeon_connector->audio is set by RADEON_AUDIO_DISABLE as default.

Hyungwon Hwang hyungwon.hwang7 at gmail.com
Thu Apr 14 14:02:35 UTC 2016


2016년 04월 14일 01:12에 Deucher, Alexander 이(가) 쓴 글:
>> -----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

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:


More information about the dri-devel mailing list