Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
ef71b1b8
Commit
ef71b1b8
authored
Nov 18, 2008
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branches 'topic/fix/hda' and 'topic/fix/misc' into for-linus
parents
9bf1a244
c5d08bb5
d6f35e3f
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
94 additions
and
19 deletions
+94
-19
sound/pci/hda/hda_beep.c
sound/pci/hda/hda_beep.c
+8
-0
sound/pci/hda/hda_beep.h
sound/pci/hda/hda_beep.h
+1
-0
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+81
-18
sound/pci/pcxhr/pcxhr.c
sound/pci/pcxhr/pcxhr.c
+4
-1
No files found.
sound/pci/hda/hda_beep.c
View file @
ef71b1b8
...
...
@@ -37,6 +37,9 @@ static void snd_hda_generate_beep(struct work_struct *work)
container_of
(
work
,
struct
hda_beep
,
beep_work
);
struct
hda_codec
*
codec
=
beep
->
codec
;
if
(
!
beep
->
enabled
)
return
;
/* generate tone */
snd_hda_codec_write_cache
(
codec
,
beep
->
nid
,
0
,
AC_VERB_SET_BEEP_CONTROL
,
beep
->
tone
);
...
...
@@ -85,6 +88,10 @@ int snd_hda_attach_beep_device(struct hda_codec *codec, int nid)
snprintf
(
beep
->
phys
,
sizeof
(
beep
->
phys
),
"card%d/codec#%d/beep0"
,
codec
->
bus
->
card
->
number
,
codec
->
addr
);
input_dev
=
input_allocate_device
();
if
(
!
input_dev
)
{
kfree
(
beep
);
return
-
ENOMEM
;
}
/* setup digital beep device */
input_dev
->
name
=
"HDA Digital PCBeep"
;
...
...
@@ -115,6 +122,7 @@ int snd_hda_attach_beep_device(struct hda_codec *codec, int nid)
beep
->
nid
=
nid
;
beep
->
dev
=
input_dev
;
beep
->
codec
=
codec
;
beep
->
enabled
=
1
;
codec
->
beep
=
beep
;
INIT_WORK
(
&
beep
->
beep_work
,
&
snd_hda_generate_beep
);
...
...
sound/pci/hda/hda_beep.h
View file @
ef71b1b8
...
...
@@ -31,6 +31,7 @@ struct hda_beep {
char
phys
[
32
];
int
tone
;
int
nid
;
int
enabled
;
struct
work_struct
beep_work
;
/* scheduled task for beep event */
};
...
...
sound/pci/hda/patch_sigmatel.c
View file @
ef71b1b8
...
...
@@ -36,9 +36,11 @@
#include "hda_beep.h"
#define NUM_CONTROL_ALLOC 32
#define STAC_VREF_EVENT 0x00
#define STAC_INSERT_EVENT 0x10
#define STAC_PWR_EVENT 0x20
#define STAC_HP_EVENT 0x30
#define STAC_VREF_EVENT 0x40
enum
{
STAC_REF
,
...
...
@@ -1686,6 +1688,10 @@ static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = {
/* SigmaTel reference board */
SND_PCI_QUIRK
(
PCI_VENDOR_ID_INTEL
,
0x2668
,
"DFI LanParty"
,
STAC_92HD71BXX_REF
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_HP
,
0x30f2
,
"HP dv5"
,
STAC_HP_M4
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_HP
,
0x30f4
,
"HP dv7"
,
STAC_HP_M4
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_HP
,
0x361a
,
"unknown HP"
,
STAC_HP_M4
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_DELL
,
0x0233
,
...
...
@@ -2587,8 +2593,10 @@ static struct snd_kcontrol_new stac92xx_control_templates[] = {
};
/* add dynamic controls */
static
int
stac92xx_add_control_idx
(
struct
sigmatel_spec
*
spec
,
int
type
,
int
idx
,
const
char
*
name
,
unsigned
long
val
)
static
int
stac92xx_add_control_temp
(
struct
sigmatel_spec
*
spec
,
struct
snd_kcontrol_new
*
ktemp
,
int
idx
,
const
char
*
name
,
unsigned
long
val
)
{
struct
snd_kcontrol_new
*
knew
;
...
...
@@ -2607,20 +2615,29 @@ static int stac92xx_add_control_idx(struct sigmatel_spec *spec, int type,
}
knew
=
&
spec
->
kctl_alloc
[
spec
->
num_kctl_used
];
*
knew
=
stac92xx_control_templates
[
type
]
;
*
knew
=
*
ktemp
;
knew
->
index
=
idx
;
knew
->
name
=
kstrdup
(
name
,
GFP_KERNEL
);
if
(
!
knew
->
name
)
if
(
!
knew
->
name
)
return
-
ENOMEM
;
knew
->
private_value
=
val
;
spec
->
num_kctl_used
++
;
return
0
;
}
static
inline
int
stac92xx_add_control_idx
(
struct
sigmatel_spec
*
spec
,
int
type
,
int
idx
,
const
char
*
name
,
unsigned
long
val
)
{
return
stac92xx_add_control_temp
(
spec
,
&
stac92xx_control_templates
[
type
],
idx
,
name
,
val
);
}
/* add dynamic controls */
static
int
stac92xx_add_control
(
struct
sigmatel_spec
*
spec
,
int
type
,
const
char
*
name
,
unsigned
long
val
)
static
in
line
in
t
stac92xx_add_control
(
struct
sigmatel_spec
*
spec
,
int
type
,
const
char
*
name
,
unsigned
long
val
)
{
return
stac92xx_add_control_idx
(
spec
,
type
,
0
,
name
,
val
);
}
...
...
@@ -3062,6 +3079,43 @@ static int stac92xx_auto_create_beep_ctls(struct hda_codec *codec,
return
0
;
}
#ifdef CONFIG_SND_HDA_INPUT_BEEP
#define stac92xx_dig_beep_switch_info snd_ctl_boolean_mono_info
static
int
stac92xx_dig_beep_switch_get
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
struct
hda_codec
*
codec
=
snd_kcontrol_chip
(
kcontrol
);
ucontrol
->
value
.
integer
.
value
[
0
]
=
codec
->
beep
->
enabled
;
return
0
;
}
static
int
stac92xx_dig_beep_switch_put
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
struct
hda_codec
*
codec
=
snd_kcontrol_chip
(
kcontrol
);
int
enabled
=
!!
ucontrol
->
value
.
integer
.
value
[
0
];
if
(
codec
->
beep
->
enabled
!=
enabled
)
{
codec
->
beep
->
enabled
=
enabled
;
return
1
;
}
return
0
;
}
static
struct
snd_kcontrol_new
stac92xx_dig_beep_ctrl
=
{
.
iface
=
SNDRV_CTL_ELEM_IFACE_MIXER
,
.
info
=
stac92xx_dig_beep_switch_info
,
.
get
=
stac92xx_dig_beep_switch_get
,
.
put
=
stac92xx_dig_beep_switch_put
,
};
static
int
stac92xx_beep_switch_ctl
(
struct
hda_codec
*
codec
)
{
return
stac92xx_add_control_temp
(
codec
->
spec
,
&
stac92xx_dig_beep_ctrl
,
0
,
"PC Beep Playback Switch"
,
0
);
}
#endif
static
int
stac92xx_auto_create_mux_input_ctls
(
struct
hda_codec
*
codec
)
{
struct
sigmatel_spec
*
spec
=
codec
->
spec
;
...
...
@@ -3368,6 +3422,7 @@ static int stac92xx_parse_auto_config(struct hda_codec *codec, hda_nid_t dig_out
#ifdef CONFIG_SND_HDA_INPUT_BEEP
if
(
spec
->
digbeep_nid
>
0
)
{
hda_nid_t
nid
=
spec
->
digbeep_nid
;
unsigned
int
caps
;
err
=
stac92xx_auto_create_beep_ctls
(
codec
,
nid
);
if
(
err
<
0
)
...
...
@@ -3375,6 +3430,14 @@ static int stac92xx_parse_auto_config(struct hda_codec *codec, hda_nid_t dig_out
err
=
snd_hda_attach_beep_device
(
codec
,
nid
);
if
(
err
<
0
)
return
err
;
/* if no beep switch is available, make its own one */
caps
=
query_amp_caps
(
codec
,
nid
,
HDA_OUTPUT
);
if
(
codec
->
beep
&&
!
((
caps
&
AC_AMPCAP_MUTE
)
>>
AC_AMPCAP_MUTE_SHIFT
))
{
err
=
stac92xx_beep_switch_ctl
(
codec
);
if
(
err
<
0
)
return
err
;
}
}
#endif
...
...
@@ -4419,6 +4482,13 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
stac92xx_set_config_regs
(
codec
);
}
if
(
spec
->
board_config
>
STAC_92HD71BXX_REF
)
{
/* GPIO0 = EAPD */
spec
->
gpio_mask
=
0x01
;
spec
->
gpio_dir
=
0x01
;
spec
->
gpio_data
=
0x01
;
}
switch
(
codec
->
vendor_id
)
{
case
0x111d76b6
:
/* 4 Port without Analog Mixer */
case
0x111d76b7
:
...
...
@@ -4429,10 +4499,10 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
codec
->
slave_dig_outs
=
stac92hd71bxx_slave_dig_outs
;
break
;
case
0x111d7608
:
/* 5 Port with Analog Mixer */
switch
(
codec
->
subsystem_id
)
{
case
0x103c361a
:
switch
(
spec
->
board_config
)
{
case
STAC_HP_M4
:
/* Enable VREF power saving on GPIO1 detect */
snd_hda_codec_write
(
codec
,
codec
->
afg
,
0
,
snd_hda_codec_write
_cache
(
codec
,
codec
->
afg
,
0
,
AC_VERB_SET_GPIO_UNSOLICITED_RSP_MASK
,
0x02
);
snd_hda_codec_write_cache
(
codec
,
codec
->
afg
,
0
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
...
...
@@ -4478,13 +4548,6 @@ static int patch_stac92hd71bxx(struct hda_codec *codec)
spec
->
aloopback_mask
=
0x50
;
spec
->
aloopback_shift
=
0
;
if
(
spec
->
board_config
>
STAC_92HD71BXX_REF
)
{
/* GPIO0 = EAPD */
spec
->
gpio_mask
=
0x01
;
spec
->
gpio_dir
=
0x01
;
spec
->
gpio_data
=
0x01
;
}
spec
->
powerdown_adcs
=
1
;
spec
->
digbeep_nid
=
0x26
;
spec
->
mux_nids
=
stac92hd71bxx_mux_nids
;
...
...
@@ -4832,7 +4895,7 @@ static int patch_stac9205(struct hda_codec *codec)
stac92xx_set_config_reg
(
codec
,
0x20
,
0x1c410030
);
/* Enable unsol response for GPIO4/Dock HP connection */
snd_hda_codec_write
(
codec
,
codec
->
afg
,
0
,
snd_hda_codec_write
_cache
(
codec
,
codec
->
afg
,
0
,
AC_VERB_SET_GPIO_UNSOLICITED_RSP_MASK
,
0x10
);
snd_hda_codec_write_cache
(
codec
,
codec
->
afg
,
0
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
...
...
sound/pci/pcxhr/pcxhr.c
View file @
ef71b1b8
...
...
@@ -1229,8 +1229,11 @@ static int __devinit pcxhr_probe(struct pci_dev *pci, const struct pci_device_id
return
-
ENOMEM
;
}
if
(
snd_BUG_ON
(
pci_id
->
driver_data
>=
PCI_ID_LAST
))
if
(
snd_BUG_ON
(
pci_id
->
driver_data
>=
PCI_ID_LAST
))
{
kfree
(
mgr
);
pci_disable_device
(
pci
);
return
-
ENODEV
;
}
card_name
=
pcxhr_board_params
[
pci_id
->
driver_data
].
board_name
;
mgr
->
playback_chips
=
pcxhr_board_params
[
pci_id
->
driver_data
].
playback_chips
;
mgr
->
capture_chips
=
pcxhr_board_params
[
pci_id
->
driver_data
].
capture_chips
;
...
...
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