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
14cc5849
Commit
14cc5849
authored
Jun 14, 2022
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
ASoC: Merge fixes
Required for more changes for the ops.
parents
7ed1f83b
da440af0
Changes
31
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
269 additions
and
124 deletions
+269
-124
MAINTAINERS
MAINTAINERS
+7
-2
include/sound/soc.h
include/sound/soc.h
+0
-2
sound/soc/codecs/ak4613.c
sound/soc/codecs/ak4613.c
+4
-2
sound/soc/codecs/es8328.c
sound/soc/codecs/es8328.c
+4
-1
sound/soc/codecs/max98373-sdw.c
sound/soc/codecs/max98373-sdw.c
+11
-1
sound/soc/codecs/rt1308-sdw.c
sound/soc/codecs/rt1308-sdw.c
+11
-0
sound/soc/codecs/rt1316-sdw.c
sound/soc/codecs/rt1316-sdw.c
+11
-0
sound/soc/codecs/rt5682-sdw.c
sound/soc/codecs/rt5682-sdw.c
+4
-1
sound/soc/codecs/rt700-sdw.c
sound/soc/codecs/rt700-sdw.c
+5
-1
sound/soc/codecs/rt700.c
sound/soc/codecs/rt700.c
+19
-11
sound/soc/codecs/rt711-sdca-sdw.c
sound/soc/codecs/rt711-sdca-sdw.c
+8
-1
sound/soc/codecs/rt711-sdca.c
sound/soc/codecs/rt711-sdca.c
+19
-21
sound/soc/codecs/rt711-sdw.c
sound/soc/codecs/rt711-sdw.c
+8
-1
sound/soc/codecs/rt711.c
sound/soc/codecs/rt711.c
+20
-20
sound/soc/codecs/rt715-sdca-sdw.c
sound/soc/codecs/rt715-sdca-sdw.c
+12
-0
sound/soc/codecs/rt715-sdw.c
sound/soc/codecs/rt715-sdw.c
+12
-0
sound/soc/codecs/wcd9335.c
sound/soc/codecs/wcd9335.c
+7
-1
sound/soc/codecs/wcd938x.c
sound/soc/codecs/wcd938x.c
+12
-0
sound/soc/codecs/wm8962.c
sound/soc/codecs/wm8962.c
+1
-0
sound/soc/fsl/fsl_sai.c
sound/soc/fsl/fsl_sai.c
+1
-0
sound/soc/intel/avs/topology.c
sound/soc/intel/avs/topology.c
+2
-2
sound/soc/intel/boards/bytcr_wm5102.c
sound/soc/intel/boards/bytcr_wm5102.c
+11
-2
sound/soc/intel/boards/sof_sdw.c
sound/soc/intel/boards/sof_sdw.c
+29
-22
sound/soc/qcom/qdsp6/q6apm-dai.c
sound/soc/qcom/qdsp6/q6apm-dai.c
+6
-0
sound/soc/soc-ops.c
sound/soc/soc-ops.c
+2
-2
sound/soc/sof/intel/hda-dsp.c
sound/soc/sof/intel/hda-dsp.c
+9
-1
sound/soc/sof/intel/hda-loader.c
sound/soc/sof/intel/hda-loader.c
+5
-5
sound/soc/sof/intel/hda.h
sound/soc/sof/intel/hda.h
+1
-0
sound/soc/sof/ipc3-topology.c
sound/soc/sof/ipc3-topology.c
+11
-12
sound/soc/sof/sof-audio.c
sound/soc/sof/sof-audio.c
+1
-1
sound/soc/sof/sof-client-ipc-msg-injector.c
sound/soc/sof/sof-client-ipc-msg-injector.c
+16
-12
No files found.
MAINTAINERS
View file @
14cc5849
...
...
@@ -9803,7 +9803,10 @@ INTEL ASoC DRIVERS
M: Cezary Rojewski <cezary.rojewski@intel.com>
M: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
M: Liam Girdwood <liam.r.girdwood@linux.intel.com>
M: Jie Yang <yang.jie@linux.intel.com>
M: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
M: Bard Liao <yung-chuan.liao@linux.intel.com>
M: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
M: Kai Vehmanen <kai.vehmanen@linux.intel.com>
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
S: Supported
F: sound/soc/intel/
...
...
@@ -18670,8 +18673,10 @@ F: sound/soc/
SOUND - SOUND OPEN FIRMWARE (SOF) DRIVERS
M: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
M: Liam Girdwood <lgirdwood@gmail.com>
M: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
M: Bard Liao <yung-chuan.liao@linux.intel.com>
M: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
M
: Kai Vehmanen <kai.vehmanen@linux.intel.com>
R
: Kai Vehmanen <kai.vehmanen@linux.intel.com>
M: Daniel Baluta <daniel.baluta@nxp.com>
L: sound-open-firmware@alsa-project.org (moderated for non-subscribers)
S: Supported
...
...
include/sound/soc.h
View file @
14cc5849
...
...
@@ -408,8 +408,6 @@ struct snd_soc_jack_pin;
struct
snd_soc_jack_gpio
;
typedef
int
(
*
hw_write_t
)(
void
*
,
const
char
*
,
int
);
enum
snd_soc_pcm_subclass
{
SND_SOC_PCM_CLASS_PCM
=
0
,
SND_SOC_PCM_CLASS_BE
=
1
,
...
...
sound/soc/codecs/ak4613.c
View file @
14cc5849
...
...
@@ -868,10 +868,12 @@ static void ak4613_parse_of(struct ak4613_priv *priv,
/*
* connected STDI
* TDM support is assuming it is probed via Audio-Graph-Card style here.
* Default is SDTIx1 if it was probed via Simple-Audio-Card for now.
*/
sdti_num
=
of_graph_get_endpoint_count
(
np
);
if
(
WARN_ON
((
sdti_num
>
3
)
||
(
sdti_num
<
1
)
))
return
;
if
(
(
sdti_num
>=
SDTx_MAX
)
||
(
sdti_num
<
1
))
sdti_num
=
1
;
AK4613_CONFIG_SDTI_set
(
priv
,
sdti_num
);
}
...
...
sound/soc/codecs/es8328.c
View file @
14cc5849
...
...
@@ -161,13 +161,16 @@ static int es8328_put_deemph(struct snd_kcontrol *kcontrol,
if
(
deemph
>
1
)
return
-
EINVAL
;
if
(
es8328
->
deemph
==
deemph
)
return
0
;
ret
=
es8328_set_deemph
(
component
);
if
(
ret
<
0
)
return
ret
;
es8328
->
deemph
=
deemph
;
return
0
;
return
1
;
}
...
...
sound/soc/codecs/max98373-sdw.c
View file @
14cc5849
...
...
@@ -862,6 +862,16 @@ static int max98373_sdw_probe(struct sdw_slave *slave,
return
max98373_init
(
slave
,
regmap
);
}
static
int
max98373_sdw_remove
(
struct
sdw_slave
*
slave
)
{
struct
max98373_priv
*
max98373
=
dev_get_drvdata
(
&
slave
->
dev
);
if
(
max98373
->
first_hw_init
)
pm_runtime_disable
(
&
slave
->
dev
);
return
0
;
}
#if defined(CONFIG_OF)
static
const
struct
of_device_id
max98373_of_match
[]
=
{
{
.
compatible
=
"maxim,max98373"
,
},
...
...
@@ -893,7 +903,7 @@ static struct sdw_driver max98373_sdw_driver = {
.
pm
=
&
max98373_pm
,
},
.
probe
=
max98373_sdw_probe
,
.
remove
=
NULL
,
.
remove
=
max98373_sdw_remove
,
.
ops
=
&
max98373_slave_ops
,
.
id_table
=
max98373_id
,
};
...
...
sound/soc/codecs/rt1308-sdw.c
View file @
14cc5849
...
...
@@ -691,6 +691,16 @@ static int rt1308_sdw_probe(struct sdw_slave *slave,
return
0
;
}
static
int
rt1308_sdw_remove
(
struct
sdw_slave
*
slave
)
{
struct
rt1308_sdw_priv
*
rt1308
=
dev_get_drvdata
(
&
slave
->
dev
);
if
(
rt1308
->
first_hw_init
)
pm_runtime_disable
(
&
slave
->
dev
);
return
0
;
}
static
const
struct
sdw_device_id
rt1308_id
[]
=
{
SDW_SLAVE_ENTRY_EXT
(
0x025d
,
0x1308
,
0x2
,
0
,
0
),
{},
...
...
@@ -750,6 +760,7 @@ static struct sdw_driver rt1308_sdw_driver = {
.
pm
=
&
rt1308_pm
,
},
.
probe
=
rt1308_sdw_probe
,
.
remove
=
rt1308_sdw_remove
,
.
ops
=
&
rt1308_slave_ops
,
.
id_table
=
rt1308_id
,
};
...
...
sound/soc/codecs/rt1316-sdw.c
View file @
14cc5849
...
...
@@ -676,6 +676,16 @@ static int rt1316_sdw_probe(struct sdw_slave *slave,
return
rt1316_sdw_init
(
&
slave
->
dev
,
regmap
,
slave
);
}
static
int
rt1316_sdw_remove
(
struct
sdw_slave
*
slave
)
{
struct
rt1316_sdw_priv
*
rt1316
=
dev_get_drvdata
(
&
slave
->
dev
);
if
(
rt1316
->
first_hw_init
)
pm_runtime_disable
(
&
slave
->
dev
);
return
0
;
}
static
const
struct
sdw_device_id
rt1316_id
[]
=
{
SDW_SLAVE_ENTRY_EXT
(
0x025d
,
0x1316
,
0x3
,
0x1
,
0
),
{},
...
...
@@ -735,6 +745,7 @@ static struct sdw_driver rt1316_sdw_driver = {
.
pm
=
&
rt1316_pm
,
},
.
probe
=
rt1316_sdw_probe
,
.
remove
=
rt1316_sdw_remove
,
.
ops
=
&
rt1316_slave_ops
,
.
id_table
=
rt1316_id
,
};
...
...
sound/soc/codecs/rt5682-sdw.c
View file @
14cc5849
...
...
@@ -719,9 +719,12 @@ static int rt5682_sdw_remove(struct sdw_slave *slave)
{
struct
rt5682_priv
*
rt5682
=
dev_get_drvdata
(
&
slave
->
dev
);
if
(
rt5682
&&
rt5682
->
hw_init
)
if
(
rt5682
->
hw_init
)
cancel_delayed_work_sync
(
&
rt5682
->
jack_detect_work
);
if
(
rt5682
->
first_hw_init
)
pm_runtime_disable
(
&
slave
->
dev
);
return
0
;
}
...
...
sound/soc/codecs/rt700-sdw.c
View file @
14cc5849
...
...
@@ -13,6 +13,7 @@
#include <linux/soundwire/sdw_type.h>
#include <linux/soundwire/sdw_registers.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <sound/soc.h>
#include "rt700.h"
...
...
@@ -463,11 +464,14 @@ static int rt700_sdw_remove(struct sdw_slave *slave)
{
struct
rt700_priv
*
rt700
=
dev_get_drvdata
(
&
slave
->
dev
);
if
(
rt700
&&
rt700
->
hw_init
)
{
if
(
rt700
->
hw_init
)
{
cancel_delayed_work_sync
(
&
rt700
->
jack_detect_work
);
cancel_delayed_work_sync
(
&
rt700
->
jack_btn_check_work
);
}
if
(
rt700
->
first_hw_init
)
pm_runtime_disable
(
&
slave
->
dev
);
return
0
;
}
...
...
sound/soc/codecs/rt700.c
View file @
14cc5849
...
...
@@ -162,7 +162,7 @@ static void rt700_jack_detect_handler(struct work_struct *work)
if
(
!
rt700
->
hs_jack
)
return
;
if
(
!
rt700
->
component
->
card
->
instantiated
)
if
(
!
rt700
->
component
->
card
||
!
rt700
->
component
->
card
->
instantiated
)
return
;
reg
=
RT700_VERB_GET_PIN_SENSE
|
RT700_HP_OUT
;
...
...
@@ -315,17 +315,27 @@ static int rt700_set_jack_detect(struct snd_soc_component *component,
struct
snd_soc_jack
*
hs_jack
,
void
*
data
)
{
struct
rt700_priv
*
rt700
=
snd_soc_component_get_drvdata
(
component
);
int
ret
;
rt700
->
hs_jack
=
hs_jack
;
if
(
!
rt700
->
hw_init
)
{
dev_dbg
(
&
rt700
->
slave
->
dev
,
"%s hw_init not ready yet
\n
"
,
__func__
);
ret
=
pm_runtime_resume_and_get
(
component
->
dev
);
if
(
ret
<
0
)
{
if
(
ret
!=
-
EACCES
)
{
dev_err
(
component
->
dev
,
"%s: failed to resume %d
\n
"
,
__func__
,
ret
);
return
ret
;
}
/* pm_runtime not enabled yet */
dev_dbg
(
component
->
dev
,
"%s: skipping jack init for now
\n
"
,
__func__
);
return
0
;
}
rt700_jack_init
(
rt700
);
pm_runtime_mark_last_busy
(
component
->
dev
);
pm_runtime_put_autosuspend
(
component
->
dev
);
return
0
;
}
...
...
@@ -1115,6 +1125,11 @@ int rt700_init(struct device *dev, struct regmap *sdw_regmap,
mutex_init
(
&
rt700
->
disable_irq_lock
);
INIT_DELAYED_WORK
(
&
rt700
->
jack_detect_work
,
rt700_jack_detect_handler
);
INIT_DELAYED_WORK
(
&
rt700
->
jack_btn_check_work
,
rt700_btn_check_handler
);
/*
* Mark hw_init to false
* HW init will be performed when device reports present
...
...
@@ -1209,13 +1224,6 @@ int rt700_io_init(struct device *dev, struct sdw_slave *slave)
/* Finish Initial Settings, set power to D3 */
regmap_write
(
rt700
->
regmap
,
RT700_SET_AUDIO_POWER_STATE
,
AC_PWRST_D3
);
if
(
!
rt700
->
first_hw_init
)
{
INIT_DELAYED_WORK
(
&
rt700
->
jack_detect_work
,
rt700_jack_detect_handler
);
INIT_DELAYED_WORK
(
&
rt700
->
jack_btn_check_work
,
rt700_btn_check_handler
);
}
/*
* if set_jack callback occurred early than io_init,
* we set up the jack detection function now
...
...
sound/soc/codecs/rt711-sdca-sdw.c
View file @
14cc5849
...
...
@@ -11,6 +11,7 @@
#include <linux/mod_devicetable.h>
#include <linux/soundwire/sdw_registers.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include "rt711-sdca.h"
#include "rt711-sdca-sdw.h"
...
...
@@ -364,11 +365,17 @@ static int rt711_sdca_sdw_remove(struct sdw_slave *slave)
{
struct
rt711_sdca_priv
*
rt711
=
dev_get_drvdata
(
&
slave
->
dev
);
if
(
rt711
&&
rt711
->
hw_init
)
{
if
(
rt711
->
hw_init
)
{
cancel_delayed_work_sync
(
&
rt711
->
jack_detect_work
);
cancel_delayed_work_sync
(
&
rt711
->
jack_btn_check_work
);
}
if
(
rt711
->
first_hw_init
)
pm_runtime_disable
(
&
slave
->
dev
);
mutex_destroy
(
&
rt711
->
calibrate_mutex
);
mutex_destroy
(
&
rt711
->
disable_irq_lock
);
return
0
;
}
...
...
sound/soc/codecs/rt711-sdca.c
View file @
14cc5849
...
...
@@ -294,7 +294,7 @@ static void rt711_sdca_jack_detect_handler(struct work_struct *work)
if
(
!
rt711
->
hs_jack
)
return
;
if
(
!
rt711
->
component
->
card
->
instantiated
)
if
(
!
rt711
->
component
->
card
||
!
rt711
->
component
->
card
->
instantiated
)
return
;
/* SDW_SCP_SDCA_INT_SDCA_0 is used for jack detection */
...
...
@@ -487,16 +487,27 @@ static int rt711_sdca_set_jack_detect(struct snd_soc_component *component,
struct
snd_soc_jack
*
hs_jack
,
void
*
data
)
{
struct
rt711_sdca_priv
*
rt711
=
snd_soc_component_get_drvdata
(
component
);
int
ret
;
rt711
->
hs_jack
=
hs_jack
;
if
(
!
rt711
->
hw_init
)
{
dev_dbg
(
&
rt711
->
slave
->
dev
,
"%s hw_init not ready yet
\n
"
,
__func__
);
ret
=
pm_runtime_resume_and_get
(
component
->
dev
);
if
(
ret
<
0
)
{
if
(
ret
!=
-
EACCES
)
{
dev_err
(
component
->
dev
,
"%s: failed to resume %d
\n
"
,
__func__
,
ret
);
return
ret
;
}
/* pm_runtime not enabled yet */
dev_dbg
(
component
->
dev
,
"%s: skipping jack init for now
\n
"
,
__func__
);
return
0
;
}
rt711_sdca_jack_init
(
rt711
);
pm_runtime_mark_last_busy
(
component
->
dev
);
pm_runtime_put_autosuspend
(
component
->
dev
);
return
0
;
}
...
...
@@ -1190,14 +1201,6 @@ static int rt711_sdca_probe(struct snd_soc_component *component)
return
0
;
}
static
void
rt711_sdca_remove
(
struct
snd_soc_component
*
component
)
{
struct
rt711_sdca_priv
*
rt711
=
snd_soc_component_get_drvdata
(
component
);
regcache_cache_only
(
rt711
->
regmap
,
true
);
regcache_cache_only
(
rt711
->
mbq_regmap
,
true
);
}
static
const
struct
snd_soc_component_driver
soc_sdca_dev_rt711
=
{
.
probe
=
rt711_sdca_probe
,
.
controls
=
rt711_sdca_snd_controls
,
...
...
@@ -1207,7 +1210,6 @@ static const struct snd_soc_component_driver soc_sdca_dev_rt711 = {
.
dapm_routes
=
rt711_sdca_audio_map
,
.
num_dapm_routes
=
ARRAY_SIZE
(
rt711_sdca_audio_map
),
.
set_jack
=
rt711_sdca_set_jack_detect
,
.
remove
=
rt711_sdca_remove
,
.
endianness
=
1
,
};
...
...
@@ -1412,8 +1414,12 @@ int rt711_sdca_init(struct device *dev, struct regmap *regmap,
rt711
->
regmap
=
regmap
;
rt711
->
mbq_regmap
=
mbq_regmap
;
mutex_init
(
&
rt711
->
calibrate_mutex
);
mutex_init
(
&
rt711
->
disable_irq_lock
);
INIT_DELAYED_WORK
(
&
rt711
->
jack_detect_work
,
rt711_sdca_jack_detect_handler
);
INIT_DELAYED_WORK
(
&
rt711
->
jack_btn_check_work
,
rt711_sdca_btn_check_handler
);
/*
* Mark hw_init to false
* HW init will be performed when device reports present
...
...
@@ -1545,14 +1551,6 @@ int rt711_sdca_io_init(struct device *dev, struct sdw_slave *slave)
rt711_sdca_index_update_bits
(
rt711
,
RT711_VENDOR_HDA_CTL
,
RT711_PUSH_BTN_INT_CTL0
,
0x20
,
0x00
);
if
(
!
rt711
->
first_hw_init
)
{
INIT_DELAYED_WORK
(
&
rt711
->
jack_detect_work
,
rt711_sdca_jack_detect_handler
);
INIT_DELAYED_WORK
(
&
rt711
->
jack_btn_check_work
,
rt711_sdca_btn_check_handler
);
mutex_init
(
&
rt711
->
calibrate_mutex
);
}
/* calibration */
ret
=
rt711_sdca_calibration
(
rt711
);
if
(
ret
<
0
)
...
...
sound/soc/codecs/rt711-sdw.c
View file @
14cc5849
...
...
@@ -13,6 +13,7 @@
#include <linux/soundwire/sdw_type.h>
#include <linux/soundwire/sdw_registers.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <sound/soc.h>
#include "rt711.h"
...
...
@@ -464,12 +465,18 @@ static int rt711_sdw_remove(struct sdw_slave *slave)
{
struct
rt711_priv
*
rt711
=
dev_get_drvdata
(
&
slave
->
dev
);
if
(
rt711
&&
rt711
->
hw_init
)
{
if
(
rt711
->
hw_init
)
{
cancel_delayed_work_sync
(
&
rt711
->
jack_detect_work
);
cancel_delayed_work_sync
(
&
rt711
->
jack_btn_check_work
);
cancel_work_sync
(
&
rt711
->
calibration_work
);
}
if
(
rt711
->
first_hw_init
)
pm_runtime_disable
(
&
slave
->
dev
);
mutex_destroy
(
&
rt711
->
calibrate_mutex
);
mutex_destroy
(
&
rt711
->
disable_irq_lock
);
return
0
;
}
...
...
sound/soc/codecs/rt711.c
View file @
14cc5849
...
...
@@ -242,7 +242,7 @@ static void rt711_jack_detect_handler(struct work_struct *work)
if
(
!
rt711
->
hs_jack
)
return
;
if
(
!
rt711
->
component
->
card
->
instantiated
)
if
(
!
rt711
->
component
->
card
||
!
rt711
->
component
->
card
->
instantiated
)
return
;
if
(
pm_runtime_status_suspended
(
rt711
->
slave
->
dev
.
parent
))
{
...
...
@@ -457,17 +457,27 @@ static int rt711_set_jack_detect(struct snd_soc_component *component,
struct
snd_soc_jack
*
hs_jack
,
void
*
data
)
{
struct
rt711_priv
*
rt711
=
snd_soc_component_get_drvdata
(
component
);
int
ret
;
rt711
->
hs_jack
=
hs_jack
;
if
(
!
rt711
->
hw_init
)
{
dev_dbg
(
&
rt711
->
slave
->
dev
,
"%s hw_init not ready yet
\n
"
,
__func__
);
ret
=
pm_runtime_resume_and_get
(
component
->
dev
);
if
(
ret
<
0
)
{
if
(
ret
!=
-
EACCES
)
{
dev_err
(
component
->
dev
,
"%s: failed to resume %d
\n
"
,
__func__
,
ret
);
return
ret
;
}
/* pm_runtime not enabled yet */
dev_dbg
(
component
->
dev
,
"%s: skipping jack init for now
\n
"
,
__func__
);
return
0
;
}
rt711_jack_init
(
rt711
);
pm_runtime_mark_last_busy
(
component
->
dev
);
pm_runtime_put_autosuspend
(
component
->
dev
);
return
0
;
}
...
...
@@ -932,13 +942,6 @@ static int rt711_probe(struct snd_soc_component *component)
return
0
;
}
static
void
rt711_remove
(
struct
snd_soc_component
*
component
)
{
struct
rt711_priv
*
rt711
=
snd_soc_component_get_drvdata
(
component
);
regcache_cache_only
(
rt711
->
regmap
,
true
);
}
static
const
struct
snd_soc_component_driver
soc_codec_dev_rt711
=
{
.
probe
=
rt711_probe
,
.
set_bias_level
=
rt711_set_bias_level
,
...
...
@@ -949,7 +952,6 @@ static const struct snd_soc_component_driver soc_codec_dev_rt711 = {
.
dapm_routes
=
rt711_audio_map
,
.
num_dapm_routes
=
ARRAY_SIZE
(
rt711_audio_map
),
.
set_jack
=
rt711_set_jack_detect
,
.
remove
=
rt711_remove
,
.
endianness
=
1
,
};
...
...
@@ -1204,8 +1206,13 @@ int rt711_init(struct device *dev, struct regmap *sdw_regmap,
rt711
->
sdw_regmap
=
sdw_regmap
;
rt711
->
regmap
=
regmap
;
mutex_init
(
&
rt711
->
calibrate_mutex
);
mutex_init
(
&
rt711
->
disable_irq_lock
);
INIT_DELAYED_WORK
(
&
rt711
->
jack_detect_work
,
rt711_jack_detect_handler
);
INIT_DELAYED_WORK
(
&
rt711
->
jack_btn_check_work
,
rt711_btn_check_handler
);
INIT_WORK
(
&
rt711
->
calibration_work
,
rt711_calibration_work
);
/*
* Mark hw_init to false
* HW init will be performed when device reports present
...
...
@@ -1313,15 +1320,8 @@ int rt711_io_init(struct device *dev, struct sdw_slave *slave)
if
(
rt711
->
first_hw_init
)
rt711_calibration
(
rt711
);
else
{
INIT_DELAYED_WORK
(
&
rt711
->
jack_detect_work
,
rt711_jack_detect_handler
);
INIT_DELAYED_WORK
(
&
rt711
->
jack_btn_check_work
,
rt711_btn_check_handler
);
mutex_init
(
&
rt711
->
calibrate_mutex
);
INIT_WORK
(
&
rt711
->
calibration_work
,
rt711_calibration_work
);
else
schedule_work
(
&
rt711
->
calibration_work
);
}
/*
* if set_jack callback occurred early than io_init,
...
...
sound/soc/codecs/rt715-sdca-sdw.c
View file @
14cc5849
...
...
@@ -13,6 +13,7 @@
#include <linux/soundwire/sdw_type.h>
#include <linux/soundwire/sdw_registers.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <sound/soc.h>
#include "rt715-sdca.h"
...
...
@@ -193,6 +194,16 @@ static int rt715_sdca_sdw_probe(struct sdw_slave *slave,
return
rt715_sdca_init
(
&
slave
->
dev
,
mbq_regmap
,
regmap
,
slave
);
}
static
int
rt715_sdca_sdw_remove
(
struct
sdw_slave
*
slave
)
{
struct
rt715_sdca_priv
*
rt715
=
dev_get_drvdata
(
&
slave
->
dev
);
if
(
rt715
->
first_hw_init
)
pm_runtime_disable
(
&
slave
->
dev
);
return
0
;
}
static
const
struct
sdw_device_id
rt715_sdca_id
[]
=
{
SDW_SLAVE_ENTRY_EXT
(
0x025d
,
0x715
,
0x3
,
0x1
,
0
),
SDW_SLAVE_ENTRY_EXT
(
0x025d
,
0x714
,
0x3
,
0x1
,
0
),
...
...
@@ -267,6 +278,7 @@ static struct sdw_driver rt715_sdw_driver = {
.
pm
=
&
rt715_pm
,
},
.
probe
=
rt715_sdca_sdw_probe
,
.
remove
=
rt715_sdca_sdw_remove
,
.
ops
=
&
rt715_sdca_slave_ops
,
.
id_table
=
rt715_sdca_id
,
};
...
...
sound/soc/codecs/rt715-sdw.c
View file @
14cc5849
...
...
@@ -14,6 +14,7 @@
#include <linux/soundwire/sdw_type.h>
#include <linux/soundwire/sdw_registers.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
#include <linux/of.h>
#include <linux/regmap.h>
#include <sound/soc.h>
...
...
@@ -514,6 +515,16 @@ static int rt715_sdw_probe(struct sdw_slave *slave,
return
0
;
}
static
int
rt715_sdw_remove
(
struct
sdw_slave
*
slave
)
{
struct
rt715_priv
*
rt715
=
dev_get_drvdata
(
&
slave
->
dev
);
if
(
rt715
->
first_hw_init
)
pm_runtime_disable
(
&
slave
->
dev
);
return
0
;
}
static
const
struct
sdw_device_id
rt715_id
[]
=
{
SDW_SLAVE_ENTRY_EXT
(
0x025d
,
0x714
,
0x2
,
0
,
0
),
SDW_SLAVE_ENTRY_EXT
(
0x025d
,
0x715
,
0x2
,
0
,
0
),
...
...
@@ -575,6 +586,7 @@ static struct sdw_driver rt715_sdw_driver = {
.
pm
=
&
rt715_pm
,
},
.
probe
=
rt715_sdw_probe
,
.
remove
=
rt715_sdw_remove
,
.
ops
=
&
rt715_slave_ops
,
.
id_table
=
rt715_id
,
};
...
...
sound/soc/codecs/wcd9335.c
View file @
14cc5849
...
...
@@ -1287,11 +1287,17 @@ static int slim_rx_mux_put(struct snd_kcontrol *kc,
struct
snd_soc_dapm_update
*
update
=
NULL
;
u32
port_id
=
w
->
shift
;
if
(
wcd
->
rx_port_value
[
port_id
]
==
ucontrol
->
value
.
enumerated
.
item
[
0
])
return
0
;
wcd
->
rx_port_value
[
port_id
]
=
ucontrol
->
value
.
enumerated
.
item
[
0
];
/* Remove channel from any list it's in before adding it to a new one */
list_del_init
(
&
wcd
->
rx_chs
[
port_id
].
list
);
switch
(
wcd
->
rx_port_value
[
port_id
])
{
case
0
:
list_del_init
(
&
wcd
->
rx_chs
[
port_id
].
list
);
/* Channel already removed from lists. Nothing to do here */
break
;
case
1
:
list_add_tail
(
&
wcd
->
rx_chs
[
port_id
].
list
,
...
...
sound/soc/codecs/wcd938x.c
View file @
14cc5849
...
...
@@ -2519,6 +2519,9 @@ static int wcd938x_tx_mode_put(struct snd_kcontrol *kcontrol,
struct
soc_enum
*
e
=
(
struct
soc_enum
*
)
kcontrol
->
private_value
;
int
path
=
e
->
shift_l
;
if
(
wcd938x
->
tx_mode
[
path
]
==
ucontrol
->
value
.
enumerated
.
item
[
0
])
return
0
;
wcd938x
->
tx_mode
[
path
]
=
ucontrol
->
value
.
enumerated
.
item
[
0
];
return
1
;
...
...
@@ -2541,6 +2544,9 @@ static int wcd938x_rx_hph_mode_put(struct snd_kcontrol *kcontrol,
struct
snd_soc_component
*
component
=
snd_soc_kcontrol_component
(
kcontrol
);
struct
wcd938x_priv
*
wcd938x
=
snd_soc_component_get_drvdata
(
component
);
if
(
wcd938x
->
hph_mode
==
ucontrol
->
value
.
enumerated
.
item
[
0
])
return
0
;
wcd938x
->
hph_mode
=
ucontrol
->
value
.
enumerated
.
item
[
0
];
return
1
;
...
...
@@ -2632,6 +2638,9 @@ static int wcd938x_ldoh_put(struct snd_kcontrol *kcontrol,
struct
snd_soc_component
*
component
=
snd_soc_kcontrol_component
(
kcontrol
);
struct
wcd938x_priv
*
wcd938x
=
snd_soc_component_get_drvdata
(
component
);
if
(
wcd938x
->
ldoh
==
ucontrol
->
value
.
integer
.
value
[
0
])
return
0
;
wcd938x
->
ldoh
=
ucontrol
->
value
.
integer
.
value
[
0
];
return
1
;
...
...
@@ -2654,6 +2663,9 @@ static int wcd938x_bcs_put(struct snd_kcontrol *kcontrol,
struct
snd_soc_component
*
component
=
snd_soc_kcontrol_component
(
kcontrol
);
struct
wcd938x_priv
*
wcd938x
=
snd_soc_component_get_drvdata
(
component
);
if
(
wcd938x
->
bcs_dis
==
ucontrol
->
value
.
integer
.
value
[
0
])
return
0
;
wcd938x
->
bcs_dis
=
ucontrol
->
value
.
integer
.
value
[
0
];
return
1
;
...
...
sound/soc/codecs/wm8962.c
View file @
14cc5849
...
...
@@ -3868,6 +3868,7 @@ static int wm8962_runtime_suspend(struct device *dev)
#endif
static
const
struct
dev_pm_ops
wm8962_pm
=
{
SET_SYSTEM_SLEEP_PM_OPS
(
pm_runtime_force_suspend
,
pm_runtime_force_resume
)
SET_RUNTIME_PM_OPS
(
wm8962_runtime_suspend
,
wm8962_runtime_resume
,
NULL
)
};
...
...
sound/soc/fsl/fsl_sai.c
View file @
14cc5849
...
...
@@ -1303,6 +1303,7 @@ static const struct of_device_id fsl_sai_ids[] = {
{
.
compatible
=
"fsl,imx8mm-sai"
,
.
data
=
&
fsl_sai_imx8mm_data
},
{
.
compatible
=
"fsl,imx8mp-sai"
,
.
data
=
&
fsl_sai_imx8mp_data
},
{
.
compatible
=
"fsl,imx8ulp-sai"
,
.
data
=
&
fsl_sai_imx8ulp_data
},
{
.
compatible
=
"fsl,imx8mn-sai"
,
.
data
=
&
fsl_sai_imx8mp_data
},
{
/* sentinel */
}
};
MODULE_DEVICE_TABLE
(
of
,
fsl_sai_ids
);
...
...
sound/soc/intel/avs/topology.c
View file @
14cc5849
...
...
@@ -128,10 +128,10 @@ struct avs_tplg_token_parser {
static
int
avs_parse_uuid_token
(
struct
snd_soc_component
*
comp
,
void
*
elem
,
void
*
object
,
u32
offset
)
{
struct
snd_soc_tplg_vendor_
value
_elem
*
tuple
=
elem
;
struct
snd_soc_tplg_vendor_
uuid
_elem
*
tuple
=
elem
;
guid_t
*
val
=
(
guid_t
*
)((
u8
*
)
object
+
offset
);
guid_copy
((
guid_t
*
)
val
,
(
const
guid_t
*
)
&
tuple
->
value
);
guid_copy
((
guid_t
*
)
val
,
(
const
guid_t
*
)
&
tuple
->
uuid
);
return
0
;
}
...
...
sound/soc/intel/boards/bytcr_wm5102.c
View file @
14cc5849
...
...
@@ -421,8 +421,17 @@ static int snd_byt_wm5102_mc_probe(struct platform_device *pdev)
priv
->
spkvdd_en_gpio
=
gpiod_get
(
codec_dev
,
"wlf,spkvdd-ena"
,
GPIOD_OUT_LOW
);
put_device
(
codec_dev
);
if
(
IS_ERR
(
priv
->
spkvdd_en_gpio
))
return
dev_err_probe
(
dev
,
PTR_ERR
(
priv
->
spkvdd_en_gpio
),
"getting spkvdd-GPIO
\n
"
);
if
(
IS_ERR
(
priv
->
spkvdd_en_gpio
))
{
ret
=
PTR_ERR
(
priv
->
spkvdd_en_gpio
);
/*
* The spkvdd gpio-lookup is registered by: drivers/mfd/arizona-spi.c,
* so -ENOENT means that arizona-spi hasn't probed yet.
*/
if
(
ret
==
-
ENOENT
)
ret
=
-
EPROBE_DEFER
;
return
dev_err_probe
(
dev
,
ret
,
"getting spkvdd-GPIO
\n
"
);
}
/* override platform name, if required */
byt_wm5102_card
.
dev
=
dev
;
...
...
sound/soc/intel/boards/sof_sdw.c
View file @
14cc5849
...
...
@@ -1412,6 +1412,33 @@ static struct snd_soc_card card_sof_sdw = {
.
late_probe
=
sof_sdw_card_late_probe
,
};
static
void
mc_dailink_exit_loop
(
struct
snd_soc_card
*
card
)
{
struct
snd_soc_dai_link
*
link
;
int
ret
;
int
i
,
j
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
codec_info_list
);
i
++
)
{
if
(
!
codec_info_list
[
i
].
exit
)
continue
;
/*
* We don't need to call .exit function if there is no matched
* dai link found.
*/
for_each_card_prelinks
(
card
,
j
,
link
)
{
if
(
!
strcmp
(
link
->
codecs
[
0
].
dai_name
,
codec_info_list
[
i
].
dai_name
))
{
ret
=
codec_info_list
[
i
].
exit
(
card
,
link
);
if
(
ret
)
dev_warn
(
card
->
dev
,
"codec exit failed %d
\n
"
,
ret
);
break
;
}
}
}
}
static
int
mc_probe
(
struct
platform_device
*
pdev
)
{
struct
snd_soc_card
*
card
=
&
card_sof_sdw
;
...
...
@@ -1476,6 +1503,7 @@ static int mc_probe(struct platform_device *pdev)
ret
=
devm_snd_soc_register_card
(
&
pdev
->
dev
,
card
);
if
(
ret
)
{
dev_err
(
card
->
dev
,
"snd_soc_register_card failed %d
\n
"
,
ret
);
mc_dailink_exit_loop
(
card
);
return
ret
;
}
...
...
@@ -1487,29 +1515,8 @@ static int mc_probe(struct platform_device *pdev)
static
int
mc_remove
(
struct
platform_device
*
pdev
)
{
struct
snd_soc_card
*
card
=
platform_get_drvdata
(
pdev
);
struct
snd_soc_dai_link
*
link
;
int
ret
;
int
i
,
j
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
codec_info_list
);
i
++
)
{
if
(
!
codec_info_list
[
i
].
exit
)
continue
;
/*
* We don't need to call .exit function if there is no matched
* dai link found.
*/
for_each_card_prelinks
(
card
,
j
,
link
)
{
if
(
!
strcmp
(
link
->
codecs
[
0
].
dai_name
,
codec_info_list
[
i
].
dai_name
))
{
ret
=
codec_info_list
[
i
].
exit
(
card
,
link
);
if
(
ret
)
dev_warn
(
&
pdev
->
dev
,
"codec exit failed %d
\n
"
,
ret
);
break
;
}
}
}
mc_dailink_exit_loop
(
card
);
return
0
;
}
...
...
sound/soc/qcom/qdsp6/q6apm-dai.c
View file @
14cc5849
...
...
@@ -147,6 +147,12 @@ static int q6apm_dai_prepare(struct snd_soc_component *component,
cfg
.
num_channels
=
runtime
->
channels
;
cfg
.
bit_width
=
prtd
->
bits_per_sample
;
if
(
prtd
->
state
)
{
/* clear the previous setup if any */
q6apm_graph_stop
(
prtd
->
graph
);
q6apm_unmap_memory_regions
(
prtd
->
graph
,
substream
->
stream
);
}
prtd
->
pcm_count
=
snd_pcm_lib_period_bytes
(
substream
);
prtd
->
pos
=
0
;
/* rate and channels are sent to audio driver */
...
...
sound/soc/soc-ops.c
View file @
14cc5849
...
...
@@ -535,7 +535,7 @@ int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
return
-
EINVAL
;
if
(
mc
->
platform_max
&&
tmp
>
mc
->
platform_max
)
return
-
EINVAL
;
if
(
tmp
>
mc
->
max
-
mc
->
min
+
1
)
if
(
tmp
>
mc
->
max
-
mc
->
min
)
return
-
EINVAL
;
if
(
invert
)
...
...
@@ -556,7 +556,7 @@ int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
return
-
EINVAL
;
if
(
mc
->
platform_max
&&
tmp
>
mc
->
platform_max
)
return
-
EINVAL
;
if
(
tmp
>
mc
->
max
-
mc
->
min
+
1
)
if
(
tmp
>
mc
->
max
-
mc
->
min
)
return
-
EINVAL
;
if
(
invert
)
...
...
sound/soc/sof/intel/hda-dsp.c
View file @
14cc5849
...
...
@@ -181,12 +181,20 @@ int hda_dsp_core_run(struct snd_sof_dev *sdev, unsigned int core_mask)
* Power Management.
*/
static
int
hda_dsp_core_power_up
(
struct
snd_sof_dev
*
sdev
,
unsigned
int
core_mask
)
int
hda_dsp_core_power_up
(
struct
snd_sof_dev
*
sdev
,
unsigned
int
core_mask
)
{
struct
sof_intel_hda_dev
*
hda
=
sdev
->
pdata
->
hw_pdata
;
const
struct
sof_intel_dsp_desc
*
chip
=
hda
->
desc
;
unsigned
int
cpa
;
u32
adspcs
;
int
ret
;
/* restrict core_mask to host managed cores mask */
core_mask
&=
chip
->
host_managed_cores_mask
;
/* return if core_mask is not valid */
if
(
!
core_mask
)
return
0
;
/* update bits */
snd_sof_dsp_update_bits
(
sdev
,
HDA_DSP_BAR
,
HDA_DSP_REG_ADSPCS
,
HDA_DSP_ADSPCS_SPA_MASK
(
core_mask
),
...
...
sound/soc/sof/intel/hda-loader.c
View file @
14cc5849
...
...
@@ -95,9 +95,9 @@ struct hdac_ext_stream *hda_cl_stream_prepare(struct snd_sof_dev *sdev, unsigned
}
/*
* first boot sequence has some extra steps.
core 0 waits for power
*
status on core 1, so power up core 1 also momentarily, keep it in
*
reset/stall and then turn it off
* first boot sequence has some extra steps.
*
power on all host managed cores and only unstall/run the boot core to boot the
*
DSP then turn off all non boot cores (if any) is powered on.
*/
static
int
cl_dsp_init
(
struct
snd_sof_dev
*
sdev
,
int
stream_tag
,
bool
imr_boot
)
{
...
...
@@ -110,7 +110,7 @@ static int cl_dsp_init(struct snd_sof_dev *sdev, int stream_tag, bool imr_boot)
int
ret
;
/* step 1: power up corex */
ret
=
hda_dsp_
enable_core
(
sdev
,
chip
->
host_managed_cores_mask
);
ret
=
hda_dsp_
core_power_up
(
sdev
,
chip
->
host_managed_cores_mask
);
if
(
ret
<
0
)
{
if
(
hda
->
boot_iteration
==
HDA_FW_BOOT_ATTEMPTS
)
dev_err
(
sdev
->
dev
,
"error: dsp core 0/1 power up failed
\n
"
);
...
...
@@ -127,7 +127,7 @@ static int cl_dsp_init(struct snd_sof_dev *sdev, int stream_tag, bool imr_boot)
snd_sof_dsp_write
(
sdev
,
HDA_DSP_BAR
,
chip
->
ipc_req
,
ipc_hdr
);
/* step 3: unset core 0 reset state & unstall/run core 0 */
ret
=
hda_dsp_core_run
(
sdev
,
BIT
(
0
)
);
ret
=
hda_dsp_core_run
(
sdev
,
chip
->
init_core_mask
);
if
(
ret
<
0
)
{
if
(
hda
->
boot_iteration
==
HDA_FW_BOOT_ATTEMPTS
)
dev_err
(
sdev
->
dev
,
...
...
sound/soc/sof/intel/hda.h
View file @
14cc5849
...
...
@@ -497,6 +497,7 @@ struct sof_intel_hda_stream {
*/
int
hda_dsp_probe
(
struct
snd_sof_dev
*
sdev
);
int
hda_dsp_remove
(
struct
snd_sof_dev
*
sdev
);
int
hda_dsp_core_power_up
(
struct
snd_sof_dev
*
sdev
,
unsigned
int
core_mask
);
int
hda_dsp_core_run
(
struct
snd_sof_dev
*
sdev
,
unsigned
int
core_mask
);
int
hda_dsp_enable_core
(
struct
snd_sof_dev
*
sdev
,
unsigned
int
core_mask
);
int
hda_dsp_core_reset_power_down
(
struct
snd_sof_dev
*
sdev
,
...
...
sound/soc/sof/ipc3-topology.c
View file @
14cc5849
...
...
@@ -1593,24 +1593,23 @@ static int sof_ipc3_control_load_bytes(struct snd_sof_dev *sdev, struct snd_sof_
struct
sof_ipc_ctrl_data
*
cdata
;
int
ret
;
scontrol
->
ipc_control_data
=
kzalloc
(
scontrol
->
max_size
,
GFP_KERNEL
);
if
(
!
scontrol
->
ipc_control_data
)
return
-
ENOMEM
;
if
(
scontrol
->
max_size
<
sizeof
(
*
cdata
)
||
scontrol
->
max_size
<
sizeof
(
struct
sof_abi_hdr
))
{
ret
=
-
EINVAL
;
goto
err
;
if
(
scontrol
->
max_size
<
(
sizeof
(
*
cdata
)
+
sizeof
(
struct
sof_abi_hdr
)))
{
dev_err
(
sdev
->
dev
,
"%s: insufficient size for a bytes control: %zu.
\n
"
,
__func__
,
scontrol
->
max_size
);
return
-
EINVAL
;
}
/* init the get/put bytes data */
if
(
scontrol
->
priv_size
>
scontrol
->
max_size
-
sizeof
(
*
cdata
))
{
dev_err
(
sdev
->
dev
,
"err: bytes data size %zu exceeds max %zu.
\n
"
,
dev_err
(
sdev
->
dev
,
"%s: bytes data size %zu exceeds max %zu.
\n
"
,
__func__
,
scontrol
->
priv_size
,
scontrol
->
max_size
-
sizeof
(
*
cdata
));
ret
=
-
EINVAL
;
goto
err
;
return
-
EINVAL
;
}
scontrol
->
ipc_control_data
=
kzalloc
(
scontrol
->
max_size
,
GFP_KERNEL
);
if
(
!
scontrol
->
ipc_control_data
)
return
-
ENOMEM
;
scontrol
->
size
=
sizeof
(
struct
sof_ipc_ctrl_data
)
+
scontrol
->
priv_size
;
cdata
=
scontrol
->
ipc_control_data
;
...
...
sound/soc/sof/sof-audio.c
View file @
14cc5849
...
...
@@ -318,7 +318,7 @@ sof_prepare_widgets_in_path(struct snd_sof_dev *sdev, struct snd_soc_dapm_widget
p
->
walking
=
false
;
if
(
ret
<
0
)
{
/* unprepare the source widget */
if
(
!
widget_ops
[
widget
->
id
].
ipc_unprepare
&&
swidget
->
prepared
)
{
if
(
widget_ops
[
widget
->
id
].
ipc_unprepare
&&
swidget
->
prepared
)
{
widget_ops
[
widget
->
id
].
ipc_unprepare
(
swidget
);
swidget
->
prepared
=
false
;
}
...
...
sound/soc/sof/sof-client-ipc-msg-injector.c
View file @
14cc5849
...
...
@@ -150,7 +150,7 @@ static ssize_t sof_msg_inject_dfs_write(struct file *file, const char __user *bu
{
struct
sof_client_dev
*
cdev
=
file
->
private_data
;
struct
sof_msg_inject_priv
*
priv
=
cdev
->
data
;
size_t
size
;
s
s
ize_t
size
;
int
ret
;
if
(
*
ppos
)
...
...
@@ -158,8 +158,10 @@ static ssize_t sof_msg_inject_dfs_write(struct file *file, const char __user *bu
size
=
simple_write_to_buffer
(
priv
->
tx_buffer
,
priv
->
max_msg_size
,
ppos
,
buffer
,
count
);
if
(
size
<
0
)
return
size
;
if
(
size
!=
count
)
return
size
>
0
?
-
EFAULT
:
size
;
return
-
EFAULT
;
memset
(
priv
->
rx_buffer
,
0
,
priv
->
max_msg_size
);
...
...
@@ -179,7 +181,7 @@ static ssize_t sof_msg_inject_ipc4_dfs_write(struct file *file,
struct
sof_client_dev
*
cdev
=
file
->
private_data
;
struct
sof_msg_inject_priv
*
priv
=
cdev
->
data
;
struct
sof_ipc4_msg
*
ipc4_msg
=
priv
->
tx_buffer
;
size_t
size
;
s
s
ize_t
size
;
int
ret
;
if
(
*
ppos
)
...
...
@@ -192,18 +194,20 @@ static ssize_t sof_msg_inject_ipc4_dfs_write(struct file *file,
size
=
simple_write_to_buffer
(
&
ipc4_msg
->
header_u64
,
sizeof
(
ipc4_msg
->
header_u64
),
ppos
,
buffer
,
count
);
if
(
size
<
0
)
return
size
;
if
(
size
!=
sizeof
(
ipc4_msg
->
header_u64
))
return
size
>
0
?
-
EFAULT
:
size
;
return
-
EFAULT
;
count
-=
size
;
if
(
!
count
)
{
/* Copy the payload */
size
=
simple_write_to_buffer
(
ipc4_msg
->
data_pt
r
,
priv
->
max_msg_size
,
ppos
,
buffer
,
count
);
if
(
size
!=
count
)
return
size
>
0
?
-
EFAULT
:
size
;
}
/* Copy the payload */
size
=
simple_write_to_buffer
(
ipc4_msg
->
data_ptr
,
priv
->
max_msg_size
,
ppos
,
buffe
r
,
count
);
if
(
size
<
0
)
return
size
;
if
(
size
!=
count
)
return
-
EFAULT
;
ipc4_msg
->
data_size
=
count
;
...
...
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