All of lore.kernel.org
 help / color / mirror / Atom feed
* 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.