Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
cc99a086
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
cc99a086
编写于
3月 11, 2011
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'fix/misc' into topic/misc
上级
bc3a8a01
382225e6
变更
46
隐藏空白更改
内联
并排
Showing
46 changed file
with
348 addition
and
172 deletion
+348
-172
Documentation/sound/alsa/HD-Audio-Models.txt
Documentation/sound/alsa/HD-Audio-Models.txt
+1
-0
sound/atmel/ac97c.c
sound/atmel/ac97c.c
+4
-1
sound/core/hrtimer.c
sound/core/hrtimer.c
+4
-3
sound/core/jack.c
sound/core/jack.c
+1
-0
sound/drivers/mtpav.c
sound/drivers/mtpav.c
+1
-2
sound/oss/Makefile
sound/oss/Makefile
+2
-2
sound/pci/au88x0/au88x0_core.c
sound/pci/au88x0/au88x0_core.c
+11
-3
sound/pci/azt3328.c
sound/pci/azt3328.c
+16
-22
sound/pci/hda/hda_eld.c
sound/pci/hda/hda_eld.c
+1
-1
sound/pci/hda/hda_intel.c
sound/pci/hda/hda_intel.c
+2
-1
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+134
-78
sound/pci/hda/patch_hdmi.c
sound/pci/hda/patch_hdmi.c
+2
-0
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+30
-3
sound/pci/hda/patch_via.c
sound/pci/hda/patch_via.c
+1
-1
sound/pci/oxygen/oxygen.h
sound/pci/oxygen/oxygen.h
+2
-0
sound/pci/oxygen/oxygen_mixer.c
sound/pci/oxygen/oxygen_mixer.c
+2
-0
sound/pci/oxygen/xonar_dg.c
sound/pci/oxygen/xonar_dg.c
+36
-0
sound/pcmcia/pdaudiocf/pdaudiocf.h
sound/pcmcia/pdaudiocf/pdaudiocf.h
+1
-1
sound/pcmcia/vx/vxp_ops.c
sound/pcmcia/vx/vxp_ops.c
+1
-1
sound/soc/atmel/snd-soc-afeb9260.c
sound/soc/atmel/snd-soc-afeb9260.c
+1
-1
sound/soc/blackfin/bf5xx-ssm2602.c
sound/soc/blackfin/bf5xx-ssm2602.c
+1
-1
sound/soc/codecs/cq93vc.c
sound/soc/codecs/cq93vc.c
+1
-1
sound/soc/codecs/cx20442.c
sound/soc/codecs/cx20442.c
+3
-0
sound/soc/codecs/wm8994.c
sound/soc/codecs/wm8994.c
+23
-5
sound/soc/codecs/wm8995.c
sound/soc/codecs/wm8995.c
+1
-1
sound/soc/codecs/wm_hubs.c
sound/soc/codecs/wm_hubs.c
+7
-8
sound/soc/davinci/davinci-evm.c
sound/soc/davinci/davinci-evm.c
+16
-4
sound/soc/omap/ams-delta.c
sound/soc/omap/ams-delta.c
+0
-2
sound/soc/pxa/corgi.c
sound/soc/pxa/corgi.c
+2
-2
sound/soc/pxa/poodle.c
sound/soc/pxa/poodle.c
+1
-1
sound/soc/pxa/spitz.c
sound/soc/pxa/spitz.c
+2
-2
sound/soc/samsung/neo1973_gta02_wm8753.c
sound/soc/samsung/neo1973_gta02_wm8753.c
+3
-3
sound/soc/samsung/neo1973_wm8753.c
sound/soc/samsung/neo1973_wm8753.c
+3
-3
sound/soc/samsung/s3c24xx_simtec_hermes.c
sound/soc/samsung/s3c24xx_simtec_hermes.c
+2
-2
sound/soc/samsung/s3c24xx_simtec_tlv320aic23.c
sound/soc/samsung/s3c24xx_simtec_tlv320aic23.c
+2
-2
sound/soc/samsung/s3c24xx_uda134x.c
sound/soc/samsung/s3c24xx_uda134x.c
+1
-1
sound/soc/soc-core.c
sound/soc/soc-core.c
+1
-4
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+3
-3
sound/usb/caiaq/audio.c
sound/usb/caiaq/audio.c
+1
-1
sound/usb/caiaq/midi.c
sound/usb/caiaq/midi.c
+1
-1
sound/usb/card.c
sound/usb/card.c
+4
-0
sound/usb/mixer.c
sound/usb/mixer.c
+2
-2
sound/usb/pcm.c
sound/usb/pcm.c
+5
-2
sound/usb/quirks-table.h
sound/usb/quirks-table.h
+7
-0
sound/usb/quirks.c
sound/usb/quirks.c
+2
-1
sound/usb/usbaudio.h
sound/usb/usbaudio.h
+1
-0
未找到文件。
Documentation/sound/alsa/HD-Audio-Models.txt
浏览文件 @
cc99a086
...
...
@@ -296,6 +296,7 @@ Conexant 5066
=============
laptop Basic Laptop config (default)
hp-laptop HP laptops, e g G60
asus Asus K52JU, Lenovo G560
dell-laptop Dell laptops
dell-vostro Dell Vostro
olpc-xo-1_5 OLPC XO 1.5
...
...
sound/atmel/ac97c.c
浏览文件 @
cc99a086
...
...
@@ -33,9 +33,12 @@
#include <linux/dw_dmac.h>
#include <mach/cpu.h>
#include <mach/hardware.h>
#include <mach/gpio.h>
#ifdef CONFIG_ARCH_AT91
#include <mach/hardware.h>
#endif
#include "ac97c.h"
enum
{
...
...
sound/core/hrtimer.c
浏览文件 @
cc99a086
...
...
@@ -45,12 +45,13 @@ static enum hrtimer_restart snd_hrtimer_callback(struct hrtimer *hrt)
{
struct
snd_hrtimer
*
stime
=
container_of
(
hrt
,
struct
snd_hrtimer
,
hrt
);
struct
snd_timer
*
t
=
stime
->
timer
;
unsigned
long
oruns
;
if
(
!
atomic_read
(
&
stime
->
running
))
return
HRTIMER_NORESTART
;
hrtimer_forward_now
(
hrt
,
ns_to_ktime
(
t
->
sticks
*
resolution
));
snd_timer_interrupt
(
stime
->
timer
,
t
->
sticks
);
oruns
=
hrtimer_forward_now
(
hrt
,
ns_to_ktime
(
t
->
sticks
*
resolution
));
snd_timer_interrupt
(
stime
->
timer
,
t
->
sticks
*
oruns
);
if
(
!
atomic_read
(
&
stime
->
running
))
return
HRTIMER_NORESTART
;
...
...
@@ -104,7 +105,7 @@ static int snd_hrtimer_stop(struct snd_timer *t)
}
static
struct
snd_timer_hardware
hrtimer_hw
=
{
.
flags
=
SNDRV_TIMER_HW_AUTO
,
.
flags
=
SNDRV_TIMER_HW_AUTO
|
SNDRV_TIMER_HW_TASKLET
,
.
open
=
snd_hrtimer_open
,
.
close
=
snd_hrtimer_close
,
.
start
=
snd_hrtimer_start
,
...
...
sound/core/jack.c
浏览文件 @
cc99a086
...
...
@@ -141,6 +141,7 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
fail_input:
input_free_device
(
jack
->
input_dev
);
kfree
(
jack
->
id
);
kfree
(
jack
);
return
err
;
}
...
...
sound/drivers/mtpav.c
浏览文件 @
cc99a086
...
...
@@ -55,14 +55,13 @@
#include <linux/err.h>
#include <linux/platform_device.h>
#include <linux/ioport.h>
#include <linux/io.h>
#include <linux/moduleparam.h>
#include <sound/core.h>
#include <sound/initval.h>
#include <sound/rawmidi.h>
#include <linux/delay.h>
#include <asm/io.h>
/*
* globals
*/
...
...
sound/oss/Makefile
浏览文件 @
cc99a086
...
...
@@ -87,7 +87,7 @@ ifeq ($(CONFIG_PSS_HAVE_BOOT),y)
$(obj)
/bin2hex pss_synth <
$<
>
$@
else
$(obj)/pss_boot.h
:
(
\
$(Q)
(
\
echo
'static unsigned char * pss_synth = NULL;'
;
\
echo
'static int pss_synthLen = 0;'
;
\
)
>
$@
...
...
@@ -102,7 +102,7 @@ ifeq ($(CONFIG_TRIX_HAVE_BOOT),y)
$(obj)
/hex2hex
-i
trix_boot <
$<
>
$@
else
$(obj)/trix_boot.h
:
(
\
$(Q)
(
\
echo
'static unsigned char * trix_boot = NULL;'
;
\
echo
'static int trix_boot_len = 0;'
;
\
)
>
$@
...
...
sound/pci/au88x0/au88x0_core.c
浏览文件 @
cc99a086
...
...
@@ -1252,11 +1252,19 @@ static void vortex_adbdma_resetup(vortex_t *vortex, int adbdma) {
static
int
inline
vortex_adbdma_getlinearpos
(
vortex_t
*
vortex
,
int
adbdma
)
{
stream_t
*
dma
=
&
vortex
->
dma_adb
[
adbdma
];
int
temp
;
int
temp
,
page
,
delta
;
temp
=
hwread
(
vortex
->
mmio
,
VORTEX_ADBDMA_STAT
+
(
adbdma
<<
2
));
temp
=
(
dma
->
period_virt
*
dma
->
period_bytes
)
+
(
temp
&
(
dma
->
period_bytes
-
1
));
return
temp
;
page
=
(
temp
&
ADB_SUBBUF_MASK
)
>>
ADB_SUBBUF_SHIFT
;
if
(
dma
->
nr_periods
>=
4
)
delta
=
(
page
-
dma
->
period_real
)
&
3
;
else
{
delta
=
(
page
-
dma
->
period_real
);
if
(
delta
<
0
)
delta
+=
dma
->
nr_periods
;
}
return
(
dma
->
period_virt
+
delta
)
*
dma
->
period_bytes
+
(
temp
&
(
dma
->
period_bytes
-
1
));
}
static
void
vortex_adbdma_startfifo
(
vortex_t
*
vortex
,
int
adbdma
)
...
...
sound/pci/azt3328.c
浏览文件 @
cc99a086
...
...
@@ -1317,31 +1317,25 @@ snd_azf3328_codec_setfmt(struct snd_azf3328_codec_data *codec,
snd_azf3328_dbgcallenter
();
switch
(
bitrate
)
{
#define AZF_FMT_XLATE(in_freq, out_bits) \
do { \
case AZF_FREQ_ ## in_freq: \
freq = SOUNDFORMAT_FREQ_ ## out_bits; \
break; \
} while (0);
AZF_FMT_XLATE
(
4000
,
SUSPECTED_4000
)
AZF_FMT_XLATE
(
4800
,
SUSPECTED_4800
)
/* the AZF3328 names it "5510" for some strange reason: */
AZF_FMT_XLATE
(
5512
,
5510
)
AZF_FMT_XLATE
(
6620
,
6620
)
AZF_FMT_XLATE
(
8000
,
8000
)
AZF_FMT_XLATE
(
9600
,
9600
)
AZF_FMT_XLATE
(
11025
,
11025
)
AZF_FMT_XLATE
(
13240
,
SUSPECTED_13240
)
AZF_FMT_XLATE
(
16000
,
16000
)
AZF_FMT_XLATE
(
22050
,
22050
)
AZF_FMT_XLATE
(
32000
,
32000
)
case
AZF_FREQ_4000
:
freq
=
SOUNDFORMAT_FREQ_SUSPECTED_4000
;
break
;
case
AZF_FREQ_4800
:
freq
=
SOUNDFORMAT_FREQ_SUSPECTED_4800
;
break
;
case
AZF_FREQ_5512
:
/* the AZF3328 names it "5510" for some strange reason */
freq
=
SOUNDFORMAT_FREQ_5510
;
break
;
case
AZF_FREQ_6620
:
freq
=
SOUNDFORMAT_FREQ_6620
;
break
;
case
AZF_FREQ_8000
:
freq
=
SOUNDFORMAT_FREQ_8000
;
break
;
case
AZF_FREQ_9600
:
freq
=
SOUNDFORMAT_FREQ_9600
;
break
;
case
AZF_FREQ_11025
:
freq
=
SOUNDFORMAT_FREQ_11025
;
break
;
case
AZF_FREQ_13240
:
freq
=
SOUNDFORMAT_FREQ_SUSPECTED_13240
;
break
;
case
AZF_FREQ_16000
:
freq
=
SOUNDFORMAT_FREQ_16000
;
break
;
case
AZF_FREQ_22050
:
freq
=
SOUNDFORMAT_FREQ_22050
;
break
;
case
AZF_FREQ_32000
:
freq
=
SOUNDFORMAT_FREQ_32000
;
break
;
default:
snd_printk
(
KERN_WARNING
"unknown bitrate %d, assuming 44.1kHz!
\n
"
,
bitrate
);
/* fall-through */
AZF_FMT_XLATE
(
44100
,
44100
)
AZF_FMT_XLATE
(
48000
,
48000
)
AZF_FMT_XLATE
(
66200
,
SUSPECTED_66200
)
#undef AZF_FMT_XLATE
case
AZF_FREQ_44100
:
freq
=
SOUNDFORMAT_FREQ_44100
;
break
;
case
AZF_FREQ_48000
:
freq
=
SOUNDFORMAT_FREQ_48000
;
break
;
case
AZF_FREQ_66200
:
freq
=
SOUNDFORMAT_FREQ_SUSPECTED_66200
;
break
;
}
/* val = 0xff07; 3m27.993s (65301Hz; -> 64000Hz???) hmm, 66120, 65967, 66123 */
/* val = 0xff09; 17m15.098s (13123,478Hz; -> 12000Hz???) hmm, 13237.2Hz? */
...
...
sound/pci/hda/hda_eld.c
浏览文件 @
cc99a086
...
...
@@ -381,7 +381,7 @@ static void hdmi_show_short_audio_desc(struct cea_sad *a)
snd_print_pcm_rates
(
a
->
rates
,
buf
,
sizeof
(
buf
));
if
(
a
->
format
==
AUDIO_CODING_TYPE_LPCM
)
snd_print_pcm_bits
(
a
->
sample_bits
,
buf2
+
8
,
sizeof
(
buf2
-
8
)
);
snd_print_pcm_bits
(
a
->
sample_bits
,
buf2
+
8
,
sizeof
(
buf2
)
-
8
);
else
if
(
a
->
max_bitrate
)
snprintf
(
buf2
,
sizeof
(
buf2
),
", max bitrate = %d"
,
a
->
max_bitrate
);
...
...
sound/pci/hda/hda_intel.c
浏览文件 @
cc99a086
...
...
@@ -2308,6 +2308,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = {
SND_PCI_QUIRK
(
0x1043
,
0x813d
,
"ASUS P5AD2"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x1043
,
0x81b3
,
"ASUS"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x1043
,
0x81e7
,
"ASUS M2V"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x1043
,
0x8410
,
"ASUS"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x104d
,
0x9069
,
"Sony VPCS11V9E"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x1106
,
0x3288
,
"ASUS M2V-MX SE"
,
POS_FIX_LPIB
),
SND_PCI_QUIRK
(
0x1179
,
0xff10
,
"Toshiba A100-259"
,
POS_FIX_LPIB
),
...
...
@@ -2703,7 +2704,7 @@ static int __devinit azx_probe(struct pci_dev *pci,
if
(
err
<
0
)
goto
out_free
;
#ifdef CONFIG_SND_HDA_PATCH_LOADER
if
(
patch
[
dev
])
{
if
(
patch
[
dev
]
&&
*
patch
[
dev
]
)
{
snd_printk
(
KERN_ERR
SFX
"Applying patch firmware '%s'
\n
"
,
patch
[
dev
]);
err
=
snd_hda_load_patch
(
chip
->
bus
,
patch
[
dev
]);
...
...
sound/pci/hda/patch_conexant.c
浏览文件 @
cc99a086
...
...
@@ -85,6 +85,7 @@ struct conexant_spec {
unsigned
int
auto_mic
;
int
auto_mic_ext
;
/* autocfg.inputs[] index for ext mic */
unsigned
int
need_dac_fix
;
hda_nid_t
slave_dig_outs
[
2
];
/* capture */
unsigned
int
num_adc_nids
;
...
...
@@ -127,6 +128,7 @@ struct conexant_spec {
unsigned
int
ideapad
:
1
;
unsigned
int
thinkpad
:
1
;
unsigned
int
hp_laptop
:
1
;
unsigned
int
asus
:
1
;
unsigned
int
ext_mic_present
;
unsigned
int
recording
;
...
...
@@ -352,6 +354,8 @@ static int conexant_build_pcms(struct hda_codec *codec)
info
->
stream
[
SNDRV_PCM_STREAM_CAPTURE
].
nid
=
spec
->
dig_in_nid
;
}
if
(
spec
->
slave_dig_outs
[
0
])
codec
->
slave_dig_outs
=
spec
->
slave_dig_outs
;
}
return
0
;
...
...
@@ -403,10 +407,16 @@ static int conexant_add_jack(struct hda_codec *codec,
struct
conexant_spec
*
spec
;
struct
conexant_jack
*
jack
;
const
char
*
name
;
int
err
;
int
i
,
err
;
spec
=
codec
->
spec
;
snd_array_init
(
&
spec
->
jacks
,
sizeof
(
*
jack
),
32
);
jack
=
spec
->
jacks
.
list
;
for
(
i
=
0
;
i
<
spec
->
jacks
.
used
;
i
++
,
jack
++
)
if
(
jack
->
nid
==
nid
)
return
0
;
/* already present */
jack
=
snd_array_new
(
&
spec
->
jacks
);
name
=
(
type
==
SND_JACK_HEADPHONE
)
?
"Headphone"
:
"Mic"
;
...
...
@@ -2100,7 +2110,7 @@ static int patch_cxt5051(struct hda_codec *codec)
static
hda_nid_t
cxt5066_dac_nids
[
1
]
=
{
0x10
};
static
hda_nid_t
cxt5066_adc_nids
[
3
]
=
{
0x14
,
0x15
,
0x16
};
static
hda_nid_t
cxt5066_capsrc_nids
[
1
]
=
{
0x17
};
#define CXT5066_SPDIF_OUT 0x21
static
hda_nid_t
cxt5066_digout_pin_nids
[
2
]
=
{
0x20
,
0x22
};
/* OLPC's microphone port is DC coupled for use with external sensors,
* therefore we use a 50% mic bias in order to center the input signal with
...
...
@@ -2312,6 +2322,19 @@ static void cxt5066_ideapad_automic(struct hda_codec *codec)
}
}
/* toggle input of built-in digital mic and mic jack appropriately */
static
void
cxt5066_asus_automic
(
struct
hda_codec
*
codec
)
{
unsigned
int
present
;
present
=
snd_hda_jack_detect
(
codec
,
0x1b
);
snd_printdd
(
"CXT5066: external microphone present=%d
\n
"
,
present
);
snd_hda_codec_write
(
codec
,
0x17
,
0
,
AC_VERB_SET_CONNECT_SEL
,
present
?
1
:
0
);
}
/* toggle input of built-in digital mic and mic jack appropriately */
static
void
cxt5066_hp_laptop_automic
(
struct
hda_codec
*
codec
)
{
...
...
@@ -2387,79 +2410,55 @@ static void cxt5066_hp_automute(struct hda_codec *codec)
cxt5066_update_speaker
(
codec
);
}
/*
unsolicited event for jack sensing
*/
static
void
cxt5066_
olpc_unsol_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
/*
Dispatch the right mic autoswitch function
*/
static
void
cxt5066_
automic
(
struct
hda_codec
*
codec
)
{
struct
conexant_spec
*
spec
=
codec
->
spec
;
snd_printdd
(
"CXT5066: unsol event %x (%x)
\n
"
,
res
,
res
>>
26
);
switch
(
res
>>
26
)
{
case
CONEXANT_HP_EVENT
:
cxt5066_hp_automute
(
codec
);
break
;
case
CONEXANT_MIC_EVENT
:
/* ignore mic events in DC mode; we're always using the jack */
if
(
!
spec
->
dc_enable
)
cxt5066_olpc_automic
(
codec
);
break
;
}
}
/* unsolicited event for jack sensing */
static
void
cxt5066_vostro_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
{
snd_printdd
(
"CXT5066_vostro: unsol event %x (%x)
\n
"
,
res
,
res
>>
26
);
switch
(
res
>>
26
)
{
case
CONEXANT_HP_EVENT
:
cxt5066_hp_automute
(
codec
);
break
;
case
CONEXANT_MIC_EVENT
:
if
(
spec
->
dell_vostro
)
cxt5066_vostro_automic
(
codec
);
break
;
}
}
/* unsolicited event for jack sensing */
static
void
cxt5066_ideapad_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
{
snd_printdd
(
"CXT5066_ideapad: unsol event %x (%x)
\n
"
,
res
,
res
>>
26
);
switch
(
res
>>
26
)
{
case
CONEXANT_HP_EVENT
:
cxt5066_hp_automute
(
codec
);
break
;
case
CONEXANT_MIC_EVENT
:
else
if
(
spec
->
ideapad
)
cxt5066_ideapad_automic
(
codec
);
break
;
}
else
if
(
spec
->
thinkpad
)
cxt5066_thinkpad_automic
(
codec
);
else
if
(
spec
->
hp_laptop
)
cxt5066_hp_laptop_automic
(
codec
);
else
if
(
spec
->
asus
)
cxt5066_asus_automic
(
codec
);
}
/* unsolicited event for jack sensing */
static
void
cxt5066_
hp_laptop
_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
static
void
cxt5066_
olpc_unsol
_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
{
snd_printdd
(
"CXT5066_hp_laptop: unsol event %x (%x)
\n
"
,
res
,
res
>>
26
);
struct
conexant_spec
*
spec
=
codec
->
spec
;
snd_printdd
(
"CXT5066: unsol event %x (%x)
\n
"
,
res
,
res
>>
26
);
switch
(
res
>>
26
)
{
case
CONEXANT_HP_EVENT
:
cxt5066_hp_automute
(
codec
);
break
;
case
CONEXANT_MIC_EVENT
:
cxt5066_hp_laptop_automic
(
codec
);
/* ignore mic events in DC mode; we're always using the jack */
if
(
!
spec
->
dc_enable
)
cxt5066_olpc_automic
(
codec
);
break
;
}
}
/* unsolicited event for jack sensing */
static
void
cxt5066_
thinkpad
_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
static
void
cxt5066_
unsol
_event
(
struct
hda_codec
*
codec
,
unsigned
int
res
)
{
snd_printdd
(
"CXT5066
_thinkpad
: unsol event %x (%x)
\n
"
,
res
,
res
>>
26
);
snd_printdd
(
"CXT5066: unsol event %x (%x)
\n
"
,
res
,
res
>>
26
);
switch
(
res
>>
26
)
{
case
CONEXANT_HP_EVENT
:
cxt5066_hp_automute
(
codec
);
break
;
case
CONEXANT_MIC_EVENT
:
cxt5066_
thinkpad_
automic
(
codec
);
cxt5066_automic
(
codec
);
break
;
}
}
static
const
struct
hda_input_mux
cxt5066_analog_mic_boost
=
{
.
num_items
=
5
,
.
items
=
{
...
...
@@ -2633,6 +2632,27 @@ static void cxt5066_olpc_capture_cleanup(struct hda_codec *codec)
spec
->
recording
=
0
;
}
static
void
conexant_check_dig_outs
(
struct
hda_codec
*
codec
,
hda_nid_t
*
dig_pins
,
int
num_pins
)
{
struct
conexant_spec
*
spec
=
codec
->
spec
;
hda_nid_t
*
nid_loc
=
&
spec
->
multiout
.
dig_out_nid
;
int
i
;
for
(
i
=
0
;
i
<
num_pins
;
i
++
,
dig_pins
++
)
{
unsigned
int
cfg
=
snd_hda_codec_get_pincfg
(
codec
,
*
dig_pins
);
if
(
get_defcfg_connect
(
cfg
)
==
AC_JACK_PORT_NONE
)
continue
;
if
(
snd_hda_get_connections
(
codec
,
*
dig_pins
,
nid_loc
,
1
)
!=
1
)
continue
;
if
(
spec
->
slave_dig_outs
[
0
])
nid_loc
++
;
else
nid_loc
=
spec
->
slave_dig_outs
;
}
}
static
struct
hda_input_mux
cxt5066_capture_source
=
{
.
num_items
=
4
,
.
items
=
{
...
...
@@ -3039,20 +3059,11 @@ static struct hda_verb cxt5066_init_verbs_hp_laptop[] = {
/* initialize jack-sensing, too */
static
int
cxt5066_init
(
struct
hda_codec
*
codec
)
{
struct
conexant_spec
*
spec
=
codec
->
spec
;
snd_printdd
(
"CXT5066: init
\n
"
);
conexant_init
(
codec
);
if
(
codec
->
patch_ops
.
unsol_event
)
{
cxt5066_hp_automute
(
codec
);
if
(
spec
->
dell_vostro
)
cxt5066_vostro_automic
(
codec
);
else
if
(
spec
->
ideapad
)
cxt5066_ideapad_automic
(
codec
);
else
if
(
spec
->
thinkpad
)
cxt5066_thinkpad_automic
(
codec
);
else
if
(
spec
->
hp_laptop
)
cxt5066_hp_laptop_automic
(
codec
);
cxt5066_automic
(
codec
);
}
cxt5066_set_mic_boost
(
codec
);
return
0
;
...
...
@@ -3080,6 +3091,7 @@ enum {
CXT5066_DELL_VOSTRO
,
/* Dell Vostro 1015i */
CXT5066_IDEAPAD
,
/* Lenovo IdeaPad U150 */
CXT5066_THINKPAD
,
/* Lenovo ThinkPad T410s, others? */
CXT5066_ASUS
,
/* Asus K52JU, Lenovo G560 - Int mic at 0x1a and Ext mic at 0x1b */
CXT5066_HP_LAPTOP
,
/* HP Laptop */
CXT5066_MODELS
};
...
...
@@ -3091,6 +3103,7 @@ static const char * const cxt5066_models[CXT5066_MODELS] = {
[
CXT5066_DELL_VOSTRO
]
=
"dell-vostro"
,
[
CXT5066_IDEAPAD
]
=
"ideapad"
,
[
CXT5066_THINKPAD
]
=
"thinkpad"
,
[
CXT5066_ASUS
]
=
"asus"
,
[
CXT5066_HP_LAPTOP
]
=
"hp-laptop"
,
};
...
...
@@ -3102,7 +3115,9 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
SND_PCI_QUIRK
(
0x1028
,
0x0402
,
"Dell Vostro"
,
CXT5066_DELL_VOSTRO
),
SND_PCI_QUIRK
(
0x1028
,
0x0408
,
"Dell Inspiron One 19T"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x103c
,
0x360b
,
"HP G60"
,
CXT5066_HP_LAPTOP
),
SND_PCI_QUIRK
(
0x1043
,
0x13f3
,
"Asus A52J"
,
CXT5066_HP_LAPTOP
),
SND_PCI_QUIRK
(
0x1043
,
0x13f3
,
"Asus A52J"
,
CXT5066_ASUS
),
SND_PCI_QUIRK
(
0x1043
,
0x1643
,
"Asus K52JU"
,
CXT5066_ASUS
),
SND_PCI_QUIRK
(
0x1043
,
0x1993
,
"Asus U50F"
,
CXT5066_ASUS
),
SND_PCI_QUIRK
(
0x1179
,
0xff1e
,
"Toshiba Satellite C650D"
,
CXT5066_IDEAPAD
),
SND_PCI_QUIRK
(
0x1179
,
0xff50
,
"Toshiba Satellite P500-PSPGSC-01800T"
,
CXT5066_OLPC_XO_1_5
),
SND_PCI_QUIRK
(
0x1179
,
0xffe0
,
"Toshiba Satellite Pro T130-15F"
,
CXT5066_OLPC_XO_1_5
),
...
...
@@ -3111,7 +3126,9 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
SND_PCI_QUIRK
(
0x152d
,
0x0833
,
"OLPC XO-1.5"
,
CXT5066_OLPC_XO_1_5
),
SND_PCI_QUIRK
(
0x17aa
,
0x20f2
,
"Lenovo T400s"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21c5
,
"Thinkpad Edge 13"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x21c6
,
"Thinkpad Edge 13"
,
CXT5066_ASUS
),
SND_PCI_QUIRK
(
0x17aa
,
0x215e
,
"Lenovo Thinkpad"
,
CXT5066_THINKPAD
),
SND_PCI_QUIRK
(
0x17aa
,
0x38af
,
"Lenovo G560"
,
CXT5066_ASUS
),
SND_PCI_QUIRK_VENDOR
(
0x17aa
,
"Lenovo"
,
CXT5066_IDEAPAD
),
/* Fallback for Lenovos without dock mic */
{}
};
...
...
@@ -3133,7 +3150,8 @@ static int patch_cxt5066(struct hda_codec *codec)
spec
->
multiout
.
max_channels
=
2
;
spec
->
multiout
.
num_dacs
=
ARRAY_SIZE
(
cxt5066_dac_nids
);
spec
->
multiout
.
dac_nids
=
cxt5066_dac_nids
;
spec
->
multiout
.
dig_out_nid
=
CXT5066_SPDIF_OUT
;
conexant_check_dig_outs
(
codec
,
cxt5066_digout_pin_nids
,
ARRAY_SIZE
(
cxt5066_digout_pin_nids
));
spec
->
num_adc_nids
=
1
;
spec
->
adc_nids
=
cxt5066_adc_nids
;
spec
->
capsrc_nids
=
cxt5066_capsrc_nids
;
...
...
@@ -3167,17 +3185,20 @@ static int patch_cxt5066(struct hda_codec *codec)
spec
->
num_init_verbs
++
;
spec
->
dell_automute
=
1
;
break
;
case
CXT5066_ASUS
:
case
CXT5066_HP_LAPTOP
:
codec
->
patch_ops
.
init
=
cxt5066_init
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_
hp_laptop
_event
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_
unsol
_event
;
spec
->
init_verbs
[
spec
->
num_init_verbs
]
=
cxt5066_init_verbs_hp_laptop
;
spec
->
num_init_verbs
++
;
spec
->
hp_laptop
=
1
;
spec
->
hp_laptop
=
board_config
==
CXT5066_HP_LAPTOP
;
spec
->
asus
=
board_config
==
CXT5066_ASUS
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixer_master
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixers
;
/* no S/PDIF out */
spec
->
multiout
.
dig_out_nid
=
0
;
if
(
board_config
==
CXT5066_HP_LAPTOP
)
spec
->
multiout
.
dig_out_nid
=
0
;
/* input source automatically selected */
spec
->
input_mux
=
NULL
;
spec
->
port_d_mode
=
0
;
...
...
@@ -3207,7 +3228,7 @@ static int patch_cxt5066(struct hda_codec *codec)
break
;
case
CXT5066_DELL_VOSTRO
:
codec
->
patch_ops
.
init
=
cxt5066_init
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_
vostro
_event
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_
unsol
_event
;
spec
->
init_verbs
[
0
]
=
cxt5066_init_verbs_vostro
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixer_master_olpc
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixers
;
...
...
@@ -3224,7 +3245,7 @@ static int patch_cxt5066(struct hda_codec *codec)
break
;
case
CXT5066_IDEAPAD
:
codec
->
patch_ops
.
init
=
cxt5066_init
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_
ideapad
_event
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_
unsol
_event
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixer_master
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixers
;
spec
->
init_verbs
[
0
]
=
cxt5066_init_verbs_ideapad
;
...
...
@@ -3240,7 +3261,7 @@ static int patch_cxt5066(struct hda_codec *codec)
break
;
case
CXT5066_THINKPAD
:
codec
->
patch_ops
.
init
=
cxt5066_init
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_
thinkpad
_event
;
codec
->
patch_ops
.
unsol_event
=
cxt5066_
unsol
_event
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixer_master
;
spec
->
mixers
[
spec
->
num_mixers
++
]
=
cxt5066_mixers
;
spec
->
init_verbs
[
0
]
=
cxt5066_init_verbs_thinkpad
;
...
...
@@ -3389,7 +3410,7 @@ static void cx_auto_parse_output(struct hda_codec *codec)
}
}
spec
->
multiout
.
dac_nids
=
spec
->
private_dac_nids
;
spec
->
multiout
.
max_channels
=
num
s
*
2
;
spec
->
multiout
.
max_channels
=
spec
->
multiout
.
num_dac
s
*
2
;
if
(
cfg
->
hp_outs
>
0
)
spec
->
auto_mute
=
1
;
...
...
@@ -3708,9 +3729,9 @@ static int cx_auto_init(struct hda_codec *codec)
return
0
;
}
static
int
cx_auto_add_volume
(
struct
hda_codec
*
codec
,
const
char
*
basename
,
static
int
cx_auto_add_volume
_idx
(
struct
hda_codec
*
codec
,
const
char
*
basename
,
const
char
*
dir
,
int
cidx
,
hda_nid_t
nid
,
int
hda_dir
)
hda_nid_t
nid
,
int
hda_dir
,
int
amp_idx
)
{
static
char
name
[
32
];
static
struct
snd_kcontrol_new
knew
[]
=
{
...
...
@@ -3722,7 +3743,8 @@ static int cx_auto_add_volume(struct hda_codec *codec, const char *basename,
for
(
i
=
0
;
i
<
2
;
i
++
)
{
struct
snd_kcontrol
*
kctl
;
knew
[
i
].
private_value
=
HDA_COMPOSE_AMP_VAL
(
nid
,
3
,
0
,
hda_dir
);
knew
[
i
].
private_value
=
HDA_COMPOSE_AMP_VAL
(
nid
,
3
,
amp_idx
,
hda_dir
);
knew
[
i
].
subdevice
=
HDA_SUBDEV_AMP_FLAG
;
knew
[
i
].
index
=
cidx
;
snprintf
(
name
,
sizeof
(
name
),
"%s%s %s"
,
basename
,
dir
,
sfx
[
i
]);
...
...
@@ -3738,6 +3760,9 @@ static int cx_auto_add_volume(struct hda_codec *codec, const char *basename,
return
0
;
}
#define cx_auto_add_volume(codec, str, dir, cidx, nid, hda_dir) \
cx_auto_add_volume_idx(codec, str, dir, cidx, nid, hda_dir, 0)
#define cx_auto_add_pb_volume(codec, nid, str, idx) \
cx_auto_add_volume(codec, str, " Playback", idx, nid, HDA_OUTPUT)
...
...
@@ -3787,29 +3812,60 @@ static int cx_auto_build_input_controls(struct hda_codec *codec)
struct
conexant_spec
*
spec
=
codec
->
spec
;
struct
auto_pin_cfg
*
cfg
=
&
spec
->
autocfg
;
static
const
char
*
prev_label
;
int
i
,
err
,
cidx
;
int
i
,
err
,
cidx
,
conn_len
;
hda_nid_t
conn
[
HDA_MAX_CONNECTIONS
];
int
multi_adc_volume
=
0
;
/* If the ADC nid has several input volumes */
int
adc_nid
=
spec
->
adc_nids
[
0
];
conn_len
=
snd_hda_get_connections
(
codec
,
adc_nid
,
conn
,
HDA_MAX_CONNECTIONS
);
if
(
conn_len
<
0
)
return
conn_len
;
multi_adc_volume
=
cfg
->
num_inputs
>
1
&&
conn_len
>
1
;
if
(
!
multi_adc_volume
)
{
err
=
cx_auto_add_volume
(
codec
,
"Capture"
,
""
,
0
,
adc_nid
,
HDA_INPUT
);
if
(
err
<
0
)
return
err
;
}
err
=
cx_auto_add_volume
(
codec
,
"Capture"
,
""
,
0
,
spec
->
adc_nids
[
0
],
HDA_INPUT
);
if
(
err
<
0
)
return
err
;
prev_label
=
NULL
;
cidx
=
0
;
for
(
i
=
0
;
i
<
cfg
->
num_inputs
;
i
++
)
{
hda_nid_t
nid
=
cfg
->
inputs
[
i
].
pin
;
const
char
*
label
;
if
(
!
(
get_wcaps
(
codec
,
nid
)
&
AC_WCAP_IN_AMP
))
int
j
;
int
pin_amp
=
get_wcaps
(
codec
,
nid
)
&
AC_WCAP_IN_AMP
;
if
(
!
pin_amp
&&
!
multi_adc_volume
)
continue
;
label
=
hda_get_autocfg_input_label
(
codec
,
cfg
,
i
);
if
(
label
==
prev_label
)
cidx
++
;
else
cidx
=
0
;
prev_label
=
label
;
err
=
cx_auto_add_volume
(
codec
,
label
,
" Capture"
,
cidx
,
nid
,
HDA_INPUT
);
if
(
err
<
0
)
return
err
;
if
(
pin_amp
)
{
err
=
cx_auto_add_volume
(
codec
,
label
,
" Boost"
,
cidx
,
nid
,
HDA_INPUT
);
if
(
err
<
0
)
return
err
;
}
if
(
!
multi_adc_volume
)
continue
;
for
(
j
=
0
;
j
<
conn_len
;
j
++
)
{
if
(
conn
[
j
]
==
nid
)
{
err
=
cx_auto_add_volume_idx
(
codec
,
label
,
" Capture"
,
cidx
,
adc_nid
,
HDA_INPUT
,
j
);
if
(
err
<
0
)
return
err
;
break
;
}
}
}
return
0
;
}
...
...
sound/pci/hda/patch_hdmi.c
浏览文件 @
cc99a086
...
...
@@ -642,6 +642,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid,
hdmi_ai
->
ver
=
0x01
;
hdmi_ai
->
len
=
0x0a
;
hdmi_ai
->
CC02_CT47
=
channels
-
1
;
hdmi_ai
->
CA
=
ca
;
hdmi_checksum_audio_infoframe
(
hdmi_ai
);
}
else
if
(
spec
->
sink_eld
[
i
].
conn_type
==
1
)
{
/* DisplayPort */
struct
dp_audio_infoframe
*
dp_ai
;
...
...
@@ -651,6 +652,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid,
dp_ai
->
len
=
0x1b
;
dp_ai
->
ver
=
0x11
<<
2
;
dp_ai
->
CC02_CT47
=
channels
-
1
;
dp_ai
->
CA
=
ca
;
}
else
{
snd_printd
(
"HDMI: unknown connection type at pin %d
\n
"
,
pin_nid
);
...
...
sound/pci/hda/patch_realtek.c
浏览文件 @
cc99a086
...
...
@@ -2290,6 +2290,29 @@ static struct snd_kcontrol_new alc888_base_mixer[] = {
{ } /* end */
};
static struct snd_kcontrol_new alc888_acer_aspire_4930g_mixer[] = {
HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT),
HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT),
HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0f, 2, 0x0,
HDA_OUTPUT),
HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0f, 2, 2, HDA_INPUT),
HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0f, 1, 0x0, HDA_OUTPUT),
HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0f, 1, 2, HDA_INPUT),
HDA_CODEC_VOLUME("Side Playback Volume", 0x0e, 0x0, HDA_OUTPUT),
HDA_BIND_MUTE("Side Playback Switch", 0x0e, 2, HDA_INPUT),
HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT),
HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
{ } /* end */
};
static struct snd_kcontrol_new alc889_acer_aspire_8930g_mixer[] = {
HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
...
...
@@ -10359,7 +10382,7 @@ static struct alc_config_preset alc882_presets[] = {
.init_hook = alc_automute_amp,
},
[ALC888_ACER_ASPIRE_4930G] = {
.mixers = { alc888_
base
_mixer,
.mixers = { alc888_
acer_aspire_4930g
_mixer,
alc883_chmode_mixer },
.init_verbs = { alc883_init_verbs, alc880_gpio1_init_verbs,
alc888_acer_aspire_4930g_verbs },
...
...
@@ -14954,9 +14977,11 @@ static struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE),
SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE),
SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE),
SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE),
SND_PCI_QUIRK(0x17aa, 0x21ca, "Thinkpad L412", ALC269_FIXUP_SKU_IGNORE),
SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE),
SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
{}
...
...
@@ -18800,6 +18825,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = {
ALC662_3ST_6ch_DIG),
SND_PCI_QUIRK_MASK(0x1854, 0xf000, 0x2000, "ASUS H13-200x",
ALC663_ASUS_H13),
SND_PCI_QUIRK(0x1991, 0x5628, "Ordissimo EVE", ALC662_LENOVO_101E),
{}
};
...
...
@@ -19492,6 +19518,7 @@ static const struct alc_fixup alc662_fixups[] = {
};
static struct snd_pci_quirk alc662_fixup_tbl[] = {
SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE),
SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
...
...
sound/pci/hda/patch_via.c
浏览文件 @
cc99a086
...
...
@@ -567,7 +567,7 @@ static void via_auto_init_analog_input(struct hda_codec *codec)
hda_nid_t
nid
=
cfg
->
inputs
[
i
].
pin
;
if
(
spec
->
smart51_enabled
&&
is_smart51_pins
(
spec
,
nid
))
ctl
=
PIN_OUT
;
else
if
(
i
==
AUTO_PIN_MIC
)
else
if
(
cfg
->
inputs
[
i
].
type
==
AUTO_PIN_MIC
)
ctl
=
PIN_VREF50
;
else
ctl
=
PIN_IN
;
...
...
sound/pci/oxygen/oxygen.h
浏览文件 @
cc99a086
...
...
@@ -92,6 +92,8 @@ struct oxygen_model {
void
(
*
update_dac_volume
)(
struct
oxygen
*
chip
);
void
(
*
update_dac_mute
)(
struct
oxygen
*
chip
);
void
(
*
update_center_lfe_mix
)(
struct
oxygen
*
chip
,
bool
mixed
);
unsigned
int
(
*
adjust_dac_routing
)(
struct
oxygen
*
chip
,
unsigned
int
play_routing
);
void
(
*
gpio_changed
)(
struct
oxygen
*
chip
);
void
(
*
uart_input
)(
struct
oxygen
*
chip
);
void
(
*
ac97_switch
)(
struct
oxygen
*
chip
,
...
...
sound/pci/oxygen/oxygen_mixer.c
浏览文件 @
cc99a086
...
...
@@ -180,6 +180,8 @@ void oxygen_update_dac_routing(struct oxygen *chip)
(
1
<<
OXYGEN_PLAY_DAC1_SOURCE_SHIFT
)
|
(
2
<<
OXYGEN_PLAY_DAC2_SOURCE_SHIFT
)
|
(
3
<<
OXYGEN_PLAY_DAC3_SOURCE_SHIFT
);
if
(
chip
->
model
.
adjust_dac_routing
)
reg_value
=
chip
->
model
.
adjust_dac_routing
(
chip
,
reg_value
);
oxygen_write16_masked
(
chip
,
OXYGEN_PLAY_ROUTING
,
reg_value
,
OXYGEN_PLAY_DAC0_SOURCE_MASK
|
OXYGEN_PLAY_DAC1_SOURCE_MASK
|
...
...
sound/pci/oxygen/xonar_dg.c
浏览文件 @
cc99a086
...
...
@@ -24,6 +24,11 @@
*
* SPI 0 -> CS4245
*
* I²S 1 -> CS4245
* I²S 2 -> CS4361 (center/LFE)
* I²S 3 -> CS4361 (surround)
* I²S 4 -> CS4361 (front)
*
* GPIO 3 <- ?
* GPIO 4 <- headphone detect
* GPIO 5 -> route input jack to line-in (0) or mic-in (1)
...
...
@@ -36,6 +41,7 @@
* input 1 <- aux
* input 2 <- front mic
* input 4 <- line/mic
* DAC out -> headphones
* aux out -> front panel headphones
*/
...
...
@@ -207,6 +213,35 @@ static void set_cs4245_adc_params(struct oxygen *chip,
cs4245_write_cached
(
chip
,
CS4245_ADC_CTRL
,
value
);
}
static
inline
unsigned
int
shift_bits
(
unsigned
int
value
,
unsigned
int
shift_from
,
unsigned
int
shift_to
,
unsigned
int
mask
)
{
if
(
shift_from
<
shift_to
)
return
(
value
<<
(
shift_to
-
shift_from
))
&
mask
;
else
return
(
value
>>
(
shift_from
-
shift_to
))
&
mask
;
}
static
unsigned
int
adjust_dg_dac_routing
(
struct
oxygen
*
chip
,
unsigned
int
play_routing
)
{
return
(
play_routing
&
OXYGEN_PLAY_DAC0_SOURCE_MASK
)
|
shift_bits
(
play_routing
,
OXYGEN_PLAY_DAC2_SOURCE_SHIFT
,
OXYGEN_PLAY_DAC1_SOURCE_SHIFT
,
OXYGEN_PLAY_DAC1_SOURCE_MASK
)
|
shift_bits
(
play_routing
,
OXYGEN_PLAY_DAC1_SOURCE_SHIFT
,
OXYGEN_PLAY_DAC2_SOURCE_SHIFT
,
OXYGEN_PLAY_DAC2_SOURCE_MASK
)
|
shift_bits
(
play_routing
,
OXYGEN_PLAY_DAC0_SOURCE_SHIFT
,
OXYGEN_PLAY_DAC3_SOURCE_SHIFT
,
OXYGEN_PLAY_DAC3_SOURCE_MASK
);
}
static
int
output_switch_info
(
struct
snd_kcontrol
*
ctl
,
struct
snd_ctl_elem_info
*
info
)
{
...
...
@@ -557,6 +592,7 @@ struct oxygen_model model_xonar_dg = {
.
resume
=
dg_resume
,
.
set_dac_params
=
set_cs4245_dac_params
,
.
set_adc_params
=
set_cs4245_adc_params
,
.
adjust_dac_routing
=
adjust_dg_dac_routing
,
.
dump_registers
=
dump_cs4245_registers
,
.
model_data_size
=
sizeof
(
struct
dg
),
.
device_config
=
PLAYBACK_0_TO_I2S
|
...
...
sound/pcmcia/pdaudiocf/pdaudiocf.h
浏览文件 @
cc99a086
...
...
@@ -22,7 +22,7 @@
#define __PDAUDIOCF_H
#include <sound/pcm.h>
#include <
asm
/io.h>
#include <
linux
/io.h>
#include <linux/interrupt.h>
#include <pcmcia/cistpl.h>
#include <pcmcia/ds.h>
...
...
sound/pcmcia/vx/vxp_ops.c
浏览文件 @
cc99a086
...
...
@@ -23,8 +23,8 @@
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/firmware.h>
#include <linux/io.h>
#include <sound/core.h>
#include <asm/io.h>
#include "vxpocket.h"
...
...
sound/soc/atmel/snd-soc-afeb9260.c
浏览文件 @
cc99a086
...
...
@@ -129,7 +129,7 @@ static struct snd_soc_dai_link afeb9260_dai = {
.
cpu_dai_name
=
"atmel-ssc-dai.0"
,
.
codec_dai_name
=
"tlv320aic23-hifi"
,
.
platform_name
=
"atmel_pcm-audio"
,
.
codec_name
=
"tlv320aic23-codec.0-0
x
1a"
,
.
codec_name
=
"tlv320aic23-codec.0-0
0
1a"
,
.
init
=
afeb9260_tlv320aic23_init
,
.
ops
=
&
afeb9260_ops
,
};
...
...
sound/soc/blackfin/bf5xx-ssm2602.c
浏览文件 @
cc99a086
...
...
@@ -119,7 +119,7 @@ static struct snd_soc_dai_link bf5xx_ssm2602_dai = {
.
cpu_dai_name
=
"bf5xx-i2s"
,
.
codec_dai_name
=
"ssm2602-hifi"
,
.
platform_name
=
"bf5xx-pcm-audio"
,
.
codec_name
=
"ssm2602-codec.0-0
x
1b"
,
.
codec_name
=
"ssm2602-codec.0-0
0
1b"
,
.
ops
=
&
bf5xx_ssm2602_ops
,
};
...
...
sound/soc/codecs/cq93vc.c
浏览文件 @
cc99a086
...
...
@@ -153,7 +153,7 @@ static int cq93vc_resume(struct snd_soc_codec *codec)
static
int
cq93vc_probe
(
struct
snd_soc_codec
*
codec
)
{
struct
davinci_vc
*
davinci_vc
=
codec
->
dev
->
platform_data
;
struct
davinci_vc
*
davinci_vc
=
snd_soc_codec_get_drvdata
(
codec
)
;
davinci_vc
->
cq93vc
.
codec
=
codec
;
codec
->
control_data
=
davinci_vc
;
...
...
sound/soc/codecs/cx20442.c
浏览文件 @
cc99a086
...
...
@@ -367,9 +367,12 @@ static int cx20442_codec_remove(struct snd_soc_codec *codec)
return
0
;
}
static
const
u8
cx20442_reg
=
CX20442_TELOUT
|
CX20442_MIC
;
static
struct
snd_soc_codec_driver
cx20442_codec_dev
=
{
.
probe
=
cx20442_codec_probe
,
.
remove
=
cx20442_codec_remove
,
.
reg_cache_default
=
&
cx20442_reg
,
.
reg_cache_size
=
1
,
.
reg_word_size
=
sizeof
(
u8
),
.
read
=
cx20442_read_reg_cache
,
...
...
sound/soc/codecs/wm8994.c
浏览文件 @
cc99a086
...
...
@@ -1287,9 +1287,9 @@ SND_SOC_DAPM_SUPPLY("DSPINTCLK", WM8994_CLOCKING_1, 1, 0, NULL, 0),
SND_SOC_DAPM_SUPPLY
(
"AIF1CLK"
,
WM8994_AIF1_CLOCKING_1
,
0
,
0
,
NULL
,
0
),
SND_SOC_DAPM_SUPPLY
(
"AIF2CLK"
,
WM8994_AIF2_CLOCKING_1
,
0
,
0
,
NULL
,
0
),
SND_SOC_DAPM_AIF_OUT
(
"AIF1ADC1L"
,
"AIF1 Capture"
,
SND_SOC_DAPM_AIF_OUT
(
"AIF1ADC1L"
,
NULL
,
0
,
WM8994_POWER_MANAGEMENT_4
,
9
,
0
),
SND_SOC_DAPM_AIF_OUT
(
"AIF1ADC1R"
,
"AIF1 Capture"
,
SND_SOC_DAPM_AIF_OUT
(
"AIF1ADC1R"
,
NULL
,
0
,
WM8994_POWER_MANAGEMENT_4
,
8
,
0
),
SND_SOC_DAPM_AIF_IN_E
(
"AIF1DAC1L"
,
NULL
,
0
,
WM8994_POWER_MANAGEMENT_5
,
9
,
0
,
wm8958_aif_ev
,
...
...
@@ -1298,9 +1298,9 @@ SND_SOC_DAPM_AIF_IN_E("AIF1DAC1R", NULL, 0,
WM8994_POWER_MANAGEMENT_5
,
8
,
0
,
wm8958_aif_ev
,
SND_SOC_DAPM_POST_PMU
|
SND_SOC_DAPM_POST_PMD
),
SND_SOC_DAPM_AIF_OUT
(
"AIF1ADC2L"
,
"AIF1 Capture"
,
SND_SOC_DAPM_AIF_OUT
(
"AIF1ADC2L"
,
NULL
,
0
,
WM8994_POWER_MANAGEMENT_4
,
11
,
0
),
SND_SOC_DAPM_AIF_OUT
(
"AIF1ADC2R"
,
"AIF1 Capture"
,
SND_SOC_DAPM_AIF_OUT
(
"AIF1ADC2R"
,
NULL
,
0
,
WM8994_POWER_MANAGEMENT_4
,
10
,
0
),
SND_SOC_DAPM_AIF_IN_E
(
"AIF1DAC2L"
,
NULL
,
0
,
WM8994_POWER_MANAGEMENT_5
,
11
,
0
,
wm8958_aif_ev
,
...
...
@@ -1345,6 +1345,7 @@ SND_SOC_DAPM_AIF_IN_E("AIF2DACR", NULL, 0,
SND_SOC_DAPM_AIF_IN
(
"AIF1DACDAT"
,
"AIF1 Playback"
,
0
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_AIF_IN
(
"AIF2DACDAT"
,
"AIF2 Playback"
,
0
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_AIF_OUT
(
"AIF1ADCDAT"
,
"AIF1 Capture"
,
0
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_AIF_OUT
(
"AIF2ADCDAT"
,
"AIF2 Capture"
,
0
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_MUX
(
"AIF1DAC Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
aif1dac_mux
),
...
...
@@ -1546,6 +1547,11 @@ static const struct snd_soc_dapm_route intercon[] = {
{
"AIF2DAC2R Mixer"
,
"Left Sidetone Switch"
,
"Left Sidetone"
},
{
"AIF2DAC2R Mixer"
,
"Right Sidetone Switch"
,
"Right Sidetone"
},
{
"AIF1ADCDAT"
,
NULL
,
"AIF1ADC1L"
},
{
"AIF1ADCDAT"
,
NULL
,
"AIF1ADC1R"
},
{
"AIF1ADCDAT"
,
NULL
,
"AIF1ADC2L"
},
{
"AIF1ADCDAT"
,
NULL
,
"AIF1ADC2R"
},
{
"AIF2ADCDAT"
,
NULL
,
"AIF2ADC Mux"
},
/* AIF3 output */
...
...
@@ -1578,6 +1584,13 @@ static const struct snd_soc_dapm_route intercon[] = {
{
"Right Headphone Mux"
,
"DAC"
,
"DAC1R"
},
};
static
const
struct
snd_soc_dapm_route
wm8994_revd_intercon
[]
=
{
{
"AIF1DACDAT"
,
NULL
,
"AIF2DACDAT"
},
{
"AIF2DACDAT"
,
NULL
,
"AIF1DACDAT"
},
{
"AIF1ADCDAT"
,
NULL
,
"AIF2ADCDAT"
},
{
"AIF2ADCDAT"
,
NULL
,
"AIF1ADCDAT"
},
};
static
const
struct
snd_soc_dapm_route
wm8994_intercon
[]
=
{
{
"AIF2DACL"
,
NULL
,
"AIF2DAC Mux"
},
{
"AIF2DACR"
,
NULL
,
"AIF2DAC Mux"
},
...
...
@@ -2386,7 +2399,7 @@ static int wm8994_set_tristate(struct snd_soc_dai *codec_dai, int tristate)
else
val
=
0
;
return
snd_soc_update_bits
(
codec
,
reg
,
mask
,
reg
);
return
snd_soc_update_bits
(
codec
,
reg
,
mask
,
val
);
}
#define WM8994_RATES SNDRV_PCM_RATE_8000_96000
...
...
@@ -3129,6 +3142,11 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec)
case
WM8994
:
snd_soc_dapm_add_routes
(
dapm
,
wm8994_intercon
,
ARRAY_SIZE
(
wm8994_intercon
));
if
(
wm8994
->
revision
<
4
)
snd_soc_dapm_add_routes
(
dapm
,
wm8994_revd_intercon
,
ARRAY_SIZE
(
wm8994_revd_intercon
));
break
;
case
WM8958
:
snd_soc_dapm_add_routes
(
dapm
,
wm8958_intercon
,
...
...
sound/soc/codecs/wm8995.c
浏览文件 @
cc99a086
...
...
@@ -1223,7 +1223,7 @@ static int wm8995_set_tristate(struct snd_soc_dai *codec_dai, int tristate)
else
val
=
0
;
return
snd_soc_update_bits
(
codec
,
reg
,
mask
,
reg
);
return
snd_soc_update_bits
(
codec
,
reg
,
mask
,
val
);
}
/* The size in bits of the FLL divide multiplied by 10
...
...
sound/soc/codecs/wm_hubs.c
浏览文件 @
cc99a086
...
...
@@ -91,6 +91,7 @@ static void wait_for_dc_servo(struct snd_soc_codec *codec, unsigned int op)
static
void
calibrate_dc_servo
(
struct
snd_soc_codec
*
codec
)
{
struct
wm_hubs_data
*
hubs
=
snd_soc_codec_get_drvdata
(
codec
);
s8
offset
;
u16
reg
,
reg_l
,
reg_r
,
dcs_cfg
;
/* If we're using a digital only path and have a previously
...
...
@@ -149,16 +150,14 @@ static void calibrate_dc_servo(struct snd_soc_codec *codec)
hubs
->
dcs_codes
);
/* HPOUT1L */
if
(
reg_l
+
hubs
->
dcs_codes
>
0
&&
reg_l
+
hubs
->
dcs_codes
<
0xff
)
reg_l
+=
hubs
->
dcs_codes
;
dcs_cfg
=
reg_l
<<
WM8993_DCS_DAC_WR_VAL_1_SHIFT
;
offset
=
reg_l
;
offset
+=
hubs
->
dcs_codes
;
dcs_cfg
=
(
u8
)
offset
<<
WM8993_DCS_DAC_WR_VAL_1_SHIFT
;
/* HPOUT1R */
if
(
reg_r
+
hubs
->
dcs_codes
>
0
&&
reg_r
+
hubs
->
dcs_codes
<
0xff
)
reg_r
+=
hubs
->
dcs_codes
;
dcs_cfg
|=
reg_r
;
offset
=
reg_r
;
offset
+=
hubs
->
dcs_codes
;
dcs_cfg
|=
(
u8
)
offset
;
dev_dbg
(
codec
->
dev
,
"DCS result: %x
\n
"
,
dcs_cfg
);
...
...
sound/soc/davinci/davinci-evm.c
浏览文件 @
cc99a086
...
...
@@ -218,12 +218,24 @@ static struct snd_soc_dai_link dm6467_evm_dai[] = {
.
ops
=
&
evm_spdif_ops
,
},
};
static
struct
snd_soc_dai_link
da8xx_evm_dai
=
{
static
struct
snd_soc_dai_link
da830_evm_dai
=
{
.
name
=
"TLV320AIC3X"
,
.
stream_name
=
"AIC3X"
,
.
cpu_dai_name
=
"davinci-mcasp.1"
,
.
codec_dai_name
=
"tlv320aic3x-hifi"
,
.
codec_name
=
"tlv320aic3x-codec.1-0018"
,
.
platform_name
=
"davinci-pcm-audio"
,
.
init
=
evm_aic3x_init
,
.
ops
=
&
evm_ops
,
};
static
struct
snd_soc_dai_link
da850_evm_dai
=
{
.
name
=
"TLV320AIC3X"
,
.
stream_name
=
"AIC3X"
,
.
cpu_dai_name
=
"davinci-mcasp.0"
,
.
codec_dai_name
=
"tlv320aic3x-hifi"
,
.
codec_name
=
"tlv320aic3x-codec.
0-001a
"
,
.
codec_name
=
"tlv320aic3x-codec.
1-0018
"
,
.
platform_name
=
"davinci-pcm-audio"
,
.
init
=
evm_aic3x_init
,
.
ops
=
&
evm_ops
,
...
...
@@ -259,13 +271,13 @@ static struct snd_soc_card dm6467_snd_soc_card_evm = {
static
struct
snd_soc_card
da830_snd_soc_card
=
{
.
name
=
"DA830/OMAP-L137 EVM"
,
.
dai_link
=
&
da8
xx
_evm_dai
,
.
dai_link
=
&
da8
30
_evm_dai
,
.
num_links
=
1
,
};
static
struct
snd_soc_card
da850_snd_soc_card
=
{
.
name
=
"DA850/OMAP-L138 EVM"
,
.
dai_link
=
&
da8
xx
_evm_dai
,
.
dai_link
=
&
da8
50
_evm_dai
,
.
num_links
=
1
,
};
...
...
sound/soc/omap/ams-delta.c
浏览文件 @
cc99a086
...
...
@@ -507,8 +507,6 @@ static int ams_delta_cx20442_init(struct snd_soc_pcm_runtime *rtd)
/* Set up digital mute if not provided by the codec */
if
(
!
codec_dai
->
driver
->
ops
)
{
codec_dai
->
driver
->
ops
=
&
ams_delta_dai_ops
;
}
else
if
(
!
codec_dai
->
driver
->
ops
->
digital_mute
)
{
codec_dai
->
driver
->
ops
->
digital_mute
=
ams_delta_digital_mute
;
}
else
{
ams_delta_ops
.
startup
=
ams_delta_startup
;
ams_delta_ops
.
shutdown
=
ams_delta_shutdown
;
...
...
sound/soc/pxa/corgi.c
浏览文件 @
cc99a086
...
...
@@ -307,10 +307,10 @@ static int corgi_wm8731_init(struct snd_soc_pcm_runtime *rtd)
static
struct
snd_soc_dai_link
corgi_dai
=
{
.
name
=
"WM8731"
,
.
stream_name
=
"WM8731"
,
.
cpu_dai_name
=
"pxa
-is2-dai
"
,
.
cpu_dai_name
=
"pxa
2xx-i2s
"
,
.
codec_dai_name
=
"wm8731-hifi"
,
.
platform_name
=
"pxa-pcm-audio"
,
.
codec_name
=
"wm8731-codec-0.001
a
"
,
.
codec_name
=
"wm8731-codec-0.001
b
"
,
.
init
=
corgi_wm8731_init
,
.
ops
=
&
corgi_ops
,
};
...
...
sound/soc/pxa/poodle.c
浏览文件 @
cc99a086
...
...
@@ -276,7 +276,7 @@ static struct snd_soc_dai_link poodle_dai = {
.
cpu_dai_name
=
"pxa2xx-i2s"
,
.
codec_dai_name
=
"wm8731-hifi"
,
.
platform_name
=
"pxa-pcm-audio"
,
.
codec_name
=
"wm8731-codec.0-001
a
"
,
.
codec_name
=
"wm8731-codec.0-001
b
"
,
.
init
=
poodle_wm8731_init
,
.
ops
=
&
poodle_ops
,
};
...
...
sound/soc/pxa/spitz.c
浏览文件 @
cc99a086
...
...
@@ -315,10 +315,10 @@ static int spitz_wm8750_init(struct snd_soc_pcm_runtime *rtd)
static
struct
snd_soc_dai_link
spitz_dai
=
{
.
name
=
"wm8750"
,
.
stream_name
=
"WM8750"
,
.
cpu_dai_name
=
"pxa
-is2
"
,
.
cpu_dai_name
=
"pxa
2xx-i2s
"
,
.
codec_dai_name
=
"wm8750-hifi"
,
.
platform_name
=
"pxa-pcm-audio"
,
.
codec_name
=
"wm8750-codec.0-001
a
"
,
.
codec_name
=
"wm8750-codec.0-001
b
"
,
.
init
=
spitz_wm8750_init
,
.
ops
=
&
spitz_ops
,
};
...
...
sound/soc/samsung/neo1973_gta02_wm8753.c
浏览文件 @
cc99a086
...
...
@@ -397,11 +397,11 @@ static struct snd_soc_dai_link neo1973_gta02_dai[] = {
{
/* Hifi Playback - for similatious use with voice below */
.
name
=
"WM8753"
,
.
stream_name
=
"WM8753 HiFi"
,
.
cpu_dai_name
=
"s3c24xx-i
2
s"
,
.
cpu_dai_name
=
"s3c24xx-i
i
s"
,
.
codec_dai_name
=
"wm8753-hifi"
,
.
init
=
neo1973_gta02_wm8753_init
,
.
platform_name
=
"samsung-audio"
,
.
codec_name
=
"wm8753-codec.0-0
x
1a"
,
.
codec_name
=
"wm8753-codec.0-0
0
1a"
,
.
ops
=
&
neo1973_gta02_hifi_ops
,
},
{
/* Voice via BT */
...
...
@@ -410,7 +410,7 @@ static struct snd_soc_dai_link neo1973_gta02_dai[] = {
.
cpu_dai_name
=
"bluetooth-dai"
,
.
codec_dai_name
=
"wm8753-voice"
,
.
ops
=
&
neo1973_gta02_voice_ops
,
.
codec_name
=
"wm8753-codec.0-0
x
1a"
,
.
codec_name
=
"wm8753-codec.0-0
0
1a"
,
.
platform_name
=
"samsung-audio"
,
},
};
...
...
sound/soc/samsung/neo1973_wm8753.c
浏览文件 @
cc99a086
...
...
@@ -559,9 +559,9 @@ static struct snd_soc_dai_link neo1973_dai[] = {
.
name
=
"WM8753"
,
.
stream_name
=
"WM8753 HiFi"
,
.
platform_name
=
"samsung-audio"
,
.
cpu_dai_name
=
"s3c24xx-i
2
s"
,
.
cpu_dai_name
=
"s3c24xx-i
i
s"
,
.
codec_dai_name
=
"wm8753-hifi"
,
.
codec_name
=
"wm8753-codec.0-0
x
1a"
,
.
codec_name
=
"wm8753-codec.0-0
0
1a"
,
.
init
=
neo1973_wm8753_init
,
.
ops
=
&
neo1973_hifi_ops
,
},
...
...
@@ -571,7 +571,7 @@ static struct snd_soc_dai_link neo1973_dai[] = {
.
platform_name
=
"samsung-audio"
,
.
cpu_dai_name
=
"bluetooth-dai"
,
.
codec_dai_name
=
"wm8753-voice"
,
.
codec_name
=
"wm8753-codec.0-0
x
1a"
,
.
codec_name
=
"wm8753-codec.0-0
0
1a"
,
.
ops
=
&
neo1973_voice_ops
,
},
};
...
...
sound/soc/samsung/s3c24xx_simtec_hermes.c
浏览文件 @
cc99a086
...
...
@@ -94,8 +94,8 @@ static int simtec_hermes_init(struct snd_soc_pcm_runtime *rtd)
static
struct
snd_soc_dai_link
simtec_dai_aic33
=
{
.
name
=
"tlv320aic33"
,
.
stream_name
=
"TLV320AIC33"
,
.
codec_name
=
"tlv320aic3x-codec.0-0
x
1a"
,
.
cpu_dai_name
=
"s3c24xx-i
2
s"
,
.
codec_name
=
"tlv320aic3x-codec.0-0
0
1a"
,
.
cpu_dai_name
=
"s3c24xx-i
i
s"
,
.
codec_dai_name
=
"tlv320aic3x-hifi"
,
.
platform_name
=
"samsung-audio"
,
.
init
=
simtec_hermes_init
,
...
...
sound/soc/samsung/s3c24xx_simtec_tlv320aic23.c
浏览文件 @
cc99a086
...
...
@@ -85,8 +85,8 @@ static int simtec_tlv320aic23_init(struct snd_soc_pcm_runtime *rtd)
static
struct
snd_soc_dai_link
simtec_dai_aic23
=
{
.
name
=
"tlv320aic23"
,
.
stream_name
=
"TLV320AIC23"
,
.
codec_name
=
"tlv320aic3x-codec.0-0
x
1a"
,
.
cpu_dai_name
=
"s3c24xx-i
2
s"
,
.
codec_name
=
"tlv320aic3x-codec.0-0
0
1a"
,
.
cpu_dai_name
=
"s3c24xx-i
i
s"
,
.
codec_dai_name
=
"tlv320aic3x-hifi"
,
.
platform_name
=
"samsung-audio"
,
.
init
=
simtec_tlv320aic23_init
,
...
...
sound/soc/samsung/s3c24xx_uda134x.c
浏览文件 @
cc99a086
...
...
@@ -228,7 +228,7 @@ static struct snd_soc_dai_link s3c24xx_uda134x_dai_link = {
.
stream_name
=
"UDA134X"
,
.
codec_name
=
"uda134x-hifi"
,
.
codec_dai_name
=
"uda134x-hifi"
,
.
cpu_dai_name
=
"s3c24xx-i
2
s"
,
.
cpu_dai_name
=
"s3c24xx-i
i
s"
,
.
ops
=
&
s3c24xx_uda134x_ops
,
.
platform_name
=
"samsung-audio"
,
};
...
...
sound/soc/soc-core.c
浏览文件 @
cc99a086
...
...
@@ -1449,6 +1449,7 @@ static int soc_post_component_init(struct snd_soc_card *card,
rtd
=
&
card
->
rtd_aux
[
num
];
name
=
aux_dev
->
name
;
}
rtd
->
card
=
card
;
/* machine controls, routes and widgets are not prefixed */
temp
=
codec
->
name_prefix
;
...
...
@@ -1471,7 +1472,6 @@ static int soc_post_component_init(struct snd_soc_card *card,
/* register the rtd device */
rtd
->
codec
=
codec
;
rtd
->
card
=
card
;
rtd
->
dev
.
parent
=
card
->
dev
;
rtd
->
dev
.
release
=
rtd_release
;
rtd
->
dev
.
init_name
=
name
;
...
...
@@ -1664,9 +1664,6 @@ static int soc_probe_aux_dev(struct snd_soc_card *card, int num)
goto
out
;
found:
if
(
!
try_module_get
(
codec
->
dev
->
driver
->
owner
))
return
-
ENODEV
;
ret
=
soc_probe_codec
(
card
,
codec
);
if
(
ret
<
0
)
return
ret
;
...
...
sound/soc/soc-dapm.c
浏览文件 @
cc99a086
...
...
@@ -1742,7 +1742,7 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
int
max
=
mc
->
max
;
unsigned
int
mask
=
(
1
<<
fls
(
max
))
-
1
;
unsigned
int
invert
=
mc
->
invert
;
unsigned
int
val
,
val_mask
;
unsigned
int
val
;
int
connect
,
change
;
struct
snd_soc_dapm_update
update
;
...
...
@@ -1750,13 +1750,13 @@ int snd_soc_dapm_put_volsw(struct snd_kcontrol *kcontrol,
if
(
invert
)
val
=
max
-
val
;
val_
mask
=
mask
<<
shift
;
mask
=
mask
<<
shift
;
val
=
val
<<
shift
;
mutex_lock
(
&
widget
->
codec
->
mutex
);
widget
->
value
=
val
;
change
=
snd_soc_test_bits
(
widget
->
codec
,
reg
,
val_
mask
,
val
);
change
=
snd_soc_test_bits
(
widget
->
codec
,
reg
,
mask
,
val
);
if
(
change
)
{
if
(
val
)
/* new connection */
...
...
sound/usb/caiaq/audio.c
浏览文件 @
cc99a086
...
...
@@ -785,7 +785,7 @@ int snd_usb_caiaq_audio_init(struct snd_usb_caiaqdev *dev)
}
dev
->
pcm
->
private_data
=
dev
;
str
cpy
(
dev
->
pcm
->
name
,
dev
->
product_name
);
str
lcpy
(
dev
->
pcm
->
name
,
dev
->
product_name
,
sizeof
(
dev
->
pcm
->
name
)
);
memset
(
dev
->
sub_playback
,
0
,
sizeof
(
dev
->
sub_playback
));
memset
(
dev
->
sub_capture
,
0
,
sizeof
(
dev
->
sub_capture
));
...
...
sound/usb/caiaq/midi.c
浏览文件 @
cc99a086
...
...
@@ -136,7 +136,7 @@ int snd_usb_caiaq_midi_init(struct snd_usb_caiaqdev *device)
if
(
ret
<
0
)
return
ret
;
str
cpy
(
rmidi
->
name
,
device
->
product_name
);
str
lcpy
(
rmidi
->
name
,
device
->
product_name
,
sizeof
(
rmidi
->
name
)
);
rmidi
->
info_flags
=
SNDRV_RAWMIDI_INFO_DUPLEX
;
rmidi
->
private_data
=
device
;
...
...
sound/usb/card.c
浏览文件 @
cc99a086
...
...
@@ -323,6 +323,7 @@ static int snd_usb_audio_create(struct usb_device *dev, int idx,
return
-
ENOMEM
;
}
mutex_init
(
&
chip
->
shutdown_mutex
);
chip
->
index
=
idx
;
chip
->
dev
=
dev
;
chip
->
card
=
card
;
...
...
@@ -531,6 +532,7 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr)
chip
=
ptr
;
card
=
chip
->
card
;
mutex_lock
(
&
register_mutex
);
mutex_lock
(
&
chip
->
shutdown_mutex
);
chip
->
shutdown
=
1
;
chip
->
num_interfaces
--
;
if
(
chip
->
num_interfaces
<=
0
)
{
...
...
@@ -548,9 +550,11 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr)
snd_usb_mixer_disconnect
(
p
);
}
usb_chip
[
chip
->
index
]
=
NULL
;
mutex_unlock
(
&
chip
->
shutdown_mutex
);
mutex_unlock
(
&
register_mutex
);
snd_card_free_when_closed
(
card
);
}
else
{
mutex_unlock
(
&
chip
->
shutdown_mutex
);
mutex_unlock
(
&
register_mutex
);
}
}
...
...
sound/usb/mixer.c
浏览文件 @
cc99a086
...
...
@@ -95,7 +95,7 @@ enum {
};
/*E-mu 0202
(0404)
eXtension Unit(XU) control*/
/*E-mu 0202
/0404/0204
eXtension Unit(XU) control*/
enum
{
USB_XU_CLOCK_RATE
=
0xe301
,
USB_XU_CLOCK_SOURCE
=
0xe302
,
...
...
@@ -1583,7 +1583,7 @@ static int build_audio_procunit(struct mixer_build *state, int unitid, void *raw
cval
->
initialized
=
1
;
}
else
{
if
(
type
==
USB_XU_CLOCK_RATE
)
{
/* E-Mu USB 0404/0202/TrackerPre
/* E-Mu USB 0404/0202/TrackerPre
/0204
* samplerate control quirk
*/
cval
->
min
=
0
;
...
...
sound/usb/pcm.c
浏览文件 @
cc99a086
...
...
@@ -361,6 +361,7 @@ static int snd_usb_hw_params(struct snd_pcm_substream *substream,
}
if
(
changed
)
{
mutex_lock
(
&
subs
->
stream
->
chip
->
shutdown_mutex
);
/* format changed */
snd_usb_release_substream_urbs
(
subs
,
0
);
/* influenced: period_bytes, channels, rate, format, */
...
...
@@ -368,6 +369,7 @@ static int snd_usb_hw_params(struct snd_pcm_substream *substream,
params_rate
(
hw_params
),
snd_pcm_format_physical_width
(
params_format
(
hw_params
))
*
params_channels
(
hw_params
));
mutex_unlock
(
&
subs
->
stream
->
chip
->
shutdown_mutex
);
}
return
ret
;
...
...
@@ -385,8 +387,9 @@ static int snd_usb_hw_free(struct snd_pcm_substream *substream)
subs
->
cur_audiofmt
=
NULL
;
subs
->
cur_rate
=
0
;
subs
->
period_bytes
=
0
;
if
(
!
subs
->
stream
->
chip
->
shutdown
)
snd_usb_release_substream_urbs
(
subs
,
0
);
mutex_lock
(
&
subs
->
stream
->
chip
->
shutdown_mutex
);
snd_usb_release_substream_urbs
(
subs
,
0
);
mutex_unlock
(
&
subs
->
stream
->
chip
->
shutdown_mutex
);
return
snd_pcm_lib_free_vmalloc_buffer
(
substream
);
}
...
...
sound/usb/quirks-table.h
浏览文件 @
cc99a086
...
...
@@ -79,6 +79,13 @@
.
idProduct
=
0x3f0a
,
.
bInterfaceClass
=
USB_CLASS_AUDIO
,
},
{
/* E-Mu 0204 USB */
.
match_flags
=
USB_DEVICE_ID_MATCH_DEVICE
,
.
idVendor
=
0x041e
,
.
idProduct
=
0x3f19
,
.
bInterfaceClass
=
USB_CLASS_AUDIO
,
},
/*
* Logitech QuickCam: bDeviceClass is vendor-specific, so generic interface
...
...
sound/usb/quirks.c
浏览文件 @
cc99a086
...
...
@@ -566,7 +566,7 @@ int snd_usb_is_big_endian_format(struct snd_usb_audio *chip, struct audioformat
}
/*
* For E-Mu 0404USB/0202USB/TrackerPre sample rate should be set for device,
* For E-Mu 0404USB/0202USB/TrackerPre
/0204
sample rate should be set for device,
* not for interface.
*/
...
...
@@ -623,6 +623,7 @@ void snd_usb_set_format_quirk(struct snd_usb_substream *subs,
case
USB_ID
(
0x041e
,
0x3f02
):
/* E-Mu 0202 USB */
case
USB_ID
(
0x041e
,
0x3f04
):
/* E-Mu 0404 USB */
case
USB_ID
(
0x041e
,
0x3f0a
):
/* E-Mu Tracker Pre */
case
USB_ID
(
0x041e
,
0x3f19
):
/* E-Mu 0204 USB */
set_format_emu_quirk
(
subs
,
fmt
);
break
;
}
...
...
sound/usb/usbaudio.h
浏览文件 @
cc99a086
...
...
@@ -36,6 +36,7 @@ struct snd_usb_audio {
struct
snd_card
*
card
;
u32
usb_id
;
int
shutdown
;
struct
mutex
shutdown_mutex
;
unsigned
int
txfr_quirk
:
1
;
/* Subframe boundaries on transfers */
int
num_interfaces
;
int
num_suspended_intf
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录