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
9f072b7b
Commit
9f072b7b
authored
Sep 18, 2009
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-2.6.32' into for-2.6.33
parents
b1cd6b9e
0c31cf3e
Changes
16
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
174 additions
and
78 deletions
+174
-78
include/sound/soc.h
include/sound/soc.h
+0
-1
sound/soc/au1x/psc-ac97.c
sound/soc/au1x/psc-ac97.c
+96
-33
sound/soc/au1x/psc.h
sound/soc/au1x/psc.h
+1
-0
sound/soc/blackfin/bf5xx-ac97.c
sound/soc/blackfin/bf5xx-ac97.c
+8
-0
sound/soc/blackfin/bf5xx-ac97.h
sound/soc/blackfin/bf5xx-ac97.h
+1
-1
sound/soc/blackfin/bf5xx-i2s.c
sound/soc/blackfin/bf5xx-i2s.c
+9
-13
sound/soc/blackfin/bf5xx-i2s.h
sound/soc/blackfin/bf5xx-i2s.h
+1
-1
sound/soc/blackfin/bf5xx-sport.c
sound/soc/blackfin/bf5xx-sport.c
+1
-1
sound/soc/codecs/ad1836.c
sound/soc/codecs/ad1836.c
+0
-1
sound/soc/codecs/ad1938.c
sound/soc/codecs/ad1938.c
+0
-1
sound/soc/codecs/wm8350.c
sound/soc/codecs/wm8350.c
+1
-1
sound/soc/codecs/wm8974.c
sound/soc/codecs/wm8974.c
+0
-1
sound/soc/davinci/davinci-mcasp.c
sound/soc/davinci/davinci-mcasp.c
+22
-2
sound/soc/fsl/mpc5200_dma.c
sound/soc/fsl/mpc5200_dma.c
+20
-13
sound/soc/s3c24xx/s3c-i2s-v2.c
sound/soc/s3c24xx/s3c-i2s-v2.c
+10
-6
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+4
-3
No files found.
include/sound/soc.h
View file @
9f072b7b
...
...
@@ -205,7 +205,6 @@ struct snd_soc_jack_gpio;
#endif
typedef
int
(
*
hw_write_t
)(
void
*
,
const
char
*
,
int
);
typedef
int
(
*
hw_read_t
)(
void
*
,
char
*
,
int
);
extern
struct
snd_ac97_bus_ops
soc_ac97_ops
;
...
...
sound/soc/au1x/psc-ac97.c
View file @
9f072b7b
/*
* Au12x0/Au1550 PSC ALSA ASoC audio support.
*
* (c) 2007-200
8
MSC Vertriebsges.m.b.H.,
* Manuel Lauss <man
o@roarinelk.homelinux.net
>
* (c) 2007-200
9
MSC Vertriebsges.m.b.H.,
* Manuel Lauss <man
uel.lauss@gmail.com
>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
...
...
@@ -19,6 +19,7 @@
#include <linux/module.h>
#include <linux/device.h>
#include <linux/delay.h>
#include <linux/mutex.h>
#include <linux/suspend.h>
#include <sound/core.h>
#include <sound/pcm.h>
...
...
@@ -29,6 +30,9 @@
#include "psc.h"
/* how often to retry failed codec register reads/writes */
#define AC97_RW_RETRIES 5
#define AC97_DIR \
(SND_SOC_DAIDIR_PLAYBACK | SND_SOC_DAIDIR_CAPTURE)
...
...
@@ -45,6 +49,9 @@
#define AC97PCR_CLRFIFO(stype) \
((stype) == PCM_TX ? PSC_AC97PCR_TC : PSC_AC97PCR_RC)
#define AC97STAT_BUSY(stype) \
((stype) == PCM_TX ? PSC_AC97STAT_TB : PSC_AC97STAT_RB)
/* instance data. There can be only one, MacLeod!!!! */
static
struct
au1xpsc_audio_data
*
au1xpsc_ac97_workdata
;
...
...
@@ -54,24 +61,33 @@ static unsigned short au1xpsc_ac97_read(struct snd_ac97 *ac97,
{
/* FIXME */
struct
au1xpsc_audio_data
*
pscdata
=
au1xpsc_ac97_workdata
;
unsigned
short
data
,
tmo
;
unsigned
short
data
,
retry
,
tmo
;
au_writel
(
PSC_AC97
CDC_RD
|
PSC_AC97CDC_INDX
(
reg
),
AC97_CDC
(
pscdata
));
au_writel
(
PSC_AC97
EVNT_CD
,
AC97_EVNT
(
pscdata
));
au_sync
();
tmo
=
1000
;
while
((
!
(
au_readl
(
AC97_EVNT
(
pscdata
))
&
PSC_AC97EVNT_CD
))
&&
--
tmo
)
udelay
(
2
);
retry
=
AC97_RW_RETRIES
;
do
{
mutex_lock
(
&
pscdata
->
lock
);
au_writel
(
PSC_AC97CDC_RD
|
PSC_AC97CDC_INDX
(
reg
),
AC97_CDC
(
pscdata
));
au_sync
();
tmo
=
2000
;
while
((
!
(
au_readl
(
AC97_EVNT
(
pscdata
))
&
PSC_AC97EVNT_CD
))
&&
--
tmo
)
udelay
(
2
);
if
(
!
tmo
)
data
=
0xffff
;
else
data
=
au_readl
(
AC97_CDC
(
pscdata
))
&
0xffff
;
au_writel
(
PSC_AC97EVNT_CD
,
AC97_EVNT
(
pscdata
));
au_sync
();
au_writel
(
PSC_AC97EVNT_CD
,
AC97_EVNT
(
pscdata
));
au_sync
();
mutex_unlock
(
&
pscdata
->
lock
);
}
while
(
--
retry
&&
!
tmo
);
return
data
;
return
retry
?
data
:
0xffff
;
}
/* AC97 controller writes to codec register */
...
...
@@ -80,16 +96,29 @@ static void au1xpsc_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
{
/* FIXME */
struct
au1xpsc_audio_data
*
pscdata
=
au1xpsc_ac97_workdata
;
unsigned
int
tmo
;
unsigned
int
tmo
,
retry
;
au_writel
(
PSC_AC97
CDC_INDX
(
reg
)
|
(
val
&
0xffff
),
AC97_CDC
(
pscdata
));
au_writel
(
PSC_AC97
EVNT_CD
,
AC97_EVNT
(
pscdata
));
au_sync
();
tmo
=
1000
;
while
((
!
(
au_readl
(
AC97_EVNT
(
pscdata
))
&
PSC_AC97EVNT_CD
))
&&
--
tmo
)
retry
=
AC97_RW_RETRIES
;
do
{
mutex_lock
(
&
pscdata
->
lock
);
au_writel
(
PSC_AC97CDC_INDX
(
reg
)
|
(
val
&
0xffff
),
AC97_CDC
(
pscdata
));
au_sync
();
au_writel
(
PSC_AC97EVNT_CD
,
AC97_EVNT
(
pscdata
));
au_sync
();
tmo
=
2000
;
while
((
!
(
au_readl
(
AC97_EVNT
(
pscdata
))
&
PSC_AC97EVNT_CD
))
&&
--
tmo
)
udelay
(
2
);
au_writel
(
PSC_AC97EVNT_CD
,
AC97_EVNT
(
pscdata
));
au_sync
();
mutex_unlock
(
&
pscdata
->
lock
);
}
while
(
--
retry
&&
!
tmo
);
}
/* AC97 controller asserts a warm reset */
...
...
@@ -129,9 +158,9 @@ static void au1xpsc_ac97_cold_reset(struct snd_ac97 *ac97)
au_sync
();
/* wait for PSC to indicate it's ready */
i
=
1000
00
;
i
=
1000
;
while
(
!
((
au_readl
(
AC97_STAT
(
pscdata
))
&
PSC_AC97STAT_SR
))
&&
(
--
i
))
au_sync
(
);
msleep
(
1
);
if
(
i
==
0
)
{
printk
(
KERN_ERR
"au1xpsc-ac97: PSC not ready!
\n
"
);
...
...
@@ -143,9 +172,9 @@ static void au1xpsc_ac97_cold_reset(struct snd_ac97 *ac97)
au_sync
();
/* wait for AC97 core to become ready */
i
=
1000
00
;
i
=
1000
;
while
(
!
((
au_readl
(
AC97_STAT
(
pscdata
))
&
PSC_AC97STAT_DR
))
&&
(
--
i
))
au_sync
(
);
msleep
(
1
);
if
(
i
==
0
)
printk
(
KERN_ERR
"au1xpsc-ac97: AC97 ctrl not ready
\n
"
);
}
...
...
@@ -165,12 +194,12 @@ static int au1xpsc_ac97_hw_params(struct snd_pcm_substream *substream,
{
/* FIXME */
struct
au1xpsc_audio_data
*
pscdata
=
au1xpsc_ac97_workdata
;
unsigned
long
r
,
stat
;
unsigned
long
r
,
ro
,
stat
;
int
chans
,
stype
=
SUBSTREAM_TYPE
(
substream
);
chans
=
params_channels
(
params
);
r
=
au_readl
(
AC97_CFG
(
pscdata
));
r
=
ro
=
au_readl
(
AC97_CFG
(
pscdata
));
stat
=
au_readl
(
AC97_STAT
(
pscdata
));
/* already active? */
...
...
@@ -180,9 +209,6 @@ static int au1xpsc_ac97_hw_params(struct snd_pcm_substream *substream,
(
pscdata
->
rate
!=
params_rate
(
params
)))
return
-
EINVAL
;
}
else
{
/* disable AC97 device controller first */
au_writel
(
r
&
~
PSC_AC97CFG_DE_ENABLE
,
AC97_CFG
(
pscdata
));
au_sync
();
/* set sample bitdepth: REG[24:21]=(BITS-2)/2 */
r
&=
~
PSC_AC97CFG_LEN_MASK
;
...
...
@@ -199,14 +225,40 @@ static int au1xpsc_ac97_hw_params(struct snd_pcm_substream *substream,
r
|=
PSC_AC97CFG_RXSLOT_ENA
(
4
);
}
/* finally enable the AC97 controller again */
/* do we need to poke the hardware? */
if
(
!
(
r
^
ro
))
goto
out
;
/* ac97 engine is about to be disabled */
mutex_lock
(
&
pscdata
->
lock
);
/* disable AC97 device controller first... */
au_writel
(
r
&
~
PSC_AC97CFG_DE_ENABLE
,
AC97_CFG
(
pscdata
));
au_sync
();
/* ...wait for it... */
while
(
au_readl
(
AC97_STAT
(
pscdata
))
&
PSC_AC97STAT_DR
)
asm
volatile
(
"nop"
);
/* ...write config... */
au_writel
(
r
,
AC97_CFG
(
pscdata
));
au_sync
();
/* ...enable the AC97 controller again... */
au_writel
(
r
|
PSC_AC97CFG_DE_ENABLE
,
AC97_CFG
(
pscdata
));
au_sync
();
/* ...and wait for ready bit */
while
(
!
(
au_readl
(
AC97_STAT
(
pscdata
))
&
PSC_AC97STAT_DR
))
asm
volatile
(
"nop"
);
mutex_unlock
(
&
pscdata
->
lock
);
pscdata
->
cfg
=
r
;
pscdata
->
rate
=
params_rate
(
params
);
}
out:
return
0
;
}
...
...
@@ -222,6 +274,8 @@ static int au1xpsc_ac97_trigger(struct snd_pcm_substream *substream,
switch
(
cmd
)
{
case
SNDRV_PCM_TRIGGER_START
:
case
SNDRV_PCM_TRIGGER_RESUME
:
au_writel
(
AC97PCR_CLRFIFO
(
stype
),
AC97_PCR
(
pscdata
));
au_sync
();
au_writel
(
AC97PCR_START
(
stype
),
AC97_PCR
(
pscdata
));
au_sync
();
break
;
...
...
@@ -229,6 +283,13 @@ static int au1xpsc_ac97_trigger(struct snd_pcm_substream *substream,
case
SNDRV_PCM_TRIGGER_SUSPEND
:
au_writel
(
AC97PCR_STOP
(
stype
),
AC97_PCR
(
pscdata
));
au_sync
();
while
(
au_readl
(
AC97_STAT
(
pscdata
))
&
AC97STAT_BUSY
(
stype
))
asm
volatile
(
"nop"
);
au_writel
(
AC97PCR_CLRFIFO
(
stype
),
AC97_PCR
(
pscdata
));
au_sync
();
break
;
default:
ret
=
-
EINVAL
;
...
...
@@ -251,6 +312,8 @@ static int au1xpsc_ac97_probe(struct platform_device *pdev,
if
(
!
au1xpsc_ac97_workdata
)
return
-
ENOMEM
;
mutex_init
(
&
au1xpsc_ac97_workdata
->
lock
);
r
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
if
(
!
r
)
{
ret
=
-
ENODEV
;
...
...
@@ -269,9 +332,9 @@ static int au1xpsc_ac97_probe(struct platform_device *pdev,
goto
out1
;
/* configuration: max dma trigger threshold, enable ac97 */
au1xpsc_ac97_workdata
->
cfg
=
PSC_AC97CFG_RT_FIFO8
|
PSC_AC97CFG_TT_FIFO8
|
PSC_AC97CFG_DE_ENABLE
;
au1xpsc_ac97_workdata
->
cfg
=
PSC_AC97CFG_RT_FIFO8
|
PSC_AC97CFG_TT_FIFO8
|
PSC_AC97CFG_DE_ENABLE
;
/* preserve PSC clock source set up by platform (dev.platform_data
* is already occupied by soc layer)
...
...
@@ -386,4 +449,4 @@ module_exit(au1xpsc_ac97_exit);
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Au12x0/Au1550 PSC AC97 ALSA ASoC audio driver"
);
MODULE_AUTHOR
(
"Manuel Lauss <man
o@roarinelk.homelinux.net
>"
);
MODULE_AUTHOR
(
"Manuel Lauss <man
uel.lauss@gmail.com
>"
);
sound/soc/au1x/psc.h
View file @
9f072b7b
...
...
@@ -29,6 +29,7 @@ struct au1xpsc_audio_data {
unsigned
long
pm
[
2
];
struct
resource
*
ioarea
;
struct
mutex
lock
;
};
#define PCM_TX 0
...
...
sound/soc/blackfin/bf5xx-ac97.c
View file @
9f072b7b
...
...
@@ -277,7 +277,11 @@ static int bf5xx_ac97_resume(struct snd_soc_dai *dai)
if
(
!
dai
->
active
)
return
0
;
#if defined(CONFIG_SND_BF5XX_MULTICHAN_SUPPORT)
ret
=
sport_set_multichannel
(
sport
,
16
,
0x3FF
,
1
);
#else
ret
=
sport_set_multichannel
(
sport
,
16
,
0x1F
,
1
);
#endif
if
(
ret
)
{
pr_err
(
"SPORT is busy!
\n
"
);
return
-
EBUSY
;
...
...
@@ -334,7 +338,11 @@ static int bf5xx_ac97_probe(struct platform_device *pdev,
goto
sport_err
;
}
/*SPORT works in TDM mode to simulate AC97 transfers*/
#if defined(CONFIG_SND_BF5XX_MULTICHAN_SUPPORT)
ret
=
sport_set_multichannel
(
sport_handle
,
16
,
0x3FF
,
1
);
#else
ret
=
sport_set_multichannel
(
sport_handle
,
16
,
0x1F
,
1
);
#endif
if
(
ret
)
{
pr_err
(
"SPORT is busy!
\n
"
);
ret
=
-
EBUSY
;
...
...
sound/soc/blackfin/bf5xx-ac97.h
View file @
9f072b7b
/*
*
linux/sound/arm
/bf5xx-ac97.h
*
sound/soc/blackfin
/bf5xx-ac97.h
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
...
...
sound/soc/blackfin/bf5xx-i2s.c
View file @
9f072b7b
...
...
@@ -227,7 +227,8 @@ static int bf5xx_i2s_probe(struct platform_device *pdev,
return
0
;
}
static
void
bf5xx_i2s_remove
(
struct
snd_soc_dai
*
dai
)
static
void
bf5xx_i2s_remove
(
struct
platform_device
*
pdev
,
struct
snd_soc_dai
*
dai
)
{
pr_debug
(
"%s enter
\n
"
,
__func__
);
peripheral_free_list
(
&
sport_req
[
sport_num
][
0
]);
...
...
@@ -236,36 +237,31 @@ static void bf5xx_i2s_remove(struct snd_soc_dai *dai)
#ifdef CONFIG_PM
static
int
bf5xx_i2s_suspend
(
struct
snd_soc_dai
*
dai
)
{
struct
sport_device
*
sport
=
(
struct
sport_device
*
)
dai
->
private_data
;
pr_debug
(
"%s : sport %d
\n
"
,
__func__
,
dai
->
id
);
if
(
!
dai
->
active
)
return
0
;
if
(
dai
->
capture
.
active
)
sport_rx_stop
(
sport
);
sport_rx_stop
(
sport
_handle
);
if
(
dai
->
playback
.
active
)
sport_tx_stop
(
sport
);
sport_tx_stop
(
sport
_handle
);
return
0
;
}
static
int
bf5xx_i2s_resume
(
struct
snd_soc_dai
*
dai
)
{
int
ret
;
struct
sport_device
*
sport
=
(
struct
sport_device
*
)
dai
->
private_data
;
pr_debug
(
"%s : sport %d
\n
"
,
__func__
,
dai
->
id
);
if
(
!
dai
->
active
)
return
0
;
ret
=
sport_config_rx
(
sport
,
RFSR
|
RCKFE
,
RSFSE
|
0x1f
,
0
,
0
);
ret
=
sport_config_rx
(
sport_handle
,
bf5xx_i2s
.
rcr1
,
bf5xx_i2s
.
rcr2
,
0
,
0
);
if
(
ret
)
{
pr_err
(
"SPORT is busy!
\n
"
);
return
-
EBUSY
;
}
ret
=
sport_config_tx
(
sport
,
TFSR
|
TCKFE
,
TSFSE
|
0x1f
,
0
,
0
);
ret
=
sport_config_tx
(
sport_handle
,
bf5xx_i2s
.
tcr1
,
bf5xx_i2s
.
tcr2
,
0
,
0
);
if
(
ret
)
{
pr_err
(
"SPORT is busy!
\n
"
);
return
-
EBUSY
;
...
...
sound/soc/blackfin/bf5xx-i2s.h
View file @
9f072b7b
/*
*
linux/sound/arm
/bf5xx-i2s.h
*
sound/soc/blackfin
/bf5xx-i2s.h
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
...
...
sound/soc/blackfin/bf5xx-sport.c
View file @
9f072b7b
...
...
@@ -326,7 +326,7 @@ static inline int sport_hook_tx_dummy(struct sport_device *sport)
int
sport_tx_start
(
struct
sport_device
*
sport
)
{
unsigned
flags
;
unsigned
long
flags
;
pr_debug
(
"%s: tx_run:%d, rx_run:%d
\n
"
,
__func__
,
sport
->
tx_run
,
sport
->
rx_run
);
if
(
sport
->
tx_run
)
...
...
sound/soc/codecs/ad1836.c
View file @
9f072b7b
...
...
@@ -18,7 +18,6 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/device.h>
#include <sound/core.h>
...
...
sound/soc/codecs/ad1938.c
View file @
9f072b7b
...
...
@@ -28,7 +28,6 @@
#include <linux/init.h>
#include <linux/module.h>
#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/device.h>
#include <sound/core.h>
...
...
sound/soc/codecs/wm8350.c
View file @
9f072b7b
...
...
@@ -612,7 +612,7 @@ SOC_DAPM_SINGLE("Switch", WM8350_BEEP_VOLUME, 15, 1, 1);
/* Out4 Capture Mux */
static
const
struct
snd_kcontrol_new
wm8350_out4_capture_controls
=
SOC_DAPM_ENUM
(
"Route"
,
wm8350_enum
[
8
]);
SOC_DAPM_ENUM
(
"Route"
,
wm8350_enum
[
7
]);
static
const
struct
snd_soc_dapm_widget
wm8350_dapm_widgets
[]
=
{
...
...
sound/soc/codecs/wm8974.c
View file @
9f072b7b
...
...
@@ -12,7 +12,6 @@
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/delay.h>
...
...
sound/soc/davinci/davinci-mcasp.c
View file @
9f072b7b
...
...
@@ -512,34 +512,49 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev,
int
channel_size
)
{
u32
fmt
=
0
;
u32
mask
,
rotate
;
switch
(
channel_size
)
{
case
DAVINCI_AUDIO_WORD_8
:
fmt
=
0x03
;
rotate
=
6
;
mask
=
0x000000ff
;
break
;
case
DAVINCI_AUDIO_WORD_12
:
fmt
=
0x05
;
rotate
=
5
;
mask
=
0x00000fff
;
break
;
case
DAVINCI_AUDIO_WORD_16
:
fmt
=
0x07
;
rotate
=
4
;
mask
=
0x0000ffff
;
break
;
case
DAVINCI_AUDIO_WORD_20
:
fmt
=
0x09
;
rotate
=
3
;
mask
=
0x000fffff
;
break
;
case
DAVINCI_AUDIO_WORD_24
:
fmt
=
0x0B
;
rotate
=
2
;
mask
=
0x00ffffff
;
break
;
case
DAVINCI_AUDIO_WORD_28
:
fmt
=
0x0D
;
rotate
=
1
;
mask
=
0x0fffffff
;
break
;
case
DAVINCI_AUDIO_WORD_32
:
fmt
=
0x0F
;
rotate
=
0
;
mask
=
0xffffffff
;
break
;
default:
...
...
@@ -550,6 +565,13 @@ static int davinci_config_channel_size(struct davinci_audio_dev *dev,
RXSSZ
(
fmt
),
RXSSZ
(
0x0F
));
mcasp_mod_bits
(
dev
->
base
+
DAVINCI_MCASP_TXFMT_REG
,
TXSSZ
(
fmt
),
TXSSZ
(
0x0F
));
mcasp_mod_bits
(
dev
->
base
+
DAVINCI_MCASP_TXFMT_REG
,
TXROT
(
rotate
),
TXROT
(
7
));
mcasp_mod_bits
(
dev
->
base
+
DAVINCI_MCASP_RXFMT_REG
,
RXROT
(
rotate
),
RXROT
(
7
));
mcasp_set_reg
(
dev
->
base
+
DAVINCI_MCASP_TXMASK_REG
,
mask
);
mcasp_set_reg
(
dev
->
base
+
DAVINCI_MCASP_RXMASK_REG
,
mask
);
return
0
;
}
...
...
@@ -638,7 +660,6 @@ static void davinci_hw_param(struct davinci_audio_dev *dev, int stream)
printk
(
KERN_ERR
"playback tdm slot %d not supported
\n
"
,
dev
->
tdm_slots
);
mcasp_set_reg
(
dev
->
base
+
DAVINCI_MCASP_TXMASK_REG
,
0xFFFFFFFF
);
mcasp_clr_bits
(
dev
->
base
+
DAVINCI_MCASP_TXFMCTL_REG
,
FSXDUR
);
}
else
{
/* bit stream is MSB first with no delay */
...
...
@@ -655,7 +676,6 @@ static void davinci_hw_param(struct davinci_audio_dev *dev, int stream)
printk
(
KERN_ERR
"capture tdm slot %d not supported
\n
"
,
dev
->
tdm_slots
);
mcasp_set_reg
(
dev
->
base
+
DAVINCI_MCASP_RXMASK_REG
,
0xFFFFFFFF
);
mcasp_clr_bits
(
dev
->
base
+
DAVINCI_MCASP_RXFMCTL_REG
,
FSRDUR
);
}
}
...
...
sound/soc/fsl/mpc5200_dma.c
View file @
9f072b7b
...
...
@@ -447,6 +447,7 @@ int mpc5200_audio_dma_create(struct of_device *op)
int
size
,
irq
,
rc
;
const
__be32
*
prop
;
void
__iomem
*
regs
;
int
ret
;
/* Fetch the registers and IRQ of the PSC */
irq
=
irq_of_parse_and_map
(
op
->
node
,
0
);
...
...
@@ -463,14 +464,16 @@ int mpc5200_audio_dma_create(struct of_device *op)
/* Allocate and initialize the driver private data */
psc_dma
=
kzalloc
(
sizeof
*
psc_dma
,
GFP_KERNEL
);
if
(
!
psc_dma
)
{
iounmap
(
regs
)
;
return
-
ENOMEM
;
ret
=
-
ENOMEM
;
goto
out_unmap
;
}
/* Get the PSC ID */
prop
=
of_get_property
(
op
->
node
,
"cell-index"
,
&
size
);
if
(
!
prop
||
size
<
sizeof
*
prop
)
return
-
ENODEV
;
if
(
!
prop
||
size
<
sizeof
*
prop
)
{
ret
=
-
ENODEV
;
goto
out_free
;
}
spin_lock_init
(
&
psc_dma
->
lock
);
mutex_init
(
&
psc_dma
->
mutex
);
...
...
@@ -493,9 +496,8 @@ int mpc5200_audio_dma_create(struct of_device *op)
if
(
!
psc_dma
->
capture
.
bcom_task
||
!
psc_dma
->
playback
.
bcom_task
)
{
dev_err
(
&
op
->
dev
,
"Could not allocate bestcomm tasks
\n
"
);
iounmap
(
regs
);
kfree
(
psc_dma
);
return
-
ENODEV
;
ret
=
-
ENODEV
;
goto
out_free
;
}
/* Disable all interrupts and reset the PSC */
...
...
@@ -537,12 +539,8 @@ int mpc5200_audio_dma_create(struct of_device *op)
&
psc_dma_bcom_irq_tx
,
IRQF_SHARED
,
"psc-dma-playback"
,
&
psc_dma
->
playback
);
if
(
rc
)
{
free_irq
(
psc_dma
->
irq
,
psc_dma
);
free_irq
(
psc_dma
->
capture
.
irq
,
&
psc_dma
->
capture
);
free_irq
(
psc_dma
->
playback
.
irq
,
&
psc_dma
->
playback
);
return
-
ENODEV
;
ret
=
-
ENODEV
;
goto
out_irq
;
}
/* Save what we've done so it can be found again later */
...
...
@@ -550,6 +548,15 @@ int mpc5200_audio_dma_create(struct of_device *op)
/* Tell the ASoC OF helpers about it */
return
snd_soc_register_platform
(
&
mpc5200_audio_dma_platform
);
out_irq:
free_irq
(
psc_dma
->
irq
,
psc_dma
);
free_irq
(
psc_dma
->
capture
.
irq
,
&
psc_dma
->
capture
);
free_irq
(
psc_dma
->
playback
.
irq
,
&
psc_dma
->
playback
);
out_free:
kfree
(
psc_dma
);
out_unmap:
iounmap
(
regs
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
mpc5200_audio_dma_create
);
...
...
sound/soc/s3c24xx/s3c-i2s-v2.c
View file @
9f072b7b
...
...
@@ -230,6 +230,8 @@ static void s3c2412_snd_rxctrl(struct s3c_i2sv2_info *i2s, int on)
pr_debug
(
"%s: IIS: CON=%x MOD=%x FIC=%x
\n
"
,
__func__
,
con
,
mod
,
fic
);
}
#define msecs_to_loops(t) (loops_per_jiffy / 1000 * HZ * t)
/*
* Wait for the LR signal to allow synchronisation to the L/R clock
* from the codec. May only be needed for slave mode.
...
...
@@ -237,19 +239,21 @@ static void s3c2412_snd_rxctrl(struct s3c_i2sv2_info *i2s, int on)
static
int
s3c2412_snd_lrsync
(
struct
s3c_i2sv2_info
*
i2s
)
{
u32
iiscon
;
unsigned
long
timeout
=
jiffies
+
msecs_to_jiffie
s
(
5
);
unsigned
long
loops
=
msecs_to_loop
s
(
5
);
pr_debug
(
"Entered %s
\n
"
,
__func__
);
while
(
1
)
{
while
(
--
loops
)
{
iiscon
=
readl
(
i2s
->
regs
+
S3C2412_IISCON
);
if
(
iiscon
&
S3C2412_IISCON_LRINDEX
)
break
;
if
(
timeout
<
jiffies
)
{
printk
(
KERN_ERR
"%s: timeout
\n
"
,
__func__
);
return
-
ETIMEDOUT
;
}
cpu_relax
();
}
if
(
!
loops
)
{
printk
(
KERN_ERR
"%s: timeout
\n
"
,
__func__
);
return
-
ETIMEDOUT
;
}
return
0
;
...
...
sound/soc/soc-dapm.c
View file @
9f072b7b
...
...
@@ -1135,9 +1135,10 @@ static ssize_t dapm_widget_power_read_file(struct file *file,
ret
=
snprintf
(
buf
,
PAGE_SIZE
,
"%s: %s in %d out %d
\n
"
,
w
->
name
,
w
->
power
?
"On"
:
"Off"
,
in
,
out
);
if
(
w
->
active
&&
w
->
sname
)
ret
+=
snprintf
(
buf
,
PAGE_SIZE
-
ret
,
" stream %s active
\n
"
,
w
->
sname
);
if
(
w
->
sname
)
ret
+=
snprintf
(
buf
+
ret
,
PAGE_SIZE
-
ret
,
" stream %s %s
\n
"
,
w
->
sname
,
w
->
active
?
"active"
:
"inactive"
);
list_for_each_entry
(
p
,
&
w
->
sources
,
list_sink
)
{
if
(
p
->
connected
&&
!
p
->
connected
(
w
,
p
->
sink
))
...
...
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