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
17212e71
Commit
17212e71
authored
Jun 15, 2020
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge existing fixes from asoc/for-5.8
parents
b3a9e3b9
4036d05c
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
225 additions
and
97 deletions
+225
-97
include/sound/dmaengine_pcm.h
include/sound/dmaengine_pcm.h
+11
-0
include/sound/soc.h
include/sound/soc.h
+6
-0
sound/soc/codecs/max98390.c
sound/soc/codecs/max98390.c
+3
-3
sound/soc/codecs/rt1015.c
sound/soc/codecs/rt1015.c
+75
-49
sound/soc/codecs/rt1015.h
sound/soc/codecs/rt1015.h
+14
-1
sound/soc/codecs/rt5682.c
sound/soc/codecs/rt5682.c
+6
-5
sound/soc/fsl/fsl_asrc_common.h
sound/soc/fsl/fsl_asrc_common.h
+2
-0
sound/soc/fsl/fsl_asrc_dma.c
sound/soc/fsl/fsl_asrc_dma.c
+33
-14
sound/soc/qcom/common.c
sound/soc/qcom/common.c
+12
-2
sound/soc/qcom/qdsp6/q6afe.c
sound/soc/qcom/qdsp6/q6afe.c
+8
-0
sound/soc/qcom/qdsp6/q6afe.h
sound/soc/qcom/qdsp6/q6afe.h
+1
-0
sound/soc/qcom/qdsp6/q6asm.c
sound/soc/qcom/qdsp6/q6asm.c
+4
-3
sound/soc/soc-core.c
sound/soc/soc-core.c
+2
-1
sound/soc/soc-devres.c
sound/soc/soc-devres.c
+37
-0
sound/soc/soc-generic-dmaengine-pcm.c
sound/soc/soc-generic-dmaengine-pcm.c
+0
-12
sound/soc/soc-pcm.c
sound/soc/soc-pcm.c
+3
-3
sound/soc/soc-topology.c
sound/soc/soc-topology.c
+1
-2
sound/soc/sof/intel/hda-stream.c
sound/soc/sof/intel/hda-stream.c
+7
-2
No files found.
include/sound/dmaengine_pcm.h
View file @
17212e71
...
...
@@ -161,4 +161,15 @@ int snd_dmaengine_pcm_prepare_slave_config(struct snd_pcm_substream *substream,
#define SND_DMAENGINE_PCM_DRV_NAME "snd_dmaengine_pcm"
struct
dmaengine_pcm
{
struct
dma_chan
*
chan
[
SNDRV_PCM_STREAM_LAST
+
1
];
const
struct
snd_dmaengine_pcm_config
*
config
;
struct
snd_soc_component
component
;
unsigned
int
flags
;
};
static
inline
struct
dmaengine_pcm
*
soc_component_to_pcm
(
struct
snd_soc_component
*
p
)
{
return
container_of
(
p
,
struct
dmaengine_pcm
,
component
);
}
#endif
include/sound/soc.h
View file @
17212e71
...
...
@@ -444,6 +444,8 @@ int devm_snd_soc_register_component(struct device *dev,
const
struct
snd_soc_component_driver
*
component_driver
,
struct
snd_soc_dai_driver
*
dai_drv
,
int
num_dai
);
void
snd_soc_unregister_component
(
struct
device
*
dev
);
struct
snd_soc_component
*
snd_soc_lookup_component_nolocked
(
struct
device
*
dev
,
const
char
*
driver_name
);
struct
snd_soc_component
*
snd_soc_lookup_component
(
struct
device
*
dev
,
const
char
*
driver_name
);
...
...
@@ -1361,6 +1363,10 @@ void snd_soc_remove_pcm_runtime(struct snd_soc_card *card,
struct
snd_soc_dai
*
snd_soc_register_dai
(
struct
snd_soc_component
*
component
,
struct
snd_soc_dai_driver
*
dai_drv
,
bool
legacy_dai_naming
);
struct
snd_soc_dai
*
devm_snd_soc_register_dai
(
struct
device
*
dev
,
struct
snd_soc_component
*
component
,
struct
snd_soc_dai_driver
*
dai_drv
,
bool
legacy_dai_naming
);
void
snd_soc_unregister_dai
(
struct
snd_soc_dai
*
dai
);
struct
snd_soc_dai
*
snd_soc_find_dai
(
...
...
sound/soc/codecs/max98390.c
View file @
17212e71
...
...
@@ -700,8 +700,8 @@ static bool max98390_readable_register(struct device *dev, unsigned int reg)
case
MAX98390_IRQ_CTRL
...
MAX98390_WDOG_CTRL
:
case
MAX98390_MEAS_ADC_THERM_WARN_THRESH
...
MAX98390_BROWNOUT_INFINITE_HOLD
:
case
MAX98390_BROWNOUT_LVL_HOLD
...
THERMAL_COILTEMP_RD_BACK_BYTE0
:
case
DSM
IG_DEBUZZER_THRESHOLD
...
MAX98390_R24FF_REV_ID
:
case
MAX98390_BROWNOUT_LVL_HOLD
...
DSMIG_DEBUZZER_THRESHOLD
:
case
DSM
_VOL_ENA
...
MAX98390_R24FF_REV_ID
:
return
true
;
default:
return
false
;
...
...
@@ -717,7 +717,7 @@ static bool max98390_volatile_reg(struct device *dev, unsigned int reg)
case
MAX98390_BROWNOUT_LOWEST_STATUS
:
case
MAX98390_ENV_TRACK_BOOST_VOUT_READ
:
case
DSM_STBASS_HPF_B0_BYTE0
...
DSM_DEBUZZER_ATTACK_TIME_BYTE2
:
case
THERMAL_RDC_RD_BACK_BYTE1
...
THERMAL_COILTEMP_RD_BACK_BYTE0
:
case
THERMAL_RDC_RD_BACK_BYTE1
...
DSMIG_DEBUZZER_THRESHOLD
:
case
DSM_THERMAL_GAIN
...
DSM_WBDRC_GAIN
:
return
true
;
default:
...
...
sound/soc/codecs/rt1015.c
View file @
17212e71
...
...
@@ -34,30 +34,32 @@ static const struct reg_default rt1015_reg[] = {
{
0x0000
,
0x0000
},
{
0x0004
,
0xa000
},
{
0x0006
,
0x0003
},
{
0x000a
,
0x08
02
},
{
0x000c
,
0x00
20
},
{
0x000a
,
0x08
1e
},
{
0x000c
,
0x00
06
},
{
0x000e
,
0x0000
},
{
0x0010
,
0x0000
},
{
0x0012
,
0x0000
},
{
0x0014
,
0x0000
},
{
0x0016
,
0x0000
},
{
0x0018
,
0x0000
},
{
0x0020
,
0x8000
},
{
0x0022
,
0x471b
},
{
0x006a
,
0x0000
},
{
0x006c
,
0x4020
},
{
0x0022
,
0x8043
},
{
0x0076
,
0x0000
},
{
0x0078
,
0x0000
},
{
0x007a
,
0x000
0
},
{
0x007a
,
0x000
2
},
{
0x007c
,
0x10ec
},
{
0x007d
,
0x1015
},
{
0x00f0
,
0x5000
},
{
0x00f2
,
0x0
774
},
{
0x00f3
,
0x
8400
},
{
0x00f2
,
0x0
04c
},
{
0x00f3
,
0x
ecfe
},
{
0x00f4
,
0x0000
},
{
0x00f6
,
0x0400
},
{
0x0100
,
0x0028
},
{
0x0102
,
0xff02
},
{
0x0104
,
0x
8232
},
{
0x0104
,
0x
a213
},
{
0x0106
,
0x200c
},
{
0x010c
,
0x00
2f
},
{
0x010e
,
0x
c000
},
{
0x010c
,
0x00
00
},
{
0x010e
,
0x
0058
},
{
0x0111
,
0x0200
},
{
0x0112
,
0x0400
},
{
0x0114
,
0x0022
},
...
...
@@ -65,38 +67,46 @@ static const struct reg_default rt1015_reg[] = {
{
0x0118
,
0x0000
},
{
0x011a
,
0x0123
},
{
0x011c
,
0x4567
},
{
0x0300
,
0x
ddd
d
},
{
0x0302
,
0x00
00
},
{
0x0311
,
0x
933
0
},
{
0x0313
,
0x
0000
},
{
0x0314
,
0x00
00
},
{
0x0300
,
0x
203
d
},
{
0x0302
,
0x00
1e
},
{
0x0311
,
0x
000
0
},
{
0x0313
,
0x
6014
},
{
0x0314
,
0x00
a2
},
{
0x031a
,
0x00a0
},
{
0x031c
,
0x001f
},
{
0x031d
,
0xffff
},
{
0x031e
,
0x0000
},
{
0x031f
,
0x0000
},
{
0x0320
,
0x0000
},
{
0x0321
,
0x0000
},
{
0x0322
,
0x
0000
},
{
0x0328
,
0x
0000
},
{
0x0329
,
0x0
000
},
{
0x032a
,
0x
0000
},
{
0x032b
,
0x
0000
},
{
0x032c
,
0x0
00
0
},
{
0x032d
,
0x
00
00
},
{
0x032e
,
0x
03
0e
},
{
0x0330
,
0x
00
80
},
{
0x0322
,
0x
d7df
},
{
0x0328
,
0x
10b2
},
{
0x0329
,
0x0
175
},
{
0x032a
,
0x
36ad
},
{
0x032b
,
0x
7e55
},
{
0x032c
,
0x0
52
0
},
{
0x032d
,
0x
aa
00
},
{
0x032e
,
0x
57
0e
},
{
0x0330
,
0x
e1
80
},
{
0x0332
,
0x0034
},
{
0x0334
,
0x0000
},
{
0x0336
,
0x0000
},
{
0x0334
,
0x0001
},
{
0x0336
,
0x0010
},
{
0x0338
,
0x0000
},
{
0x04fa
,
0x0030
},
{
0x04fc
,
0x35c8
},
{
0x04fe
,
0x0800
},
{
0x0500
,
0x0400
},
{
0x0502
,
0x1000
},
{
0x0504
,
0x0000
},
{
0x0506
,
0x04ff
},
{
0x0508
,
0x00
3
0
},
{
0x050a
,
0x001
8
},
{
0x0519
,
0x
307f
},
{
0x051a
,
0x
ffff
},
{
0x051b
,
0x
4000
},
{
0x0508
,
0x00
1
0
},
{
0x050a
,
0x001
a
},
{
0x0519
,
0x
1c68
},
{
0x051a
,
0x
0ccc
},
{
0x051b
,
0x
0666
},
{
0x051d
,
0x0000
},
{
0x051f
,
0x0000
},
{
0x0536
,
0x
1000
},
{
0x0536
,
0x
061c
},
{
0x0538
,
0x0000
},
{
0x053a
,
0x0000
},
{
0x053c
,
0x0000
},
...
...
@@ -110,19 +120,18 @@ static const struct reg_default rt1015_reg[] = {
{
0x0544
,
0x0000
},
{
0x0568
,
0x0000
},
{
0x056a
,
0x0000
},
{
0x1000
,
0x00
0
0
},
{
0x1002
,
0x
65
05
},
{
0x1000
,
0x00
4
0
},
{
0x1002
,
0x
54
05
},
{
0x1006
,
0x5515
},
{
0x1007
,
0x003f
},
{
0x1009
,
0x770f
},
{
0x100a
,
0x01ff
},
{
0x100c
,
0x0000
},
{
0x1007
,
0x05f7
},
{
0x1009
,
0x0b0a
},
{
0x100a
,
0x00ef
},
{
0x100d
,
0x0003
},
{
0x1010
,
0xa433
},
{
0x1020
,
0x0000
},
{
0x1200
,
0x
3d02
},
{
0x1202
,
0x
0813
},
{
0x1204
,
0x
0211
},
{
0x1200
,
0x
5a01
},
{
0x1202
,
0x
6524
},
{
0x1204
,
0x
1f00
},
{
0x1206
,
0x0000
},
{
0x1208
,
0x0000
},
{
0x120a
,
0x0000
},
...
...
@@ -130,16 +139,16 @@ static const struct reg_default rt1015_reg[] = {
{
0x120e
,
0x0000
},
{
0x1210
,
0x0000
},
{
0x1212
,
0x0000
},
{
0x1300
,
0x
070
1
},
{
0x1302
,
0x12f
9
},
{
0x1304
,
0x
3405
},
{
0x1300
,
0x
10a
1
},
{
0x1302
,
0x12f
f
},
{
0x1304
,
0x
0400
},
{
0x1305
,
0x0844
},
{
0x1306
,
0x
1
611
},
{
0x1306
,
0x
4
611
},
{
0x1308
,
0x555e
},
{
0x130a
,
0x0000
},
{
0x130c
,
0x2
400
},
{
0x130e
,
0x
77
00
},
{
0x130f
,
0x000
0
},
{
0x130c
,
0x2
000
},
{
0x130e
,
0x
01
00
},
{
0x130f
,
0x000
1
},
{
0x1310
,
0x0000
},
{
0x1312
,
0x0000
},
{
0x1314
,
0x0000
},
...
...
@@ -209,6 +218,9 @@ static bool rt1015_volatile_register(struct device *dev, unsigned int reg)
case
RT1015_DC_CALIB_CLSD7
:
case
RT1015_DC_CALIB_CLSD8
:
case
RT1015_S_BST_TIMING_INTER1
:
case
RT1015_OSCK_STA
:
case
RT1015_MONO_DYNA_CTRL1
:
case
RT1015_MONO_DYNA_CTRL5
:
return
true
;
default:
...
...
@@ -224,6 +236,12 @@ static bool rt1015_readable_register(struct device *dev, unsigned int reg)
case
RT1015_CLK3
:
case
RT1015_PLL1
:
case
RT1015_PLL2
:
case
RT1015_DUM_RW1
:
case
RT1015_DUM_RW2
:
case
RT1015_DUM_RW3
:
case
RT1015_DUM_RW4
:
case
RT1015_DUM_RW5
:
case
RT1015_DUM_RW6
:
case
RT1015_CLK_DET
:
case
RT1015_SIL_DET
:
case
RT1015_CUSTOMER_ID
:
...
...
@@ -235,6 +253,7 @@ static bool rt1015_readable_register(struct device *dev, unsigned int reg)
case
RT1015_PAD_DRV2
:
case
RT1015_GAT_BOOST
:
case
RT1015_PRO_ALT
:
case
RT1015_OSCK_STA
:
case
RT1015_MAN_I2C
:
case
RT1015_DAC1
:
case
RT1015_DAC2
:
...
...
@@ -272,6 +291,13 @@ static bool rt1015_readable_register(struct device *dev, unsigned int reg)
case
RT1015_SMART_BST_CTRL2
:
case
RT1015_ANA_CTRL1
:
case
RT1015_ANA_CTRL2
:
case
RT1015_PWR_STATE_CTRL
:
case
RT1015_MONO_DYNA_CTRL
:
case
RT1015_MONO_DYNA_CTRL1
:
case
RT1015_MONO_DYNA_CTRL2
:
case
RT1015_MONO_DYNA_CTRL3
:
case
RT1015_MONO_DYNA_CTRL4
:
case
RT1015_MONO_DYNA_CTRL5
:
case
RT1015_SPK_VOL
:
case
RT1015_SHORT_DETTOP1
:
case
RT1015_SHORT_DETTOP2
:
...
...
sound/soc/codecs/rt1015.h
View file @
17212e71
...
...
@@ -21,6 +21,12 @@
#define RT1015_CLK3 0x0006
#define RT1015_PLL1 0x000a
#define RT1015_PLL2 0x000c
#define RT1015_DUM_RW1 0x000e
#define RT1015_DUM_RW2 0x0010
#define RT1015_DUM_RW3 0x0012
#define RT1015_DUM_RW4 0x0014
#define RT1015_DUM_RW5 0x0016
#define RT1015_DUM_RW6 0x0018
#define RT1015_CLK_DET 0x0020
#define RT1015_SIL_DET 0x0022
#define RT1015_CUSTOMER_ID 0x0076
...
...
@@ -32,6 +38,7 @@
#define RT1015_PAD_DRV2 0x00f2
#define RT1015_GAT_BOOST 0x00f3
#define RT1015_PRO_ALT 0x00f4
#define RT1015_OSCK_STA 0x00f6
#define RT1015_MAN_I2C 0x0100
#define RT1015_DAC1 0x0102
#define RT1015_DAC2 0x0104
...
...
@@ -70,7 +77,13 @@
#define RT1015_ANA_CTRL1 0x0334
#define RT1015_ANA_CTRL2 0x0336
#define RT1015_PWR_STATE_CTRL 0x0338
#define RT1015_SPK_VOL 0x0506
#define RT1015_MONO_DYNA_CTRL 0x04fa
#define RT1015_MONO_DYNA_CTRL1 0x04fc
#define RT1015_MONO_DYNA_CTRL2 0x04fe
#define RT1015_MONO_DYNA_CTRL3 0x0500
#define RT1015_MONO_DYNA_CTRL4 0x0502
#define RT1015_MONO_DYNA_CTRL5 0x0504
#define RT1015_SPK_VOL 0x0506
#define RT1015_SHORT_DETTOP1 0x0508
#define RT1015_SHORT_DETTOP2 0x050a
#define RT1015_SPK_DC_DETECT1 0x0519
...
...
sound/soc/codecs/rt5682.c
View file @
17212e71
...
...
@@ -2829,12 +2829,13 @@ static int rt5682_probe(struct snd_soc_component *component)
return
ret
;
}
rt5682
->
mclk
=
NULL
;
}
else
{
/* Register CCF DAI clock control */
ret
=
rt5682_register_dai_clks
(
component
);
if
(
ret
)
return
ret
;
}
/* Register CCF DAI clock control */
ret
=
rt5682_register_dai_clks
(
component
);
if
(
ret
)
return
ret
;
/* Initial setup for CCF */
rt5682
->
lrck
[
RT5682_AIF1
]
=
CLK_48
;
#endif
...
...
sound/soc/fsl/fsl_asrc_common.h
View file @
17212e71
...
...
@@ -32,6 +32,7 @@ enum asrc_pair_index {
* @dma_chan: inputer and output DMA channels
* @dma_data: private dma data
* @pos: hardware pointer position
* @req_dma_chan: flag to release dev_to_dev chan
* @private: pair private area
*/
struct
fsl_asrc_pair
{
...
...
@@ -45,6 +46,7 @@ struct fsl_asrc_pair {
struct
dma_chan
*
dma_chan
[
2
];
struct
imx_dma_data
dma_data
;
unsigned
int
pos
;
bool
req_dma_chan
;
void
*
private
;
};
...
...
sound/soc/fsl/fsl_asrc_dma.c
View file @
17212e71
...
...
@@ -135,6 +135,8 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
struct
snd_dmaengine_dai_dma_data
*
dma_params_be
=
NULL
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
fsl_asrc_pair
*
pair
=
runtime
->
private_data
;
struct
dma_chan
*
tmp_chan
=
NULL
,
*
be_chan
=
NULL
;
struct
snd_soc_component
*
component_be
=
NULL
;
struct
fsl_asrc
*
asrc
=
pair
->
asrc
;
struct
dma_slave_config
config_fe
,
config_be
;
enum
asrc_pair_index
index
=
pair
->
index
;
...
...
@@ -142,7 +144,6 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
int
stream
=
substream
->
stream
;
struct
imx_dma_data
*
tmp_data
;
struct
snd_soc_dpcm
*
dpcm
;
struct
dma_chan
*
tmp_chan
;
struct
device
*
dev_be
;
u8
dir
=
tx
?
OUT
:
IN
;
dma_cap_mask_t
mask
;
...
...
@@ -197,18 +198,30 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
dma_cap_set
(
DMA_SLAVE
,
mask
);
dma_cap_set
(
DMA_CYCLIC
,
mask
);
/*
* The Back-End device might have already requested a DMA channel,
* so try to reuse it first, and then request a new one upon NULL.
*/
component_be
=
snd_soc_lookup_component_nolocked
(
dev_be
,
SND_DMAENGINE_PCM_DRV_NAME
);
if
(
component_be
)
{
be_chan
=
soc_component_to_pcm
(
component_be
)
->
chan
[
substream
->
stream
];
tmp_chan
=
be_chan
;
}
if
(
!
tmp_chan
)
tmp_chan
=
dma_request_slave_channel
(
dev_be
,
tx
?
"tx"
:
"rx"
);
/*
* An EDMA DEV_TO_DEV channel is fixed and bound with DMA event of each
* peripheral, unlike SDMA channel that is allocated dynamically. So no
* need to configure dma_request and dma_request2, but get dma_chan
via
*
dma_request_slave_channel directly with dma name of Front-End device
* need to configure dma_request and dma_request2, but get dma_chan
of
*
Back-End device directly via dma_request_slave_channel.
*/
if
(
!
asrc
->
use_edma
)
{
/* Get DMA request of Back-End */
tmp_chan
=
dma_request_slave_channel
(
dev_be
,
tx
?
"tx"
:
"rx"
);
tmp_data
=
tmp_chan
->
private
;
pair
->
dma_data
.
dma_request
=
tmp_data
->
dma_request
;
dma_release_channel
(
tmp_chan
);
if
(
!
be_chan
)
dma_release_channel
(
tmp_chan
);
/* Get DMA request of Front-End */
tmp_chan
=
asrc
->
get_dma_channel
(
pair
,
dir
);
...
...
@@ -220,9 +233,11 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
pair
->
dma_chan
[
dir
]
=
dma_request_channel
(
mask
,
filter
,
&
pair
->
dma_data
);
pair
->
req_dma_chan
=
true
;
}
else
{
pair
->
dma_chan
[
dir
]
=
asrc
->
get_dma_channel
(
pair
,
dir
);
pair
->
dma_chan
[
dir
]
=
tmp_chan
;
/* Do not flag to release if we are reusing the Back-End one */
pair
->
req_dma_chan
=
!
be_chan
;
}
if
(
!
pair
->
dma_chan
[
dir
])
{
...
...
@@ -261,7 +276,8 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
ret
=
dmaengine_slave_config
(
pair
->
dma_chan
[
dir
],
&
config_be
);
if
(
ret
)
{
dev_err
(
dev
,
"failed to config DMA channel for Back-End
\n
"
);
dma_release_channel
(
pair
->
dma_chan
[
dir
]);
if
(
pair
->
req_dma_chan
)
dma_release_channel
(
pair
->
dma_chan
[
dir
]);
return
ret
;
}
...
...
@@ -273,19 +289,22 @@ static int fsl_asrc_dma_hw_params(struct snd_soc_component *component,
static
int
fsl_asrc_dma_hw_free
(
struct
snd_soc_component
*
component
,
struct
snd_pcm_substream
*
substream
)
{
bool
tx
=
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
fsl_asrc_pair
*
pair
=
runtime
->
private_data
;
u8
dir
=
tx
?
OUT
:
IN
;
snd_pcm_set_runtime_buffer
(
substream
,
NULL
);
if
(
pair
->
dma_chan
[
IN
])
dma_release_channel
(
pair
->
dma_chan
[
IN
]);
if
(
pair
->
dma_chan
[
!
dir
])
dma_release_channel
(
pair
->
dma_chan
[
!
dir
]);
if
(
pair
->
dma_chan
[
OUT
])
dma_release_channel
(
pair
->
dma_chan
[
OUT
]);
/* release dev_to_dev chan if we aren't reusing the Back-End one */
if
(
pair
->
dma_chan
[
dir
]
&&
pair
->
req_dma_chan
)
dma_release_channel
(
pair
->
dma_chan
[
dir
]);
pair
->
dma_chan
[
IN
]
=
NULL
;
pair
->
dma_chan
[
OUT
]
=
NULL
;
pair
->
dma_chan
[
!
dir
]
=
NULL
;
pair
->
dma_chan
[
dir
]
=
NULL
;
return
0
;
}
...
...
sound/soc/qcom/common.c
View file @
17212e71
...
...
@@ -4,6 +4,7 @@
#include <linux/module.h>
#include "common.h"
#include "qdsp6/q6afe.h"
int
qcom_snd_parse_of
(
struct
snd_soc_card
*
card
)
{
...
...
@@ -101,6 +102,15 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
}
link
->
no_pcm
=
1
;
link
->
ignore_pmdown_time
=
1
;
if
(
q6afe_is_rx_port
(
link
->
id
))
{
link
->
dpcm_playback
=
1
;
link
->
dpcm_capture
=
0
;
}
else
{
link
->
dpcm_playback
=
0
;
link
->
dpcm_capture
=
1
;
}
}
else
{
dlc
=
devm_kzalloc
(
dev
,
sizeof
(
*
dlc
),
GFP_KERNEL
);
if
(
!
dlc
)
...
...
@@ -113,12 +123,12 @@ int qcom_snd_parse_of(struct snd_soc_card *card)
link
->
codecs
->
dai_name
=
"snd-soc-dummy-dai"
;
link
->
codecs
->
name
=
"snd-soc-dummy"
;
link
->
dynamic
=
1
;
link
->
dpcm_playback
=
1
;
link
->
dpcm_capture
=
1
;
}
link
->
ignore_suspend
=
1
;
link
->
nonatomic
=
1
;
link
->
dpcm_playback
=
1
;
link
->
dpcm_capture
=
1
;
link
->
stream_name
=
link
->
name
;
link
++
;
...
...
sound/soc/qcom/qdsp6/q6afe.c
View file @
17212e71
...
...
@@ -800,6 +800,14 @@ int q6afe_get_port_id(int index)
}
EXPORT_SYMBOL_GPL
(
q6afe_get_port_id
);
int
q6afe_is_rx_port
(
int
index
)
{
if
(
index
<
0
||
index
>=
AFE_PORT_MAX
)
return
-
EINVAL
;
return
port_maps
[
index
].
is_rx
;
}
EXPORT_SYMBOL_GPL
(
q6afe_is_rx_port
);
static
int
afe_apr_send_pkt
(
struct
q6afe
*
afe
,
struct
apr_pkt
*
pkt
,
struct
q6afe_port
*
port
)
{
...
...
sound/soc/qcom/qdsp6/q6afe.h
View file @
17212e71
...
...
@@ -198,6 +198,7 @@ int q6afe_port_start(struct q6afe_port *port);
int
q6afe_port_stop
(
struct
q6afe_port
*
port
);
void
q6afe_port_put
(
struct
q6afe_port
*
port
);
int
q6afe_get_port_id
(
int
index
);
int
q6afe_is_rx_port
(
int
index
);
void
q6afe_hdmi_port_prepare
(
struct
q6afe_port
*
port
,
struct
q6afe_hdmi_cfg
*
cfg
);
void
q6afe_slim_port_prepare
(
struct
q6afe_port
*
port
,
...
...
sound/soc/qcom/qdsp6/q6asm.c
View file @
17212e71
...
...
@@ -25,6 +25,7 @@
#define ASM_STREAM_CMD_FLUSH 0x00010BCE
#define ASM_SESSION_CMD_PAUSE 0x00010BD3
#define ASM_DATA_CMD_EOS 0x00010BDB
#define ASM_DATA_EVENT_RENDERED_EOS 0x00010C1C
#define ASM_NULL_POPP_TOPOLOGY 0x00010C68
#define ASM_STREAM_CMD_FLUSH_READBUFS 0x00010C09
#define ASM_STREAM_CMD_SET_ENCDEC_PARAM 0x00010C10
...
...
@@ -622,9 +623,6 @@ static int32_t q6asm_stream_callback(struct apr_device *adev,
case
ASM_SESSION_CMD_SUSPEND
:
client_event
=
ASM_CLIENT_EVENT_CMD_SUSPEND_DONE
;
break
;
case
ASM_DATA_CMD_EOS
:
client_event
=
ASM_CLIENT_EVENT_CMD_EOS_DONE
;
break
;
case
ASM_STREAM_CMD_FLUSH
:
client_event
=
ASM_CLIENT_EVENT_CMD_FLUSH_DONE
;
break
;
...
...
@@ -727,6 +725,9 @@ static int32_t q6asm_stream_callback(struct apr_device *adev,
spin_unlock_irqrestore
(
&
ac
->
lock
,
flags
);
}
break
;
case
ASM_DATA_EVENT_RENDERED_EOS
:
client_event
=
ASM_CLIENT_EVENT_CMD_EOS_DONE
;
break
;
}
...
...
sound/soc/soc-core.c
View file @
17212e71
...
...
@@ -310,7 +310,7 @@ struct snd_soc_component *snd_soc_rtdcom_lookup(struct snd_soc_pcm_runtime *rtd,
}
EXPORT_SYMBOL_GPL
(
snd_soc_rtdcom_lookup
);
st
atic
st
ruct
snd_soc_component
struct
snd_soc_component
*
snd_soc_lookup_component_nolocked
(
struct
device
*
dev
,
const
char
*
driver_name
)
{
struct
snd_soc_component
*
component
;
...
...
@@ -329,6 +329,7 @@ static struct snd_soc_component
return
found_component
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_lookup_component_nolocked
);
struct
snd_soc_component
*
snd_soc_lookup_component
(
struct
device
*
dev
,
const
char
*
driver_name
)
...
...
sound/soc/soc-devres.c
View file @
17212e71
...
...
@@ -9,6 +9,43 @@
#include <sound/soc.h>
#include <sound/dmaengine_pcm.h>
static
void
devm_dai_release
(
struct
device
*
dev
,
void
*
res
)
{
snd_soc_unregister_dai
(
*
(
struct
snd_soc_dai
**
)
res
);
}
/**
* devm_snd_soc_register_dai - resource-managed dai registration
* @dev: Device used to manage component
* @component: The component the DAIs are registered for
* @dai_drv: DAI driver to use for the DAI
* @legacy_dai_naming: if %true, use legacy single-name format;
* if %false, use multiple-name format;
*/
struct
snd_soc_dai
*
devm_snd_soc_register_dai
(
struct
device
*
dev
,
struct
snd_soc_component
*
component
,
struct
snd_soc_dai_driver
*
dai_drv
,
bool
legacy_dai_naming
)
{
struct
snd_soc_dai
**
ptr
;
struct
snd_soc_dai
*
dai
;
ptr
=
devres_alloc
(
devm_dai_release
,
sizeof
(
*
ptr
),
GFP_KERNEL
);
if
(
!
ptr
)
return
NULL
;
dai
=
snd_soc_register_dai
(
component
,
dai_drv
,
legacy_dai_naming
);
if
(
dai
)
{
*
ptr
=
dai
;
devres_add
(
dev
,
ptr
);
}
else
{
devres_free
(
ptr
);
}
return
dai
;
}
EXPORT_SYMBOL_GPL
(
devm_snd_soc_register_dai
);
static
void
devm_component_release
(
struct
device
*
dev
,
void
*
res
)
{
snd_soc_unregister_component
(
*
(
struct
device
**
)
res
);
...
...
sound/soc/soc-generic-dmaengine-pcm.c
View file @
17212e71
...
...
@@ -21,18 +21,6 @@
*/
#define SND_DMAENGINE_PCM_FLAG_NO_RESIDUE BIT(31)
struct
dmaengine_pcm
{
struct
dma_chan
*
chan
[
SNDRV_PCM_STREAM_LAST
+
1
];
const
struct
snd_dmaengine_pcm_config
*
config
;
struct
snd_soc_component
component
;
unsigned
int
flags
;
};
static
struct
dmaengine_pcm
*
soc_component_to_pcm
(
struct
snd_soc_component
*
p
)
{
return
container_of
(
p
,
struct
dmaengine_pcm
,
component
);
}
static
struct
device
*
dmaengine_dma_dev
(
struct
dmaengine_pcm
*
pcm
,
struct
snd_pcm_substream
*
substream
)
{
...
...
sound/soc/soc-pcm.c
View file @
17212e71
...
...
@@ -2630,15 +2630,15 @@ static int soc_dpcm_fe_runtime_update(struct snd_soc_pcm_runtime *fe, int new)
int
count
,
paths
;
int
ret
;
if
(
!
fe
->
dai_link
->
dynamic
)
return
0
;
if
(
fe
->
num_cpus
>
1
)
{
dev_err
(
fe
->
dev
,
"%s doesn't support Multi CPU yet
\n
"
,
__func__
);
return
-
EINVAL
;
}
if
(
!
fe
->
dai_link
->
dynamic
)
return
0
;
/* only check active links */
if
(
!
snd_soc_dai_active
(
asoc_rtd_to_cpu
(
fe
,
0
)))
return
0
;
...
...
sound/soc/soc-topology.c
View file @
17212e71
...
...
@@ -1851,7 +1851,7 @@ static int soc_tplg_dai_create(struct soc_tplg *tplg,
list_add
(
&
dai_drv
->
dobj
.
list
,
&
tplg
->
comp
->
dobj_list
);
/* register the DAI to the component */
dai
=
snd_soc_register_dai
(
tplg
->
comp
,
dai_drv
,
false
);
dai
=
devm_snd_soc_register_dai
(
tplg
->
comp
->
dev
,
tplg
->
comp
,
dai_drv
,
false
);
if
(
!
dai
)
return
-
ENOMEM
;
...
...
@@ -1859,7 +1859,6 @@ static int soc_tplg_dai_create(struct soc_tplg *tplg,
ret
=
snd_soc_dapm_new_dai_widgets
(
dapm
,
dai
);
if
(
ret
!=
0
)
{
dev_err
(
dai
->
dev
,
"Failed to create DAI widgets %d
\n
"
,
ret
);
snd_soc_unregister_dai
(
dai
);
return
ret
;
}
...
...
sound/soc/sof/intel/hda-stream.c
View file @
17212e71
...
...
@@ -653,11 +653,16 @@ irqreturn_t hda_dsp_stream_threaded_handler(int irq, void *context)
if
(
status
&
AZX_INT_CTRL_EN
)
{
rirb_status
=
snd_hdac_chip_readb
(
bus
,
RIRBSTS
);
if
(
rirb_status
&
RIRB_INT_MASK
)
{
/*
* Clearing the interrupt status here ensures
* that no interrupt gets masked after the RIRB
* wp is read in snd_hdac_bus_update_rirb.
*/
snd_hdac_chip_writeb
(
bus
,
RIRBSTS
,
RIRB_INT_MASK
);
active
=
true
;
if
(
rirb_status
&
RIRB_INT_RESPONSE
)
snd_hdac_bus_update_rirb
(
bus
);
snd_hdac_chip_writeb
(
bus
,
RIRBSTS
,
RIRB_INT_MASK
);
}
}
#endif
...
...
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