Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
df223136
Commit
df223136
authored
Feb 11, 2009
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fix/hda' into topic/hda
parents
501ca256
a57c0eb6
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
34 additions
and
27 deletions
+34
-27
sound/pci/hda/patch_intelhdmi.c
sound/pci/hda/patch_intelhdmi.c
+34
-27
No files found.
sound/pci/hda/patch_intelhdmi.c
View file @
df223136
...
...
@@ -49,11 +49,6 @@ static struct hda_verb pinout_enable_verb[] = {
{}
/* terminator */
};
static
struct
hda_verb
pinout_disable_verb
[]
=
{
{
PIN_NID
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
0x00
},
{}
};
static
struct
hda_verb
unsolicited_response_verb
[]
=
{
{
PIN_NID
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
AC_USRSP_EN
|
INTEL_HDMI_EVENT_TAG
},
...
...
@@ -248,10 +243,6 @@ static void hdmi_write_dip_byte(struct hda_codec *codec, hda_nid_t nid,
static
void
hdmi_enable_output
(
struct
hda_codec
*
codec
)
{
/* Enable Audio InfoFrame Transmission */
hdmi_set_dip_index
(
codec
,
PIN_NID
,
0x0
,
0x0
);
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
AC_VERB_SET_HDMI_DIP_XMIT
,
AC_DIPXMIT_BEST
);
/* Unmute */
if
(
get_wcaps
(
codec
,
PIN_NID
)
&
AC_WCAP_OUT_AMP
)
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
...
...
@@ -260,17 +251,24 @@ static void hdmi_enable_output(struct hda_codec *codec)
snd_hda_sequence_write
(
codec
,
pinout_enable_verb
);
}
static
void
hdmi_disable_output
(
struct
hda_codec
*
codec
)
/*
* Enable Audio InfoFrame Transmission
*/
static
void
hdmi_start_infoframe_trans
(
struct
hda_codec
*
codec
)
{
snd_hda_sequence_write
(
codec
,
pinout_disable_verb
);
if
(
get_wcaps
(
codec
,
PIN_NID
)
&
AC_WCAP_OUT_AMP
)
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_OUT_MUTE
);
hdmi_set_dip_index
(
codec
,
PIN_NID
,
0x0
,
0x0
);
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
AC_VERB_SET_HDMI_DIP_XMIT
,
AC_DIPXMIT_BEST
);
}
/*
* FIXME: noises may arise when playing music after reloading the
* kernel module, until the next X restart or monitor repower.
*/
/*
* Disable Audio InfoFrame Transmission
*/
static
void
hdmi_stop_infoframe_trans
(
struct
hda_codec
*
codec
)
{
hdmi_set_dip_index
(
codec
,
PIN_NID
,
0x0
,
0x0
);
snd_hda_codec_write
(
codec
,
PIN_NID
,
0
,
AC_VERB_SET_HDMI_DIP_XMIT
,
AC_DIPXMIT_DISABLE
);
}
static
int
hdmi_get_channel_count
(
struct
hda_codec
*
codec
)
...
...
@@ -368,11 +366,16 @@ static void hdmi_fill_audio_infoframe(struct hda_codec *codec,
struct
hdmi_audio_infoframe
*
ai
)
{
u8
*
params
=
(
u8
*
)
ai
;
u8
sum
=
0
;
int
i
;
hdmi_debug_dip_size
(
codec
);
hdmi_clear_dip_buffers
(
codec
);
/* be paranoid */
for
(
i
=
0
;
i
<
sizeof
(
ai
);
i
++
)
sum
+=
params
[
i
];
ai
->
checksum
=
-
sum
;
hdmi_set_dip_index
(
codec
,
PIN_NID
,
0x0
,
0x0
);
for
(
i
=
0
;
i
<
sizeof
(
ai
);
i
++
)
hdmi_write_dip_byte
(
codec
,
PIN_NID
,
params
[
i
]);
...
...
@@ -419,13 +422,17 @@ static int hdmi_setup_channel_allocation(struct hda_codec *codec,
/*
* CA defaults to 0 for basic stereo audio
*/
if
(
!
eld
->
eld_ver
)
return
0
;
if
(
!
eld
->
spk_alloc
)
return
0
;
if
(
channels
<=
2
)
return
0
;
/*
* HDMI sink's ELD info cannot always be retrieved for now, e.g.
* in console or for audio devices. Assume the highest speakers
* configuration, to _not_ prohibit multi-channel audio playback.
*/
if
(
!
eld
->
spk_alloc
)
eld
->
spk_alloc
=
0xffff
;
/*
* expand ELD's speaker allocation mask
*
...
...
@@ -485,6 +492,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec,
hdmi_setup_channel_mapping
(
codec
,
&
ai
);
hdmi_fill_audio_infoframe
(
codec
,
&
ai
);
hdmi_start_infoframe_trans
(
codec
);
}
...
...
@@ -562,7 +570,7 @@ static int intel_hdmi_playback_pcm_close(struct hda_pcm_stream *hinfo,
{
struct
intel_hdmi_spec
*
spec
=
codec
->
spec
;
hdmi_
disable_output
(
codec
);
hdmi_
stop_infoframe_trans
(
codec
);
return
snd_hda_multi_out_dig_close
(
codec
,
&
spec
->
multiout
);
}
...
...
@@ -582,8 +590,6 @@ static int intel_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
hdmi_setup_audio_infoframe
(
codec
,
substream
);
hdmi_enable_output
(
codec
);
return
0
;
}
...
...
@@ -628,8 +634,7 @@ static int intel_hdmi_build_controls(struct hda_codec *codec)
static
int
intel_hdmi_init
(
struct
hda_codec
*
codec
)
{
/* disable audio output as early as possible */
hdmi_disable_output
(
codec
);
hdmi_enable_output
(
codec
);
snd_hda_sequence_write
(
codec
,
unsolicited_response_verb
);
...
...
@@ -679,6 +684,7 @@ static struct hda_codec_preset snd_hda_preset_intelhdmi[] = {
{
.
id
=
0x80862801
,
.
name
=
"G45 DEVBLC"
,
.
patch
=
patch_intel_hdmi
},
{
.
id
=
0x80862802
,
.
name
=
"G45 DEVCTG"
,
.
patch
=
patch_intel_hdmi
},
{
.
id
=
0x80862803
,
.
name
=
"G45 DEVELK"
,
.
patch
=
patch_intel_hdmi
},
{
.
id
=
0x80862804
,
.
name
=
"G45 DEVIBX"
,
.
patch
=
patch_intel_hdmi
},
{
.
id
=
0x10951392
,
.
name
=
"SiI1392 HDMI"
,
.
patch
=
patch_intel_hdmi
},
{}
/* terminator */
};
...
...
@@ -687,6 +693,7 @@ MODULE_ALIAS("snd-hda-codec-id:808629fb");
MODULE_ALIAS
(
"snd-hda-codec-id:80862801"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862802"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862803"
);
MODULE_ALIAS
(
"snd-hda-codec-id:80862804"
);
MODULE_ALIAS
(
"snd-hda-codec-id:10951392"
);
MODULE_LICENSE
(
"GPL"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment