Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
290b421f
Commit
290b421f
authored
Sep 20, 2011
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'fix/hda' into topic/hda
parents
356aab7d
46724c2e
Changes
32
Hide whitespace changes
Inline
Side-by-side
Showing
32 changed files
with
177 additions
and
95 deletions
+177
-95
MAINTAINERS
MAINTAINERS
+5
-0
sound/core/pcm_lib.c
sound/core/pcm_lib.c
+24
-9
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+5
-1
sound/pci/hda/patch_cirrus.c
sound/pci/hda/patch_cirrus.c
+1
-1
sound/pci/hda/patch_conexant.c
sound/pci/hda/patch_conexant.c
+27
-19
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+5
-4
sound/pci/hda/patch_sigmatel.c
sound/pci/hda/patch_sigmatel.c
+1
-0
sound/soc/blackfin/bf5xx-ad193x.c
sound/soc/blackfin/bf5xx-ad193x.c
+3
-3
sound/soc/codecs/ad193x.c
sound/soc/codecs/ad193x.c
+2
-9
sound/soc/codecs/ad193x.h
sound/soc/codecs/ad193x.h
+3
-2
sound/soc/codecs/sta32x.c
sound/soc/codecs/sta32x.c
+1
-0
sound/soc/codecs/wm8962.c
sound/soc/codecs/wm8962.c
+8
-4
sound/soc/codecs/wm8996.c
sound/soc/codecs/wm8996.c
+18
-10
sound/soc/ep93xx/ep93xx-i2s.c
sound/soc/ep93xx/ep93xx-i2s.c
+3
-2
sound/soc/fsl/fsl_dma.c
sound/soc/fsl/fsl_dma.c
+2
-0
sound/soc/fsl/mpc5200_dma.c
sound/soc/fsl/mpc5200_dma.c
+3
-3
sound/soc/fsl/mpc8610_hpcd.c
sound/soc/fsl/mpc8610_hpcd.c
+9
-9
sound/soc/fsl/p1022_ds.c
sound/soc/fsl/p1022_ds.c
+3
-1
sound/soc/imx/imx-pcm-fiq.c
sound/soc/imx/imx-pcm-fiq.c
+0
-1
sound/soc/kirkwood/kirkwood-i2s.c
sound/soc/kirkwood/kirkwood-i2s.c
+1
-1
sound/soc/omap/ams-delta.c
sound/soc/omap/ams-delta.c
+4
-2
sound/soc/samsung/Kconfig
sound/soc/samsung/Kconfig
+1
-0
sound/soc/samsung/h1940_uda1380.c
sound/soc/samsung/h1940_uda1380.c
+1
-0
sound/soc/samsung/rx1950_uda1380.c
sound/soc/samsung/rx1950_uda1380.c
+1
-0
sound/soc/samsung/speyside_wm8962.c
sound/soc/samsung/speyside_wm8962.c
+6
-0
sound/soc/soc-cache.c
sound/soc/soc-cache.c
+6
-6
sound/soc/soc-core.c
sound/soc/soc-core.c
+3
-3
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+1
-1
sound/soc/soc-io.c
sound/soc/soc-io.c
+23
-0
sound/soc/soc-jack.c
sound/soc/soc-jack.c
+2
-2
sound/soc/soc-pcm.c
sound/soc/soc-pcm.c
+3
-0
sound/soc/tegra/tegra_wm8903.c
sound/soc/tegra/tegra_wm8903.c
+2
-2
No files found.
MAINTAINERS
View file @
290b421f
...
...
@@ -5532,6 +5532,7 @@ F: include/media/*7146*
SAMSUNG AUDIO (ASoC) DRIVERS
M: Jassi Brar <jassisinghbrar@gmail.com>
M: Sangbeom Kim <sbkim73@samsung.com>
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
S: Supported
F: sound/soc/samsung
...
...
@@ -7199,6 +7200,9 @@ W: http://opensource.wolfsonmicro.com/content/linux-drivers-wolfson-devices
S: Supported
F: Documentation/hwmon/wm83??
F: drivers/leds/leds-wm83*.c
F: drivers/input/misc/wm831x-on.c
F: drivers/input/touchscreen/wm831x-ts.c
F: drivers/input/touchscreen/wm97*.c
F: drivers/mfd/wm8*.c
F: drivers/power/wm83*.c
F: drivers/rtc/rtc-wm83*.c
...
...
@@ -7208,6 +7212,7 @@ F: drivers/watchdog/wm83*_wdt.c
F: include/linux/mfd/wm831x/
F: include/linux/mfd/wm8350/
F: include/linux/mfd/wm8400*
F: include/linux/wm97xx.h
F: include/sound/wm????.h
F: sound/soc/codecs/wm*
...
...
sound/core/pcm_lib.c
View file @
290b421f
...
...
@@ -1761,6 +1761,10 @@ static int wait_for_avail(struct snd_pcm_substream *substream,
snd_pcm_uframes_t
avail
=
0
;
long
wait_time
,
tout
;
init_waitqueue_entry
(
&
wait
,
current
);
set_current_state
(
TASK_INTERRUPTIBLE
);
add_wait_queue
(
&
runtime
->
tsleep
,
&
wait
);
if
(
runtime
->
no_period_wakeup
)
wait_time
=
MAX_SCHEDULE_TIMEOUT
;
else
{
...
...
@@ -1771,16 +1775,32 @@ static int wait_for_avail(struct snd_pcm_substream *substream,
}
wait_time
=
msecs_to_jiffies
(
wait_time
*
1000
);
}
init_waitqueue_entry
(
&
wait
,
current
);
add_wait_queue
(
&
runtime
->
tsleep
,
&
wait
);
for
(;;)
{
if
(
signal_pending
(
current
))
{
err
=
-
ERESTARTSYS
;
break
;
}
/*
* We need to check if space became available already
* (and thus the wakeup happened already) first to close
* the race of space already having become available.
* This check must happen after been added to the waitqueue
* and having current state be INTERRUPTIBLE.
*/
if
(
is_playback
)
avail
=
snd_pcm_playback_avail
(
runtime
);
else
avail
=
snd_pcm_capture_avail
(
runtime
);
if
(
avail
>=
runtime
->
twake
)
break
;
snd_pcm_stream_unlock_irq
(
substream
);
tout
=
schedule_timeout_interruptible
(
wait_time
);
tout
=
schedule_timeout
(
wait_time
);
snd_pcm_stream_lock_irq
(
substream
);
set_current_state
(
TASK_INTERRUPTIBLE
);
switch
(
runtime
->
status
->
state
)
{
case
SNDRV_PCM_STATE_SUSPENDED
:
err
=
-
ESTRPIPE
;
...
...
@@ -1806,14 +1826,9 @@ static int wait_for_avail(struct snd_pcm_substream *substream,
err
=
-
EIO
;
break
;
}
if
(
is_playback
)
avail
=
snd_pcm_playback_avail
(
runtime
);
else
avail
=
snd_pcm_capture_avail
(
runtime
);
if
(
avail
>=
runtime
->
twake
)
break
;
}
_endloop:
set_current_state
(
TASK_RUNNING
);
remove_wait_queue
(
&
runtime
->
tsleep
,
&
wait
);
*
availp
=
avail
;
return
err
;
...
...
sound/pci/hda/hda_codec.c
View file @
290b421f
...
...
@@ -586,9 +586,13 @@ int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux,
return
-
1
;
}
recursive
++
;
for
(
i
=
0
;
i
<
nums
;
i
++
)
for
(
i
=
0
;
i
<
nums
;
i
++
)
{
unsigned
int
type
=
get_wcaps_type
(
get_wcaps
(
codec
,
conn
[
i
]));
if
(
type
==
AC_WID_PIN
||
type
==
AC_WID_AUD_OUT
)
continue
;
if
(
snd_hda_get_conn_index
(
codec
,
conn
[
i
],
nid
,
recursive
)
>=
0
)
return
i
;
}
return
-
1
;
}
EXPORT_SYMBOL_HDA
(
snd_hda_get_conn_index
);
...
...
sound/pci/hda/patch_cirrus.c
View file @
290b421f
...
...
@@ -535,7 +535,7 @@ static int add_volume(struct hda_codec *codec, const char *name,
int
index
,
unsigned
int
pval
,
int
dir
,
struct
snd_kcontrol
**
kctlp
)
{
char
tmp
[
32
];
char
tmp
[
44
];
struct
snd_kcontrol_new
knew
=
HDA_CODEC_VOLUME_IDX
(
tmp
,
index
,
0
,
0
,
HDA_OUTPUT
);
knew
.
private_value
=
pval
;
...
...
sound/pci/hda/patch_conexant.c
View file @
290b421f
...
...
@@ -3329,18 +3329,26 @@ static int fill_cx_auto_dacs(struct hda_codec *codec, hda_nid_t *dacs)
/* fill pin_dac_pair list from the pin and dac list */
static
int
fill_dacs_for_pins
(
struct
hda_codec
*
codec
,
hda_nid_t
*
pins
,
int
num_pins
,
hda_nid_t
*
dacs
,
int
*
rest
,
struct
pin_dac_pair
*
filled
,
int
type
)
struct
pin_dac_pair
*
filled
,
int
nums
,
int
type
)
{
int
i
,
nums
;
int
i
,
start
=
nums
;
nums
=
0
;
for
(
i
=
0
;
i
<
num_pins
;
i
++
)
{
for
(
i
=
0
;
i
<
num_pins
;
i
++
,
nums
++
)
{
filled
[
nums
].
pin
=
pins
[
i
];
filled
[
nums
].
type
=
type
;
filled
[
nums
].
dac
=
get_unassigned_dac
(
codec
,
pins
[
i
],
dacs
,
rest
);
if
(
!
filled
[
nums
].
dac
&&
i
>
0
&&
filled
[
0
].
dac
)
if
(
filled
[
nums
].
dac
)
continue
;
if
(
filled
[
start
].
dac
&&
get_connection_index
(
codec
,
pins
[
i
],
filled
[
start
].
dac
)
>=
0
)
{
filled
[
nums
].
dac
=
filled
[
start
].
dac
|
DAC_SLAVE_FLAG
;
continue
;
}
if
(
filled
[
0
].
dac
&&
get_connection_index
(
codec
,
pins
[
i
],
filled
[
0
].
dac
)
>=
0
)
{
filled
[
nums
].
dac
=
filled
[
0
].
dac
|
DAC_SLAVE_FLAG
;
nums
++
;
continue
;
}
snd_printdd
(
"Failed to find a DAC for pin 0x%x"
,
pins
[
i
]);
}
return
nums
;
}
...
...
@@ -3356,14 +3364,14 @@ static void cx_auto_parse_output(struct hda_codec *codec)
rest
=
fill_cx_auto_dacs
(
codec
,
dacs
);
/* parse all analog output pins */
nums
=
fill_dacs_for_pins
(
codec
,
cfg
->
line_out_pins
,
cfg
->
line_outs
,
dacs
,
&
rest
,
spec
->
dac_info
,
AUTO_PIN_LINE_OUT
);
nums
+
=
fill_dacs_for_pins
(
codec
,
cfg
->
hp_pins
,
cfg
->
hp_outs
,
dacs
,
&
rest
,
spec
->
dac_info
+
nums
,
AUTO_PIN_HP_OUT
);
nums
+
=
fill_dacs_for_pins
(
codec
,
cfg
->
speaker_pins
,
cfg
->
speaker_outs
,
dacs
,
&
rest
,
spec
->
dac_info
+
nums
,
AUTO_PIN_SPEAKER_OUT
);
dacs
,
&
rest
,
spec
->
dac_info
,
0
,
AUTO_PIN_LINE_OUT
);
nums
=
fill_dacs_for_pins
(
codec
,
cfg
->
hp_pins
,
cfg
->
hp_outs
,
dacs
,
&
rest
,
spec
->
dac_info
,
nums
,
AUTO_PIN_HP_OUT
);
nums
=
fill_dacs_for_pins
(
codec
,
cfg
->
speaker_pins
,
cfg
->
speaker_outs
,
dacs
,
&
rest
,
spec
->
dac_info
,
nums
,
AUTO_PIN_SPEAKER_OUT
);
spec
->
dac_info_filled
=
nums
;
/* fill multiout struct */
for
(
i
=
0
;
i
<
nums
;
i
++
)
{
...
...
@@ -4130,9 +4138,11 @@ static int try_add_pb_volume(struct hda_codec *codec, hda_nid_t dac,
hda_nid_t
pin
,
const
char
*
name
,
int
idx
)
{
unsigned
int
caps
;
caps
=
query_amp_caps
(
codec
,
dac
,
HDA_OUTPUT
);
if
(
caps
&
AC_AMPCAP_NUM_STEPS
)
return
cx_auto_add_pb_volume
(
codec
,
dac
,
name
,
idx
);
if
(
dac
&&
!
(
dac
&
DAC_SLAVE_FLAG
))
{
caps
=
query_amp_caps
(
codec
,
dac
,
HDA_OUTPUT
);
if
(
caps
&
AC_AMPCAP_NUM_STEPS
)
return
cx_auto_add_pb_volume
(
codec
,
dac
,
name
,
idx
);
}
caps
=
query_amp_caps
(
codec
,
pin
,
HDA_OUTPUT
);
if
(
caps
&
AC_AMPCAP_NUM_STEPS
)
return
cx_auto_add_pb_volume
(
codec
,
pin
,
name
,
idx
);
...
...
@@ -4155,8 +4165,6 @@ static int cx_auto_build_output_controls(struct hda_codec *codec)
const
char
*
label
;
int
idx
,
type
;
hda_nid_t
dac
=
spec
->
dac_info
[
i
].
dac
;
if
(
!
dac
||
(
dac
&
DAC_SLAVE_FLAG
))
continue
;
type
=
spec
->
dac_info
[
i
].
type
;
if
(
type
==
AUTO_PIN_LINE_OUT
)
type
=
spec
->
autocfg
.
line_out_type
;
...
...
sound/pci/hda/patch_realtek.c
View file @
290b421f
...
...
@@ -169,7 +169,7 @@ struct alc_spec {
unsigned
int
auto_mic_valid_imux
:
1
;
/* valid imux for auto-mic */
unsigned
int
automute
:
1
;
/* HP automute enabled */
unsigned
int
detect_line
:
1
;
/* Line-out detection enabled */
unsigned
int
automute_lines
:
1
;
/* automute line-out as well */
unsigned
int
automute_lines
:
1
;
/* automute line-out as well
; NOP when automute_hp_lo isn't set
*/
unsigned
int
automute_hp_lo
:
1
;
/* both HP and LO available */
/* other flags */
...
...
@@ -556,7 +556,7 @@ static void update_speakers(struct hda_codec *codec)
if
(
spec
->
autocfg
.
line_out_pins
[
0
]
==
spec
->
autocfg
.
hp_pins
[
0
]
||
spec
->
autocfg
.
line_out_pins
[
0
]
==
spec
->
autocfg
.
speaker_pins
[
0
])
return
;
if
(
!
spec
->
automute
_lines
||
!
spec
->
automute
)
if
(
!
spec
->
automute
||
(
spec
->
automute_hp_lo
&&
!
spec
->
automute_lines
)
)
on
=
0
;
else
on
=
spec
->
jack_present
;
...
...
@@ -817,7 +817,7 @@ static int alc_automute_mode_get(struct snd_kcontrol *kcontrol,
unsigned
int
val
;
if
(
!
spec
->
automute
)
val
=
0
;
else
if
(
!
spec
->
automute_lines
)
else
if
(
!
spec
->
automute_
hp_lo
||
!
spec
->
automute_
lines
)
val
=
1
;
else
val
=
2
;
...
...
@@ -838,7 +838,8 @@ static int alc_automute_mode_put(struct snd_kcontrol *kcontrol,
spec
->
automute
=
0
;
break
;
case
1
:
if
(
spec
->
automute
&&
!
spec
->
automute_lines
)
if
(
spec
->
automute
&&
(
!
spec
->
automute_hp_lo
||
!
spec
->
automute_lines
))
return
0
;
spec
->
automute
=
1
;
spec
->
automute_lines
=
0
;
...
...
sound/pci/hda/patch_sigmatel.c
View file @
290b421f
...
...
@@ -6573,6 +6573,7 @@ static const struct hda_codec_preset snd_hda_preset_sigmatel[] = {
{
.
id
=
0x111d76cc
,
.
name
=
"92HD89F3"
,
.
patch
=
patch_stac92hd73xx
},
{
.
id
=
0x111d76cd
,
.
name
=
"92HD89F2"
,
.
patch
=
patch_stac92hd73xx
},
{
.
id
=
0x111d76ce
,
.
name
=
"92HD89F1"
,
.
patch
=
patch_stac92hd73xx
},
{
.
id
=
0x111d76df
,
.
name
=
"92HD93BXX"
,
.
patch
=
patch_stac92hd83xxx
},
{
.
id
=
0x111d76e0
,
.
name
=
"92HD91BXX"
,
.
patch
=
patch_stac92hd83xxx
},
{
.
id
=
0x111d76e3
,
.
name
=
"92HD98BXX"
,
.
patch
=
patch_stac92hd83xxx
},
{
.
id
=
0x111d76e5
,
.
name
=
"92HD99BXX"
,
.
patch
=
patch_stac92hd83xxx
},
...
...
sound/soc/blackfin/bf5xx-ad193x.c
View file @
290b421f
...
...
@@ -56,7 +56,7 @@ static int bf5xx_ad193x_hw_params(struct snd_pcm_substream *substream,
switch
(
params_rate
(
params
))
{
case
48000
:
clk
=
12288
000
;
clk
=
24576
000
;
break
;
}
...
...
@@ -103,7 +103,7 @@ static struct snd_soc_dai_link bf5xx_ad193x_dai[] = {
.
cpu_dai_name
=
"bfin-tdm.0"
,
.
codec_dai_name
=
"ad193x-hifi"
,
.
platform_name
=
"bfin-tdm-pcm-audio"
,
.
codec_name
=
"
ad193x
.5"
,
.
codec_name
=
"
spi0
.5"
,
.
ops
=
&
bf5xx_ad193x_ops
,
},
{
...
...
@@ -112,7 +112,7 @@ static struct snd_soc_dai_link bf5xx_ad193x_dai[] = {
.
cpu_dai_name
=
"bfin-tdm.1"
,
.
codec_dai_name
=
"ad193x-hifi"
,
.
platform_name
=
"bfin-tdm-pcm-audio"
,
.
codec_name
=
"
ad193x
.5"
,
.
codec_name
=
"
spi0
.5"
,
.
ops
=
&
bf5xx_ad193x_ops
,
},
};
...
...
sound/soc/codecs/ad193x.c
View file @
290b421f
...
...
@@ -27,11 +27,6 @@ struct ad193x_priv {
int
sysclk
;
};
/* ad193x register cache & default register settings */
static
const
u8
ad193x_reg
[
AD193X_NUM_REGS
]
=
{
0
,
0
,
0
,
0
,
0
,
0
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0
,
0
,
0
,
};
/*
* AD193X volume/mute/de-emphasis etc. controls
*/
...
...
@@ -307,7 +302,8 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
snd_soc_write
(
codec
,
AD193X_PLL_CLK_CTRL0
,
reg
);
reg
=
snd_soc_read
(
codec
,
AD193X_DAC_CTRL2
);
reg
=
(
reg
&
(
~
AD193X_DAC_WORD_LEN_MASK
))
|
word_len
;
reg
=
(
reg
&
(
~
AD193X_DAC_WORD_LEN_MASK
))
|
(
word_len
<<
AD193X_DAC_WORD_LEN_SHFT
);
snd_soc_write
(
codec
,
AD193X_DAC_CTRL2
,
reg
);
reg
=
snd_soc_read
(
codec
,
AD193X_ADC_CTRL1
);
...
...
@@ -389,9 +385,6 @@ static int ad193x_probe(struct snd_soc_codec *codec)
static
struct
snd_soc_codec_driver
soc_codec_dev_ad193x
=
{
.
probe
=
ad193x_probe
,
.
reg_cache_default
=
ad193x_reg
,
.
reg_cache_size
=
AD193X_NUM_REGS
,
.
reg_word_size
=
sizeof
(
u16
),
};
#if defined(CONFIG_SPI_MASTER)
...
...
sound/soc/codecs/ad193x.h
View file @
290b421f
...
...
@@ -34,7 +34,8 @@
#define AD193X_DAC_LEFT_HIGH (1 << 3)
#define AD193X_DAC_BCLK_INV (1 << 7)
#define AD193X_DAC_CTRL2 0x804
#define AD193X_DAC_WORD_LEN_MASK 0xC
#define AD193X_DAC_WORD_LEN_SHFT 3
#define AD193X_DAC_WORD_LEN_MASK 0x18
#define AD193X_DAC_MASTER_MUTE 1
#define AD193X_DAC_CHNL_MUTE 0x805
#define AD193X_DACL1_MUTE 0
...
...
@@ -63,7 +64,7 @@
#define AD193X_ADC_CTRL1 0x80f
#define AD193X_ADC_SERFMT_MASK 0x60
#define AD193X_ADC_SERFMT_STEREO (0 << 5)
#define AD193X_ADC_SERFMT_TDM (1 <<
2
)
#define AD193X_ADC_SERFMT_TDM (1 <<
5
)
#define AD193X_ADC_SERFMT_AUX (2 << 5)
#define AD193X_ADC_WORD_LEN_MASK 0x3
#define AD193X_ADC_CTRL2 0x810
...
...
sound/soc/codecs/sta32x.c
View file @
290b421f
...
...
@@ -857,6 +857,7 @@ static __devinit int sta32x_i2c_probe(struct i2c_client *i2c,
ret
=
snd_soc_register_codec
(
&
i2c
->
dev
,
&
sta32x_codec
,
&
sta32x_dai
,
1
);
if
(
ret
!=
0
)
{
dev_err
(
&
i2c
->
dev
,
"Failed to register codec (%d)
\n
"
,
ret
);
kfree
(
sta32x
);
return
ret
;
}
...
...
sound/soc/codecs/wm8962.c
View file @
290b421f
...
...
@@ -2221,6 +2221,8 @@ static int sysclk_event(struct snd_soc_dapm_widget *w,
switch
(
event
)
{
case
SND_SOC_DAPM_PRE_PMU
:
if
(
fll
)
{
try_wait_for_completion
(
&
wm8962
->
fll_lock
);
snd_soc_update_bits
(
codec
,
WM8962_FLL_CONTROL_1
,
WM8962_FLL_ENA
,
WM8962_FLL_ENA
);
if
(
wm8962
->
irq
)
{
...
...
@@ -2927,10 +2929,6 @@ static int wm8962_set_bias_level(struct snd_soc_codec *codec,
WM8962_BIAS_ENA
|
0x180
);
msleep
(
5
);
snd_soc_update_bits
(
codec
,
WM8962_CLOCKING2
,
WM8962_CLKREG_OVD
,
WM8962_CLKREG_OVD
);
}
/* VMID 2*250k */
...
...
@@ -3288,6 +3286,8 @@ static int wm8962_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
snd_soc_write
(
codec
,
WM8962_FLL_CONTROL_7
,
fll_div
.
lambda
);
snd_soc_write
(
codec
,
WM8962_FLL_CONTROL_8
,
fll_div
.
n
);
try_wait_for_completion
(
&
wm8962
->
fll_lock
);
snd_soc_update_bits
(
codec
,
WM8962_FLL_CONTROL_1
,
WM8962_FLL_FRAC
|
WM8962_FLL_REFCLK_SRC_MASK
|
WM8962_FLL_ENA
,
fll1
);
...
...
@@ -3868,6 +3868,10 @@ static int wm8962_probe(struct snd_soc_codec *codec)
*/
snd_soc_update_bits
(
codec
,
WM8962_CLOCKING2
,
WM8962_SYSCLK_ENA
,
0
);
/* Ensure we have soft control over all registers */
snd_soc_update_bits
(
codec
,
WM8962_CLOCKING2
,
WM8962_CLKREG_OVD
,
WM8962_CLKREG_OVD
);
regulator_bulk_disable
(
ARRAY_SIZE
(
wm8962
->
supplies
),
wm8962
->
supplies
);
if
(
pdata
)
{
...
...
sound/soc/codecs/wm8996.c
View file @
290b421f
...
...
@@ -420,7 +420,7 @@ static const char *sidetone_hpf_text[] = {
};
static
const
struct
soc_enum
sidetone_hpf
=
SOC_ENUM_SINGLE
(
WM8996_SIDETONE
,
7
,
6
,
sidetone_hpf_text
);
SOC_ENUM_SINGLE
(
WM8996_SIDETONE
,
7
,
7
,
sidetone_hpf_text
);
static
const
char
*
hpf_mode_text
[]
=
{
"HiFi"
,
"Custom"
,
"Voice"
...
...
@@ -988,15 +988,10 @@ SND_SOC_DAPM_MICBIAS("MICB1", WM8996_POWER_MANAGEMENT_1, 8, 0),
SND_SOC_DAPM_PGA
(
"IN1L PGA"
,
WM8996_POWER_MANAGEMENT_2
,
5
,
0
,
NULL
,
0
),
SND_SOC_DAPM_PGA
(
"IN1R PGA"
,
WM8996_POWER_MANAGEMENT_2
,
4
,
0
,
NULL
,
0
),
SND_SOC_DAPM_MUX
(
"IN1L Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
in1_mux
),
SND_SOC_DAPM_MUX
(
"IN1R Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
in1_mux
),
SND_SOC_DAPM_MUX
(
"IN2L Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
in2_mux
),
SND_SOC_DAPM_MUX
(
"IN2R Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
in2_mux
),
SND_SOC_DAPM_PGA
(
"IN1L"
,
WM8996_POWER_MANAGEMENT_7
,
2
,
0
,
NULL
,
0
),
SND_SOC_DAPM_PGA
(
"IN1R"
,
WM8996_POWER_MANAGEMENT_7
,
3
,
0
,
NULL
,
0
),
SND_SOC_DAPM_PGA
(
"IN2L"
,
WM8996_POWER_MANAGEMENT_7
,
6
,
0
,
NULL
,
0
),
SND_SOC_DAPM_PGA
(
"IN2R"
,
WM8996_POWER_MANAGEMENT_7
,
7
,
0
,
NULL
,
0
),
SND_SOC_DAPM_MUX
(
"IN1L Mux"
,
WM8996_POWER_MANAGEMENT_7
,
2
,
0
,
&
in1_mux
),
SND_SOC_DAPM_MUX
(
"IN1R Mux"
,
WM8996_POWER_MANAGEMENT_7
,
3
,
0
,
&
in1_mux
),
SND_SOC_DAPM_MUX
(
"IN2L Mux"
,
WM8996_POWER_MANAGEMENT_7
,
6
,
0
,
&
in2_mux
),
SND_SOC_DAPM_MUX
(
"IN2R Mux"
,
WM8996_POWER_MANAGEMENT_7
,
7
,
0
,
&
in2_mux
),
SND_SOC_DAPM_SUPPLY
(
"DMIC2"
,
WM8996_POWER_MANAGEMENT_7
,
9
,
0
,
NULL
,
0
),
SND_SOC_DAPM_SUPPLY
(
"DMIC1"
,
WM8996_POWER_MANAGEMENT_7
,
8
,
0
,
NULL
,
0
),
...
...
@@ -1213,6 +1208,16 @@ static const struct snd_soc_dapm_route wm8996_dapm_routes[] = {
{
"AIF2RX0"
,
NULL
,
"AIFCLK"
},
{
"AIF2RX1"
,
NULL
,
"AIFCLK"
},
{
"AIF1TX0"
,
NULL
,
"AIFCLK"
},
{
"AIF1TX1"
,
NULL
,
"AIFCLK"
},
{
"AIF1TX2"
,
NULL
,
"AIFCLK"
},
{
"AIF1TX3"
,
NULL
,
"AIFCLK"
},
{
"AIF1TX4"
,
NULL
,
"AIFCLK"
},
{
"AIF1TX5"
,
NULL
,
"AIFCLK"
},
{
"AIF2TX0"
,
NULL
,
"AIFCLK"
},
{
"AIF2TX1"
,
NULL
,
"AIFCLK"
},
{
"DSP1RXL"
,
NULL
,
"SYSDSPCLK"
},
{
"DSP1RXR"
,
NULL
,
"SYSDSPCLK"
},
{
"DSP2RXL"
,
NULL
,
"SYSDSPCLK"
},
...
...
@@ -2106,6 +2111,9 @@ static int wm8996_set_fll(struct snd_soc_codec *codec, int fll_id, int source,
snd_soc_write
(
codec
,
WM8996_FLL_EFS_1
,
fll_div
.
lambda
);
/* Clear any pending completions (eg, from failed startups) */
try_wait_for_completion
(
&
wm8996
->
fll_lock
);
snd_soc_update_bits
(
codec
,
WM8996_FLL_CONTROL_1
,
WM8996_FLL_ENA
,
WM8996_FLL_ENA
);
...
...
sound/soc/ep93xx/ep93xx-i2s.c
View file @
290b421f
...
...
@@ -385,14 +385,14 @@ static int ep93xx_i2s_probe(struct platform_device *pdev)
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
if
(
!
res
)
{
err
=
-
ENODEV
;
goto
fail
;
goto
fail
_free_info
;
}
info
->
mem
=
request_mem_region
(
res
->
start
,
resource_size
(
res
),
pdev
->
name
);
if
(
!
info
->
mem
)
{
err
=
-
EBUSY
;
goto
fail
;
goto
fail
_free_info
;
}
info
->
regs
=
ioremap
(
info
->
mem
->
start
,
resource_size
(
info
->
mem
));
...
...
@@ -435,6 +435,7 @@ static int ep93xx_i2s_probe(struct platform_device *pdev)
iounmap
(
info
->
regs
);
fail_release_mem:
release_mem_region
(
info
->
mem
->
start
,
resource_size
(
info
->
mem
));
fail_free_info:
kfree
(
info
);
fail:
return
err
;
...
...
sound/soc/fsl/fsl_dma.c
View file @
290b421f
...
...
@@ -879,10 +879,12 @@ static struct device_node *find_ssi_node(struct device_node *dma_channel_np)
* assume that device_node pointers are a valid comparison.
*/
np
=
of_parse_phandle
(
ssi_np
,
"fsl,playback-dma"
,
0
);
of_node_put
(
np
);
if
(
np
==
dma_channel_np
)
return
ssi_np
;
np
=
of_parse_phandle
(
ssi_np
,
"fsl,capture-dma"
,
0
);
of_node_put
(
np
);
if
(
np
==
dma_channel_np
)
return
ssi_np
;
}
...
...
sound/soc/fsl/mpc5200_dma.c
View file @
290b421f
...
...
@@ -369,7 +369,7 @@ static struct snd_soc_platform_driver mpc5200_audio_dma_platform = {
.
pcm_free
=
&
psc_dma_free
,
};
static
int
mpc5200_hpcd_probe
(
struct
of
_device
*
op
)
static
int
mpc5200_hpcd_probe
(
struct
platform
_device
*
op
)
{
phys_addr_t
fifo
;
struct
psc_dma
*
psc_dma
;
...
...
@@ -487,7 +487,7 @@ static int mpc5200_hpcd_probe(struct of_device *op)
return
ret
;
}
static
int
mpc5200_hpcd_remove
(
struct
of
_device
*
op
)
static
int
mpc5200_hpcd_remove
(
struct
platform
_device
*
op
)
{
struct
psc_dma
*
psc_dma
=
dev_get_drvdata
(
&
op
->
dev
);
...
...
@@ -519,7 +519,7 @@ MODULE_DEVICE_TABLE(of, mpc5200_hpcd_match);
static
struct
platform_driver
mpc5200_hpcd_of_driver
=
{
.
probe
=
mpc5200_hpcd_probe
,
.
remove
=
mpc5200_hpcd_remove
,
.
d
ev
=
{
.
d
river
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"mpc5200-pcm-audio"
,
.
of_match_table
=
mpc5200_hpcd_match
,
...
...
sound/soc/fsl/mpc8610_hpcd.c
View file @
290b421f
...
...
@@ -345,8 +345,10 @@ static int mpc8610_hpcd_probe(struct platform_device *pdev)
}
machine_data
=
kzalloc
(
sizeof
(
struct
mpc8610_hpcd_data
),
GFP_KERNEL
);
if
(
!
machine_data
)
return
-
ENOMEM
;
if
(
!
machine_data
)
{
ret
=
-
ENOMEM
;
goto
error_alloc
;
}
machine_data
->
dai
[
0
].
cpu_dai_name
=
dev_name
(
&
ssi_pdev
->
dev
);
machine_data
->
dai
[
0
].
ops
=
&
mpc8610_hpcd_ops
;
...
...
@@ -494,7 +496,7 @@ static int mpc8610_hpcd_probe(struct platform_device *pdev)
ret
=
platform_device_add
(
sound_device
);
if
(
ret
)
{
dev_err
(
&
pdev
->
dev
,
"platform device add failed
\n
"
);
goto
error
;
goto
error
_sound
;
}
dev_set_drvdata
(
&
pdev
->
dev
,
sound_device
);
...
...
@@ -502,14 +504,12 @@ static int mpc8610_hpcd_probe(struct platform_device *pdev)
return
0
;
error_sound:
platform_device_unregister
(
sound_device
);
error:
of_node_put
(
codec_np
);
if
(
sound_device
)
platform_device_unregister
(
sound_device
);
kfree
(
machine_data
);
error_alloc:
of_node_put
(
codec_np
);
return
ret
;
}
...
...
sound/soc/fsl/p1022_ds.c
View file @
290b421f
...
...
@@ -297,8 +297,10 @@ static int get_dma_channel(struct device_node *ssi_np,
* dai->platform name should already point to an allocated buffer.
*/
ret
=
of_address_to_resource
(
dma_channel_np
,
0
,
&
res
);
if
(
ret
)
if
(
ret
)
{
of_node_put
(
dma_channel_np
);
return
ret
;
}
snprintf
((
char
*
)
dai
->
platform_name
,
DAI_NAME_SIZE
,
"%llx.%s"
,
(
unsigned
long
long
)
res
.
start
,
dma_channel_np
->
name
);
...
...
sound/soc/imx/imx-pcm-fiq.c
View file @
290b421f
...
...
@@ -240,7 +240,6 @@ static int ssi_irq = 0;
static
int
imx_pcm_fiq_new
(
struct
snd_soc_pcm_runtime
*
rtd
)
{
struct
snd_card
*
card
=
rtd
->
card
->
snd_card
;
struct
snd_soc_dai
*
dai
=
rtd
->
cpu_dai
;
struct
snd_pcm
*
pcm
=
rtd
->
pcm
;
int
ret
;
...
...
sound/soc/kirkwood/kirkwood-i2s.c
View file @
290b421f
...
...
@@ -424,7 +424,7 @@ static __devinit int kirkwood_i2s_dev_probe(struct platform_device *pdev)
if
(
!
priv
->
mem
)
{
dev_err
(
&
pdev
->
dev
,
"request_mem_region failed
\n
"
);
err
=
-
EBUSY
;
goto
err
or
;
goto
err
_alloc
;
}
priv
->
io
=
ioremap
(
priv
->
mem
->
start
,
SZ_16K
);
...
...
sound/soc/omap/ams-delta.c
View file @
290b421f
...
...
@@ -514,7 +514,7 @@ static int ams_delta_cx20442_init(struct snd_soc_pcm_runtime *rtd)
}
/* Set codec bias level */
ams_delta_set_bias_level
(
card
,
SND_SOC_BIAS_STANDBY
);
ams_delta_set_bias_level
(
card
,
dapm
,
SND_SOC_BIAS_STANDBY
);
/* Add hook switch - can be used to control the codec from userspace
* even if line discipline fails */
...
...
@@ -649,7 +649,9 @@ static void __exit ams_delta_module_exit(void)
ams_delta_hook_switch_gpios
);
/* Keep modem power on */
ams_delta_set_bias_level
(
&
ams_delta_audio_card
,
SND_SOC_BIAS_STANDBY
);
ams_delta_set_bias_level
(
&
ams_delta_audio_card
,
&
ams_delta_audio_card
.
rtd
[
0
].
codec
->
dapm
,
SND_SOC_BIAS_STANDBY
);
platform_device_unregister
(
cx20442_platform_device
);
platform_device_unregister
(
ams_delta_audio_platform_device
);
...
...
sound/soc/samsung/Kconfig
View file @
290b421f
...
...
@@ -185,6 +185,7 @@ config SND_SOC_SPEYSIDE
select SND_SAMSUNG_I2S
select SND_SOC_WM8996
select SND_SOC_WM9081
select SND_SOC_WM1250_EV1
config SND_SOC_SPEYSIDE_WM8962
tristate "Audio support for Wolfson Speyside with WM8962"
...
...
sound/soc/samsung/h1940_uda1380.c
View file @
290b421f
...
...
@@ -13,6 +13,7 @@
*
*/
#include <linux/types.h>
#include <linux/gpio.h>
#include <sound/soc.h>
...
...
sound/soc/samsung/rx1950_uda1380.c
View file @
290b421f
...
...
@@ -17,6 +17,7 @@
*
*/
#include <linux/types.h>
#include <linux/gpio.h>
#include <sound/soc.h>
...
...
sound/soc/samsung/speyside_wm8962.c
View file @
290b421f
...
...
@@ -23,6 +23,9 @@ static int speyside_wm8962_set_bias_level(struct snd_soc_card *card,
struct
snd_soc_dai
*
codec_dai
=
card
->
rtd
[
0
].
codec_dai
;
int
ret
;
if
(
dapm
->
dev
!=
codec_dai
->
dev
)
return
0
;
switch
(
level
)
{
case
SND_SOC_BIAS_PREPARE
:
if
(
dapm
->
bias_level
==
SND_SOC_BIAS_STANDBY
)
{
...
...
@@ -57,6 +60,9 @@ static int speyside_wm8962_set_bias_level_post(struct snd_soc_card *card,
struct
snd_soc_dai
*
codec_dai
=
card
->
rtd
[
0
].
codec_dai
;
int
ret
;
if
(
dapm
->
dev
!=
codec_dai
->
dev
)
return
0
;
switch
(
level
)
{
case
SND_SOC_BIAS_STANDBY
:
ret
=
snd_soc_dai_set_sysclk
(
codec_dai
,
WM8962_SYSCLK_MCLK
,
...
...
sound/soc/soc-cache.c
View file @
290b421f
...
...
@@ -203,14 +203,14 @@ static int snd_soc_rbtree_cache_sync(struct snd_soc_codec *codec)
rbnode
=
rb_entry
(
node
,
struct
snd_soc_rbtree_node
,
node
);
for
(
i
=
0
;
i
<
rbnode
->
blklen
;
++
i
)
{
regtmp
=
rbnode
->
base_reg
+
i
;
WARN_ON
(
codec
->
writable_register
&&
codec
->
writable_register
(
codec
,
regtmp
));
val
=
snd_soc_rbtree_get_register
(
rbnode
,
i
);
def
=
snd_soc_get_cache_val
(
codec
->
reg_def_copy
,
i
,
rbnode
->
word_size
);
if
(
val
==
def
)
continue
;
WARN_ON
(
!
snd_soc_codec_writable_register
(
codec
,
regtmp
));
codec
->
cache_bypass
=
1
;
ret
=
snd_soc_write
(
codec
,
regtmp
,
val
);
codec
->
cache_bypass
=
0
;
...
...
@@ -563,8 +563,7 @@ static int snd_soc_lzo_cache_sync(struct snd_soc_codec *codec)
lzo_blocks
=
codec
->
reg_cache
;
for_each_set_bit
(
i
,
lzo_blocks
[
0
]
->
sync_bmp
,
lzo_blocks
[
0
]
->
sync_bmp_nbits
)
{
WARN_ON
(
codec
->
writable_register
&&
codec
->
writable_register
(
codec
,
i
));
WARN_ON
(
!
snd_soc_codec_writable_register
(
codec
,
i
));
ret
=
snd_soc_cache_read
(
codec
,
i
,
&
val
);
if
(
ret
)
return
ret
;
...
...
@@ -823,8 +822,6 @@ static int snd_soc_flat_cache_sync(struct snd_soc_codec *codec)
codec_drv
=
codec
->
driver
;
for
(
i
=
0
;
i
<
codec_drv
->
reg_cache_size
;
++
i
)
{
WARN_ON
(
codec
->
writable_register
&&
codec
->
writable_register
(
codec
,
i
));
ret
=
snd_soc_cache_read
(
codec
,
i
,
&
val
);
if
(
ret
)
return
ret
;
...
...
@@ -832,6 +829,9 @@ static int snd_soc_flat_cache_sync(struct snd_soc_codec *codec)
if
(
snd_soc_get_cache_val
(
codec
->
reg_def_copy
,
i
,
codec_drv
->
reg_word_size
)
==
val
)
continue
;
WARN_ON
(
!
snd_soc_codec_writable_register
(
codec
,
i
));
ret
=
snd_soc_write
(
codec
,
i
,
val
);
if
(
ret
)
return
ret
;
...
...
sound/soc/soc-core.c
View file @
290b421f
...
...
@@ -1633,7 +1633,7 @@ int snd_soc_codec_readable_register(struct snd_soc_codec *codec,
if
(
codec
->
readable_register
)
return
codec
->
readable_register
(
codec
,
reg
);
else
return
0
;
return
1
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_codec_readable_register
);
...
...
@@ -1651,7 +1651,7 @@ int snd_soc_codec_writable_register(struct snd_soc_codec *codec,
if
(
codec
->
writable_register
)
return
codec
->
writable_register
(
codec
,
reg
);
else
return
0
;
return
1
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_codec_writable_register
);
...
...
@@ -1913,7 +1913,7 @@ struct snd_kcontrol *snd_soc_cnew(const struct snd_kcontrol_new *_template,
if
(
prefix
)
{
name_len
=
strlen
(
long_name
)
+
strlen
(
prefix
)
+
2
;
name
=
kmalloc
(
name_len
,
GFP_
ATOMIC
);
name
=
kmalloc
(
name_len
,
GFP_
KERNEL
);
if
(
!
name
)
return
NULL
;
...
...
sound/soc/soc-dapm.c
View file @
290b421f
...
...
@@ -2763,7 +2763,7 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_ignore_suspend);
/**
* snd_soc_dapm_free - free dapm resources
* @
card: SoC device
* @
dapm: DAPM context
*
* Free all dapm widgets and resources.
*/
...
...
sound/soc/soc-io.c
View file @
290b421f
...
...
@@ -205,6 +205,25 @@ static unsigned int snd_soc_16_8_read_i2c(struct snd_soc_codec *codec,
#define snd_soc_16_8_read_i2c NULL
#endif
#if defined(CONFIG_SPI_MASTER)
static
unsigned
int
snd_soc_16_8_read_spi
(
struct
snd_soc_codec
*
codec
,
unsigned
int
r
)
{
struct
spi_device
*
spi
=
codec
->
control_data
;
const
u16
reg
=
cpu_to_be16
(
r
|
0x100
);
u8
data
;
int
ret
;
ret
=
spi_write_then_read
(
spi
,
&
reg
,
2
,
&
data
,
1
);
if
(
ret
<
0
)
return
0
;
return
data
;
}
#else
#define snd_soc_16_8_read_spi NULL
#endif
static
int
snd_soc_16_8_write
(
struct
snd_soc_codec
*
codec
,
unsigned
int
reg
,
unsigned
int
value
)
{
...
...
@@ -295,6 +314,7 @@ static struct {
int
(
*
write
)(
struct
snd_soc_codec
*
codec
,
unsigned
int
,
unsigned
int
);
unsigned
int
(
*
read
)(
struct
snd_soc_codec
*
,
unsigned
int
);
unsigned
int
(
*
i2c_read
)(
struct
snd_soc_codec
*
,
unsigned
int
);
unsigned
int
(
*
spi_read
)(
struct
snd_soc_codec
*
,
unsigned
int
);
}
io_types
[]
=
{
{
.
addr_bits
=
4
,
.
data_bits
=
12
,
...
...
@@ -318,6 +338,7 @@ static struct {
.
addr_bits
=
16
,
.
data_bits
=
8
,
.
write
=
snd_soc_16_8_write
,
.
i2c_read
=
snd_soc_16_8_read_i2c
,
.
spi_read
=
snd_soc_16_8_read_spi
,
},
{
.
addr_bits
=
16
,
.
data_bits
=
16
,
...
...
@@ -383,6 +404,8 @@ int snd_soc_codec_set_cache_io(struct snd_soc_codec *codec,
#ifdef CONFIG_SPI_MASTER
codec
->
hw_write
=
do_spi_write
;
#endif
if
(
io_types
[
i
].
spi_read
)
codec
->
hw_read
=
io_types
[
i
].
spi_read
;
codec
->
control_data
=
container_of
(
codec
->
dev
,
struct
spi_device
,
...
...
sound/soc/soc-jack.c
View file @
290b421f
...
...
@@ -105,7 +105,7 @@ void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask)
snd_soc_dapm_sync
(
dapm
);
snd_jack_report
(
jack
->
jack
,
status
);
snd_jack_report
(
jack
->
jack
,
jack
->
status
);
out:
mutex_unlock
(
&
codec
->
mutex
);
...
...
@@ -327,7 +327,7 @@ int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
IRQF_TRIGGER_FALLING
,
gpios
[
i
].
name
,
&
gpios
[
i
]);
if
(
ret
)
if
(
ret
<
0
)
goto
err
;
if
(
gpios
[
i
].
wake
)
{
...
...
sound/soc/soc-pcm.c
View file @
290b421f
...
...
@@ -290,6 +290,9 @@ static int soc_pcm_close(struct snd_pcm_substream *substream)
codec_dai
->
active
--
;
codec
->
active
--
;
if
(
!
cpu_dai
->
active
&&
!
codec_dai
->
active
)
rtd
->
rate
=
0
;
/* Muting the DAC suppresses artifacts caused during digital
* shutdown, for example from stopping clocks.
*/
...
...
sound/soc/tegra/tegra_wm8903.c
View file @
290b421f
...
...
@@ -319,7 +319,7 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
snd_soc_dapm_force_enable_pin
(
dapm
,
"Mic Bias"
);
/* FIXME: Calculate automatically based on DAPM routes? */
if
(
!
machine_is_harmony
()
&&
!
machine_is_ventana
()
)
if
(
!
machine_is_harmony
())
snd_soc_dapm_nc_pin
(
dapm
,
"IN1L"
);
if
(
!
machine_is_seaboard
()
&&
!
machine_is_aebl
())
snd_soc_dapm_nc_pin
(
dapm
,
"IN1R"
);
...
...
@@ -395,7 +395,7 @@ static __devinit int tegra_wm8903_driver_probe(struct platform_device *pdev)
platform_set_drvdata
(
pdev
,
card
);
snd_soc_card_set_drvdata
(
card
,
machine
);
if
(
machine_is_harmony
()
||
machine_is_ventana
()
)
{
if
(
machine_is_harmony
())
{
card
->
dapm_routes
=
harmony_audio_map
;
card
->
num_dapm_routes
=
ARRAY_SIZE
(
harmony_audio_map
);
}
else
if
(
machine_is_seaboard
())
{
...
...
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