Re: Force-enabling a video mode breaks HDMI audio on Intel DG45FC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



On Fri, Jun 04, 2010 at 09:05:59AM +0800, Wu Fengguang wrote:
> On Fri, Jun 04, 2010 at 05:04:37AM +0800, David Härdeman wrote:
> > On Tue, Jun 01, 2010 at 10:07:59PM +0800, Wu Fengguang wrote:
> > > On Mon, May 31, 2010 at 10:06:23AM +0800, Zhenyu Wang wrote:
> > >>On 2010.05.31 09:34:04 +0800, Wu, Fengguang wrote:
> > >>>On Sun, May 30, 2010 at 07:49:13PM +0800, David Härdeman wrote:
> > >>>> I recently tried played with the video= kernel parameter, and 
> > >>>> booting with:
> > >>>> video="HDMI Type A-1:1920x1080@60D"
> > >>>>
> > >>>> gives me a proper video mode from the beginning. However, it also 
> > >>>> seems to break HDMI audio. Booting with that parameter ->no audio, 
> > >>>> receiver doesn't light up, etc. Booting without that parameter 
> > >>>> ->audio works as expected.
> > >>>>
> > >>
> > >> yeah, I think that won't setup the audio enable bit on HDMI port 
> > >> properly, as drm/i915 driver checks EDID block for real HDMI sink 
> > >> device, and only in that case it will enable audio, ignore other case 
> > >> like DVI.
> > > 
> > > Maybe could allow users to manually set/unset that bit.
> > 
> > Yes please? :)
> > 
> > > David, you may check the intel_audio_dump tool in
> > > 
> > >         git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
> > > 
> > > It will show whether your SDVO_AUDIO_ENABLE bit is set (grep for
> > > "Audio_Output_Enable" or "audio enabled").
> > > 
> > > If unset, you can trivially set the bit with
> > > intel_reg_read/intel_reg_write.
> > > (I'm not sure if this will magically make audio work though.)
> > 
> > I tried manually changing the SDVOB bits, and it temporarily enabled 
> > audio (until I changed from one video clip to another). There's also 
> > other bits that differ so I guess that the channel mapping etc might be 
> > messed up.
> 
> It seems that besides the SDVOB audio enabled bit, the ALSA driver
> thinks that there are no HDMI monitor attached. This can be verified
> with
>         $ head -1 /proc/asound/card0/eld\#1.0
>         monitor_present         0
> 
> You may try manually setting it
> 
>         # echo monitor_present 1 > /proc/asound/card0/eld\#1.0
> 
> > Attached is the output from intel_audio_dump with working audio (without 
> > forced KMS mode) and without (with forced KMS mode). The diff between 
> > them is:
> 
> If the above trick does not work, would you please post the dmesg and 
> intel_audio_dump output in forced KMS mode for the first clip (with
> sound) and second clip (silence again)?

It doesn't work, but I can't seem to get a good handle on the exact 
order of when it works and when it doesn't.

scott:~# dmesg -c > /dev/null 2>&1
scott:~# head -1 /proc/asound/card0/eld#3.0
monitor_present         0
scott:~# echo monitor_present 1 > /proc/asound/card0/eld#3.0
scott:~# head -1 /proc/asound/card0/eld#3.0
monitor_present         1
scott:~# ./intel_reg_read 0x61140
0x61140 : 0x8000089C
scott:~# ./intel_reg_write 0x61140 0x800008dc
Value before: 0x8000089C
Value after: 0x800008DC
scott:~# ./intel_reg_read 0x61140
0x61140 : 0x800008DC
<playing first clip, dolby digital, silence>
scott:~# ../intel_reg_write 0x61140 0x800008dc
Value before: 0x8000089C
Value after: 0x800008DC
scott:~# ./intel_audio_dump > first.dump
<stop playing>
scott:~/# head -1 /proc/asound/card0/eld#3.0
monitor_present         0
scott:~# ../intel_reg_write 0x61140 0x800008dc
Value before: 0x8000089C
Value after: 0x800008DC
<start playing, silence>
<stop playing>
scott:~/# ../intel_reg_read 0x61140
0x61140 : 0x8000089C
<start playing, silence>
scott:~# ./intel_audio_dump > second.dump
scott:~/wu# dmesg
[ 1342.868567] HDMI hot plug event: Pin=3 Presence_Detect=0 ELD_Valid=0
[ 1348.930668] HDMI hot plug event: Pin=3 Presence_Detect=1 ELD_Valid=0
[ 1404.372097] HDMI hot plug event: Pin=3 Presence_Detect=0 ELD_Valid=0
[ 1440.618564] HDMI hot plug event: Pin=3 Presence_Detect=1 ELD_Valid=0
[ 1490.584063] HDMI hot plug event: Pin=3 Presence_Detect=0 ELD_Valid=0


-- 
David Härdeman
VIDEO_DIP_CTL         0x20000600  Video DIP Control
SDVOB                 0x800008dc  Digital Display Port B Control Register
SDVOC                 0x0000089c  Digital Display Port C Control Register
PORT_HOTPLUG_EN       0x38000320  Hot Plug Detect Enable
AUD_CONFIG            0x00000004  Audio Configuration
AUD_DEBUG             0x00000000  Audio Debug
AUD_VID_DID           0x80862803  Audio Vendor ID / Device ID
AUD_RID               0x00100000  Audio Revision ID
AUD_SUBN_CNT          0x00010001  Audio Subordinate Node Count
AUD_FUNC_GRP          0x00000001  Audio Function Group Type
AUD_SUBN_CNT2         0x00020002  Audio Subordinate Node Count
AUD_GRP_CAP           0x00000004  Audio Function Group Capabilities
AUD_PWRST             0x00000000  Audio Power State
AUD_SUPPWR            0x00000009  Audio Supported Power States
AUD_SID               0x80860101  Audio Root Node Subsystem ID
AUD_OUT_CWCAP         0x00006211  Audio Output Converter Widget Capabilities
AUD_OUT_PCMSIZE       0x001e07f0  Audio PCM Size and Rates
AUD_OUT_STR           0x00000005  Audio Stream Formats
AUD_OUT_DIG_CNVT      0x00000001  Audio Digital Converter
AUD_OUT_CH_STR        0x00000080  Audio Channel ID and Stream ID
AUD_OUT_STR_DESC      0x00000011  Audio Stream Descriptor Format
AUD_PINW_CAP          0x004073bd  Audio Pin Complex Widget Capabilities
AUD_PIN_CAP           0x00000094  Audio Pin Capabilities
AUD_PINW_CONNLNG      0x00000001  Audio Connection List Length
AUD_PINW_CONNLST      0x00000002  Audio Connection List Entry
AUD_PINW_CNTR         0x00000040  Audio Pin Widget Control
AUD_PINW_UNSOLRESP    0x80000003  Audio Unsolicited Response Enable
AUD_CNTL_ST           0x20232068  Audio Control State Register
AUD_PINW_CONFIG       0x18560010  Audio Configuration Default
AUD_HDMIW_STATUS      0x80000000  Audio HDMI Status
AUD_HDMIW_HDMIEDID    0x00000000  Audio HDMI Data EDID Block
AUD_HDMIW_INFOFR      0x00000000  Audio HDMI Widget Data Island Packet
AUD_CONV_CHCNT        0x000001f7  Audio Converter Channel Count
AUD_CTS_ENABLE        0x00000000  Audio CTS Programming Enable

Details:

AUD_VID_DID vendor id			0x8086
AUD_VID_DID device id			0x2803
AUD_RID major revision			0x1
AUD_RID minor revision			0x0
AUD_RID revision id			0x0
AUD_RID stepping id			0x0
SDVOB enable				1
SDVOB HDMI encoding			1
SDVOB SDVO encoding			0
SDVOB null packets			0
SDVOB audio enabled			1
SDVOC enable				0
SDVOC HDMI encoding			1
SDVOC SDVO encoding			0
SDVOC null packets			0
SDVOC audio enabled			0
PORT_HOTPLUG_EN DisplayPort/HDMI port B	1
PORT_HOTPLUG_EN DisplayPort/HDMI port C	1
PORT_HOTPLUG_EN DisplayPort port D	1
PORT_HOTPLUG_EN SDVOB			0
PORT_HOTPLUG_EN SDVOC			0
PORT_HOTPLUG_EN audio			0
PORT_HOTPLUG_EN TV			0
PORT_HOTPLUG_EN CRT			1
VIDEO_DIP_CTL enable graphics DIP	0
VIDEO_DIP_CTL port select		[0x1] Digital Port B
VIDEO_DIP_CTL DIP buffer trans active	0
VIDEO_DIP_CTL AVI DIP enabled		0
VIDEO_DIP_CTL vendor DIP enabled	0
VIDEO_DIP_CTL SPD DIP enabled		0
VIDEO_DIP_CTL DIP buffer index		[0x0] AVI DIP
VIDEO_DIP_CTL DIP trans freq		[0x0] send once
VIDEO_DIP_CTL DIP buffer size		6
VIDEO_DIP_CTL DIP address		0
AUD_CONFIG pixel clock			[0x0] 25.2 / 1.001 MHz
AUD_CONFIG fabrication enabled		1
AUD_CONFIG professional use allowed	0
AUD_CONFIG fuse enabled			0
AUD_DEBUG function reset		0
AUD_SUBN_CNT starting node number	0x1
AUD_SUBN_CNT total number of nodes	0x1
AUD_SUBN_CNT2 starting node number	0x2
AUD_SUBN_CNT2 total number of nodes	0x2
AUD_FUNC_GRP unsol capable		0
AUD_FUNC_GRP node type			0x1
AUD_GRP_CAP beep 0			0
AUD_GRP_CAP input delay			0
AUD_GRP_CAP output delay		4
AUD_PWRST device power state		D0
AUD_PWRST device power state setting	D0
AUD_SUPPWR support D0			1
AUD_SUPPWR support D1			0
AUD_SUPPWR support D2			0
AUD_SUPPWR support D3			1
AUD_OUT_CWCAP widget type		0x0
AUD_OUT_CWCAP sample delay		0x0
AUD_OUT_CWCAP channel count		8
AUD_OUT_CWCAP L-R swap			0
AUD_OUT_CWCAP power control		0
AUD_OUT_CWCAP digital			1
AUD_OUT_CWCAP conn list			0
AUD_OUT_CWCAP unsol			0
AUD_OUT_CWCAP mute			0
AUD_OUT_CWCAP format override		1
AUD_OUT_CWCAP amp param override	0
AUD_OUT_CWCAP out amp present		0
AUD_OUT_CWCAP in amp present		0
AUD_OUT_DIG_CNVT SPDIF category		0x0
AUD_OUT_DIG_CNVT SPDIF level		0
AUD_OUT_DIG_CNVT professional		0
AUD_OUT_DIG_CNVT non PCM		0
AUD_OUT_DIG_CNVT copyright asserted	0
AUD_OUT_DIG_CNVT filter preemphasis	0
AUD_OUT_DIG_CNVT validity config	0
AUD_OUT_DIG_CNVT validity flag		0
AUD_OUT_DIG_CNVT digital enable		1
AUD_OUT_CH_STR stream id		0x8
AUD_OUT_CH_STR lowest channel		0x0
AUD_OUT_STR_DESC stream channels	0x1
AUD_PINW_CAP widget type		0x4
AUD_PINW_CAP sample delay		0x0
AUD_PINW_CAP channel count		0x7
AUD_PINW_CAP HDCP			1
AUD_PINW_CAP L-R swap			0
AUD_PINW_CAP power control		0
AUD_PINW_CAP digital			1
AUD_PINW_CAP conn list			1
AUD_PINW_CAP unsol			1
AUD_PINW_CAP mute			1
AUD_PINW_CAP format override		1
AUD_PINW_CAP amp param override		1
AUD_PINW_CAP out amp present		1
AUD_PINW_CAP in amp present		0
AUD_PIN_CAP EAPD			0
AUD_PIN_CAP HDMI			1
AUD_PIN_CAP output			1
AUD_PIN_CAP presence detect		1
AUD_PINW_CNTR mute status		0
AUD_PINW_CNTR out enable		1
AUD_PINW_CNTR amp mute status		0
AUD_PINW_CNTR amp mute status		0
AUD_PINW_CNTR stream type		[0x0] default samples
AUD_PINW_UNSOLRESP enable unsol resp	1
AUD_CNTL_ST DIP audio enabled		1
AUD_CNTL_ST DIP ACP enabled		0
AUD_CNTL_ST DIP ISRCx enabled		0
AUD_CNTL_ST DIP port select		[0x1] Digital Port B
AUD_CNTL_ST DIP buffer index		[0x0] Audio DIP
AUD_CNTL_ST DIP trans freq		[0x3] best effort
AUD_CNTL_ST DIP address			9
AUD_CNTL_ST CP ready			0
AUD_CNTL_ST ELD valid			0
AUD_CNTL_ST ELD ack			0
AUD_CNTL_ST ELD bufsize			16
AUD_CNTL_ST ELD address			4
AUD_HDMIW_STATUS CDCLK/DOTCLK underrun	1
AUD_HDMIW_STATUS CDCLK/DOTCLK overrun	0
AUD_HDMIW_STATUS BCLK/CDCLK underrun	0
AUD_HDMIW_STATUS BCLK/CDCLK overrun	0
AUD_CONV_CHCNT HDMI HBR enabled		0
AUD_CONV_CHCNT HDMI channel count	2
AUD_CONV_CHCNT HDMI channel mapping:
					[0x100] 0 => 0 
					[0x111] 1 => 1 
					[0x1f2] 2 => 15 
					[0x1f3] 3 => 15 
					[0x1f4] 4 => 15 
					[0x1f5] 5 => 15 
					[0x1f6] 6 => 15 
					[0x1f7] 7 => 15 
AUD_HDMIW_INFOFR HDMI audio Infoframe:
	84010a70 01000000 00000000 00000000 00000000 00000000 00000000 00000000 
VIDEO_DIP_CTL         0x20000600  Video DIP Control
SDVOB                 0x8000089c  Digital Display Port B Control Register
SDVOC                 0x0000089c  Digital Display Port C Control Register
PORT_HOTPLUG_EN       0x38000320  Hot Plug Detect Enable
AUD_CONFIG            0x00000004  Audio Configuration
AUD_DEBUG             0x00000000  Audio Debug
AUD_VID_DID           0x80862803  Audio Vendor ID / Device ID
AUD_RID               0x00100000  Audio Revision ID
AUD_SUBN_CNT          0x00010001  Audio Subordinate Node Count
AUD_FUNC_GRP          0x00000001  Audio Function Group Type
AUD_SUBN_CNT2         0x00020002  Audio Subordinate Node Count
AUD_GRP_CAP           0x00000004  Audio Function Group Capabilities
AUD_PWRST             0x00000000  Audio Power State
AUD_SUPPWR            0x00000009  Audio Supported Power States
AUD_SID               0x80860101  Audio Root Node Subsystem ID
AUD_OUT_CWCAP         0x00006211  Audio Output Converter Widget Capabilities
AUD_OUT_PCMSIZE       0x001e07f0  Audio PCM Size and Rates
AUD_OUT_STR           0x00000005  Audio Stream Formats
AUD_OUT_DIG_CNVT      0x00000001  Audio Digital Converter
AUD_OUT_CH_STR        0x00000080  Audio Channel ID and Stream ID
AUD_OUT_STR_DESC      0x00000011  Audio Stream Descriptor Format
AUD_PINW_CAP          0x004073bd  Audio Pin Complex Widget Capabilities
AUD_PIN_CAP           0x00000094  Audio Pin Capabilities
AUD_PINW_CONNLNG      0x00000001  Audio Connection List Length
AUD_PINW_CONNLST      0x00000002  Audio Connection List Entry
AUD_PINW_CNTR         0x00000040  Audio Pin Widget Control
AUD_PINW_UNSOLRESP    0x80000003  Audio Unsolicited Response Enable
AUD_CNTL_ST           0x00232088  Audio Control State Register
AUD_PINW_CONFIG       0x18560010  Audio Configuration Default
AUD_HDMIW_STATUS      0x80000000  Audio HDMI Status
AUD_HDMIW_HDMIEDID    0x00000000  Audio HDMI Data EDID Block
AUD_HDMIW_INFOFR      0x00000000  Audio HDMI Widget Data Island Packet
AUD_CONV_CHCNT        0x000001f7  Audio Converter Channel Count
AUD_CTS_ENABLE        0x00000000  Audio CTS Programming Enable

Details:

AUD_VID_DID vendor id			0x8086
AUD_VID_DID device id			0x2803
AUD_RID major revision			0x1
AUD_RID minor revision			0x0
AUD_RID revision id			0x0
AUD_RID stepping id			0x0
SDVOB enable				1
SDVOB HDMI encoding			1
SDVOB SDVO encoding			0
SDVOB null packets			0
SDVOB audio enabled			0
SDVOC enable				0
SDVOC HDMI encoding			1
SDVOC SDVO encoding			0
SDVOC null packets			0
SDVOC audio enabled			0
PORT_HOTPLUG_EN DisplayPort/HDMI port B	1
PORT_HOTPLUG_EN DisplayPort/HDMI port C	1
PORT_HOTPLUG_EN DisplayPort port D	1
PORT_HOTPLUG_EN SDVOB			0
PORT_HOTPLUG_EN SDVOC			0
PORT_HOTPLUG_EN audio			0
PORT_HOTPLUG_EN TV			0
PORT_HOTPLUG_EN CRT			1
VIDEO_DIP_CTL enable graphics DIP	0
VIDEO_DIP_CTL port select		[0x1] Digital Port B
VIDEO_DIP_CTL DIP buffer trans active	0
VIDEO_DIP_CTL AVI DIP enabled		0
VIDEO_DIP_CTL vendor DIP enabled	0
VIDEO_DIP_CTL SPD DIP enabled		0
VIDEO_DIP_CTL DIP buffer index		[0x0] AVI DIP
VIDEO_DIP_CTL DIP trans freq		[0x0] send once
VIDEO_DIP_CTL DIP buffer size		6
VIDEO_DIP_CTL DIP address		0
AUD_CONFIG pixel clock			[0x0] 25.2 / 1.001 MHz
AUD_CONFIG fabrication enabled		1
AUD_CONFIG professional use allowed	0
AUD_CONFIG fuse enabled			0
AUD_DEBUG function reset		0
AUD_SUBN_CNT starting node number	0x1
AUD_SUBN_CNT total number of nodes	0x1
AUD_SUBN_CNT2 starting node number	0x2
AUD_SUBN_CNT2 total number of nodes	0x2
AUD_FUNC_GRP unsol capable		0
AUD_FUNC_GRP node type			0x1
AUD_GRP_CAP beep 0			0
AUD_GRP_CAP input delay			0
AUD_GRP_CAP output delay		4
AUD_PWRST device power state		D0
AUD_PWRST device power state setting	D0
AUD_SUPPWR support D0			1
AUD_SUPPWR support D1			0
AUD_SUPPWR support D2			0
AUD_SUPPWR support D3			1
AUD_OUT_CWCAP widget type		0x0
AUD_OUT_CWCAP sample delay		0x0
AUD_OUT_CWCAP channel count		8
AUD_OUT_CWCAP L-R swap			0
AUD_OUT_CWCAP power control		0
AUD_OUT_CWCAP digital			1
AUD_OUT_CWCAP conn list			0
AUD_OUT_CWCAP unsol			0
AUD_OUT_CWCAP mute			0
AUD_OUT_CWCAP format override		1
AUD_OUT_CWCAP amp param override	0
AUD_OUT_CWCAP out amp present		0
AUD_OUT_CWCAP in amp present		0
AUD_OUT_DIG_CNVT SPDIF category		0x0
AUD_OUT_DIG_CNVT SPDIF level		0
AUD_OUT_DIG_CNVT professional		0
AUD_OUT_DIG_CNVT non PCM		0
AUD_OUT_DIG_CNVT copyright asserted	0
AUD_OUT_DIG_CNVT filter preemphasis	0
AUD_OUT_DIG_CNVT validity config	0
AUD_OUT_DIG_CNVT validity flag		0
AUD_OUT_DIG_CNVT digital enable		1
AUD_OUT_CH_STR stream id		0x8
AUD_OUT_CH_STR lowest channel		0x0
AUD_OUT_STR_DESC stream channels	0x1
AUD_PINW_CAP widget type		0x4
AUD_PINW_CAP sample delay		0x0
AUD_PINW_CAP channel count		0x7
AUD_PINW_CAP HDCP			1
AUD_PINW_CAP L-R swap			0
AUD_PINW_CAP power control		0
AUD_PINW_CAP digital			1
AUD_PINW_CAP conn list			1
AUD_PINW_CAP unsol			1
AUD_PINW_CAP mute			1
AUD_PINW_CAP format override		1
AUD_PINW_CAP amp param override		1
AUD_PINW_CAP out amp present		1
AUD_PINW_CAP in amp present		0
AUD_PIN_CAP EAPD			0
AUD_PIN_CAP HDMI			1
AUD_PIN_CAP output			1
AUD_PIN_CAP presence detect		1
AUD_PINW_CNTR mute status		0
AUD_PINW_CNTR out enable		1
AUD_PINW_CNTR amp mute status		0
AUD_PINW_CNTR amp mute status		0
AUD_PINW_CNTR stream type		[0x0] default samples
AUD_PINW_UNSOLRESP enable unsol resp	1
AUD_CNTL_ST DIP audio enabled		1
AUD_CNTL_ST DIP ACP enabled		0
AUD_CNTL_ST DIP ISRCx enabled		0
AUD_CNTL_ST DIP port select		[0x0] Reserved
AUD_CNTL_ST DIP buffer index		[0x0] Audio DIP
AUD_CNTL_ST DIP trans freq		[0x3] best effort
AUD_CNTL_ST DIP address			9
AUD_CNTL_ST CP ready			0
AUD_CNTL_ST ELD valid			0
AUD_CNTL_ST ELD ack			0
AUD_CNTL_ST ELD bufsize			16
AUD_CNTL_ST ELD address			5
AUD_HDMIW_STATUS CDCLK/DOTCLK underrun	1
AUD_HDMIW_STATUS CDCLK/DOTCLK overrun	0
AUD_HDMIW_STATUS BCLK/CDCLK underrun	0
AUD_HDMIW_STATUS BCLK/CDCLK overrun	0
AUD_CONV_CHCNT HDMI HBR enabled		0
AUD_CONV_CHCNT HDMI channel count	2
AUD_CONV_CHCNT HDMI channel mapping:
					[0x100] 0 => 0 
					[0x111] 1 => 1 
					[0x1f2] 2 => 15 
					[0x1f3] 3 => 15 
					[0x1f4] 4 => 15 
					[0x1f5] 5 => 15 
					[0x1f6] 6 => 15 
					[0x1f7] 7 => 15 
AUD_HDMIW_INFOFR HDMI audio Infoframe:
	84010a70 01000000 00000000 00000000 00000000 00000000 00000000 00000000 
------------------------------------------------------------------------------
ThinkGeek and WIRED's GeekDad team up for the Ultimate 
GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the 
lucky parental unit.  See the prize list and enter to win: 
http://p.sf.net/sfu/thinkgeek-promo
_______________________________________________
Alsa-user mailing list
Alsa-user@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/alsa-user

[ALSA Devel]     [Linux Audio Users]     [Fedora Users]     [Fedora Desktop]     [Free Dating Site]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]

Powered by Linux