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
14ed74fb
Commit
14ed74fb
authored
Jan 13, 2009
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'topic/hda-gateway' into topic/hda
parents
c107b41c
58eec423
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
161 additions
and
30 deletions
+161
-30
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+61
-0
sound/pci/hda/hda_local.h
sound/pci/hda/hda_local.h
+3
-0
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+97
-30
No files found.
sound/pci/hda/hda_codec.c
View file @
14ed74fb
...
@@ -2723,6 +2723,67 @@ int snd_hda_check_board_config(struct hda_codec *codec,
...
@@ -2723,6 +2723,67 @@ int snd_hda_check_board_config(struct hda_codec *codec,
}
}
EXPORT_SYMBOL_HDA
(
snd_hda_check_board_config
);
EXPORT_SYMBOL_HDA
(
snd_hda_check_board_config
);
/**
* snd_hda_check_board_codec_sid_config - compare the current codec
subsystem ID with the
config table
This is important for Gateway notebooks with SB450 HDA Audio
where the vendor ID of the PCI device is:
ATI Technologies Inc SB450 HDA Audio [1002:437b]
and the vendor/subvendor are found only at the codec.
* @codec: the HDA codec
* @num_configs: number of config enums
* @models: array of model name strings
* @tbl: configuration table, terminated by null entries
*
* Compares the modelname or PCI subsystem id of the current codec with the
* given configuration table. If a matching entry is found, returns its
* config value (supposed to be 0 or positive).
*
* If no entries are matching, the function returns a negative value.
*/
int
snd_hda_check_board_codec_sid_config
(
struct
hda_codec
*
codec
,
int
num_configs
,
const
char
**
models
,
const
struct
snd_pci_quirk
*
tbl
)
{
const
struct
snd_pci_quirk
*
q
;
/* Search for codec ID */
for
(
q
=
tbl
;
q
->
subvendor
;
q
++
)
{
unsigned
long
vendorid
=
(
q
->
subdevice
)
|
(
q
->
subvendor
<<
16
);
if
(
vendorid
==
codec
->
subsystem_id
)
break
;
}
if
(
!
q
->
subvendor
)
return
-
1
;
tbl
=
q
;
if
(
tbl
->
value
>=
0
&&
tbl
->
value
<
num_configs
)
{
#ifdef CONFIG_SND_DEBUG_DETECT
char
tmp
[
10
];
const
char
*
model
=
NULL
;
if
(
models
)
model
=
models
[
tbl
->
value
];
if
(
!
model
)
{
sprintf
(
tmp
,
"#%d"
,
tbl
->
value
);
model
=
tmp
;
}
snd_printdd
(
KERN_INFO
"hda_codec: model '%s' is selected "
"for config %x:%x (%s)
\n
"
,
model
,
tbl
->
subvendor
,
tbl
->
subdevice
,
(
tbl
->
name
?
tbl
->
name
:
"Unknown device"
));
#endif
return
tbl
->
value
;
}
return
-
1
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_check_board_codec_sid_config
);
/**
/**
* snd_hda_add_new_ctls - create controls from the array
* snd_hda_add_new_ctls - create controls from the array
* @codec: the HDA codec
* @codec: the HDA codec
...
...
sound/pci/hda/hda_local.h
View file @
14ed74fb
...
@@ -296,6 +296,9 @@ void snd_print_pcm_bits(int pcm, char *buf, int buflen);
...
@@ -296,6 +296,9 @@ void snd_print_pcm_bits(int pcm, char *buf, int buflen);
int
snd_hda_check_board_config
(
struct
hda_codec
*
codec
,
int
num_configs
,
int
snd_hda_check_board_config
(
struct
hda_codec
*
codec
,
int
num_configs
,
const
char
**
modelnames
,
const
char
**
modelnames
,
const
struct
snd_pci_quirk
*
pci_list
);
const
struct
snd_pci_quirk
*
pci_list
);
int
snd_hda_check_board_codec_sid_config
(
struct
hda_codec
*
codec
,
int
num_configs
,
const
char
**
models
,
const
struct
snd_pci_quirk
*
tbl
);
int
snd_hda_add_new_ctls
(
struct
hda_codec
*
codec
,
int
snd_hda_add_new_ctls
(
struct
hda_codec
*
codec
,
struct
snd_kcontrol_new
*
knew
);
struct
snd_kcontrol_new
*
knew
);
...
...
sound/pci/hda/patch_sigmatel.c
View file @
14ed74fb
...
@@ -55,7 +55,8 @@ enum {
...
@@ -55,7 +55,8 @@ enum {
STAC_9200_DELL_M25
,
STAC_9200_DELL_M25
,
STAC_9200_DELL_M26
,
STAC_9200_DELL_M26
,
STAC_9200_DELL_M27
,
STAC_9200_DELL_M27
,
STAC_9200_GATEWAY
,
STAC_9200_M4
,
STAC_9200_M4_2
,
STAC_9200_PANASONIC
,
STAC_9200_PANASONIC
,
STAC_9200_MODELS
STAC_9200_MODELS
};
};
...
@@ -94,9 +95,13 @@ enum {
...
@@ -94,9 +95,13 @@ enum {
enum
{
enum
{
STAC_925x_REF
,
STAC_925x_REF
,
STAC_M1
,
STAC_M1_2
,
STAC_M2
,
STAC_M2_2
,
STAC_M2_2
,
STAC_MA6
,
STAC_M3
,
STAC_PA6
,
STAC_M5
,
STAC_M6
,
STAC_925x_MODELS
STAC_925x_MODELS
};
};
...
@@ -1334,7 +1339,16 @@ static unsigned int ref9200_pin_configs[8] = {
...
@@ -1334,7 +1339,16 @@ static unsigned int ref9200_pin_configs[8] = {
0x02a19020
,
0x01a19021
,
0x90100140
,
0x01813122
,
0x02a19020
,
0x01a19021
,
0x90100140
,
0x01813122
,
};
};
/*
static
unsigned
int
gateway9200_m4_pin_configs
[
8
]
=
{
0x400000fe
,
0x404500f4
,
0x400100f0
,
0x90110010
,
0x400100f1
,
0x02a1902e
,
0x500000f2
,
0x500000f3
,
};
static
unsigned
int
gateway9200_m4_2_pin_configs
[
8
]
=
{
0x400000fe
,
0x404500f4
,
0x400100f0
,
0x90110010
,
0x400100f1
,
0x02a1902e
,
0x500000f2
,
0x500000f3
,
};
/*
STAC 9200 pin configs for
STAC 9200 pin configs for
102801A8
102801A8
102801DE
102801DE
...
@@ -1464,6 +1478,8 @@ static unsigned int *stac9200_brd_tbl[STAC_9200_MODELS] = {
...
@@ -1464,6 +1478,8 @@ static unsigned int *stac9200_brd_tbl[STAC_9200_MODELS] = {
[
STAC_9200_DELL_M25
]
=
dell9200_m25_pin_configs
,
[
STAC_9200_DELL_M25
]
=
dell9200_m25_pin_configs
,
[
STAC_9200_DELL_M26
]
=
dell9200_m26_pin_configs
,
[
STAC_9200_DELL_M26
]
=
dell9200_m26_pin_configs
,
[
STAC_9200_DELL_M27
]
=
dell9200_m27_pin_configs
,
[
STAC_9200_DELL_M27
]
=
dell9200_m27_pin_configs
,
[
STAC_9200_M4
]
=
gateway9200_m4_pin_configs
,
[
STAC_9200_M4_2
]
=
gateway9200_m4_2_pin_configs
,
[
STAC_9200_PANASONIC
]
=
ref9200_pin_configs
,
[
STAC_9200_PANASONIC
]
=
ref9200_pin_configs
,
};
};
...
@@ -1480,7 +1496,8 @@ static const char *stac9200_models[STAC_9200_MODELS] = {
...
@@ -1480,7 +1496,8 @@ static const char *stac9200_models[STAC_9200_MODELS] = {
[
STAC_9200_DELL_M25
]
=
"dell-m25"
,
[
STAC_9200_DELL_M25
]
=
"dell-m25"
,
[
STAC_9200_DELL_M26
]
=
"dell-m26"
,
[
STAC_9200_DELL_M26
]
=
"dell-m26"
,
[
STAC_9200_DELL_M27
]
=
"dell-m27"
,
[
STAC_9200_DELL_M27
]
=
"dell-m27"
,
[
STAC_9200_GATEWAY
]
=
"gateway"
,
[
STAC_9200_M4
]
=
"gateway-m4"
,
[
STAC_9200_M4_2
]
=
"gateway-m4-2"
,
[
STAC_9200_PANASONIC
]
=
"panasonic"
,
[
STAC_9200_PANASONIC
]
=
"panasonic"
,
};
};
...
@@ -1550,11 +1567,9 @@ static struct snd_pci_quirk stac9200_cfg_tbl[] = {
...
@@ -1550,11 +1567,9 @@ static struct snd_pci_quirk stac9200_cfg_tbl[] = {
/* Panasonic */
/* Panasonic */
SND_PCI_QUIRK
(
0x10f7
,
0x8338
,
"Panasonic CF-74"
,
STAC_9200_PANASONIC
),
SND_PCI_QUIRK
(
0x10f7
,
0x8338
,
"Panasonic CF-74"
,
STAC_9200_PANASONIC
),
/* Gateway machines needs EAPD to be set on resume */
/* Gateway machines needs EAPD to be set on resume */
SND_PCI_QUIRK
(
0x107b
,
0x0205
,
"Gateway S-7110M"
,
STAC_9200_GATEWAY
),
SND_PCI_QUIRK
(
0x107b
,
0x0205
,
"Gateway S-7110M"
,
STAC_9200_M4
),
SND_PCI_QUIRK
(
0x107b
,
0x0317
,
"Gateway MT3423, MX341*"
,
SND_PCI_QUIRK
(
0x107b
,
0x0317
,
"Gateway MT3423, MX341*"
,
STAC_9200_M4_2
),
STAC_9200_GATEWAY
),
SND_PCI_QUIRK
(
0x107b
,
0x0318
,
"Gateway ML3019, MT3707"
,
STAC_9200_M4_2
),
SND_PCI_QUIRK
(
0x107b
,
0x0318
,
"Gateway ML3019, MT3707"
,
STAC_9200_GATEWAY
),
/* OQO Mobile */
/* OQO Mobile */
SND_PCI_QUIRK
(
0x1106
,
0x3288
,
"OQO Model 2"
,
STAC_9200_OQO
),
SND_PCI_QUIRK
(
0x1106
,
0x3288
,
"OQO Model 2"
,
STAC_9200_OQO
),
{}
/* terminator */
{}
/* terminator */
...
@@ -1565,44 +1580,85 @@ static unsigned int ref925x_pin_configs[8] = {
...
@@ -1565,44 +1580,85 @@ static unsigned int ref925x_pin_configs[8] = {
0x90a70320
,
0x02214210
,
0x01019020
,
0x9033032e
,
0x90a70320
,
0x02214210
,
0x01019020
,
0x9033032e
,
};
};
static
unsigned
int
stac925x
_MA6
_pin_configs
[
8
]
=
{
static
unsigned
int
stac925x
M1
_pin_configs
[
8
]
=
{
0x40c003f
0
,
0x424503f2
,
0x01813022
,
0x02a19021
,
0x40c003f
4
,
0x424503f2
,
0x400000f3
,
0x02a19020
,
0x
90a70320
,
0x90100211
,
0x400003f1
,
0x9033032e
,
0x
40a000f0
,
0x90100210
,
0x400003f1
,
0x9033032e
,
};
};
static
unsigned
int
stac925x_PA6_pin_configs
[
8
]
=
{
static
unsigned
int
stac925xM1_2_pin_configs
[
8
]
=
{
0x40c003f0
,
0x424503f2
,
0x01813022
,
0x02a19021
,
0x40c003f4
,
0x424503f2
,
0x400000f3
,
0x02a19020
,
0x50a103f0
,
0x90100211
,
0x400003f1
,
0x9033032e
,
0x40a000f0
,
0x90100210
,
0x400003f1
,
0x9033032e
,
};
static
unsigned
int
stac925xM2_pin_configs
[
8
]
=
{
0x40c003f4
,
0x424503f2
,
0x400000f3
,
0x02a19020
,
0x40a000f0
,
0x90100210
,
0x400003f1
,
0x9033032e
,
};
};
static
unsigned
int
stac925xM2_2_pin_configs
[
8
]
=
{
static
unsigned
int
stac925xM2_2_pin_configs
[
8
]
=
{
0x40c003f3
,
0x424503f2
,
0x04180011
,
0x02a19020
,
0x40c003f4
,
0x424503f2
,
0x400000f3
,
0x02a19020
,
0x50a103f0
,
0x90100212
,
0x400003f1
,
0x9033032e
,
0x40a000f0
,
0x90100210
,
0x400003f1
,
0x9033032e
,
};
static
unsigned
int
stac925xM3_pin_configs
[
8
]
=
{
0x40c003f4
,
0x424503f2
,
0x400000f3
,
0x02a19020
,
0x40a000f0
,
0x90100210
,
0x400003f1
,
0x503303f3
,
};
static
unsigned
int
stac925xM5_pin_configs
[
8
]
=
{
0x40c003f4
,
0x424503f2
,
0x400000f3
,
0x02a19020
,
0x40a000f0
,
0x90100210
,
0x400003f1
,
0x9033032e
,
};
static
unsigned
int
stac925xM6_pin_configs
[
8
]
=
{
0x40c003f4
,
0x424503f2
,
0x400000f3
,
0x02a19020
,
0x40a000f0
,
0x90100210
,
0x400003f1
,
0x90330320
,
};
};
static
unsigned
int
*
stac925x_brd_tbl
[
STAC_925x_MODELS
]
=
{
static
unsigned
int
*
stac925x_brd_tbl
[
STAC_925x_MODELS
]
=
{
[
STAC_REF
]
=
ref925x_pin_configs
,
[
STAC_REF
]
=
ref925x_pin_configs
,
[
STAC_M1
]
=
stac925xM1_pin_configs
,
[
STAC_M1_2
]
=
stac925xM1_2_pin_configs
,
[
STAC_M2
]
=
stac925xM2_pin_configs
,
[
STAC_M2_2
]
=
stac925xM2_2_pin_configs
,
[
STAC_M2_2
]
=
stac925xM2_2_pin_configs
,
[
STAC_MA6
]
=
stac925x_MA6_pin_configs
,
[
STAC_M3
]
=
stac925xM3_pin_configs
,
[
STAC_PA6
]
=
stac925x_PA6_pin_configs
,
[
STAC_M5
]
=
stac925xM5_pin_configs
,
[
STAC_M6
]
=
stac925xM6_pin_configs
,
};
};
static
const
char
*
stac925x_models
[
STAC_925x_MODELS
]
=
{
static
const
char
*
stac925x_models
[
STAC_925x_MODELS
]
=
{
[
STAC_REF
]
=
"ref"
,
[
STAC_REF
]
=
"ref"
,
[
STAC_M1
]
=
"m1"
,
[
STAC_M1_2
]
=
"m1-2"
,
[
STAC_M2
]
=
"m2"
,
[
STAC_M2_2
]
=
"m2-2"
,
[
STAC_M2_2
]
=
"m2-2"
,
[
STAC_MA6
]
=
"m6"
,
[
STAC_M3
]
=
"m3"
,
[
STAC_PA6
]
=
"pa6"
,
[
STAC_M5
]
=
"m5"
,
[
STAC_M6
]
=
"m6"
,
};
static
struct
snd_pci_quirk
stac925x_codec_id_cfg_tbl
[]
=
{
SND_PCI_QUIRK
(
0x107b
,
0x0316
,
"Gateway M255"
,
STAC_M2
),
SND_PCI_QUIRK
(
0x107b
,
0x0366
,
"Gateway MP6954"
,
STAC_M5
),
SND_PCI_QUIRK
(
0x107b
,
0x0461
,
"Gateway NX560XL"
,
STAC_M1
),
SND_PCI_QUIRK
(
0x107b
,
0x0681
,
"Gateway NX860"
,
STAC_M2
),
SND_PCI_QUIRK
(
0x107b
,
0x0367
,
"Gateway MX6453"
,
STAC_M1_2
),
/* Not sure about the brand name for those */
SND_PCI_QUIRK
(
0x107b
,
0x0281
,
"Gateway mobile"
,
STAC_M1
),
SND_PCI_QUIRK
(
0x107b
,
0x0507
,
"Gateway mobile"
,
STAC_M3
),
SND_PCI_QUIRK
(
0x107b
,
0x0281
,
"Gateway mobile"
,
STAC_M6
),
SND_PCI_QUIRK
(
0x107b
,
0x0685
,
"Gateway mobile"
,
STAC_M2_2
),
{}
/* terminator */
};
};
static
struct
snd_pci_quirk
stac925x_cfg_tbl
[]
=
{
static
struct
snd_pci_quirk
stac925x_cfg_tbl
[]
=
{
/* SigmaTel reference board */
/* SigmaTel reference board */
SND_PCI_QUIRK
(
PCI_VENDOR_ID_INTEL
,
0x2668
,
"DFI LanParty"
,
STAC_REF
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_INTEL
,
0x2668
,
"DFI LanParty"
,
STAC_REF
),
SND_PCI_QUIRK
(
0x8384
,
0x7632
,
"Stac9202 Reference Board"
,
STAC_REF
),
SND_PCI_QUIRK
(
0x8384
,
0x7632
,
"Stac9202 Reference Board"
,
STAC_REF
),
SND_PCI_QUIRK
(
0x107b
,
0x0316
,
"Gateway M255"
,
STAC_REF
),
SND_PCI_QUIRK
(
0x107b
,
0x0366
,
"Gateway MP6954"
,
STAC_REF
),
/* Default table for unknown ID */
SND_PCI_QUIRK
(
0x107b
,
0x0461
,
"Gateway NX560XL"
,
STAC_MA6
),
SND_PCI_QUIRK
(
0x1002
,
0x437b
,
"Gateway mobile"
,
STAC_M2_2
),
SND_PCI_QUIRK
(
0x107b
,
0x0681
,
"Gateway NX860"
,
STAC_PA6
),
SND_PCI_QUIRK
(
0x1002
,
0x437b
,
"Gateway MX6453"
,
STAC_M2_2
),
{}
/* terminator */
{}
/* terminator */
};
};
...
@@ -4392,7 +4448,8 @@ static int patch_stac9200(struct hda_codec *codec)
...
@@ -4392,7 +4448,8 @@ static int patch_stac9200(struct hda_codec *codec)
spec
->
num_adcs
=
1
;
spec
->
num_adcs
=
1
;
spec
->
num_pwrs
=
0
;
spec
->
num_pwrs
=
0
;
if
(
spec
->
board_config
==
STAC_9200_GATEWAY
||
if
(
spec
->
board_config
==
STAC_9200_M4
||
spec
->
board_config
==
STAC_9200_M4_2
||
spec
->
board_config
==
STAC_9200_OQO
)
spec
->
board_config
==
STAC_9200_OQO
)
spec
->
init
=
stac9200_eapd_init
;
spec
->
init
=
stac9200_eapd_init
;
else
else
...
@@ -4427,12 +4484,22 @@ static int patch_stac925x(struct hda_codec *codec)
...
@@ -4427,12 +4484,22 @@ static int patch_stac925x(struct hda_codec *codec)
codec
->
spec
=
spec
;
codec
->
spec
=
spec
;
spec
->
num_pins
=
ARRAY_SIZE
(
stac925x_pin_nids
);
spec
->
num_pins
=
ARRAY_SIZE
(
stac925x_pin_nids
);
spec
->
pin_nids
=
stac925x_pin_nids
;
spec
->
pin_nids
=
stac925x_pin_nids
;
spec
->
board_config
=
snd_hda_check_board_config
(
codec
,
STAC_925x_MODELS
,
/* Check first for codec ID */
spec
->
board_config
=
snd_hda_check_board_codec_sid_config
(
codec
,
STAC_925x_MODELS
,
stac925x_models
,
stac925x_codec_id_cfg_tbl
);
/* Now checks for PCI ID, if codec ID is not found */
if
(
spec
->
board_config
<
0
)
spec
->
board_config
=
snd_hda_check_board_config
(
codec
,
STAC_925x_MODELS
,
stac925x_models
,
stac925x_models
,
stac925x_cfg_tbl
);
stac925x_cfg_tbl
);
again:
again:
if
(
spec
->
board_config
<
0
)
{
if
(
spec
->
board_config
<
0
)
{
snd_printdd
(
KERN_INFO
"hda_codec: Unknown model for STAC925x,"
snd_printdd
(
KERN_INFO
"hda_codec: Unknown model for STAC925x,"
"using BIOS defaults
\n
"
);
"using BIOS defaults
\n
"
);
err
=
stac92xx_save_bios_config_regs
(
codec
);
err
=
stac92xx_save_bios_config_regs
(
codec
);
}
else
}
else
...
...
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