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
79a7a5ac
Commit
79a7a5ac
authored
Nov 15, 2021
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge existing fixes from asoc/for-5.16 into new branch
parents
fa55b7dc
58da0d84
Changes
18
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
426 additions
and
58 deletions
+426
-58
sound/soc/codecs/cs35l41.c
sound/soc/codecs/cs35l41.c
+7
-7
sound/soc/codecs/rt1011.c
sound/soc/codecs/rt1011.c
+49
-6
sound/soc/codecs/rt1011.h
sound/soc/codecs/rt1011.h
+7
-0
sound/soc/codecs/rt5682-i2c.c
sound/soc/codecs/rt5682-i2c.c
+1
-0
sound/soc/codecs/rt5682.c
sound/soc/codecs/rt5682.c
+29
-9
sound/soc/codecs/rt5682.h
sound/soc/codecs/rt5682.h
+1
-0
sound/soc/codecs/rt9120.c
sound/soc/codecs/rt9120.c
+48
-10
sound/soc/intel/boards/sof_sdw.c
sound/soc/intel/boards/sof_sdw.c
+69
-0
sound/soc/intel/common/soc-acpi-intel-adl-match.c
sound/soc/intel/common/soc-acpi-intel-adl-match.c
+105
-0
sound/soc/mediatek/mt8173/mt8173-afe-pcm.c
sound/soc/mediatek/mt8173/mt8173-afe-pcm.c
+43
-8
sound/soc/mediatek/mt8173/mt8173-rt5650.c
sound/soc/mediatek/mt8173/mt8173-rt5650.c
+4
-4
sound/soc/sh/rcar/dma.c
sound/soc/sh/rcar/dma.c
+1
-1
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+23
-6
sound/soc/sof/Kconfig
sound/soc/sof/Kconfig
+1
-1
sound/soc/sof/control.c
sound/soc/sof/control.c
+4
-4
sound/soc/sof/intel/hda-bus.c
sound/soc/sof/intel/hda-bus.c
+17
-0
sound/soc/sof/intel/hda-dsp.c
sound/soc/sof/intel/hda-dsp.c
+1
-2
sound/soc/sof/intel/hda.c
sound/soc/sof/intel/hda.c
+16
-0
No files found.
sound/soc/codecs/cs35l41.c
View file @
79a7a5ac
...
...
@@ -612,6 +612,12 @@ static const struct snd_soc_dapm_widget cs35l41_dapm_widgets[] = {
SND_SOC_DAPM_AIF_OUT
(
"ASPTX3"
,
NULL
,
0
,
CS35L41_SP_ENABLES
,
2
,
0
),
SND_SOC_DAPM_AIF_OUT
(
"ASPTX4"
,
NULL
,
0
,
CS35L41_SP_ENABLES
,
3
,
0
),
SND_SOC_DAPM_SIGGEN
(
"VSENSE"
),
SND_SOC_DAPM_SIGGEN
(
"ISENSE"
),
SND_SOC_DAPM_SIGGEN
(
"VP"
),
SND_SOC_DAPM_SIGGEN
(
"VBST"
),
SND_SOC_DAPM_SIGGEN
(
"TEMP"
),
SND_SOC_DAPM_ADC
(
"VMON ADC"
,
NULL
,
CS35L41_PWR_CTRL2
,
12
,
0
),
SND_SOC_DAPM_ADC
(
"IMON ADC"
,
NULL
,
CS35L41_PWR_CTRL2
,
13
,
0
),
SND_SOC_DAPM_ADC
(
"VPMON ADC"
,
NULL
,
CS35L41_PWR_CTRL2
,
8
,
0
),
...
...
@@ -623,12 +629,6 @@ static const struct snd_soc_dapm_widget cs35l41_dapm_widgets[] = {
cs35l41_main_amp_event
,
SND_SOC_DAPM_POST_PMD
|
SND_SOC_DAPM_POST_PMU
),
SND_SOC_DAPM_INPUT
(
"VP"
),
SND_SOC_DAPM_INPUT
(
"VBST"
),
SND_SOC_DAPM_INPUT
(
"ISENSE"
),
SND_SOC_DAPM_INPUT
(
"VSENSE"
),
SND_SOC_DAPM_INPUT
(
"TEMP"
),
SND_SOC_DAPM_MUX
(
"ASP TX1 Source"
,
SND_SOC_NOPM
,
0
,
0
,
&
asp_tx1_mux
),
SND_SOC_DAPM_MUX
(
"ASP TX2 Source"
,
SND_SOC_NOPM
,
0
,
0
,
&
asp_tx2_mux
),
SND_SOC_DAPM_MUX
(
"ASP TX3 Source"
,
SND_SOC_NOPM
,
0
,
0
,
&
asp_tx3_mux
),
...
...
@@ -674,8 +674,8 @@ static const struct snd_soc_dapm_route cs35l41_audio_map[] = {
{
"VMON ADC"
,
NULL
,
"VSENSE"
},
{
"IMON ADC"
,
NULL
,
"ISENSE"
},
{
"VPMON ADC"
,
NULL
,
"VP"
},
{
"TEMPMON ADC"
,
NULL
,
"TEMP"
},
{
"VBSTMON ADC"
,
NULL
,
"VBST"
},
{
"TEMPMON ADC"
,
NULL
,
"TEMP"
},
{
"ASPRX1"
,
NULL
,
"AMP Playback"
},
{
"ASPRX2"
,
NULL
,
"AMP Playback"
},
...
...
sound/soc/codecs/rt1011.c
View file @
79a7a5ac
...
...
@@ -1311,13 +1311,54 @@ static int rt1011_r0_load_info(struct snd_kcontrol *kcontrol,
.put = rt1011_r0_load_mode_put \
}
static
const
char
*
const
rt1011_i2s_ref
_texts
[]
=
{
"Left Channel"
,
"Right Channel"
static
const
char
*
const
rt1011_i2s_ref
[]
=
{
"
None"
,
"
Left Channel"
,
"Right Channel"
};
static
SOC_ENUM_SINGLE_DECL
(
rt1011_i2s_ref_enum
,
RT1011_TDM1_SET_1
,
7
,
rt1011_i2s_ref_texts
);
static
SOC_ENUM_SINGLE_DECL
(
rt1011_i2s_ref_enum
,
0
,
0
,
rt1011_i2s_ref
);
static
int
rt1011_i2s_ref_put
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
struct
snd_soc_component
*
component
=
snd_soc_kcontrol_component
(
kcontrol
);
struct
rt1011_priv
*
rt1011
=
snd_soc_component_get_drvdata
(
component
);
rt1011
->
i2s_ref
=
ucontrol
->
value
.
enumerated
.
item
[
0
];
switch
(
rt1011
->
i2s_ref
)
{
case
RT1011_I2S_REF_LEFT_CH
:
regmap_write
(
rt1011
->
regmap
,
RT1011_TDM_TOTAL_SET
,
0x0240
);
regmap_write
(
rt1011
->
regmap
,
RT1011_TDM1_SET_2
,
0x8
);
regmap_write
(
rt1011
->
regmap
,
RT1011_TDM1_SET_1
,
0x1022
);
regmap_write
(
rt1011
->
regmap
,
RT1011_ADCDAT_OUT_SOURCE
,
0x4
);
break
;
case
RT1011_I2S_REF_RIGHT_CH
:
regmap_write
(
rt1011
->
regmap
,
RT1011_TDM_TOTAL_SET
,
0x0240
);
regmap_write
(
rt1011
->
regmap
,
RT1011_TDM1_SET_2
,
0x8
);
regmap_write
(
rt1011
->
regmap
,
RT1011_TDM1_SET_1
,
0x10a2
);
regmap_write
(
rt1011
->
regmap
,
RT1011_ADCDAT_OUT_SOURCE
,
0x4
);
break
;
default:
dev_info
(
component
->
dev
,
"I2S Reference: Do nothing
\n
"
);
}
return
0
;
}
static
int
rt1011_i2s_ref_get
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
struct
snd_soc_component
*
component
=
snd_soc_kcontrol_component
(
kcontrol
);
struct
rt1011_priv
*
rt1011
=
snd_soc_component_get_drvdata
(
component
);
ucontrol
->
value
.
enumerated
.
item
[
0
]
=
rt1011
->
i2s_ref
;
return
0
;
}
static
const
struct
snd_kcontrol_new
rt1011_snd_controls
[]
=
{
/* I2S Data In Selection */
...
...
@@ -1358,7 +1399,8 @@ static const struct snd_kcontrol_new rt1011_snd_controls[] = {
SOC_SINGLE
(
"R0 Temperature"
,
RT1011_STP_INITIAL_RESISTANCE_TEMP
,
2
,
255
,
0
),
/* I2S Reference */
SOC_ENUM
(
"I2S Reference"
,
rt1011_i2s_ref_enum
),
SOC_ENUM_EXT
(
"I2S Reference"
,
rt1011_i2s_ref_enum
,
rt1011_i2s_ref_get
,
rt1011_i2s_ref_put
),
};
static
int
rt1011_is_sys_clk_from_pll
(
struct
snd_soc_dapm_widget
*
source
,
...
...
@@ -2017,6 +2059,7 @@ static int rt1011_probe(struct snd_soc_component *component)
schedule_work
(
&
rt1011
->
cali_work
);
rt1011
->
i2s_ref
=
0
;
rt1011
->
bq_drc_params
=
devm_kcalloc
(
component
->
dev
,
RT1011_ADVMODE_NUM
,
sizeof
(
struct
rt1011_bq_drc_params
*
),
GFP_KERNEL
);
...
...
sound/soc/codecs/rt1011.h
View file @
79a7a5ac
...
...
@@ -654,6 +654,12 @@ enum {
RT1011_AIFS
};
enum
{
RT1011_I2S_REF_NONE
,
RT1011_I2S_REF_LEFT_CH
,
RT1011_I2S_REF_RIGHT_CH
,
};
/* BiQual & DRC related settings */
#define RT1011_BQ_DRC_NUM 128
struct
rt1011_bq_drc_params
{
...
...
@@ -692,6 +698,7 @@ struct rt1011_priv {
unsigned
int
r0_reg
,
cali_done
;
unsigned
int
r0_calib
,
temperature_calib
;
int
recv_spk_mode
;
int
i2s_ref
;
};
#endif
/* end of _RT1011_H_ */
sound/soc/codecs/rt5682-i2c.c
View file @
79a7a5ac
...
...
@@ -198,6 +198,7 @@ static int rt5682_i2c_probe(struct i2c_client *i2c,
}
mutex_init
(
&
rt5682
->
calibrate_mutex
);
mutex_init
(
&
rt5682
->
jdet_mutex
);
rt5682_calibrate
(
rt5682
);
rt5682_apply_patch_list
(
rt5682
,
&
i2c
->
dev
);
...
...
sound/soc/codecs/rt5682.c
View file @
79a7a5ac
...
...
@@ -48,6 +48,8 @@ static const struct reg_sequence patch_list[] = {
{
RT5682_SAR_IL_CMD_6
,
0x0110
},
{
RT5682_CHARGE_PUMP_1
,
0x0210
},
{
RT5682_HP_LOGIC_CTRL_2
,
0x0007
},
{
RT5682_SAR_IL_CMD_2
,
0xac00
},
{
RT5682_CBJ_CTRL_7
,
0x0104
},
};
void
rt5682_apply_patch_list
(
struct
rt5682_priv
*
rt5682
,
struct
device
*
dev
)
...
...
@@ -940,6 +942,10 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert)
snd_soc_component_update_bits
(
component
,
RT5682_HP_CHARGE_PUMP_1
,
RT5682_OSW_L_MASK
|
RT5682_OSW_R_MASK
,
0
);
rt5682_enable_push_button_irq
(
component
,
false
);
snd_soc_component_update_bits
(
component
,
RT5682_CBJ_CTRL_1
,
RT5682_TRIG_JD_MASK
,
RT5682_TRIG_JD_LOW
);
usleep_range
(
55000
,
60000
);
snd_soc_component_update_bits
(
component
,
RT5682_CBJ_CTRL_1
,
RT5682_TRIG_JD_MASK
,
RT5682_TRIG_JD_HIGH
);
...
...
@@ -1092,6 +1098,7 @@ void rt5682_jack_detect_handler(struct work_struct *work)
while
(
!
rt5682
->
component
->
card
->
instantiated
)
usleep_range
(
10000
,
15000
);
mutex_lock
(
&
rt5682
->
jdet_mutex
);
mutex_lock
(
&
rt5682
->
calibrate_mutex
);
val
=
snd_soc_component_read
(
rt5682
->
component
,
RT5682_AJD1_CTRL
)
...
...
@@ -1165,6 +1172,7 @@ void rt5682_jack_detect_handler(struct work_struct *work)
}
mutex_unlock
(
&
rt5682
->
calibrate_mutex
);
mutex_unlock
(
&
rt5682
->
jdet_mutex
);
}
EXPORT_SYMBOL_GPL
(
rt5682_jack_detect_handler
);
...
...
@@ -1514,6 +1522,7 @@ static int rt5682_hp_event(struct snd_soc_dapm_widget *w,
{
struct
snd_soc_component
*
component
=
snd_soc_dapm_to_component
(
w
->
dapm
);
struct
rt5682_priv
*
rt5682
=
snd_soc_component_get_drvdata
(
component
);
switch
(
event
)
{
case
SND_SOC_DAPM_PRE_PMU
:
...
...
@@ -1525,12 +1534,17 @@ static int rt5682_hp_event(struct snd_soc_dapm_widget *w,
RT5682_DEPOP_1
,
0x60
,
0x60
);
snd_soc_component_update_bits
(
component
,
RT5682_DAC_ADC_DIG_VOL1
,
0x00c0
,
0x0080
);
mutex_lock
(
&
rt5682
->
jdet_mutex
);
snd_soc_component_update_bits
(
component
,
RT5682_HP_CTRL_2
,
RT5682_HP_C2_DAC_L_EN
|
RT5682_HP_C2_DAC_R_EN
,
RT5682_HP_C2_DAC_L_EN
|
RT5682_HP_C2_DAC_R_EN
);
usleep_range
(
5000
,
10000
);
snd_soc_component_update_bits
(
component
,
RT5682_CHARGE_PUMP_1
,
RT5682_CP_SW_SIZE_MASK
,
RT5682_CP_SW_SIZE_L
);
mutex_unlock
(
&
rt5682
->
jdet_mutex
);
break
;
case
SND_SOC_DAPM_POST_PMD
:
...
...
@@ -2942,10 +2956,7 @@ static int rt5682_suspend(struct snd_soc_component *component)
cancel_delayed_work_sync
(
&
rt5682
->
jack_detect_work
);
cancel_delayed_work_sync
(
&
rt5682
->
jd_check_work
);
if
(
rt5682
->
hs_jack
&&
rt5682
->
jack_type
==
SND_JACK_HEADSET
)
{
snd_soc_component_update_bits
(
component
,
RT5682_CBJ_CTRL_1
,
RT5682_MB1_PATH_MASK
|
RT5682_MB2_PATH_MASK
,
RT5682_CTRL_MB1_REG
|
RT5682_CTRL_MB2_REG
);
if
(
rt5682
->
hs_jack
&&
(
rt5682
->
jack_type
&
SND_JACK_HEADSET
)
==
SND_JACK_HEADSET
)
{
val
=
snd_soc_component_read
(
component
,
RT5682_CBJ_CTRL_2
)
&
RT5682_JACK_TYPE_MASK
;
...
...
@@ -2967,10 +2978,17 @@ static int rt5682_suspend(struct snd_soc_component *component)
/* enter SAR ADC power saving mode */
snd_soc_component_update_bits
(
component
,
RT5682_SAR_IL_CMD_1
,
RT5682_SAR_BUTT_DET_MASK
|
RT5682_SAR_BUTDET_MODE_MASK
|
RT5682_SAR_BUTDET_RST_MASK
|
RT5682_SAR_SEL_MB1_MB2_MASK
,
0
);
RT5682_SAR_SEL_MB1_MB2_MASK
,
0
);
usleep_range
(
5000
,
6000
);
snd_soc_component_update_bits
(
component
,
RT5682_CBJ_CTRL_1
,
RT5682_MB1_PATH_MASK
|
RT5682_MB2_PATH_MASK
,
RT5682_CTRL_MB1_REG
|
RT5682_CTRL_MB2_REG
);
usleep_range
(
10000
,
12000
);
snd_soc_component_update_bits
(
component
,
RT5682_SAR_IL_CMD_1
,
RT5682_SAR_BUTT_DET_MASK
|
RT5682_SAR_BUTDET_MODE_MASK
|
RT5682_SAR_BUTDET_RST_MASK
,
RT5682_SAR_BUTT_DET_EN
|
RT5682_SAR_BUTDET_POW_SAV
|
RT5682_SAR_BUTDET_RST_NORMAL
);
RT5682_SAR_BUTT_DET_MASK
|
RT5682_SAR_BUTDET_MODE_MASK
,
RT5682_SAR_BUTT_DET_EN
|
RT5682_SAR_BUTDET_POW_SAV
);
snd_soc_component_update_bits
(
component
,
RT5682_HP_CHARGE_PUMP_1
,
RT5682_OSW_L_MASK
|
RT5682_OSW_R_MASK
,
0
);
}
regcache_cache_only
(
rt5682
->
regmap
,
true
);
...
...
@@ -2988,10 +3006,11 @@ static int rt5682_resume(struct snd_soc_component *component)
regcache_cache_only
(
rt5682
->
regmap
,
false
);
regcache_sync
(
rt5682
->
regmap
);
if
(
rt5682
->
hs_jack
&&
rt5682
->
jack_type
==
SND_JACK_HEADSET
)
{
if
(
rt5682
->
hs_jack
&&
(
rt5682
->
jack_type
&
SND_JACK_HEADSET
)
==
SND_JACK_HEADSET
)
{
snd_soc_component_update_bits
(
component
,
RT5682_SAR_IL_CMD_1
,
RT5682_SAR_BUTDET_MODE_MASK
|
RT5682_SAR_SEL_MB1_MB2_MASK
,
RT5682_SAR_BUTDET_POW_NORM
|
RT5682_SAR_SEL_MB1_MB2_AUTO
);
usleep_range
(
5000
,
6000
);
snd_soc_component_update_bits
(
component
,
RT5682_CBJ_CTRL_1
,
RT5682_MB1_PATH_MASK
|
RT5682_MB2_PATH_MASK
,
RT5682_CTRL_MB1_FSM
|
RT5682_CTRL_MB2_FSM
);
...
...
@@ -2999,8 +3018,9 @@ static int rt5682_resume(struct snd_soc_component *component)
RT5682_PWR_CBJ
,
RT5682_PWR_CBJ
);
}
rt5682
->
jack_type
=
0
;
mod_delayed_work
(
system_power_efficient_wq
,
&
rt5682
->
jack_detect_work
,
msecs_to_jiffies
(
25
0
));
&
rt5682
->
jack_detect_work
,
msecs_to_jiffies
(
0
));
return
0
;
}
...
...
sound/soc/codecs/rt5682.h
View file @
79a7a5ac
...
...
@@ -1463,6 +1463,7 @@ struct rt5682_priv {
int
jack_type
;
int
irq_work_delay_time
;
struct
mutex
jdet_mutex
;
};
extern
const
char
*
rt5682_supply_names
[
RT5682_NUM_SUPPLIES
];
...
...
sound/soc/codecs/rt9120.c
View file @
79a7a5ac
// SPDX-License-Identifier: GPL-2.0
#include <linux/bits.h>
#include <linux/bitfield.h>
#include <linux/delay.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
...
...
@@ -23,9 +24,11 @@
#define RT9120_REG_ERRRPT 0x10
#define RT9120_REG_MSVOL 0x20
#define RT9120_REG_SWRESET 0x40
#define RT9120_REG_INTERCFG 0x63
#define RT9120_REG_INTERNAL0 0x65
#define RT9120_REG_INTERNAL1 0x69
#define RT9120_REG_UVPOPT 0x6C
#define RT9120_REG_DIGCFG 0xF8
#define RT9120_VID_MASK GENMASK(15, 8)
#define RT9120_SWRST_MASK BIT(7)
...
...
@@ -46,8 +49,10 @@
#define RT9120_CFG_WORDLEN_24 24
#define RT9120_CFG_WORDLEN_32 32
#define RT9120_DVDD_UVSEL_MASK GENMASK(5, 4)
#define RT9120_AUTOSYNC_MASK BIT(6)
#define RT9120_VENDOR_ID 0x4200
#define RT9120_VENDOR_ID 0x42
#define RT9120S_VENDOR_ID 0x43
#define RT9120_RESET_WAITMS 20
#define RT9120_CHIPON_WAITMS 20
#define RT9120_AMPON_WAITMS 50
...
...
@@ -61,9 +66,16 @@
SNDRV_PCM_FMTBIT_S24_LE |\
SNDRV_PCM_FMTBIT_S32_LE)
enum
{
CHIP_IDX_RT9120
=
0
,
CHIP_IDX_RT9120S
,
CHIP_IDX_MAX
};
struct
rt9120_data
{
struct
device
*
dev
;
struct
regmap
*
regmap
;
int
chip_idx
;
};
/* 11bit [min,max,step] = [-103.9375dB, 24dB, 0.0625dB] */
...
...
@@ -149,8 +161,12 @@ static int rt9120_codec_probe(struct snd_soc_component *comp)
snd_soc_component_init_regmap
(
comp
,
data
->
regmap
);
/* Internal setting */
snd_soc_component_write
(
comp
,
RT9120_REG_INTERNAL1
,
0x03
);
snd_soc_component_write
(
comp
,
RT9120_REG_INTERNAL0
,
0x69
);
if
(
data
->
chip_idx
==
CHIP_IDX_RT9120S
)
{
snd_soc_component_write
(
comp
,
RT9120_REG_INTERCFG
,
0xde
);
snd_soc_component_write
(
comp
,
RT9120_REG_INTERNAL0
,
0x66
);
}
else
snd_soc_component_write
(
comp
,
RT9120_REG_INTERNAL0
,
0x04
);
return
0
;
}
...
...
@@ -201,8 +217,8 @@ static int rt9120_hw_params(struct snd_pcm_substream *substream,
struct
snd_soc_dai
*
dai
)
{
struct
snd_soc_component
*
comp
=
dai
->
component
;
unsigned
int
param_width
,
param_slot_width
;
int
width
;
unsigned
int
param_width
,
param_slot_width
,
auto_sync
;
int
width
,
fs
;
switch
(
width
=
params_width
(
param
))
{
case
16
:
...
...
@@ -240,6 +256,16 @@ static int rt9120_hw_params(struct snd_pcm_substream *substream,
snd_soc_component_update_bits
(
comp
,
RT9120_REG_I2SWL
,
RT9120_AUDWL_MASK
,
param_slot_width
);
fs
=
width
*
params_channels
(
param
);
/* If fs is divided by 48, disable auto sync */
if
(
fs
%
48
==
0
)
auto_sync
=
0
;
else
auto_sync
=
RT9120_AUTOSYNC_MASK
;
snd_soc_component_update_bits
(
comp
,
RT9120_REG_DIGCFG
,
RT9120_AUTOSYNC_MASK
,
auto_sync
);
return
0
;
}
...
...
@@ -279,9 +305,11 @@ static const struct regmap_range rt9120_rd_yes_ranges[] = {
regmap_reg_range
(
0x20
,
0x27
),
regmap_reg_range
(
0x30
,
0x38
),
regmap_reg_range
(
0x3A
,
0x40
),
regmap_reg_range
(
0x63
,
0x63
),
regmap_reg_range
(
0x65
,
0x65
),
regmap_reg_range
(
0x69
,
0x69
),
regmap_reg_range
(
0x6C
,
0x6C
)
regmap_reg_range
(
0x6C
,
0x6C
),
regmap_reg_range
(
0xF8
,
0xF8
)
};
static
const
struct
regmap_access_table
rt9120_rd_table
=
{
...
...
@@ -297,9 +325,11 @@ static const struct regmap_range rt9120_wr_yes_ranges[] = {
regmap_reg_range
(
0x30
,
0x38
),
regmap_reg_range
(
0x3A
,
0x3D
),
regmap_reg_range
(
0x40
,
0x40
),
regmap_reg_range
(
0x63
,
0x63
),
regmap_reg_range
(
0x65
,
0x65
),
regmap_reg_range
(
0x69
,
0x69
),
regmap_reg_range
(
0x6C
,
0x6C
)
regmap_reg_range
(
0x6C
,
0x6C
),
regmap_reg_range
(
0xF8
,
0xF8
)
};
static
const
struct
regmap_access_table
rt9120_wr_table
=
{
...
...
@@ -370,7 +400,7 @@ static int rt9120_reg_write(void *context, unsigned int reg, unsigned int val)
static
const
struct
regmap_config
rt9120_regmap_config
=
{
.
reg_bits
=
8
,
.
val_bits
=
32
,
.
max_register
=
RT9120_REG_
UVPOPT
,
.
max_register
=
RT9120_REG_
DIGCFG
,
.
reg_read
=
rt9120_reg_read
,
.
reg_write
=
rt9120_reg_write
,
...
...
@@ -388,8 +418,16 @@ static int rt9120_check_vendor_info(struct rt9120_data *data)
if
(
ret
)
return
ret
;
if
((
devid
&
RT9120_VID_MASK
)
!=
RT9120_VENDOR_ID
)
{
dev_err
(
data
->
dev
,
"DEVID not correct [0x%04x]
\n
"
,
devid
);
devid
=
FIELD_GET
(
RT9120_VID_MASK
,
devid
);
switch
(
devid
)
{
case
RT9120_VENDOR_ID
:
data
->
chip_idx
=
CHIP_IDX_RT9120
;
break
;
case
RT9120S_VENDOR_ID
:
data
->
chip_idx
=
CHIP_IDX_RT9120S
;
break
;
default:
dev_err
(
data
->
dev
,
"DEVID not correct [0x%0x]
\n
"
,
devid
);
return
-
ENODEV
;
}
...
...
sound/soc/intel/boards/sof_sdw.c
View file @
79a7a5ac
...
...
@@ -248,6 +248,75 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
SOF_BT_OFFLOAD_SSP
(
2
)
|
SOF_SSP_BT_OFFLOAD_PRESENT
),
},
{
.
callback
=
sof_sdw_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Dell Inc"
),
DMI_EXACT_MATCH
(
DMI_PRODUCT_SKU
,
"0AF3"
),
},
/* No Jack */
.
driver_data
=
(
void
*
)(
SOF_SDW_TGL_HDMI
|
SOF_SDW_FOUR_SPK
),
},
{
.
callback
=
sof_sdw_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Dell Inc"
),
DMI_EXACT_MATCH
(
DMI_PRODUCT_SKU
,
"0B00"
)
},
.
driver_data
=
(
void
*
)(
SOF_SDW_TGL_HDMI
|
RT711_JD2
|
SOF_SDW_FOUR_SPK
),
},
{
.
callback
=
sof_sdw_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Dell Inc"
),
DMI_EXACT_MATCH
(
DMI_PRODUCT_SKU
,
"0B01"
)
},
.
driver_data
=
(
void
*
)(
SOF_SDW_TGL_HDMI
|
RT711_JD2
|
SOF_SDW_FOUR_SPK
),
},
{
.
callback
=
sof_sdw_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Dell Inc"
),
DMI_EXACT_MATCH
(
DMI_PRODUCT_SKU
,
"0B11"
)
},
.
driver_data
=
(
void
*
)(
SOF_SDW_TGL_HDMI
|
RT711_JD2
|
SOF_SDW_FOUR_SPK
),
},
{
.
callback
=
sof_sdw_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Dell Inc"
),
DMI_EXACT_MATCH
(
DMI_PRODUCT_SKU
,
"0B12"
)
},
.
driver_data
=
(
void
*
)(
SOF_SDW_TGL_HDMI
|
RT711_JD2
|
SOF_SDW_FOUR_SPK
),
},
{
.
callback
=
sof_sdw_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Dell Inc"
),
DMI_EXACT_MATCH
(
DMI_PRODUCT_SKU
,
"0B13"
),
},
/* No Jack */
.
driver_data
=
(
void
*
)
SOF_SDW_TGL_HDMI
,
},
{
.
callback
=
sof_sdw_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_SYS_VENDOR
,
"Dell Inc"
),
DMI_EXACT_MATCH
(
DMI_PRODUCT_SKU
,
"0B29"
),
},
.
driver_data
=
(
void
*
)(
SOF_SDW_TGL_HDMI
|
RT711_JD2
|
SOF_SDW_FOUR_SPK
),
},
{}
};
...
...
sound/soc/intel/common/soc-acpi-intel-adl-match.c
View file @
79a7a5ac
...
...
@@ -74,6 +74,15 @@ static const struct snd_soc_acpi_adr_device rt711_sdca_0_adr[] = {
}
};
static
const
struct
snd_soc_acpi_adr_device
rt711_sdca_2_adr
[]
=
{
{
.
adr
=
0x000230025D071101ull
,
.
num_endpoints
=
1
,
.
endpoints
=
&
single_endpoint
,
.
name_prefix
=
"rt711"
}
};
static
const
struct
snd_soc_acpi_adr_device
rt1316_1_group1_adr
[]
=
{
{
.
adr
=
0x000131025D131601ull
,
/* unique ID is set for some reason */
...
...
@@ -101,6 +110,24 @@ static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
}
};
static
const
struct
snd_soc_acpi_adr_device
rt1316_0_group2_adr
[]
=
{
{
.
adr
=
0x000031025D131601ull
,
.
num_endpoints
=
1
,
.
endpoints
=
&
spk_l_endpoint
,
.
name_prefix
=
"rt1316-1"
}
};
static
const
struct
snd_soc_acpi_adr_device
rt1316_1_group2_adr
[]
=
{
{
.
adr
=
0x000130025D131601ull
,
.
num_endpoints
=
1
,
.
endpoints
=
&
spk_r_endpoint
,
.
name_prefix
=
"rt1316-2"
}
};
static
const
struct
snd_soc_acpi_adr_device
rt1316_2_single_adr
[]
=
{
{
.
adr
=
0x000230025D131601ull
,
...
...
@@ -209,6 +236,63 @@ static const struct snd_soc_acpi_link_adr adl_sdca_3_in_1[] = {
{}
};
static
const
struct
snd_soc_acpi_link_adr
adl_sdw_rt711_link2_rt1316_link01_rt714_link3
[]
=
{
{
.
mask
=
BIT
(
2
),
.
num_adr
=
ARRAY_SIZE
(
rt711_sdca_2_adr
),
.
adr_d
=
rt711_sdca_2_adr
,
},
{
.
mask
=
BIT
(
0
),
.
num_adr
=
ARRAY_SIZE
(
rt1316_0_group2_adr
),
.
adr_d
=
rt1316_0_group2_adr
,
},
{
.
mask
=
BIT
(
1
),
.
num_adr
=
ARRAY_SIZE
(
rt1316_1_group2_adr
),
.
adr_d
=
rt1316_1_group2_adr
,
},
{
.
mask
=
BIT
(
3
),
.
num_adr
=
ARRAY_SIZE
(
rt714_3_adr
),
.
adr_d
=
rt714_3_adr
,
},
{}
};
static
const
struct
snd_soc_acpi_link_adr
adl_sdw_rt1316_link12_rt714_link0
[]
=
{
{
.
mask
=
BIT
(
1
),
.
num_adr
=
ARRAY_SIZE
(
rt1316_1_group1_adr
),
.
adr_d
=
rt1316_1_group1_adr
,
},
{
.
mask
=
BIT
(
2
),
.
num_adr
=
ARRAY_SIZE
(
rt1316_2_group1_adr
),
.
adr_d
=
rt1316_2_group1_adr
,
},
{
.
mask
=
BIT
(
0
),
.
num_adr
=
ARRAY_SIZE
(
rt714_0_adr
),
.
adr_d
=
rt714_0_adr
,
},
{}
};
static
const
struct
snd_soc_acpi_link_adr
adl_sdw_rt1316_link2_rt714_link3
[]
=
{
{
.
mask
=
BIT
(
2
),
.
num_adr
=
ARRAY_SIZE
(
rt1316_2_single_adr
),
.
adr_d
=
rt1316_2_single_adr
,
},
{
.
mask
=
BIT
(
3
),
.
num_adr
=
ARRAY_SIZE
(
rt714_3_adr
),
.
adr_d
=
rt714_3_adr
,
},
{}
};
static
const
struct
snd_soc_acpi_link_adr
adl_sdw_rt1316_link2_rt714_link0
[]
=
{
{
.
mask
=
BIT
(
2
),
...
...
@@ -339,6 +423,27 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_adl_sdw_machines[] = {
.
drv_name
=
"sof_sdw"
,
.
sof_tplg_filename
=
"sof-adl-rt711-l0-rt1316-l13-rt714-l2.tplg"
,
},
{
.
link_mask
=
0xF
,
/* 4 active links required */
.
links
=
adl_sdw_rt711_link2_rt1316_link01_rt714_link3
,
.
drv_name
=
"sof_sdw"
,
.
sof_fw_filename
=
"sof-adl.ri"
,
.
sof_tplg_filename
=
"sof-adl-rt711-l2-rt1316-l01-rt714-l3.tplg"
,
},
{
.
link_mask
=
0xC
,
/* rt1316 on link2 & rt714 on link3 */
.
links
=
adl_sdw_rt1316_link2_rt714_link3
,
.
drv_name
=
"sof_sdw"
,
.
sof_fw_filename
=
"sof-adl.ri"
,
.
sof_tplg_filename
=
"sof-adl-rt1316-l2-mono-rt714-l3.tplg"
,
},
{
.
link_mask
=
0x7
,
/* rt714 on link0 & two rt1316s on link1 and link2 */
.
links
=
adl_sdw_rt1316_link12_rt714_link0
,
.
drv_name
=
"sof_sdw"
,
.
sof_fw_filename
=
"sof-adl.ri"
,
.
sof_tplg_filename
=
"sof-adl-rt1316-l12-rt714-l0.tplg"
,
},
{
.
link_mask
=
0x5
,
/* 2 active links required */
.
links
=
adl_sdw_rt1316_link2_rt714_link0
,
...
...
sound/soc/mediatek/mt8173/mt8173-afe-pcm.c
View file @
79a7a5ac
...
...
@@ -1054,6 +1054,7 @@ static int mt8173_afe_pcm_dev_probe(struct platform_device *pdev)
int
irq_id
;
struct
mtk_base_afe
*
afe
;
struct
mt8173_afe_private
*
afe_priv
;
struct
snd_soc_component
*
comp_pcm
,
*
comp_hdmi
;
ret
=
dma_set_mask_and_coherent
(
&
pdev
->
dev
,
DMA_BIT_MASK
(
33
));
if
(
ret
)
...
...
@@ -1142,23 +1143,55 @@ static int mt8173_afe_pcm_dev_probe(struct platform_device *pdev)
if
(
ret
)
goto
err_pm_disable
;
ret
=
devm_snd_soc_register_component
(
&
pdev
->
dev
,
&
mt8173_afe_pcm_dai_component
,
mt8173_afe_pcm_dais
,
ARRAY_SIZE
(
mt8173_afe_pcm_dais
));
comp_pcm
=
devm_kzalloc
(
&
pdev
->
dev
,
sizeof
(
*
comp_pcm
),
GFP_KERNEL
);
if
(
!
comp_pcm
)
{
ret
=
-
ENOMEM
;
goto
err_pm_disable
;
}
ret
=
snd_soc_component_initialize
(
comp_pcm
,
&
mt8173_afe_pcm_dai_component
,
&
pdev
->
dev
);
if
(
ret
)
goto
err_pm_disable
;
ret
=
devm_snd_soc_register_component
(
&
pdev
->
dev
,
&
mt8173_afe_hdmi_dai_component
,
mt8173_afe_hdmi_dais
,
ARRAY_SIZE
(
mt8173_afe_hdmi_dais
));
#ifdef CONFIG_DEBUG_FS
comp_pcm
->
debugfs_prefix
=
"pcm"
;
#endif
ret
=
snd_soc_add_component
(
comp_pcm
,
mt8173_afe_pcm_dais
,
ARRAY_SIZE
(
mt8173_afe_pcm_dais
));
if
(
ret
)
goto
err_pm_disable
;
comp_hdmi
=
devm_kzalloc
(
&
pdev
->
dev
,
sizeof
(
*
comp_hdmi
),
GFP_KERNEL
);
if
(
!
comp_hdmi
)
{
ret
=
-
ENOMEM
;
goto
err_pm_disable
;
}
ret
=
snd_soc_component_initialize
(
comp_hdmi
,
&
mt8173_afe_hdmi_dai_component
,
&
pdev
->
dev
);
if
(
ret
)
goto
err_pm_disable
;
#ifdef CONFIG_DEBUG_FS
comp_hdmi
->
debugfs_prefix
=
"hdmi"
;
#endif
ret
=
snd_soc_add_component
(
comp_hdmi
,
mt8173_afe_hdmi_dais
,
ARRAY_SIZE
(
mt8173_afe_hdmi_dais
));
if
(
ret
)
goto
err_cleanup_components
;
dev_info
(
&
pdev
->
dev
,
"MT8173 AFE driver initialized.
\n
"
);
return
0
;
err_cleanup_components:
snd_soc_unregister_component
(
&
pdev
->
dev
);
err_pm_disable:
pm_runtime_disable
(
&
pdev
->
dev
);
return
ret
;
...
...
@@ -1166,6 +1199,8 @@ static int mt8173_afe_pcm_dev_probe(struct platform_device *pdev)
static
int
mt8173_afe_pcm_dev_remove
(
struct
platform_device
*
pdev
)
{
snd_soc_unregister_component
(
&
pdev
->
dev
);
pm_runtime_disable
(
&
pdev
->
dev
);
if
(
!
pm_runtime_status_suspended
(
&
pdev
->
dev
))
mt8173_afe_runtime_suspend
(
&
pdev
->
dev
);
...
...
sound/soc/mediatek/mt8173/mt8173-rt5650.c
View file @
79a7a5ac
...
...
@@ -30,15 +30,15 @@ static struct mt8173_rt5650_platform_data mt8173_rt5650_priv = {
};
static
const
struct
snd_soc_dapm_widget
mt8173_rt5650_widgets
[]
=
{
SND_SOC_DAPM_SPK
(
"
Speaker
"
,
NULL
),
SND_SOC_DAPM_SPK
(
"
Ext Spk
"
,
NULL
),
SND_SOC_DAPM_MIC
(
"Int Mic"
,
NULL
),
SND_SOC_DAPM_HP
(
"Headphone"
,
NULL
),
SND_SOC_DAPM_MIC
(
"Headset Mic"
,
NULL
),
};
static
const
struct
snd_soc_dapm_route
mt8173_rt5650_routes
[]
=
{
{
"
Speaker
"
,
NULL
,
"SPOL"
},
{
"
Speaker
"
,
NULL
,
"SPOR"
},
{
"
Ext Spk
"
,
NULL
,
"SPOL"
},
{
"
Ext Spk
"
,
NULL
,
"SPOR"
},
{
"DMIC L1"
,
NULL
,
"Int Mic"
},
{
"DMIC R1"
,
NULL
,
"Int Mic"
},
{
"Headphone"
,
NULL
,
"HPOL"
},
...
...
@@ -48,7 +48,7 @@ static const struct snd_soc_dapm_route mt8173_rt5650_routes[] = {
};
static
const
struct
snd_kcontrol_new
mt8173_rt5650_controls
[]
=
{
SOC_DAPM_PIN_SWITCH
(
"
Speaker
"
),
SOC_DAPM_PIN_SWITCH
(
"
Ext Spk
"
),
SOC_DAPM_PIN_SWITCH
(
"Int Mic"
),
SOC_DAPM_PIN_SWITCH
(
"Headphone"
),
SOC_DAPM_PIN_SWITCH
(
"Headset Mic"
),
...
...
sound/soc/sh/rcar/dma.c
View file @
79a7a5ac
...
...
@@ -102,7 +102,7 @@ static int rsnd_dmaen_stop(struct rsnd_mod *mod,
struct
rsnd_dmaen
*
dmaen
=
rsnd_dma_to_dmaen
(
dma
);
if
(
dmaen
->
chan
)
dmaengine_terminate_sync
(
dmaen
->
chan
);
dmaengine_terminate_
a
sync
(
dmaen
->
chan
);
return
0
;
}
...
...
sound/soc/soc-dapm.c
View file @
79a7a5ac
...
...
@@ -2559,8 +2559,13 @@ static struct snd_soc_dapm_widget *dapm_find_widget(
return
NULL
;
}
static
int
snd_soc_dapm_set_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
,
int
status
)
/*
* set the DAPM pin status:
* returns 1 when the value has been updated, 0 when unchanged, or a negative
* error code; called from kcontrol put callback
*/
static
int
__snd_soc_dapm_set_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
,
int
status
)
{
struct
snd_soc_dapm_widget
*
w
=
dapm_find_widget
(
dapm
,
pin
,
true
);
int
ret
=
0
;
...
...
@@ -2586,6 +2591,18 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm,
return
ret
;
}
/*
* similar as __snd_soc_dapm_set_pin(), but returns 0 when successful;
* called from several API functions below
*/
static
int
snd_soc_dapm_set_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
,
int
status
)
{
int
ret
=
__snd_soc_dapm_set_pin
(
dapm
,
pin
,
status
);
return
ret
<
0
?
ret
:
0
;
}
/**
* snd_soc_dapm_sync_unlocked - scan and power dapm paths
* @dapm: DAPM context
...
...
@@ -3589,10 +3606,10 @@ int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
const
char
*
pin
=
(
const
char
*
)
kcontrol
->
private_value
;
int
ret
;
if
(
ucontrol
->
value
.
integer
.
value
[
0
])
ret
=
snd_soc_dapm_enable_pin
(
&
card
->
dapm
,
pin
);
else
ret
=
snd_soc_dapm_disable_pin
(
&
card
->
dapm
,
pin
);
mutex_lock_nested
(
&
card
->
dapm_mutex
,
SND_SOC_DAPM_CLASS_RUNTIME
);
ret
=
__snd_soc_dapm_set_pin
(
&
card
->
dapm
,
pin
,
!!
ucontrol
->
value
.
integer
.
value
[
0
]);
mutex_unlock
(
&
card
->
dapm_mutex
);
snd_soc_dapm_sync
(
&
card
->
dapm
);
return
ret
;
...
...
sound/soc/sof/Kconfig
View file @
79a7a5ac
...
...
@@ -47,7 +47,7 @@ config SND_SOC_SOF_OF
Say Y if you need this option. If unsure select "N".
config SND_SOC_SOF_COMPRESS
tristate
bool
select SND_SOC_COMPRESS
config SND_SOC_SOF_DEBUG_PROBES
...
...
sound/soc/sof/control.c
View file @
79a7a5ac
...
...
@@ -69,7 +69,7 @@ static void snd_sof_refresh_control(struct snd_sof_control *scontrol)
{
struct
sof_ipc_ctrl_data
*
cdata
=
scontrol
->
control_data
;
struct
snd_soc_component
*
scomp
=
scontrol
->
scomp
;
enum
sof_ipc_ctrl_type
ctrl_type
;
u32
ipc_cmd
;
int
ret
;
if
(
!
scontrol
->
comp_data_dirty
)
...
...
@@ -79,9 +79,9 @@ static void snd_sof_refresh_control(struct snd_sof_control *scontrol)
return
;
if
(
scontrol
->
cmd
==
SOF_CTRL_CMD_BINARY
)
ctrl_type
=
SOF_IPC_COMP_GET_DATA
;
ipc_cmd
=
SOF_IPC_COMP_GET_DATA
;
else
ctrl_type
=
SOF_IPC_COMP_GET_VALUE
;
ipc_cmd
=
SOF_IPC_COMP_GET_VALUE
;
/* set the ABI header values */
cdata
->
data
->
magic
=
SOF_ABI_MAGIC
;
...
...
@@ -89,7 +89,7 @@ static void snd_sof_refresh_control(struct snd_sof_control *scontrol)
/* refresh the component data from DSP */
scontrol
->
comp_data_dirty
=
false
;
ret
=
snd_sof_ipc_set_get_comp_data
(
scontrol
,
ctrl_type
,
ret
=
snd_sof_ipc_set_get_comp_data
(
scontrol
,
ipc_cmd
,
SOF_CTRL_TYPE_VALUE_CHAN_GET
,
scontrol
->
cmd
,
false
);
if
(
ret
<
0
)
{
...
...
sound/soc/sof/intel/hda-bus.c
View file @
79a7a5ac
...
...
@@ -10,6 +10,8 @@
#include <linux/io.h>
#include <sound/hdaudio.h>
#include <sound/hda_i915.h>
#include <sound/hda_codec.h>
#include <sound/hda_register.h>
#include "../sof-priv.h"
#include "hda.h"
...
...
@@ -21,6 +23,18 @@
#endif
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
static
void
update_codec_wake_enable
(
struct
hdac_bus
*
bus
,
unsigned
int
addr
,
bool
link_power
)
{
unsigned
int
mask
=
snd_hdac_chip_readw
(
bus
,
WAKEEN
);
if
(
link_power
)
mask
&=
~
BIT
(
addr
);
else
mask
|=
BIT
(
addr
);
snd_hdac_chip_updatew
(
bus
,
WAKEEN
,
STATESTS_INT_MASK
,
mask
);
}
static
void
sof_hda_bus_link_power
(
struct
hdac_device
*
codec
,
bool
enable
)
{
struct
hdac_bus
*
bus
=
codec
->
bus
;
...
...
@@ -41,6 +55,9 @@ static void sof_hda_bus_link_power(struct hdac_device *codec, bool enable)
*/
if
(
codec
->
addr
==
HDA_IDISP_ADDR
&&
!
enable
)
snd_hdac_display_power
(
bus
,
HDA_CODEC_IDX_CONTROLLER
,
false
);
/* WAKEEN needs to be set for disabled links */
update_codec_wake_enable
(
bus
,
codec
->
addr
,
enable
);
}
static
const
struct
hdac_bus_ops
bus_core_ops
=
{
...
...
sound/soc/sof/intel/hda-dsp.c
View file @
79a7a5ac
...
...
@@ -622,8 +622,7 @@ static int hda_suspend(struct snd_sof_dev *sdev, bool runtime_suspend)
hda_dsp_ipc_int_disable
(
sdev
);
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
if
(
runtime_suspend
)
hda_codec_jack_wake_enable
(
sdev
,
true
);
hda_codec_jack_wake_enable
(
sdev
,
runtime_suspend
);
/* power down all hda link */
snd_hdac_ext_bus_link_power_down_all
(
bus
);
...
...
sound/soc/sof/intel/hda.c
View file @
79a7a5ac
...
...
@@ -810,6 +810,20 @@ static int hda_init_caps(struct snd_sof_dev *sdev)
return
0
;
}
static
void
hda_check_for_state_change
(
struct
snd_sof_dev
*
sdev
)
{
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
struct
hdac_bus
*
bus
=
sof_to_bus
(
sdev
);
unsigned
int
codec_mask
;
codec_mask
=
snd_hdac_chip_readw
(
bus
,
STATESTS
);
if
(
codec_mask
)
{
hda_codec_jack_check
(
sdev
);
snd_hdac_chip_writew
(
bus
,
STATESTS
,
codec_mask
);
}
#endif
}
static
irqreturn_t
hda_dsp_interrupt_handler
(
int
irq
,
void
*
context
)
{
struct
snd_sof_dev
*
sdev
=
context
;
...
...
@@ -851,6 +865,8 @@ static irqreturn_t hda_dsp_interrupt_thread(int irq, void *context)
if
(
hda_sdw_check_wakeen_irq
(
sdev
))
hda_sdw_process_wakeen
(
sdev
);
hda_check_for_state_change
(
sdev
);
/* enable GIE interrupt */
snd_sof_dsp_update_bits
(
sdev
,
HDA_DSP_HDA_BAR
,
SOF_HDA_INTCTL
,
...
...
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