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
dd28d54c
Commit
dd28d54c
authored
Aug 20, 2019
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'asoc-5.3' into asoc-5.4
parents
d5e12042
bf283a05
Changes
18
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
234 additions
and
75 deletions
+234
-75
MAINTAINERS
MAINTAINERS
+1
-0
sound/soc/amd/raven/acp3x-pcm-dma.c
sound/soc/amd/raven/acp3x-pcm-dma.c
+9
-11
sound/soc/codecs/hdac_hda.c
sound/soc/codecs/hdac_hda.c
+4
-0
sound/soc/codecs/hdac_hdmi.c
sound/soc/codecs/hdac_hdmi.c
+48
-9
sound/soc/codecs/max98373.c
sound/soc/codecs/max98373.c
+6
-0
sound/soc/codecs/max98373.h
sound/soc/codecs/max98373.h
+2
-0
sound/soc/codecs/wm8737.c
sound/soc/codecs/wm8737.c
+1
-1
sound/soc/codecs/wm8904.c
sound/soc/codecs/wm8904.c
+35
-21
sound/soc/fsl/imx-audmux.c
sound/soc/fsl/imx-audmux.c
+53
-1
sound/soc/intel/boards/sof_rt5682.c
sound/soc/intel/boards/sof_rt5682.c
+4
-0
sound/soc/meson/Kconfig
sound/soc/meson/Kconfig
+1
-0
sound/soc/meson/axg-tdm-formatter.c
sound/soc/meson/axg-tdm-formatter.c
+1
-1
sound/soc/rockchip/rockchip_max98090.c
sound/soc/rockchip/rockchip_max98090.c
+11
-0
sound/soc/sh/rcar/adg.c
sound/soc/sh/rcar/adg.c
+15
-6
sound/soc/sof/intel/hda.c
sound/soc/sof/intel/hda.c
+13
-7
sound/soc/sunxi/sun4i-i2s.c
sound/soc/sunxi/sun4i-i2s.c
+8
-8
sound/soc/uniphier/aio-cpu.c
sound/soc/uniphier/aio-cpu.c
+21
-10
sound/soc/uniphier/aio.h
sound/soc/uniphier/aio.h
+1
-0
No files found.
MAINTAINERS
View file @
dd28d54c
...
...
@@ -8044,6 +8044,7 @@ S: Maintained
F: drivers/video/fbdev/i810/
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>
...
...
sound/soc/amd/raven/acp3x-pcm-dma.c
View file @
dd28d54c
...
...
@@ -31,8 +31,8 @@ struct i2s_stream_instance {
u16
num_pages
;
u16
channels
;
u32
xfer_resolution
;
struct
page
*
pg
;
u64
bytescount
;
dma_addr_t
dma_addr
;
void
__iomem
*
acp3x_base
;
};
...
...
@@ -211,9 +211,8 @@ static irqreturn_t i2s_irq_handler(int irq, void *dev_id)
static
void
config_acp3x_dma
(
struct
i2s_stream_instance
*
rtd
,
int
direction
)
{
u16
page_idx
;
u64
addr
;
u32
low
,
high
,
val
,
acp_fifo_addr
;
struct
page
*
pg
=
rtd
->
pg
;
dma_addr_t
addr
=
rtd
->
dma_addr
;
/* 8 scratch registers used to map one 64 bit address */
if
(
direction
==
SNDRV_PCM_STREAM_PLAYBACK
)
...
...
@@ -229,7 +228,6 @@ static void config_acp3x_dma(struct i2s_stream_instance *rtd, int direction)
for
(
page_idx
=
0
;
page_idx
<
rtd
->
num_pages
;
page_idx
++
)
{
/* Load the low address of page int ACP SRAM through SRBM */
addr
=
page_to_phys
(
pg
);
low
=
lower_32_bits
(
addr
);
high
=
upper_32_bits
(
addr
);
...
...
@@ -239,7 +237,7 @@ static void config_acp3x_dma(struct i2s_stream_instance *rtd, int direction)
+
4
);
/* Move to next physically contiguos page */
val
+=
8
;
pg
++
;
addr
+=
PAGE_SIZE
;
}
if
(
direction
==
SNDRV_PCM_STREAM_PLAYBACK
)
{
...
...
@@ -341,7 +339,6 @@ static int acp3x_dma_hw_params(struct snd_pcm_substream *substream,
{
int
status
;
u64
size
;
struct
page
*
pg
;
struct
snd_pcm_runtime
*
runtime
=
substream
->
runtime
;
struct
i2s_stream_instance
*
rtd
=
runtime
->
private_data
;
...
...
@@ -354,9 +351,8 @@ static int acp3x_dma_hw_params(struct snd_pcm_substream *substream,
return
status
;
memset
(
substream
->
runtime
->
dma_area
,
0
,
params_buffer_bytes
(
params
));
pg
=
virt_to_page
(
substream
->
dma_buffer
.
area
);
if
(
pg
)
{
rtd
->
pg
=
pg
;
if
(
substream
->
dma_buffer
.
area
)
{
rtd
->
dma_addr
=
substream
->
dma_buffer
.
addr
;
rtd
->
num_pages
=
(
PAGE_ALIGN
(
size
)
>>
PAGE_SHIFT
);
config_acp3x_dma
(
rtd
,
substream
->
stream
);
status
=
0
;
...
...
@@ -385,9 +381,11 @@ static snd_pcm_uframes_t acp3x_dma_pointer(struct snd_pcm_substream *substream)
static
int
acp3x_dma_new
(
struct
snd_soc_pcm_runtime
*
rtd
)
{
struct
snd_soc_component
*
component
=
snd_soc_rtdcom_lookup
(
rtd
,
DRV_NAME
);
struct
device
*
parent
=
component
->
dev
->
parent
;
snd_pcm_lib_preallocate_pages_for_all
(
rtd
->
pcm
,
SNDRV_DMA_TYPE_DEV
,
rtd
->
pcm
->
card
->
dev
,
MIN_BUFFER
,
MAX_BUFFER
);
parent
,
MIN_BUFFER
,
MAX_BUFFER
);
return
0
;
}
...
...
sound/soc/codecs/hdac_hda.c
View file @
dd28d54c
...
...
@@ -495,6 +495,10 @@ static int hdac_hda_dev_probe(struct hdac_device *hdev)
static
int
hdac_hda_dev_remove
(
struct
hdac_device
*
hdev
)
{
struct
hdac_hda_priv
*
hda_pvt
;
hda_pvt
=
dev_get_drvdata
(
&
hdev
->
dev
);
cancel_delayed_work_sync
(
&
hda_pvt
->
codec
.
jackpoll_work
);
return
0
;
}
...
...
sound/soc/codecs/hdac_hdmi.c
View file @
dd28d54c
...
...
@@ -88,8 +88,10 @@ struct hdac_hdmi_port {
hda_nid_t
mux_nids
[
HDA_MAX_CONNECTIONS
];
struct
hdac_hdmi_eld
eld
;
const
char
*
jack_pin
;
bool
is_connect
;
struct
snd_soc_dapm_context
*
dapm
;
const
char
*
output_pin
;
struct
work_struct
dapm_work
;
};
struct
hdac_hdmi_pcm
{
...
...
@@ -163,11 +165,7 @@ static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm,
{
struct
hdac_device
*
hdev
=
port
->
pin
->
hdev
;
if
(
is_connect
)
snd_soc_dapm_enable_pin
(
port
->
dapm
,
port
->
jack_pin
);
else
snd_soc_dapm_disable_pin
(
port
->
dapm
,
port
->
jack_pin
);
port
->
is_connect
=
is_connect
;
if
(
is_connect
)
{
/*
* Report Jack connect event when a device is connected
...
...
@@ -193,10 +191,32 @@ static void hdac_hdmi_jack_report(struct hdac_hdmi_pcm *pcm,
if
(
pcm
->
jack_event
>
0
)
pcm
->
jack_event
--
;
}
}
static
void
hdac_hdmi_port_dapm_update
(
struct
hdac_hdmi_port
*
port
)
{
if
(
port
->
is_connect
)
snd_soc_dapm_enable_pin
(
port
->
dapm
,
port
->
jack_pin
);
else
snd_soc_dapm_disable_pin
(
port
->
dapm
,
port
->
jack_pin
);
snd_soc_dapm_sync
(
port
->
dapm
);
}
static
void
hdac_hdmi_jack_dapm_work
(
struct
work_struct
*
work
)
{
struct
hdac_hdmi_port
*
port
;
port
=
container_of
(
work
,
struct
hdac_hdmi_port
,
dapm_work
);
hdac_hdmi_port_dapm_update
(
port
);
}
static
void
hdac_hdmi_jack_report_sync
(
struct
hdac_hdmi_pcm
*
pcm
,
struct
hdac_hdmi_port
*
port
,
bool
is_connect
)
{
hdac_hdmi_jack_report
(
pcm
,
port
,
is_connect
);
hdac_hdmi_port_dapm_update
(
port
);
}
/* MST supported verbs */
/*
* Get the no devices that can be connected to a port on the Pin widget.
...
...
@@ -904,7 +924,7 @@ static int hdac_hdmi_set_pin_port_mux(struct snd_kcontrol *kcontrol,
list_for_each_entry_safe
(
p
,
p_next
,
&
pcm
->
port_list
,
head
)
{
if
(
p
==
port
&&
p
->
id
==
port
->
id
&&
p
->
pin
==
port
->
pin
)
{
hdac_hdmi_jack_report
(
pcm
,
port
,
false
);
hdac_hdmi_jack_report
_sync
(
pcm
,
port
,
false
);
list_del
(
&
p
->
head
);
}
}
...
...
@@ -918,7 +938,7 @@ static int hdac_hdmi_set_pin_port_mux(struct snd_kcontrol *kcontrol,
if
(
!
strcmp
(
cvt_name
,
pcm
->
cvt
->
name
))
{
list_add_tail
(
&
port
->
head
,
&
pcm
->
port_list
);
if
(
port
->
eld
.
monitor_present
&&
port
->
eld
.
eld_valid
)
{
hdac_hdmi_jack_report
(
pcm
,
port
,
true
);
hdac_hdmi_jack_report
_sync
(
pcm
,
port
,
true
);
mutex_unlock
(
&
hdmi
->
pin_mutex
);
return
ret
;
}
...
...
@@ -1281,16 +1301,20 @@ static void hdac_hdmi_present_sense(struct hdac_hdmi_pin *pin,
* report jack here. It will be done in usermode mux
* control select.
*/
if
(
pcm
)
if
(
pcm
)
{
hdac_hdmi_jack_report
(
pcm
,
port
,
false
);
schedule_work
(
&
port
->
dapm_work
);
}
mutex_unlock
(
&
hdmi
->
pin_mutex
);
return
;
}
if
(
port
->
eld
.
monitor_present
&&
port
->
eld
.
eld_valid
)
{
if
(
pcm
)
if
(
pcm
)
{
hdac_hdmi_jack_report
(
pcm
,
port
,
true
);
schedule_work
(
&
port
->
dapm_work
);
}
print_hex_dump_debug
(
"ELD: "
,
DUMP_PREFIX_OFFSET
,
16
,
1
,
port
->
eld
.
eld_buffer
,
port
->
eld
.
eld_size
,
false
);
...
...
@@ -1319,6 +1343,7 @@ static int hdac_hdmi_add_ports(struct hdac_device *hdev,
for
(
i
=
0
;
i
<
max_ports
;
i
++
)
{
ports
[
i
].
id
=
i
;
ports
[
i
].
pin
=
pin
;
INIT_WORK
(
&
ports
[
i
].
dapm_work
,
hdac_hdmi_jack_dapm_work
);
}
pin
->
ports
=
ports
;
pin
->
num_ports
=
max_ports
;
...
...
@@ -2083,8 +2108,20 @@ static int hdac_hdmi_dev_probe(struct hdac_device *hdev)
return
ret
;
}
static
void
clear_dapm_works
(
struct
hdac_device
*
hdev
)
{
struct
hdac_hdmi_priv
*
hdmi
=
hdev_to_hdmi_priv
(
hdev
);
struct
hdac_hdmi_pin
*
pin
;
int
i
;
list_for_each_entry
(
pin
,
&
hdmi
->
pin_list
,
head
)
for
(
i
=
0
;
i
<
pin
->
num_ports
;
i
++
)
cancel_work_sync
(
&
pin
->
ports
[
i
].
dapm_work
);
}
static
int
hdac_hdmi_dev_remove
(
struct
hdac_device
*
hdev
)
{
clear_dapm_works
(
hdev
);
snd_hdac_display_power
(
hdev
->
bus
,
hdev
->
addr
,
false
);
return
0
;
...
...
@@ -2103,6 +2140,8 @@ static int hdac_hdmi_runtime_suspend(struct device *dev)
if
(
!
bus
)
return
0
;
clear_dapm_works
(
hdev
);
/*
* Power down afg.
* codec_read is preferred over codec_write to set the power state.
...
...
sound/soc/codecs/max98373.c
View file @
dd28d54c
...
...
@@ -268,6 +268,12 @@ static int max98373_dai_hw_params(struct snd_pcm_substream *substream,
case
48000
:
sampling_rate
=
MAX98373_PCM_SR_SET1_SR_48000
;
break
;
case
88200
:
sampling_rate
=
MAX98373_PCM_SR_SET1_SR_88200
;
break
;
case
96000
:
sampling_rate
=
MAX98373_PCM_SR_SET1_SR_96000
;
break
;
default:
dev_err
(
component
->
dev
,
"rate %d not supported
\n
"
,
params_rate
(
params
));
...
...
sound/soc/codecs/max98373.h
View file @
dd28d54c
...
...
@@ -130,6 +130,8 @@
#define MAX98373_PCM_SR_SET1_SR_32000 (0x6 << 0)
#define MAX98373_PCM_SR_SET1_SR_44100 (0x7 << 0)
#define MAX98373_PCM_SR_SET1_SR_48000 (0x8 << 0)
#define MAX98373_PCM_SR_SET1_SR_88200 (0x9 << 0)
#define MAX98373_PCM_SR_SET1_SR_96000 (0xA << 0)
/* MAX98373_R2028_PCM_SR_SETUP_2 */
#define MAX98373_PCM_SR_SET2_SR_MASK (0xF << 4)
...
...
sound/soc/codecs/wm8737.c
View file @
dd28d54c
...
...
@@ -167,7 +167,7 @@ SOC_DOUBLE("Polarity Invert Switch", WM8737_ADC_CONTROL, 5, 6, 1, 0),
SOC_SINGLE
(
"3D Switch"
,
WM8737_3D_ENHANCE
,
0
,
1
,
0
),
SOC_SINGLE
(
"3D Depth"
,
WM8737_3D_ENHANCE
,
1
,
15
,
0
),
SOC_ENUM
(
"3D Low Cut-off"
,
low_3d
),
SOC_ENUM
(
"3D High Cut-off"
,
low
_3d
),
SOC_ENUM
(
"3D High Cut-off"
,
high
_3d
),
SOC_SINGLE_TLV
(
"3D ADC Volume"
,
WM8737_3D_ENHANCE
,
7
,
1
,
1
,
adc_tlv
),
SOC_SINGLE
(
"Noise Gate Switch"
,
WM8737_NOISE_GATE
,
0
,
1
,
0
),
...
...
sound/soc/codecs/wm8904.c
View file @
dd28d54c
...
...
@@ -545,18 +545,6 @@ static const DECLARE_TLV_DB_SCALE(out_tlv, -5700, 100, 0);
static
const
DECLARE_TLV_DB_SCALE
(
sidetone_tlv
,
-
3600
,
300
,
0
);
static
const
DECLARE_TLV_DB_SCALE
(
eq_tlv
,
-
1200
,
100
,
0
);
static
const
char
*
input_mode_text
[]
=
{
"Single-Ended"
,
"Differential Line"
,
"Differential Mic"
};
static
SOC_ENUM_SINGLE_DECL
(
lin_mode
,
WM8904_ANALOGUE_LEFT_INPUT_1
,
0
,
input_mode_text
);
static
SOC_ENUM_SINGLE_DECL
(
rin_mode
,
WM8904_ANALOGUE_RIGHT_INPUT_1
,
0
,
input_mode_text
);
static
const
char
*
hpf_mode_text
[]
=
{
"Hi-fi"
,
"Voice 1"
,
"Voice 2"
,
"Voice 3"
};
...
...
@@ -591,9 +579,6 @@ static const struct snd_kcontrol_new wm8904_adc_snd_controls[] = {
SOC_DOUBLE_R_TLV
(
"Digital Capture Volume"
,
WM8904_ADC_DIGITAL_VOLUME_LEFT
,
WM8904_ADC_DIGITAL_VOLUME_RIGHT
,
1
,
119
,
0
,
digital_tlv
),
SOC_ENUM
(
"Left Capture Mode"
,
lin_mode
),
SOC_ENUM
(
"Right Capture Mode"
,
rin_mode
),
/* No TLV since it depends on mode */
SOC_DOUBLE_R
(
"Capture Volume"
,
WM8904_ANALOGUE_LEFT_INPUT_0
,
WM8904_ANALOGUE_RIGHT_INPUT_0
,
0
,
31
,
0
),
...
...
@@ -852,6 +837,10 @@ static int out_pga_event(struct snd_soc_dapm_widget *w,
return
0
;
}
static
const
char
*
input_mode_text
[]
=
{
"Single-Ended"
,
"Differential Line"
,
"Differential Mic"
};
static
const
char
*
lin_text
[]
=
{
"IN1L"
,
"IN2L"
,
"IN3L"
};
...
...
@@ -866,7 +855,14 @@ static SOC_ENUM_SINGLE_DECL(lin_inv_enum, WM8904_ANALOGUE_LEFT_INPUT_1, 4,
lin_text
);
static
const
struct
snd_kcontrol_new
lin_inv_mux
=
SOC_DAPM_ENUM
(
"Left Capture Inveting Mux"
,
lin_inv_enum
);
SOC_DAPM_ENUM
(
"Left Capture Inverting Mux"
,
lin_inv_enum
);
static
SOC_ENUM_SINGLE_DECL
(
lin_mode_enum
,
WM8904_ANALOGUE_LEFT_INPUT_1
,
0
,
input_mode_text
);
static
const
struct
snd_kcontrol_new
lin_mode
=
SOC_DAPM_ENUM
(
"Left Capture Mode"
,
lin_mode_enum
);
static
const
char
*
rin_text
[]
=
{
"IN1R"
,
"IN2R"
,
"IN3R"
...
...
@@ -882,7 +878,14 @@ static SOC_ENUM_SINGLE_DECL(rin_inv_enum, WM8904_ANALOGUE_RIGHT_INPUT_1, 4,
rin_text
);
static
const
struct
snd_kcontrol_new
rin_inv_mux
=
SOC_DAPM_ENUM
(
"Right Capture Inveting Mux"
,
rin_inv_enum
);
SOC_DAPM_ENUM
(
"Right Capture Inverting Mux"
,
rin_inv_enum
);
static
SOC_ENUM_SINGLE_DECL
(
rin_mode_enum
,
WM8904_ANALOGUE_RIGHT_INPUT_1
,
0
,
input_mode_text
);
static
const
struct
snd_kcontrol_new
rin_mode
=
SOC_DAPM_ENUM
(
"Right Capture Mode"
,
rin_mode_enum
);
static
const
char
*
aif_text
[]
=
{
"Left"
,
"Right"
...
...
@@ -932,9 +935,11 @@ SND_SOC_DAPM_SUPPLY("MICBIAS", WM8904_MIC_BIAS_CONTROL_0, 0, 0, NULL, 0),
SND_SOC_DAPM_MUX
(
"Left Capture Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
lin_mux
),
SND_SOC_DAPM_MUX
(
"Left Capture Inverting Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
lin_inv_mux
),
SND_SOC_DAPM_MUX
(
"Left Capture Mode"
,
SND_SOC_NOPM
,
0
,
0
,
&
lin_mode
),
SND_SOC_DAPM_MUX
(
"Right Capture Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
rin_mux
),
SND_SOC_DAPM_MUX
(
"Right Capture Inverting Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
rin_inv_mux
),
SND_SOC_DAPM_MUX
(
"Right Capture Mode"
,
SND_SOC_NOPM
,
0
,
0
,
&
rin_mode
),
SND_SOC_DAPM_PGA
(
"Left Capture PGA"
,
WM8904_POWER_MANAGEMENT_0
,
1
,
0
,
NULL
,
0
),
...
...
@@ -1057,6 +1062,12 @@ static const struct snd_soc_dapm_route adc_intercon[] = {
{
"Left Capture Inverting Mux"
,
"IN2L"
,
"IN2L"
},
{
"Left Capture Inverting Mux"
,
"IN3L"
,
"IN3L"
},
{
"Left Capture Mode"
,
"Single-Ended"
,
"Left Capture Inverting Mux"
},
{
"Left Capture Mode"
,
"Differential Line"
,
"Left Capture Mux"
},
{
"Left Capture Mode"
,
"Differential Line"
,
"Left Capture Inverting Mux"
},
{
"Left Capture Mode"
,
"Differential Mic"
,
"Left Capture Mux"
},
{
"Left Capture Mode"
,
"Differential Mic"
,
"Left Capture Inverting Mux"
},
{
"Right Capture Mux"
,
"IN1R"
,
"IN1R"
},
{
"Right Capture Mux"
,
"IN2R"
,
"IN2R"
},
{
"Right Capture Mux"
,
"IN3R"
,
"IN3R"
},
...
...
@@ -1065,11 +1076,14 @@ static const struct snd_soc_dapm_route adc_intercon[] = {
{
"Right Capture Inverting Mux"
,
"IN2R"
,
"IN2R"
},
{
"Right Capture Inverting Mux"
,
"IN3R"
,
"IN3R"
},
{
"Left Capture PGA"
,
NULL
,
"Left Capture Mux"
},
{
"Left Capture PGA"
,
NULL
,
"Left Capture Inverting Mux"
},
{
"Right Capture Mode"
,
"Single-Ended"
,
"Right Capture Inverting Mux"
},
{
"Right Capture Mode"
,
"Differential Line"
,
"Right Capture Mux"
},
{
"Right Capture Mode"
,
"Differential Line"
,
"Right Capture Inverting Mux"
},
{
"Right Capture Mode"
,
"Differential Mic"
,
"Right Capture Mux"
},
{
"Right Capture Mode"
,
"Differential Mic"
,
"Right Capture Inverting Mux"
},
{
"
Right Capture PGA"
,
NULL
,
"Right Capture Mux
"
},
{
"Right Capture PGA"
,
NULL
,
"Right Capture
Inverting Mux
"
},
{
"
Left Capture PGA"
,
NULL
,
"Left Capture Mode
"
},
{
"Right Capture PGA"
,
NULL
,
"Right Capture
Mode
"
},
{
"AIFOUTL Mux"
,
"Left"
,
"ADCL"
},
{
"AIFOUTL Mux"
,
"Right"
,
"ADCR"
},
...
...
sound/soc/fsl/imx-audmux.c
View file @
dd28d54c
...
...
@@ -23,6 +23,8 @@
static
struct
clk
*
audmux_clk
;
static
void
__iomem
*
audmux_base
;
static
u32
*
regcache
;
static
u32
reg_max
;
#define IMX_AUDMUX_V2_PTCR(x) ((x) * 8)
#define IMX_AUDMUX_V2_PDCR(x) ((x) * 8 + 4)
...
...
@@ -315,8 +317,23 @@ static int imx_audmux_probe(struct platform_device *pdev)
if
(
of_id
)
pdev
->
id_entry
=
of_id
->
data
;
audmux_type
=
pdev
->
id_entry
->
driver_data
;
if
(
audmux_type
==
IMX31_AUDMUX
)
switch
(
audmux_type
)
{
case
IMX31_AUDMUX
:
audmux_debugfs_init
();
reg_max
=
14
;
break
;
case
IMX21_AUDMUX
:
reg_max
=
6
;
break
;
default:
dev_err
(
&
pdev
->
dev
,
"unsupported version!
\n
"
);
return
-
EINVAL
;
}
regcache
=
devm_kzalloc
(
&
pdev
->
dev
,
sizeof
(
u32
)
*
reg_max
,
GFP_KERNEL
);
if
(
!
regcache
)
return
-
ENOMEM
;
if
(
of_id
)
imx_audmux_parse_dt_defaults
(
pdev
,
pdev
->
dev
.
of_node
);
...
...
@@ -332,12 +349,47 @@ static int imx_audmux_remove(struct platform_device *pdev)
return
0
;
}
#ifdef CONFIG_PM_SLEEP
static
int
imx_audmux_suspend
(
struct
device
*
dev
)
{
int
i
;
clk_prepare_enable
(
audmux_clk
);
for
(
i
=
0
;
i
<
reg_max
;
i
++
)
regcache
[
i
]
=
readl
(
audmux_base
+
i
*
4
);
clk_disable_unprepare
(
audmux_clk
);
return
0
;
}
static
int
imx_audmux_resume
(
struct
device
*
dev
)
{
int
i
;
clk_prepare_enable
(
audmux_clk
);
for
(
i
=
0
;
i
<
reg_max
;
i
++
)
writel
(
regcache
[
i
],
audmux_base
+
i
*
4
);
clk_disable_unprepare
(
audmux_clk
);
return
0
;
}
#endif
/* CONFIG_PM_SLEEP */
static
const
struct
dev_pm_ops
imx_audmux_pm
=
{
SET_SYSTEM_SLEEP_PM_OPS
(
imx_audmux_suspend
,
imx_audmux_resume
)
};
static
struct
platform_driver
imx_audmux_driver
=
{
.
probe
=
imx_audmux_probe
,
.
remove
=
imx_audmux_remove
,
.
id_table
=
imx_audmux_ids
,
.
driver
=
{
.
name
=
DRIVER_NAME
,
.
pm
=
&
imx_audmux_pm
,
.
of_match_table
=
imx_audmux_dt_ids
,
}
};
...
...
sound/soc/intel/boards/sof_rt5682.c
View file @
dd28d54c
...
...
@@ -308,6 +308,7 @@ static const struct snd_soc_dapm_widget sof_widgets[] = {
SND_SOC_DAPM_HP
(
"Headphone Jack"
,
NULL
),
SND_SOC_DAPM_MIC
(
"Headset Mic"
,
NULL
),
SND_SOC_DAPM_SPK
(
"Spk"
,
NULL
),
SND_SOC_DAPM_MIC
(
"SoC DMIC"
,
NULL
),
};
static
const
struct
snd_soc_dapm_route
sof_map
[]
=
{
...
...
@@ -318,6 +319,9 @@ static const struct snd_soc_dapm_route sof_map[] = {
/* other jacks */
{
"IN1P"
,
NULL
,
"Headset Mic"
},
/* digital mics */
{
"DMic"
,
NULL
,
"SoC DMIC"
},
};
static
const
struct
snd_soc_dapm_route
speaker_map
[]
=
{
...
...
sound/soc/meson/Kconfig
View file @
dd28d54c
...
...
@@ -87,6 +87,7 @@ config SND_MESON_AXG_PDM
config SND_MESON_G12A_TOHDMITX
tristate "Amlogic G12A To HDMI TX Control Support"
select REGMAP_MMIO
imply SND_SOC_HDMI_CODEC
help
Select Y or M to add support for HDMI audio on the g12a SoC
...
...
sound/soc/meson/axg-tdm-formatter.c
View file @
dd28d54c
...
...
@@ -325,7 +325,7 @@ int axg_tdm_formatter_probe(struct platform_device *pdev)
}
/* Formatter dedicated reset line */
formatter
->
reset
=
reset_control_get_optional_exclusive
(
dev
,
NULL
);
formatter
->
reset
=
devm_
reset_control_get_optional_exclusive
(
dev
,
NULL
);
if
(
IS_ERR
(
formatter
->
reset
))
{
ret
=
PTR_ERR
(
formatter
->
reset
);
if
(
ret
!=
-
EPROBE_DEFER
)
...
...
sound/soc/rockchip/rockchip_max98090.c
View file @
dd28d54c
...
...
@@ -137,8 +137,19 @@ static int rk_aif1_hw_params(struct snd_pcm_substream *substream,
return
ret
;
}
static
int
rk_aif1_startup
(
struct
snd_pcm_substream
*
substream
)
{
/*
* Set period size to 240 because pl330 has issue
* dealing with larger period in stress testing.
*/
return
snd_pcm_hw_constraint_minmax
(
substream
->
runtime
,
SNDRV_PCM_HW_PARAM_PERIOD_SIZE
,
240
,
240
);
}
static
const
struct
snd_soc_ops
rk_aif1_ops
=
{
.
hw_params
=
rk_aif1_hw_params
,
.
startup
=
rk_aif1_startup
,
};
SND_SOC_DAILINK_DEFS
(
hifi
,
...
...
sound/soc/sh/rcar/adg.c
View file @
dd28d54c
...
...
@@ -30,6 +30,7 @@ struct rsnd_adg {
struct
clk
*
clkout
[
CLKOUTMAX
];
struct
clk_onecell_data
onecell
;
struct
rsnd_mod
mod
;
int
clk_rate
[
CLKMAX
];
u32
flags
;
u32
ckr
;
u32
rbga
;
...
...
@@ -114,9 +115,9 @@ static void __rsnd_adg_get_timesel_ratio(struct rsnd_priv *priv,
unsigned
int
val
,
en
;
unsigned
int
min
,
diff
;
unsigned
int
sel_rate
[]
=
{
clk_get_rate
(
adg
->
clk
[
CLKA
])
,
/* 0000: CLKA */
clk_get_rate
(
adg
->
clk
[
CLKB
])
,
/* 0001: CLKB */
clk_get_rate
(
adg
->
clk
[
CLKC
])
,
/* 0010: CLKC */
adg
->
clk_rate
[
CLKA
]
,
/* 0000: CLKA */
adg
->
clk_rate
[
CLKB
]
,
/* 0001: CLKB */
adg
->
clk_rate
[
CLKC
]
,
/* 0010: CLKC */
adg
->
rbga_rate_for_441khz
,
/* 0011: RBGA */
adg
->
rbgb_rate_for_48khz
,
/* 0100: RBGB */
};
...
...
@@ -302,7 +303,7 @@ int rsnd_adg_clk_query(struct rsnd_priv *priv, unsigned int rate)
* AUDIO_CLKA/AUDIO_CLKB/AUDIO_CLKC/AUDIO_CLKI.
*/
for_each_rsnd_clk
(
clk
,
adg
,
i
)
{
if
(
rate
==
clk_get_rate
(
clk
)
)
if
(
rate
==
adg
->
clk_rate
[
i
]
)
return
sel_table
[
i
];
}
...
...
@@ -369,10 +370,18 @@ void rsnd_adg_clk_control(struct rsnd_priv *priv, int enable)
for_each_rsnd_clk
(
clk
,
adg
,
i
)
{
ret
=
0
;
if
(
enable
)
if
(
enable
)
{
ret
=
clk_prepare_enable
(
clk
);
else
/*
* We shouldn't use clk_get_rate() under
* atomic context. Let's keep it when
* rsnd_adg_clk_enable() was called
*/
adg
->
clk_rate
[
i
]
=
clk_get_rate
(
adg
->
clk
[
i
]);
}
else
{
clk_disable_unprepare
(
clk
);
}
if
(
ret
<
0
)
dev_warn
(
dev
,
"can't use clk %d
\n
"
,
i
);
...
...
sound/soc/sof/intel/hda.c
View file @
dd28d54c
...
...
@@ -357,10 +357,23 @@ static int hda_init_caps(struct snd_sof_dev *sdev)
if
(
bus
->
ppcap
)
dev_dbg
(
sdev
->
dev
,
"PP capability, will probe DSP later.
\n
"
);
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
/* init i915 and HDMI codecs */
ret
=
hda_codec_i915_init
(
sdev
);
if
(
ret
<
0
)
{
dev_err
(
sdev
->
dev
,
"error: init i915 and HDMI codec failed
\n
"
);
return
ret
;
}
#endif
/* Init HDA controller after i915 init */
ret
=
hda_dsp_ctrl_init_chip
(
sdev
,
true
);
if
(
ret
<
0
)
{
dev_err
(
bus
->
dev
,
"error: init chip failed with ret: %d
\n
"
,
ret
);
#if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA)
hda_codec_i915_exit
(
sdev
);
#endif
return
ret
;
}
...
...
@@ -368,13 +381,6 @@ static int hda_init_caps(struct snd_sof_dev *sdev)
if
(
bus
->
mlcap
)
snd_hdac_ext_bus_get_ml_capabilities
(
bus
);
/* init i915 and HDMI codecs */
ret
=
hda_codec_i915_init
(
sdev
);
if
(
ret
<
0
)
{
dev_err
(
sdev
->
dev
,
"error: no HDMI audio devices found
\n
"
);
return
ret
;
}
/* codec detection */
if
(
!
bus
->
codec_mask
)
{
dev_info
(
bus
->
dev
,
"no hda codecs found!
\n
"
);
...
...
sound/soc/sunxi/sun4i-i2s.c
View file @
dd28d54c
...
...
@@ -1000,8 +1000,8 @@ static const struct sun4i_i2s_quirks sun50i_a64_codec_i2s_quirks = {
.
field_rxchanmap
=
REG_FIELD
(
SUN4I_I2S_RX_CHAN_MAP_REG
,
0
,
31
),
.
field_txchansel
=
REG_FIELD
(
SUN4I_I2S_TX_CHAN_SEL_REG
,
0
,
2
),
.
field_rxchansel
=
REG_FIELD
(
SUN4I_I2S_RX_CHAN_SEL_REG
,
0
,
2
),
.
get_sr
=
sun
8i_i2s_get_sr_wss
,
.
get_wss
=
sun
8i_i2s_get_sr
_wss
,
.
get_sr
=
sun
4i_i2s_get_sr
,
.
get_wss
=
sun
4i_i2s_get
_wss
,
};
static
int
sun4i_i2s_init_regmap_fields
(
struct
device
*
dev
,
...
...
@@ -1144,11 +1144,9 @@ static int sun4i_i2s_probe(struct platform_device *pdev)
goto
err_pm_disable
;
}
ret
=
devm_snd_soc_register_component
(
&
pdev
->
dev
,
&
sun4i_i2s_component
,
&
sun4i_i2s_dai
,
1
);
ret
=
sun4i_i2s_init_regmap_fields
(
&
pdev
->
dev
,
i2s
);
if
(
ret
)
{
dev_err
(
&
pdev
->
dev
,
"Could not
register DAI
\n
"
);
dev_err
(
&
pdev
->
dev
,
"Could not
initialise regmap fields
\n
"
);
goto
err_suspend
;
}
...
...
@@ -1158,9 +1156,11 @@ static int sun4i_i2s_probe(struct platform_device *pdev)
goto
err_suspend
;
}
ret
=
sun4i_i2s_init_regmap_fields
(
&
pdev
->
dev
,
i2s
);
ret
=
devm_snd_soc_register_component
(
&
pdev
->
dev
,
&
sun4i_i2s_component
,
&
sun4i_i2s_dai
,
1
);
if
(
ret
)
{
dev_err
(
&
pdev
->
dev
,
"Could not
initialise regmap fields
\n
"
);
dev_err
(
&
pdev
->
dev
,
"Could not
register DAI
\n
"
);
goto
err_suspend
;
}
...
...
sound/soc/uniphier/aio-cpu.c
View file @
dd28d54c
...
...
@@ -424,8 +424,11 @@ int uniphier_aio_dai_suspend(struct snd_soc_dai *dai)
{
struct
uniphier_aio
*
aio
=
uniphier_priv
(
dai
);
aio
->
chip
->
num_wup_aios
--
;
if
(
!
aio
->
chip
->
num_wup_aios
)
{
reset_control_assert
(
aio
->
chip
->
rst
);
clk_disable_unprepare
(
aio
->
chip
->
clk
);
}
return
0
;
}
...
...
@@ -439,6 +442,7 @@ int uniphier_aio_dai_resume(struct snd_soc_dai *dai)
if
(
!
aio
->
chip
->
active
)
return
0
;
if
(
!
aio
->
chip
->
num_wup_aios
)
{
ret
=
clk_prepare_enable
(
aio
->
chip
->
clk
);
if
(
ret
)
return
ret
;
...
...
@@ -446,6 +450,7 @@ int uniphier_aio_dai_resume(struct snd_soc_dai *dai)
ret
=
reset_control_deassert
(
aio
->
chip
->
rst
);
if
(
ret
)
goto
err_out_clock
;
}
aio_iecout_set_enable
(
aio
->
chip
,
true
);
aio_chip_init
(
aio
->
chip
);
...
...
@@ -458,7 +463,7 @@ int uniphier_aio_dai_resume(struct snd_soc_dai *dai)
ret
=
aio_init
(
sub
);
if
(
ret
)
goto
err_out_
clock
;
goto
err_out_
reset
;
if
(
!
sub
->
setting
)
continue
;
...
...
@@ -466,10 +471,15 @@ int uniphier_aio_dai_resume(struct snd_soc_dai *dai)
aio_port_reset
(
sub
);
aio_src_reset
(
sub
);
}
aio
->
chip
->
num_wup_aios
++
;
return
0
;
err_out_reset:
if
(
!
aio
->
chip
->
num_wup_aios
)
reset_control_assert
(
aio
->
chip
->
rst
);
err_out_clock:
if
(
!
aio
->
chip
->
num_wup_aios
)
clk_disable_unprepare
(
aio
->
chip
->
clk
);
return
ret
;
...
...
@@ -619,6 +629,7 @@ int uniphier_aio_probe(struct platform_device *pdev)
return
PTR_ERR
(
chip
->
rst
);
chip
->
num_aios
=
chip
->
chip_spec
->
num_dais
;
chip
->
num_wup_aios
=
chip
->
num_aios
;
chip
->
aios
=
devm_kcalloc
(
dev
,
chip
->
num_aios
,
sizeof
(
struct
uniphier_aio
),
GFP_KERNEL
);
...
...
sound/soc/uniphier/aio.h
View file @
dd28d54c
...
...
@@ -285,6 +285,7 @@ struct uniphier_aio_chip {
struct
uniphier_aio
*
aios
;
int
num_aios
;
int
num_wup_aios
;
struct
uniphier_aio_pll
*
plls
;
int
num_plls
;
...
...
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