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
17212e71
Commit
17212e71
authored
4 years ago
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
This diff is collapsed.
Click to expand it.
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
(
...
...
This diff is collapsed.
Click to expand it.
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:
...
...
This diff is collapsed.
Click to expand it.
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
:
...
...
This diff is collapsed.
Click to expand it.
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
...
...
This diff is collapsed.
Click to expand it.
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
...
...
This diff is collapsed.
Click to expand it.
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
;
};
...
...
This diff is collapsed.
Click to expand it.
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
;
}
...
...
This diff is collapsed.
Click to expand it.
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
++
;
...
...
This diff is collapsed.
Click to expand it.
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
)
{
...
...
This diff is collapsed.
Click to expand it.
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
,
...
...
This diff is collapsed.
Click to expand it.
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
;
}
...
...
This diff is collapsed.
Click to expand it.
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
)
...
...
This diff is collapsed.
Click to expand it.
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
);
...
...
This diff is collapsed.
Click to expand it.
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
)
{
...
...
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
;
}
...
...
This diff is collapsed.
Click to expand it.
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
...
...
This diff is collapsed.
Click to expand it.
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