[alsa-devel] Intel G45 8-Channel LPCM over HDMI

Wu, Fengguang fengguang.wu at intel.com
Wed Nov 5 05:46:25 CET 2008


On Tue, Nov 04, 2008 at 10:36:35PM +0800, Alexander Werner wrote:
> > It's ready now!
> >
> > We did a lot of code refactor, testing and bug fixes in the last ten
> > days, and now it's ready for release :-)
> >
> > Note that X.org intel video patches are also necessary for HDMI  
> > sound output.
> >
> > However our 3 HDMI monitors have only 2-channel audio support, so
> > 8-channel LPCM audio may not work for now.
> >
> > Thank you,
> > Fengguang
> >
> That's great news! I'll test the patch as soon as my replacement board  
> arrives.

Thank you. The G45 HDMI audio can be enabled by the submitted ALSA
kernel patch together with this X.org intel driver patch:

Cheers,
Fengguang
---

[PATCH] enable HDMI audio output

Set the SDVO_AUDIO_ENABLE bit to enable audio output for
        - integrated HDMI (e.g. G45)
        - SDVO HDMI (e.g. G35)

Signed-off-by: Wu Fengguang <wfg at linux.intel.com>
Signed-off-by: Ma Ling <ling.ma at intel.com>
---
 src/i810_reg.h  |    1 +
 src/i830_hdmi.c |    1 +
 src/i830_sdvo.c |   10 ++++++----
 3 files changed, 8 insertions(+), 4 deletions(-)

--- xf86-video-intel.orig/src/i810_reg.h
+++ xf86-video-intel/src/i810_reg.h
@@ -1281,6 +1281,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN
 /** Requird for HDMI operation */
 #define SDVO_NULL_PACKETS_DURING_VSYNC		(1 << 9)
 #define SDVO_BORDER_ENABLE			(1 << 7)
+#define SDVO_AUDIO_ENABLE			(1 << 6)
 /** New with 965, default is to be set */
 #define SDVO_VSYNC_ACTIVE_HIGH			(1 << 4)
 /** New with 965, default is to be set */
--- xf86-video-intel.orig/src/i830_hdmi.c
+++ xf86-video-intel/src/i830_hdmi.c
@@ -75,6 +75,7 @@ i830_hdmi_mode_set(xf86OutputPtr output,
     uint32_t sdvox;
 
     sdvox = SDVO_ENCODING_HDMI |
+	SDVO_AUDIO_ENABLE |
 	SDVO_BORDER_ENABLE |
 	SDVO_VSYNC_ACTIVE_HIGH |
 	SDVO_HSYNC_ACTIVE_HIGH;
--- xf86-video-intel.orig/src/i830_sdvo.c
+++ xf86-video-intel/src/i830_sdvo.c
@@ -1017,7 +1017,7 @@ i830_sdvo_mode_set(xf86OutputPtr output,
     struct i830_sdvo_priv   *dev_priv = intel_output->dev_priv;
     xf86CrtcPtr	    crtc = output->crtc;
     I830CrtcPrivatePtr	    intel_crtc = crtc->driver_private;
-    uint32_t sdvox;
+    uint32_t sdvox = 0;
     int sdvo_pixel_multiply;
     struct i830_sdvo_in_out_map in_out;
     struct i830_sdvo_dtd input_dtd;
@@ -1039,8 +1039,10 @@ i830_sdvo_mode_set(xf86OutputPtr output,
 			&in_out, sizeof(in_out));
     status = i830_sdvo_read_response(output, NULL, 0);
 
-    if (dev_priv->is_hdmi)
+    if (dev_priv->is_hdmi){
 	i830_sdvo_set_avi_infoframe(output, mode);
+	sdvox |= SDVO_AUDIO_ENABLE;
+    }
 
     i830_sdvo_get_dtd_from_mode(&input_dtd, mode);
 
@@ -1088,11 +1090,11 @@ i830_sdvo_mode_set(xf86OutputPtr output,
 
     /* Set the SDVO control regs. */
     if (IS_I965G(pI830)) {
-	sdvox = SDVO_BORDER_ENABLE |
+	sdvox |= SDVO_BORDER_ENABLE |
 		SDVO_VSYNC_ACTIVE_HIGH |
 		SDVO_HSYNC_ACTIVE_HIGH;
     } else {
-	sdvox = INREG(dev_priv->output_device);
+	sdvox |= INREG(dev_priv->output_device);
 	switch (dev_priv->output_device) {
 	case SDVOB:
 	    sdvox &= SDVOB_PRESERVE_MASK;



More information about the Alsa-devel mailing list