* 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.