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
0e19e7d2
Commit
0e19e7d2
authored
Nov 25, 2008
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'topic/fix/hda' into topic/hda
Conflicts: sound/pci/hda/patch_sigmatel.c
parents
82894b6f
f73d3585
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
55 additions
and
27 deletions
+55
-27
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+2
-2
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+53
-25
No files found.
sound/pci/hda/hda_codec.c
View file @
0e19e7d2
...
...
@@ -1586,12 +1586,12 @@ static void set_dig_out(struct hda_codec *codec, hda_nid_t nid,
{
hda_nid_t
*
d
;
snd_hda_codec_write
(
codec
,
nid
,
0
,
verb
,
val
);
snd_hda_codec_write
_cache
(
codec
,
nid
,
0
,
verb
,
val
);
d
=
codec
->
slave_dig_outs
;
if
(
!
d
)
return
;
for
(;
*
d
;
d
++
)
snd_hda_codec_write
(
codec
,
*
d
,
0
,
verb
,
val
);
snd_hda_codec_write
_cache
(
codec
,
*
d
,
0
,
verb
,
val
);
}
static
inline
void
set_dig_out_convert
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
...
...
sound/pci/hda/patch_sigmatel.c
View file @
0e19e7d2
...
...
@@ -3829,10 +3829,14 @@ static void stac92xx_power_down(struct hda_codec *codec)
AC_VERB_SET_POWER_STATE
,
AC_PWRST_D3
);
}
static
void
stac_toggle_power_map
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
int
enable
);
static
int
stac92xx_init
(
struct
hda_codec
*
codec
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
unsigned
int
gpio
;
int
i
;
snd_hda_sequence_write
(
codec
,
spec
->
init
);
...
...
@@ -3843,6 +3847,16 @@ static int stac92xx_init(struct hda_codec *codec)
snd_hda_codec_write_cache
(
codec
,
spec
->
adc_nids
[
i
],
0
,
AC_VERB_SET_POWER_STATE
,
AC_PWRST_D3
);
/* set up GPIO */
gpio
=
spec
->
gpio_data
;
/* turn on EAPD statically when spec->eapd_switch isn't set.
* otherwise, unsol event will turn it on/off dynamically
*/
if
(
!
spec
->
eapd_switch
)
gpio
|=
spec
->
eapd_mask
;
stac_gpio_set
(
codec
,
spec
->
gpio_mask
,
spec
->
gpio_dir
,
gpio
);
/* set up pins */
if
(
spec
->
hp_detect
)
{
/* Enable unsolicited responses on the HP widget */
...
...
@@ -3884,39 +3898,43 @@ static int stac92xx_init(struct hda_codec *codec)
for
(
i
=
0
;
i
<
spec
->
num_dmics
;
i
++
)
stac92xx_auto_set_pinctl
(
codec
,
spec
->
dmic_nids
[
i
],
AC_PINCTL_IN_EN
);
if
(
cfg
->
dig_out_pin
)
stac92xx_auto_set_pinctl
(
codec
,
cfg
->
dig_out_pin
,
AC_PINCTL_OUT_EN
);
if
(
cfg
->
dig_in_pin
)
stac92xx_auto_set_pinctl
(
codec
,
cfg
->
dig_in_pin
,
AC_PINCTL_IN_EN
);
for
(
i
=
0
;
i
<
spec
->
num_pwrs
;
i
++
)
{
int
event
=
is_nid_hp_pin
(
cfg
,
spec
->
pwr_nids
[
i
])
?
STAC_HP_EVENT
:
STAC_PWR_EVENT
;
int
pinctl
=
snd_hda_codec_read
(
codec
,
spec
->
pwr_nids
[
i
],
0
,
AC_VERB_GET_PIN_WIDGET_CONTROL
,
0
);
int
def_conf
=
snd_hda_codec_read
(
codec
,
spec
->
pwr_nids
[
i
],
0
,
AC_VERB_GET_CONFIG_DEFAULT
,
0
);
def_conf
=
get_defcfg_connect
(
def_conf
);
hda_nid_t
nid
=
spec
->
pwr_nids
[
i
];
int
pinctl
,
def_conf
;
int
event
=
STAC_PWR_EVENT
;
if
(
is_nid_hp_pin
(
cfg
,
nid
)
&&
spec
->
hp_detect
)
continue
;
/* already has an unsol event */
pinctl
=
snd_hda_codec_read
(
codec
,
nid
,
0
,
AC_VERB_GET_PIN_WIDGET_CONTROL
,
0
);
/* outputs are only ports capable of power management
* any attempts on powering down a input port cause the
* referenced VREF to act quirky.
*/
if
(
pinctl
&
AC_PINCTL_IN_EN
)
continue
;
def_conf
=
snd_hda_codec_read
(
codec
,
nid
,
0
,
AC_VERB_GET_CONFIG_DEFAULT
,
0
);
def_conf
=
get_defcfg_connect
(
def_conf
);
/* skip any ports that don't have jacks since presence
* detection is useless */
if
(
def_conf
&&
def_conf
!=
AC_JACK_PORT_FIXED
)
if
(
def_conf
!=
AC_JACK_PORT_COMPLEX
)
{
if
(
def_conf
!=
AC_JACK_PORT_NONE
)
stac_toggle_power_map
(
codec
,
nid
,
1
);
continue
;
}
enable_pin_detect
(
codec
,
spec
->
pwr_nids
[
i
],
event
|
i
);
codec
->
patch_ops
.
unsol_event
(
codec
,
(
event
|
i
)
<<
26
);
}
if
(
spec
->
dac_list
)
stac92xx_power_down
(
codec
);
if
(
cfg
->
dig_out_pin
)
stac92xx_auto_set_pinctl
(
codec
,
cfg
->
dig_out_pin
,
AC_PINCTL_OUT_EN
);
if
(
cfg
->
dig_in_pin
)
stac92xx_auto_set_pinctl
(
codec
,
cfg
->
dig_in_pin
,
AC_PINCTL_IN_EN
);
stac_gpio_set
(
codec
,
spec
->
gpio_mask
,
spec
->
gpio_dir
,
spec
->
gpio_data
);
return
0
;
}
...
...
@@ -4103,14 +4121,18 @@ static void stac92xx_hp_detect(struct hda_codec *codec, unsigned int res)
}
}
static
void
stac92xx_pin_sense
(
struct
hda_codec
*
codec
,
int
idx
)
static
void
stac_toggle_power_map
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
,
int
enable
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
hda_nid_t
nid
=
spec
->
pwr_nids
[
idx
];
int
presence
,
val
;
val
=
snd_hda_codec_read
(
codec
,
codec
->
afg
,
0
,
0x0fec
,
0x0
)
&
0x000000ff
;
presence
=
get_hp_pin_presence
(
codec
,
nid
);
unsigned
int
idx
,
val
;
for
(
idx
=
0
;
idx
<
spec
->
num_pwrs
;
idx
++
)
{
if
(
spec
->
pwr_nids
[
idx
]
==
nid
)
break
;
}
if
(
idx
>=
spec
->
num_pwrs
)
return
;
/* several codecs have two power down bits */
if
(
spec
->
pwr_mapping
)
...
...
@@ -4118,7 +4140,8 @@ static void stac92xx_pin_sense(struct hda_codec *codec, int idx)
else
idx
=
1
<<
idx
;
if
(
presence
)
val
=
snd_hda_codec_read
(
codec
,
codec
->
afg
,
0
,
0x0fec
,
0x0
)
&
0xff
;
if
(
enable
)
val
&=
~
idx
;
else
val
|=
idx
;
...
...
@@ -4127,6 +4150,11 @@ static void stac92xx_pin_sense(struct hda_codec *codec, int idx)
snd_hda_codec_write
(
codec
,
codec
->
afg
,
0
,
0x7ec
,
val
);
}
static
void
stac92xx_pin_sense
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
{
stac_toggle_power_map
(
codec
,
nid
,
get_hp_pin_presence
(
codec
,
nid
));
}
static
void
stac92xx_report_jack
(
struct
hda_codec
*
codec
,
hda_nid_t
nid
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
...
...
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