From: Slava Grigorev <slava.grigo...@amd.com>

Signed-off-by: Slava Grigorev <slava.grigorev at amd.com>
Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
---
 drivers/gpu/drm/radeon/dce3_1_afmt.c    |  4 ++--
 drivers/gpu/drm/radeon/dce6_afmt.c      |  2 +-
 drivers/gpu/drm/radeon/evergreen_hdmi.c | 18 ++++--------------
 drivers/gpu/drm/radeon/r600_hdmi.c      |  9 ++++-----
 drivers/gpu/drm/radeon/radeon_audio.c   | 17 +++++++++++++----
 drivers/gpu/drm/radeon/radeon_audio.h   |  4 ++++
 6 files changed, 28 insertions(+), 26 deletions(-)

diff --git a/drivers/gpu/drm/radeon/dce3_1_afmt.c 
b/drivers/gpu/drm/radeon/dce3_1_afmt.c
index f4cddb2..f7b2659 100644
--- a/drivers/gpu/drm/radeon/dce3_1_afmt.c
+++ b/drivers/gpu/drm/radeon/dce3_1_afmt.c
@@ -137,7 +137,7 @@ void dce3_1_hdmi_setmode(struct drm_encoder *encoder, 
struct drm_display_mode *m

        /* disable audio prior to setting up hw */
        dig->afmt->pin = radeon_audio_get_pin(encoder);
-       r600_audio_enable(rdev, dig->afmt->pin, 0);
+       radeon_audio_enable(rdev, dig->afmt->pin, 0);

        r600_audio_set_dto(encoder, mode->clock);

@@ -212,5 +212,5 @@ void dce3_1_hdmi_setmode(struct drm_encoder *encoder, 
struct drm_display_mode *m
        r600_hdmi_audio_workaround(encoder);

        /* enable audio after to setting up hw */
-       r600_audio_enable(rdev, dig->afmt->pin, 0xf);
+       radeon_audio_enable(rdev, dig->afmt->pin, 0xf);
 }
diff --git a/drivers/gpu/drm/radeon/dce6_afmt.c 
b/drivers/gpu/drm/radeon/dce6_afmt.c
index 96f298c..7fd7f15 100644
--- a/drivers/gpu/drm/radeon/dce6_afmt.c
+++ b/drivers/gpu/drm/radeon/dce6_afmt.c
@@ -257,7 +257,7 @@ void dce6_audio_fini(struct radeon_device *rdev)
                return;

        for (i = 0; i < rdev->audio.num_pins; i++)
-               dce6_audio_enable(rdev, &rdev->audio.pin[i], false);
+               radeon_audio_enable(rdev, &rdev->audio.pin[i], false);

        rdev->audio.enabled = false;
 }
diff --git a/drivers/gpu/drm/radeon/evergreen_hdmi.c 
b/drivers/gpu/drm/radeon/evergreen_hdmi.c
index 6bd113b..2f29918 100644
--- a/drivers/gpu/drm/radeon/evergreen_hdmi.c
+++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c
@@ -34,7 +34,7 @@
 #include "atom.h"

 /* enable the audio stream */
-static void dce4_audio_enable(struct radeon_device *rdev,
+void dce4_audio_enable(struct radeon_device *rdev,
                              struct r600_audio_pin *pin,
                              u8 enable_mask)
 {
@@ -300,11 +300,7 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, 
struct drm_display_mode

        /* disable audio prior to setting up hw */
        dig->afmt->pin = radeon_audio_get_pin(encoder);
-       if (ASIC_IS_DCE6(rdev)) {
-               dce6_audio_enable(rdev, dig->afmt->pin, 0);
-       } else {
-               dce4_audio_enable(rdev, dig->afmt->pin, 0);
-       }
+       radeon_audio_enable(rdev, dig->afmt->pin, 0);

        evergreen_audio_set_dto(encoder, mode->clock);

@@ -435,10 +431,7 @@ void evergreen_hdmi_setmode(struct drm_encoder *encoder, 
struct drm_display_mode
        WREG32(AFMT_RAMP_CONTROL3 + offset, 0x00000001);

        /* enable audio after to setting up hw */
-       if (ASIC_IS_DCE6(rdev))
-               dce6_audio_enable(rdev, dig->afmt->pin, 1);
-       else
-               dce4_audio_enable(rdev, dig->afmt->pin, 0xf);
+       radeon_audio_enable(rdev, dig->afmt->pin, 0xf);
 }

 void evergreen_hdmi_enable(struct drm_encoder *encoder, bool enable)
@@ -458,10 +451,7 @@ void evergreen_hdmi_enable(struct drm_encoder *encoder, 
bool enable)
                return;

        if (!enable && dig->afmt->pin) {
-               if (ASIC_IS_DCE6(rdev))
-                       dce6_audio_enable(rdev, dig->afmt->pin, 0);
-               else
-                       dce4_audio_enable(rdev, dig->afmt->pin, 0);
+               radeon_audio_enable(rdev, dig->afmt->pin, 0);
                dig->afmt->pin = NULL;
        }

diff --git a/drivers/gpu/drm/radeon/r600_hdmi.c 
b/drivers/gpu/drm/radeon/r600_hdmi.c
index 53159a2..f92eb77 100644
--- a/drivers/gpu/drm/radeon/r600_hdmi.c
+++ b/drivers/gpu/drm/radeon/r600_hdmi.c
@@ -192,8 +192,7 @@ void r600_audio_fini(struct radeon_device *rdev)
        if (!rdev->audio.enabled)
                return;

-       r600_audio_enable(rdev, &rdev->audio.pin[0], 0);
-
+       radeon_audio_enable(rdev, &rdev->audio.pin[0], 0);
        rdev->audio.enabled = false;
 }

@@ -489,7 +488,7 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct 
drm_display_mode *mod

        /* disable audio prior to setting up hw */
        dig->afmt->pin = radeon_audio_get_pin(encoder);
-       r600_audio_enable(rdev, dig->afmt->pin, 0xf);
+       radeon_audio_enable(rdev, dig->afmt->pin, 0);

        r600_audio_set_dto(encoder, mode->clock);

@@ -575,7 +574,7 @@ void r600_hdmi_setmode(struct drm_encoder *encoder, struct 
drm_display_mode *mod
        WREG32(HDMI0_RAMP_CONTROL3 + offset, 0x00000001);

        /* enable audio after to setting up hw */
-       r600_audio_enable(rdev, dig->afmt->pin, 0xf);
+       radeon_audio_enable(rdev, dig->afmt->pin, 0xf);
 }

 /**
@@ -661,7 +660,7 @@ void r600_hdmi_enable(struct drm_encoder *encoder, bool 
enable)
                return;

        if (!enable && dig->afmt->pin) {
-               r600_audio_enable(rdev, dig->afmt->pin, 0);
+               radeon_audio_enable(rdev, dig->afmt->pin, 0);
                dig->afmt->pin = NULL;
        }

diff --git a/drivers/gpu/drm/radeon/radeon_audio.c 
b/drivers/gpu/drm/radeon/radeon_audio.c
index 5aedf5b..eed5c74 100644
--- a/drivers/gpu/drm/radeon/radeon_audio.c
+++ b/drivers/gpu/drm/radeon/radeon_audio.c
@@ -30,6 +30,8 @@

 void r600_audio_enable(struct radeon_device *rdev, struct r600_audio_pin *pin,
                u8 enable_mask);
+void dce4_audio_enable(struct radeon_device *rdev, struct r600_audio_pin *pin,
+               u8 enable_mask);
 void dce6_audio_enable(struct radeon_device *rdev, struct r600_audio_pin *pin,
                u8 enable_mask);
 u32 dce6_endpoint_rreg(struct radeon_device *rdev, u32 offset, u32 reg);
@@ -86,16 +88,19 @@ static void radeon_audio_wreg(struct radeon_device *rdev, 
u32 offset,
 static struct radeon_audio_basic_funcs dce32_funcs = {
        .endpoint_rreg = radeon_audio_rreg,
        .endpoint_wreg = radeon_audio_wreg,
+       .enable = r600_audio_enable,
 };

 static struct radeon_audio_basic_funcs dce4_funcs = {
        .endpoint_rreg = radeon_audio_rreg,
        .endpoint_wreg = radeon_audio_wreg,
+       .enable = dce4_audio_enable,
 };

 static struct radeon_audio_basic_funcs dce6_funcs = {
        .endpoint_rreg = dce6_endpoint_rreg,
        .endpoint_wreg = dce6_endpoint_wreg,
+       .enable = dce6_audio_enable,
 };

 static struct radeon_audio_funcs dce32_hdmi_funcs = {
@@ -201,10 +206,7 @@ int radeon_audio_init(struct radeon_device *rdev)

        /* disable audio.  it will be set up later */
        for (i = 0; i < rdev->audio.num_pins; i++)
-               if (ASIC_IS_DCE6(rdev))
-                       dce6_audio_enable(rdev, &rdev->audio.pin[i], false);
-               else
-                       r600_audio_enable(rdev, &rdev->audio.pin[i], false);
+               radeon_audio_enable(rdev, &rdev->audio.pin[i], false);

        return 0;
 }
@@ -371,3 +373,10 @@ void radeon_audio_select_pin(struct drm_encoder *encoder)
        if (radeon_encoder->audio && radeon_encoder->audio->select_pin)
                radeon_encoder->audio->select_pin(encoder);
 }
+
+void radeon_audio_enable(struct radeon_device *rdev,
+       struct r600_audio_pin *pin, u8 enable_mask)
+{
+       if (rdev->audio.funcs->enable)
+               rdev->audio.funcs->enable(rdev, pin, enable_mask);
+}
diff --git a/drivers/gpu/drm/radeon/radeon_audio.h 
b/drivers/gpu/drm/radeon/radeon_audio.h
index 36d329a..2bd845d 100644
--- a/drivers/gpu/drm/radeon/radeon_audio.h
+++ b/drivers/gpu/drm/radeon/radeon_audio.h
@@ -37,6 +37,8 @@ struct radeon_audio_basic_funcs
        u32  (*endpoint_rreg)(struct radeon_device *rdev, u32 offset, u32 reg);
        void (*endpoint_wreg)(struct radeon_device *rdev,
                u32 offset, u32 reg, u32 v);
+       void (*enable)(struct radeon_device *rdev,
+               struct r600_audio_pin *pin, u8 enable_mask);
 };

 struct radeon_audio_funcs
@@ -64,5 +66,7 @@ void radeon_audio_write_latency_fields(struct drm_encoder 
*encoder,
        struct drm_display_mode *mode);
 struct r600_audio_pin *radeon_audio_get_pin(struct drm_encoder *encoder);
 void radeon_audio_select_pin(struct drm_encoder *encoder);
+void radeon_audio_enable(struct radeon_device *rdev,
+       struct r600_audio_pin *pin, u8 enable_mask);

 #endif
-- 
1.8.3.1

Reply via email to