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
Kirill Smelkov
linux
Commits
02a2ad40
Commit
02a2ad40
authored
May 10, 2010
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fix/misc' into topic/misc
parents
1bde78bc
bfe70783
Changes
11
Show whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
234 additions
and
75 deletions
+234
-75
sound/core/timer.c
sound/core/timer.c
+3
-2
sound/isa/sb/es968.c
sound/isa/sb/es968.c
+1
-1
sound/pci/hda/hda_intel.c
sound/pci/hda/hda_intel.c
+2
-0
sound/pci/hda/patch_analog.c
sound/pci/hda/patch_analog.c
+0
-9
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+155
-17
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+4
-0
sound/pci/hda/patch_via.c
sound/pci/hda/patch_via.c
+24
-17
sound/soc/codecs/wm2000.c
sound/soc/codecs/wm2000.c
+0
-1
sound/soc/imx/imx-pcm-dma-mx2.c
sound/soc/imx/imx-pcm-dma-mx2.c
+14
-1
sound/soc/imx/imx-pcm-fiq.c
sound/soc/imx/imx-pcm-fiq.c
+29
-26
sound/soc/imx/imx-ssi.c
sound/soc/imx/imx-ssi.c
+2
-1
No files found.
sound/core/timer.c
View file @
02a2ad40
...
...
@@ -1160,6 +1160,7 @@ static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,
{
struct
snd_timer_user
*
tu
=
timeri
->
callback_data
;
struct
snd_timer_tread
r1
;
unsigned
long
flags
;
if
(
event
>=
SNDRV_TIMER_EVENT_START
&&
event
<=
SNDRV_TIMER_EVENT_PAUSE
)
...
...
@@ -1169,9 +1170,9 @@ static void snd_timer_user_ccallback(struct snd_timer_instance *timeri,
r1
.
event
=
event
;
r1
.
tstamp
=
*
tstamp
;
r1
.
val
=
resolution
;
spin_lock
(
&
tu
->
qlock
);
spin_lock
_irqsave
(
&
tu
->
qlock
,
flags
);
snd_timer_user_append_to_tqueue
(
tu
,
&
r1
);
spin_unlock
(
&
tu
->
qlock
);
spin_unlock
_irqrestore
(
&
tu
->
qlock
,
flags
);
kill_fasync
(
&
tu
->
fasync
,
SIGIO
,
POLL_IN
);
wake_up
(
&
tu
->
qchange_sleep
);
}
...
...
sound/isa/sb/es968.c
View file @
02a2ad40
...
...
@@ -93,7 +93,7 @@ static int __devinit snd_card_es968_pnp(int dev, struct snd_card_es968 *acard,
return
err
;
}
port
[
dev
]
=
pnp_port_start
(
pdev
,
0
);
dma8
[
dev
]
=
pnp_dma
(
pdev
,
1
);
dma8
[
dev
]
=
pnp_dma
(
pdev
,
0
);
irq
[
dev
]
=
pnp_irq
(
pdev
,
0
);
return
0
;
...
...
sound/pci/hda/hda_intel.c
View file @
02a2ad40
...
...
@@ -2272,6 +2272,8 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = {
SND_PCI_QUIRK
(
0x1458
,
0xa022
,
"ga-ma770-ud3"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x1462
,
0x1002
,
"MSI Wind U115"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x1565
,
0x820f
,
"Biostar Microtech"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x1565
,
0x8218
,
"Biostar Microtech"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x8086
,
0x2503
,
"DG965OT AAD63733-203"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x8086
,
0xd601
,
"eMachines T5212"
,
POS_FIX_LPIB
),
{}
};
...
...
sound/pci/hda/patch_analog.c
View file @
02a2ad40
...
...
@@ -519,14 +519,6 @@ static int ad198x_suspend(struct hda_codec *codec, pm_message_t state)
ad198x_power_eapd
(
codec
);
return
0
;
}
static
int
ad198x_resume
(
struct
hda_codec
*
codec
)
{
ad198x_init
(
codec
);
snd_hda_codec_resume_amp
(
codec
);
snd_hda_codec_resume_cache
(
codec
);
return
0
;
}
#endif
static
struct
hda_codec_ops
ad198x_patch_ops
=
{
...
...
@@ -539,7 +531,6 @@ static struct hda_codec_ops ad198x_patch_ops = {
#endif
#ifdef SND_HDA_NEEDS_RESUME
.
suspend
=
ad198x_suspend
,
.
resume
=
ad198x_resume
,
#endif
.
reboot_notify
=
ad198x_shutup
,
};
...
...
sound/pci/hda/patch_realtek.c
View file @
02a2ad40
...
...
@@ -230,6 +230,7 @@ enum {
ALC888_ACER_ASPIRE_7730G
,
ALC883_MEDION
,
ALC883_MEDION_MD2
,
ALC883_MEDION_WIM2160
,
ALC883_LAPTOP_EAPD
,
ALC883_LENOVO_101E_2ch
,
ALC883_LENOVO_NB0763
,
...
...
@@ -1389,22 +1390,31 @@ struct alc_fixup {
static
void
alc_pick_fixup
(
struct
hda_codec
*
codec
,
const
struct
snd_pci_quirk
*
quirk
,
const
struct
alc_fixup
*
fix
)
const
struct
alc_fixup
*
fix
,
int
pre_init
)
{
const
struct
alc_pincfg
*
cfg
;
quirk
=
snd_pci_quirk_lookup
(
codec
->
bus
->
pci
,
quirk
);
if
(
!
quirk
)
return
;
fix
+=
quirk
->
value
;
cfg
=
fix
->
pins
;
if
(
cfg
)
{
if
(
pre_init
&&
cfg
)
{
#ifdef CONFIG_SND_DEBUG_VERBOSE
snd_printdd
(
KERN_INFO
"hda_codec: %s: Apply pincfg for %s
\n
"
,
codec
->
chip_name
,
quirk
->
name
);
#endif
for
(;
cfg
->
nid
;
cfg
++
)
snd_hda_codec_set_pincfg
(
codec
,
cfg
->
nid
,
cfg
->
val
);
}
if
(
fix
->
verbs
)
if
(
!
pre_init
&&
fix
->
verbs
)
{
#ifdef CONFIG_SND_DEBUG_VERBOSE
snd_printdd
(
KERN_INFO
"hda_codec: %s: Apply fix-verbs for %s
\n
"
,
codec
->
chip_name
,
quirk
->
name
);
#endif
add_verb
(
codec
->
spec
,
fix
->
verbs
);
}
}
static
int
alc_read_coef_idx
(
struct
hda_codec
*
codec
,
...
...
@@ -4133,7 +4143,7 @@ static struct snd_pci_quirk alc880_cfg_tbl[] = {
SND_PCI_QUIRK
(
0x1695
,
0x4012
,
"EPox EP-5LDA"
,
ALC880_5ST_DIG
),
SND_PCI_QUIRK
(
0x1734
,
0x107c
,
"FSC F1734"
,
ALC880_F1734
),
SND_PCI_QUIRK
(
0x1734
,
0x1094
,
"FSC Amilo M1451G"
,
ALC880_FUJITSU
),
SND_PCI_QUIRK
(
0x1734
,
0x10ac
,
"FSC
"
,
ALC880_UNIWILL
),
SND_PCI_QUIRK
(
0x1734
,
0x10ac
,
"FSC
AMILO Xi 1526"
,
ALC880_F1734
),
SND_PCI_QUIRK
(
0x1734
,
0x10b0
,
"Fujitsu"
,
ALC880_FUJITSU
),
SND_PCI_QUIRK
(
0x1854
,
0x0018
,
"LG LW20"
,
ALC880_LG_LW
),
SND_PCI_QUIRK
(
0x1854
,
0x003b
,
"LG"
,
ALC880_LG
),
...
...
@@ -4808,6 +4818,25 @@ static void alc880_auto_init_analog_input(struct hda_codec *codec)
}
}
static
void
alc880_auto_init_input_src
(
struct
hda_codec
*
codec
)
{
struct
alc_spec
*
spec
=
codec
->
spec
;
int
c
;
for
(
c
=
0
;
c
<
spec
->
num_adc_nids
;
c
++
)
{
unsigned
int
mux_idx
;
const
struct
hda_input_mux
*
imux
;
mux_idx
=
c
>=
spec
->
num_mux_defs
?
0
:
c
;
imux
=
&
spec
->
input_mux
[
mux_idx
];
if
(
!
imux
->
num_items
&&
mux_idx
>
0
)
imux
=
&
spec
->
input_mux
[
0
];
if
(
imux
)
snd_hda_codec_write
(
codec
,
spec
->
adc_nids
[
c
],
0
,
AC_VERB_SET_CONNECT_SEL
,
imux
->
items
[
0
].
index
);
}
}
/* parse the BIOS configuration and set up the alc_spec */
/* return 1 if successful, 0 if the proper config is not found,
* or a negative error code
...
...
@@ -4886,6 +4915,7 @@ static void alc880_auto_init(struct hda_codec *codec)
alc880_auto_init_multi_out
(
codec
);
alc880_auto_init_extra_out
(
codec
);
alc880_auto_init_analog_input
(
codec
);
alc880_auto_init_input_src
(
codec
);
if
(
spec
->
unsol_event
)
alc_inithook
(
codec
);
}
...
...
@@ -6397,6 +6427,8 @@ static void alc260_auto_init_analog_input(struct hda_codec *codec)
}
}
#define alc260_auto_init_input_src alc880_auto_init_input_src
/*
* generic initialization of ADC, input mixers and output mixers
*/
...
...
@@ -6483,6 +6515,7 @@ static void alc260_auto_init(struct hda_codec *codec)
struct
alc_spec
*
spec
=
codec
->
spec
;
alc260_auto_init_multi_out
(
codec
);
alc260_auto_init_analog_input
(
codec
);
alc260_auto_init_input_src
(
codec
);
if
(
spec
->
unsol_event
)
alc_inithook
(
codec
);
}
...
...
@@ -8455,6 +8488,42 @@ static struct snd_kcontrol_new alc883_medion_md2_mixer[] = {
{
}
/* end */
};
static
struct
snd_kcontrol_new
alc883_medion_wim2160_mixer
[]
=
{
HDA_CODEC_VOLUME
(
"Front Playback Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_BIND_MUTE
(
"Front Playback Switch"
,
0x0c
,
2
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Speaker Playback Switch"
,
0x15
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_MUTE
(
"Headphone Playback Switch"
,
0x1a
,
0x0
,
HDA_OUTPUT
),
HDA_CODEC_VOLUME
(
"Line Playback Volume"
,
0x08
,
0x0
,
HDA_INPUT
),
HDA_CODEC_MUTE
(
"Line Playback Switch"
,
0x08
,
0x0
,
HDA_INPUT
),
{
}
/* end */
};
static
struct
hda_verb
alc883_medion_wim2160_verbs
[]
=
{
/* Unmute front mixer */
{
0x0c
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
0
)},
{
0x0c
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_IN_UNMUTE
(
1
)},
/* Set speaker pin to front mixer */
{
0x15
,
AC_VERB_SET_CONNECT_SEL
,
0x00
},
/* Init headphone pin */
{
0x1a
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_HP
},
{
0x1a
,
AC_VERB_SET_AMP_GAIN_MUTE
,
AMP_OUT_UNMUTE
},
{
0x1a
,
AC_VERB_SET_CONNECT_SEL
,
0x00
},
{
0x1a
,
AC_VERB_SET_UNSOLICITED_ENABLE
,
ALC880_HP_EVENT
|
AC_USRSP_EN
},
{
}
/* end */
};
/* toggle speaker-output according to the hp-jack state */
static
void
alc883_medion_wim2160_setup
(
struct
hda_codec
*
codec
)
{
struct
alc_spec
*
spec
=
codec
->
spec
;
spec
->
autocfg
.
hp_pins
[
0
]
=
0x1a
;
spec
->
autocfg
.
speaker_pins
[
0
]
=
0x15
;
}
static
struct
snd_kcontrol_new
alc883_acer_aspire_mixer
[]
=
{
HDA_CODEC_VOLUME
(
"Front Playback Volume"
,
0x0c
,
0x0
,
HDA_OUTPUT
),
HDA_BIND_MUTE
(
"Front Playback Switch"
,
0x0c
,
2
,
HDA_INPUT
),
...
...
@@ -9164,6 +9233,7 @@ static const char *alc882_models[ALC882_MODEL_LAST] = {
[
ALC888_ACER_ASPIRE_7730G
]
=
"acer-aspire-7730g"
,
[
ALC883_MEDION
]
=
"medion"
,
[
ALC883_MEDION_MD2
]
=
"medion-md2"
,
[
ALC883_MEDION_WIM2160
]
=
"medion-wim2160"
,
[
ALC883_LAPTOP_EAPD
]
=
"laptop-eapd"
,
[
ALC883_LENOVO_101E_2ch
]
=
"lenovo-101e"
,
[
ALC883_LENOVO_NB0763
]
=
"lenovo-nb0763"
,
...
...
@@ -9280,6 +9350,7 @@ static struct snd_pci_quirk alc882_cfg_tbl[] = {
SND_PCI_QUIRK
(
0x1462
,
0xaa08
,
"MSI"
,
ALC883_TARGA_2ch_DIG
),
SND_PCI_QUIRK
(
0x147b
,
0x1083
,
"Abit IP35-PRO"
,
ALC883_6ST_DIG
),
SND_PCI_QUIRK
(
0x1558
,
0x0571
,
"Clevo laptop M570U"
,
ALC883_3ST_6ch_DIG
),
SND_PCI_QUIRK
(
0x1558
,
0x0721
,
"Clevo laptop M720R"
,
ALC883_CLEVO_M720
),
SND_PCI_QUIRK
(
0x1558
,
0x0722
,
"Clevo laptop M720SR"
,
ALC883_CLEVO_M720
),
SND_PCI_QUIRK
(
0x1558
,
0x5409
,
"Clevo laptop M540R"
,
ALC883_CLEVO_M540R
),
...
...
@@ -9818,6 +9889,21 @@ static struct alc_config_preset alc882_presets[] = {
.
setup
=
alc883_medion_md2_setup
,
.
init_hook
=
alc_automute_amp
,
},
[
ALC883_MEDION_WIM2160
]
=
{
.
mixers
=
{
alc883_medion_wim2160_mixer
},
.
init_verbs
=
{
alc883_init_verbs
,
alc883_medion_wim2160_verbs
},
.
num_dacs
=
ARRAY_SIZE
(
alc883_dac_nids
),
.
dac_nids
=
alc883_dac_nids
,
.
dig_out_nid
=
ALC883_DIGOUT_NID
,
.
num_adc_nids
=
ARRAY_SIZE
(
alc883_adc_nids
),
.
adc_nids
=
alc883_adc_nids
,
.
num_channel_mode
=
ARRAY_SIZE
(
alc883_3ST_2ch_modes
),
.
channel_mode
=
alc883_3ST_2ch_modes
,
.
input_mux
=
&
alc883_capture_source
,
.
unsol_event
=
alc_automute_amp_unsol_event
,
.
setup
=
alc883_medion_wim2160_setup
,
.
init_hook
=
alc_automute_amp
,
},
[
ALC883_LAPTOP_EAPD
]
=
{
.
mixers
=
{
alc883_base_mixer
},
.
init_verbs
=
{
alc883_init_verbs
,
alc882_eapd_verbs
},
...
...
@@ -10363,7 +10449,8 @@ static int patch_alc882(struct hda_codec *codec)
board_config
=
ALC882_AUTO
;
}
alc_pick_fixup
(
codec
,
alc882_fixup_tbl
,
alc882_fixups
);
if
(
board_config
==
ALC882_AUTO
)
alc_pick_fixup
(
codec
,
alc882_fixup_tbl
,
alc882_fixups
,
1
);
if
(
board_config
==
ALC882_AUTO
)
{
/* automatic parse from the BIOS config */
...
...
@@ -10436,6 +10523,9 @@ static int patch_alc882(struct hda_codec *codec)
set_capture_mixer
(
codec
);
set_beep_amp
(
spec
,
0x0b
,
0x05
,
HDA_INPUT
);
if
(
board_config
==
ALC882_AUTO
)
alc_pick_fixup
(
codec
,
alc882_fixup_tbl
,
alc882_fixups
,
0
);
spec
->
vmaster_nid
=
0x0c
;
codec
->
patch_ops
=
alc_patch_ops
;
...
...
@@ -12816,6 +12906,7 @@ static int alc268_new_analog_output(struct alc_spec *spec, hda_nid_t nid,
dac
=
0x02
;
break
;
case
0x15
:
case
0x21
:
/* ALC269vb has this pin, too */
dac
=
0x03
;
break
;
default:
...
...
@@ -13735,19 +13826,19 @@ static void alc269_laptop_unsol_event(struct hda_codec *codec,
}
}
static
void
alc269_laptop_
d
mic_setup
(
struct
hda_codec
*
codec
)
static
void
alc269_laptop_
a
mic_setup
(
struct
hda_codec
*
codec
)
{
struct
alc_spec
*
spec
=
codec
->
spec
;
spec
->
autocfg
.
hp_pins
[
0
]
=
0x15
;
spec
->
autocfg
.
speaker_pins
[
0
]
=
0x14
;
spec
->
ext_mic
.
pin
=
0x18
;
spec
->
ext_mic
.
mux_idx
=
0
;
spec
->
int_mic
.
pin
=
0x1
2
;
spec
->
int_mic
.
mux_idx
=
5
;
spec
->
int_mic
.
pin
=
0x1
9
;
spec
->
int_mic
.
mux_idx
=
1
;
spec
->
auto_mic
=
1
;
}
static
void
alc269
vb
_laptop_dmic_setup
(
struct
hda_codec
*
codec
)
static
void
alc269_laptop_dmic_setup
(
struct
hda_codec
*
codec
)
{
struct
alc_spec
*
spec
=
codec
->
spec
;
spec
->
autocfg
.
hp_pins
[
0
]
=
0x15
;
...
...
@@ -13755,14 +13846,14 @@ static void alc269vb_laptop_dmic_setup(struct hda_codec *codec)
spec
->
ext_mic
.
pin
=
0x18
;
spec
->
ext_mic
.
mux_idx
=
0
;
spec
->
int_mic
.
pin
=
0x12
;
spec
->
int_mic
.
mux_idx
=
6
;
spec
->
int_mic
.
mux_idx
=
5
;
spec
->
auto_mic
=
1
;
}
static
void
alc269_laptop_amic_setup
(
struct
hda_codec
*
codec
)
static
void
alc269
vb
_laptop_amic_setup
(
struct
hda_codec
*
codec
)
{
struct
alc_spec
*
spec
=
codec
->
spec
;
spec
->
autocfg
.
hp_pins
[
0
]
=
0x
15
;
spec
->
autocfg
.
hp_pins
[
0
]
=
0x
21
;
spec
->
autocfg
.
speaker_pins
[
0
]
=
0x14
;
spec
->
ext_mic
.
pin
=
0x18
;
spec
->
ext_mic
.
mux_idx
=
0
;
...
...
@@ -13771,6 +13862,18 @@ static void alc269_laptop_amic_setup(struct hda_codec *codec)
spec
->
auto_mic
=
1
;
}
static
void
alc269vb_laptop_dmic_setup
(
struct
hda_codec
*
codec
)
{
struct
alc_spec
*
spec
=
codec
->
spec
;
spec
->
autocfg
.
hp_pins
[
0
]
=
0x21
;
spec
->
autocfg
.
speaker_pins
[
0
]
=
0x14
;
spec
->
ext_mic
.
pin
=
0x18
;
spec
->
ext_mic
.
mux_idx
=
0
;
spec
->
int_mic
.
pin
=
0x12
;
spec
->
int_mic
.
mux_idx
=
6
;
spec
->
auto_mic
=
1
;
}
static
void
alc269_laptop_inithook
(
struct
hda_codec
*
codec
)
{
alc269_speaker_automute
(
codec
);
...
...
@@ -13975,6 +14078,27 @@ static void alc269_auto_init(struct hda_codec *codec)
alc_inithook
(
codec
);
}
enum
{
ALC269_FIXUP_SONY_VAIO
,
};
const
static
struct
hda_verb
alc269_sony_vaio_fixup_verbs
[]
=
{
{
0x19
,
AC_VERB_SET_PIN_WIDGET_CONTROL
,
PIN_VREFGRD
},
{}
};
static
const
struct
alc_fixup
alc269_fixups
[]
=
{
[
ALC269_FIXUP_SONY_VAIO
]
=
{
.
verbs
=
alc269_sony_vaio_fixup_verbs
},
};
static
struct
snd_pci_quirk
alc269_fixup_tbl
[]
=
{
SND_PCI_QUIRK
(
0x104d
,
0x9071
,
"Sony VAIO"
,
ALC269_FIXUP_SONY_VAIO
),
{}
};
/*
* configuration and preset
*/
...
...
@@ -14034,7 +14158,7 @@ static struct snd_pci_quirk alc269_cfg_tbl[] = {
ALC269_DMIC
),
SND_PCI_QUIRK
(
0x1043
,
0x8398
,
"ASUS P1005HA"
,
ALC269_DMIC
),
SND_PCI_QUIRK
(
0x1043
,
0x83ce
,
"ASUS P1005HA"
,
ALC269_DMIC
),
SND_PCI_QUIRK
(
0x104d
,
0x9071
,
"S
ONY XTB"
,
ALC269_DMIC
),
SND_PCI_QUIRK
(
0x104d
,
0x9071
,
"S
ony VAIO"
,
ALC269_AUTO
),
SND_PCI_QUIRK
(
0x10cf
,
0x1475
,
"Lifebook ICH9M-based"
,
ALC269_LIFEBOOK
),
SND_PCI_QUIRK
(
0x152d
,
0x1778
,
"Quanta ON1"
,
ALC269_DMIC
),
SND_PCI_QUIRK
(
0x1734
,
0x115d
,
"FSC Amilo"
,
ALC269_FUJITSU
),
...
...
@@ -14108,7 +14232,7 @@ static struct alc_config_preset alc269_presets[] = {
.
num_channel_mode
=
ARRAY_SIZE
(
alc269_modes
),
.
channel_mode
=
alc269_modes
,
.
unsol_event
=
alc269_laptop_unsol_event
,
.
setup
=
alc269_laptop_amic_setup
,
.
setup
=
alc269
vb
_laptop_amic_setup
,
.
init_hook
=
alc269_laptop_inithook
,
},
[
ALC269VB_DMIC
]
=
{
...
...
@@ -14188,6 +14312,9 @@ static int patch_alc269(struct hda_codec *codec)
board_config
=
ALC269_AUTO
;
}
if
(
board_config
==
ALC269_AUTO
)
alc_pick_fixup
(
codec
,
alc269_fixup_tbl
,
alc269_fixups
,
1
);
if
(
board_config
==
ALC269_AUTO
)
{
/* automatic parse from the BIOS config */
err
=
alc269_parse_auto_config
(
codec
);
...
...
@@ -14240,6 +14367,9 @@ static int patch_alc269(struct hda_codec *codec)
set_capture_mixer
(
codec
);
set_beep_amp
(
spec
,
0x0b
,
0x04
,
HDA_INPUT
);
if
(
board_config
==
ALC269_AUTO
)
alc_pick_fixup
(
codec
,
alc269_fixup_tbl
,
alc269_fixups
,
0
);
spec
->
vmaster_nid
=
0x02
;
codec
->
patch_ops
=
alc_patch_ops
;
...
...
@@ -15328,7 +15458,8 @@ static int patch_alc861(struct hda_codec *codec)
board_config
=
ALC861_AUTO
;
}
alc_pick_fixup
(
codec
,
alc861_fixup_tbl
,
alc861_fixups
);
if
(
board_config
==
ALC861_AUTO
)
alc_pick_fixup
(
codec
,
alc861_fixup_tbl
,
alc861_fixups
,
1
);
if
(
board_config
==
ALC861_AUTO
)
{
/* automatic parse from the BIOS config */
...
...
@@ -15365,6 +15496,9 @@ static int patch_alc861(struct hda_codec *codec)
spec
->
vmaster_nid
=
0x03
;
if
(
board_config
==
ALC861_AUTO
)
alc_pick_fixup
(
codec
,
alc861_fixup_tbl
,
alc861_fixups
,
0
);
codec
->
patch_ops
=
alc_patch_ops
;
if
(
board_config
==
ALC861_AUTO
)
{
spec
->
init_hook
=
alc861_auto_init
;
...
...
@@ -16299,7 +16433,8 @@ static int patch_alc861vd(struct hda_codec *codec)
board_config
=
ALC861VD_AUTO
;
}
alc_pick_fixup
(
codec
,
alc861vd_fixup_tbl
,
alc861vd_fixups
);
if
(
board_config
==
ALC861VD_AUTO
)
alc_pick_fixup
(
codec
,
alc861vd_fixup_tbl
,
alc861vd_fixups
,
1
);
if
(
board_config
==
ALC861VD_AUTO
)
{
/* automatic parse from the BIOS config */
...
...
@@ -16347,6 +16482,9 @@ static int patch_alc861vd(struct hda_codec *codec)
spec
->
vmaster_nid
=
0x02
;
if
(
board_config
==
ALC861VD_AUTO
)
alc_pick_fixup
(
codec
,
alc861vd_fixup_tbl
,
alc861vd_fixups
,
0
);
codec
->
patch_ops
=
alc_patch_ops
;
if
(
board_config
==
ALC861VD_AUTO
)
...
...
sound/pci/hda/patch_sigmatel.c
View file @
02a2ad40
...
...
@@ -1607,6 +1607,10 @@ static struct snd_pci_quirk stac92hd73xx_cfg_tbl[] = {
"Dell Studio 1555"
,
STAC_DELL_M6_DMIC
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_DELL
,
0x02bd
,
"Dell Studio 1557"
,
STAC_DELL_M6_DMIC
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_DELL
,
0x02fe
,
"Dell Studio XPS 1645"
,
STAC_DELL_M6_BOTH
),
SND_PCI_QUIRK
(
PCI_VENDOR_ID_DELL
,
0x0413
,
"Dell Studio 1558"
,
STAC_DELL_M6_BOTH
),
{}
/* terminator */
};
...
...
sound/pci/hda/patch_via.c
View file @
02a2ad40
...
...
@@ -476,7 +476,7 @@ static struct snd_kcontrol_new *via_clone_control(struct via_spec *spec,
knew
->
name
=
kstrdup
(
tmpl
->
name
,
GFP_KERNEL
);
if
(
!
knew
->
name
)
return
NULL
;
return
0
;
return
knew
;
}
static
void
via_free_kctls
(
struct
hda_codec
*
codec
)
...
...
@@ -1215,14 +1215,13 @@ static struct snd_kcontrol_new via_hp_mixer[2] = {
},
};
static
int
via_hp_build
(
struct
via_spec
*
sp
ec
)
static
int
via_hp_build
(
struct
hda_codec
*
cod
ec
)
{
struct
via_spec
*
spec
=
codec
->
spec
;
struct
snd_kcontrol_new
*
knew
;
hda_nid_t
nid
;
knew
=
via_clone_control
(
spec
,
&
via_hp_mixer
[
0
]);
if
(
knew
==
NULL
)
return
-
ENOMEM
;
int
nums
;
hda_nid_t
conn
[
HDA_MAX_CONNECTIONS
];
switch
(
spec
->
codec_type
)
{
case
VT1718S
:
...
...
@@ -1239,6 +1238,14 @@ static int via_hp_build(struct via_spec *spec)
break
;
}
nums
=
snd_hda_get_connections
(
codec
,
nid
,
conn
,
HDA_MAX_CONNECTIONS
);
if
(
nums
<=
1
)
return
0
;
knew
=
via_clone_control
(
spec
,
&
via_hp_mixer
[
0
]);
if
(
knew
==
NULL
)
return
-
ENOMEM
;
knew
->
subdevice
=
HDA_SUBDEV_NID_FLAG
|
nid
;
knew
->
private_value
=
nid
;
...
...
@@ -2561,7 +2568,7 @@ static int vt1708_parse_auto_config(struct hda_codec *codec)
spec
->
input_mux
=
&
spec
->
private_imux
[
0
];
if
(
spec
->
hp_mux
)
via_hp_build
(
sp
ec
);
via_hp_build
(
cod
ec
);
via_smart51_build
(
spec
);
return
1
;
...
...
@@ -3087,7 +3094,7 @@ static int vt1709_parse_auto_config(struct hda_codec *codec)
spec
->
input_mux
=
&
spec
->
private_imux
[
0
];
if
(
spec
->
hp_mux
)
via_hp_build
(
sp
ec
);
via_hp_build
(
cod
ec
);
via_smart51_build
(
spec
);
return
1
;
...
...
@@ -3654,7 +3661,7 @@ static int vt1708B_parse_auto_config(struct hda_codec *codec)
spec
->
input_mux
=
&
spec
->
private_imux
[
0
];
if
(
spec
->
hp_mux
)
via_hp_build
(
sp
ec
);
via_hp_build
(
cod
ec
);
via_smart51_build
(
spec
);
return
1
;
...
...
@@ -4140,7 +4147,7 @@ static int vt1708S_parse_auto_config(struct hda_codec *codec)
spec
->
input_mux
=
&
spec
->
private_imux
[
0
];
if
(
spec
->
hp_mux
)
via_hp_build
(
sp
ec
);
via_hp_build
(
cod
ec
);
via_smart51_build
(
spec
);
return
1
;
...
...
@@ -4510,7 +4517,7 @@ static int vt1702_parse_auto_config(struct hda_codec *codec)
spec
->
input_mux
=
&
spec
->
private_imux
[
0
];
if
(
spec
->
hp_mux
)
via_hp_build
(
sp
ec
);
via_hp_build
(
cod
ec
);
return
1
;
}
...
...
@@ -4930,7 +4937,7 @@ static int vt1718S_parse_auto_config(struct hda_codec *codec)
spec
->
input_mux
=
&
spec
->
private_imux
[
0
];
if
(
spec
->
hp_mux
)
via_hp_build
(
sp
ec
);
via_hp_build
(
cod
ec
);
via_smart51_build
(
spec
);
...
...
@@ -5425,7 +5432,7 @@ static int vt1716S_parse_auto_config(struct hda_codec *codec)
spec
->
input_mux
=
&
spec
->
private_imux
[
0
];
if
(
spec
->
hp_mux
)
via_hp_build
(
sp
ec
);
via_hp_build
(
cod
ec
);
via_smart51_build
(
spec
);
...
...
@@ -5781,7 +5788,7 @@ static int vt2002P_parse_auto_config(struct hda_codec *codec)
spec
->
input_mux
=
&
spec
->
private_imux
[
0
];
if
(
spec
->
hp_mux
)
via_hp_build
(
sp
ec
);
via_hp_build
(
cod
ec
);
return
1
;
}
...
...
@@ -6000,12 +6007,12 @@ static int vt1812_auto_create_multi_out_ctls(struct via_spec *spec,
/* Line-Out: PortE */
err
=
via_add_control
(
spec
,
VIA_CTL_WIDGET_VOL
,
"
Master
Front Playback Volume"
,
"Front Playback Volume"
,
HDA_COMPOSE_AMP_VAL
(
0x8
,
3
,
0
,
HDA_OUTPUT
));
if
(
err
<
0
)
return
err
;
err
=
via_add_control
(
spec
,
VIA_CTL_WIDGET_BIND_PIN_MUTE
,
"
Master
Front Playback Switch"
,
"Front Playback Switch"
,
HDA_COMPOSE_AMP_VAL
(
0x28
,
3
,
0
,
HDA_OUTPUT
));
if
(
err
<
0
)
return
err
;
...
...
@@ -6130,7 +6137,7 @@ static int vt1812_parse_auto_config(struct hda_codec *codec)
spec
->
input_mux
=
&
spec
->
private_imux
[
0
];
if
(
spec
->
hp_mux
)
via_hp_build
(
sp
ec
);
via_hp_build
(
cod
ec
);
return
1
;
}
...
...
sound/soc/codecs/wm2000.c
View file @
02a2ad40
...
...
@@ -23,7 +23,6 @@
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/firmware.h>
...
...
sound/soc/imx/imx-pcm-dma-mx2.c
View file @
02a2ad40
...
...
@@ -71,7 +71,12 @@ static void imx_ssi_dma_callback(int channel, void *data)
static
void
snd_imx_dma_err_callback
(
int
channel
,
void
*
data
,
int
err
)
{
pr_err
(
"DMA error callback called
\n
"
);
struct
snd_pcm_substream
*
substream
=
data
;
struct
snd_soc_pcm_runtime
*
rtd
=
substream
->
private_data
;
struct
imx_pcm_dma_params
*
dma_params
=
rtd
->
dai
->
cpu_dai
->
dma_data
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
imx_pcm_runtime_data
*
iprtd
=
runtime
->
private_data
;
int
ret
;
pr_err
(
"DMA timeout on channel %d -%s%s%s%s
\n
"
,
channel
,
...
...
@@ -79,6 +84,14 @@ static void snd_imx_dma_err_callback(int channel, void *data, int err)
err
&
IMX_DMA_ERR_REQUEST
?
" request"
:
""
,
err
&
IMX_DMA_ERR_TRANSFER
?
" transfer"
:
""
,
err
&
IMX_DMA_ERR_BUFFER
?
" buffer"
:
""
);
imx_dma_disable
(
iprtd
->
dma
);
ret
=
imx_dma_setup_sg
(
iprtd
->
dma
,
iprtd
->
sg_list
,
iprtd
->
sg_count
,
IMX_DMA_LENGTH_LOOP
,
dma_params
->
dma_addr
,
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
?
DMA_MODE_WRITE
:
DMA_MODE_READ
);
if
(
!
ret
)
imx_dma_enable
(
iprtd
->
dma
);
}
static
int
imx_ssi_dma_alloc
(
struct
snd_pcm_substream
*
substream
)
...
...
sound/soc/imx/imx-pcm-fiq.c
View file @
02a2ad40
...
...
@@ -39,23 +39,24 @@ struct imx_pcm_runtime_data {
unsigned
long
offset
;
unsigned
long
last_offset
;
unsigned
long
size
;
struct
timer_list
timer
;
int
poll_time
;
struct
hrtimer
hrt
;
int
poll_time_ns
;
struct
snd_pcm_substream
*
substream
;
atomic_t
running
;
};
static
inline
void
imx_ssi_set_next_poll
(
struct
imx_pcm_runtime_data
*
iprtd
)
static
enum
hrtimer_restart
snd_hrtimer_callback
(
struct
hrtimer
*
hrt
)
{
iprtd
->
timer
.
expires
=
jiffies
+
iprtd
->
poll_time
;
}
static
void
imx_ssi_timer_callback
(
unsigned
long
data
)
{
struct
snd_pcm_substream
*
substream
=
(
void
*
)
data
;
struct
imx_pcm_runtime_data
*
iprtd
=
container_of
(
hrt
,
struct
imx_pcm_runtime_data
,
hrt
);
struct
snd_pcm_substream
*
substream
=
iprtd
->
substream
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
imx_pcm_runtime_data
*
iprtd
=
runtime
->
private_data
;
struct
pt_regs
regs
;
unsigned
long
delta
;
if
(
!
atomic_read
(
&
iprtd
->
running
))
return
HRTIMER_NORESTART
;
get_fiq_regs
(
&
regs
);
if
(
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
)
...
...
@@ -72,16 +73,14 @@ static void imx_ssi_timer_callback(unsigned long data)
/* If we've transferred at least a period then report it and
* reset our poll time */
if
(
delta
>=
runtime
->
period_size
)
{
if
(
delta
>=
iprtd
->
period
)
{
snd_pcm_period_elapsed
(
substream
);
iprtd
->
last_offset
=
iprtd
->
offset
;
imx_ssi_set_next_poll
(
iprtd
);
}
/* Restart the timer; if we didn't report we'll run on the next tick */
add_timer
(
&
iprtd
->
timer
);
hrtimer_forward_now
(
hrt
,
ns_to_ktime
(
iprtd
->
poll_time_ns
));
return
HRTIMER_RESTART
;
}
static
struct
fiq_handler
fh
=
{
...
...
@@ -99,8 +98,8 @@ static int snd_imx_pcm_hw_params(struct snd_pcm_substream *substream,
iprtd
->
period
=
params_period_bytes
(
params
)
;
iprtd
->
offset
=
0
;
iprtd
->
last_offset
=
0
;
iprtd
->
poll_time
=
HZ
/
(
params_rate
(
params
)
/
params_period_size
(
params
));
iprtd
->
poll_time
_ns
=
1000000000
/
params_rate
(
params
)
*
params_period_size
(
params
);
snd_pcm_set_runtime_buffer
(
substream
,
&
substream
->
dma_buffer
);
return
0
;
...
...
@@ -135,8 +134,9 @@ static int snd_imx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
case
SNDRV_PCM_TRIGGER_START
:
case
SNDRV_PCM_TRIGGER_RESUME
:
case
SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
imx_ssi_set_next_poll
(
iprtd
);
add_timer
(
&
iprtd
->
timer
);
atomic_set
(
&
iprtd
->
running
,
1
);
hrtimer_start
(
&
iprtd
->
hrt
,
ns_to_ktime
(
iprtd
->
poll_time_ns
),
HRTIMER_MODE_REL
);
if
(
++
fiq_enable
==
1
)
enable_fiq
(
imx_pcm_fiq
);
...
...
@@ -145,11 +145,11 @@ static int snd_imx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
case
SNDRV_PCM_TRIGGER_STOP
:
case
SNDRV_PCM_TRIGGER_SUSPEND
:
case
SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
del_timer
(
&
iprtd
->
timer
);
atomic_set
(
&
iprtd
->
running
,
0
);
if
(
--
fiq_enable
==
0
)
disable_fiq
(
imx_pcm_fiq
);
break
;
default:
return
-
EINVAL
;
...
...
@@ -180,7 +180,7 @@ static struct snd_pcm_hardware snd_imx_hardware = {
.
buffer_bytes_max
=
IMX_SSI_DMABUF_SIZE
,
.
period_bytes_min
=
128
,
.
period_bytes_max
=
16
*
1024
,
.
periods_min
=
2
,
.
periods_min
=
4
,
.
periods_max
=
255
,
.
fifo_size
=
0
,
};
...
...
@@ -194,9 +194,11 @@ static int snd_imx_open(struct snd_pcm_substream *substream)
iprtd
=
kzalloc
(
sizeof
(
*
iprtd
),
GFP_KERNEL
);
runtime
->
private_data
=
iprtd
;
init_timer
(
&
iprtd
->
timer
);
iprtd
->
timer
.
data
=
(
unsigned
long
)
substream
;
iprtd
->
timer
.
function
=
imx_ssi_timer_callback
;
iprtd
->
substream
=
substream
;
atomic_set
(
&
iprtd
->
running
,
0
);
hrtimer_init
(
&
iprtd
->
hrt
,
CLOCK_MONOTONIC
,
HRTIMER_MODE_REL
);
iprtd
->
hrt
.
function
=
snd_hrtimer_callback
;
ret
=
snd_pcm_hw_constraint_integer
(
substream
->
runtime
,
SNDRV_PCM_HW_PARAM_PERIODS
);
...
...
@@ -212,7 +214,8 @@ static int snd_imx_close(struct snd_pcm_substream *substream)
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
imx_pcm_runtime_data
*
iprtd
=
runtime
->
private_data
;
del_timer_sync
(
&
iprtd
->
timer
);
hrtimer_cancel
(
&
iprtd
->
hrt
);
kfree
(
iprtd
);
return
0
;
...
...
sound/soc/imx/imx-ssi.c
View file @
02a2ad40
...
...
@@ -656,7 +656,8 @@ static int imx_ssi_probe(struct platform_device *pdev)
dai
->
private_data
=
ssi
;
if
((
cpu_is_mx27
()
||
cpu_is_mx21
())
&&
!
(
ssi
->
flags
&
IMX_SSI_USE_AC97
))
{
!
(
ssi
->
flags
&
IMX_SSI_USE_AC97
)
&&
(
ssi
->
flags
&
IMX_SSI_DMA
))
{
ssi
->
flags
|=
IMX_SSI_DMA
;
platform
=
imx_ssi_dma_mx2_init
(
pdev
,
ssi
);
}
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