Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
5bcaca4b
Commit
5bcaca4b
authored
Oct 06, 2014
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/component' into asoc-next
parents
832a9414
b2d9de54
Changes
18
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
760 additions
and
519 deletions
+760
-519
include/sound/soc-dapm.h
include/sound/soc-dapm.h
+0
-1
include/sound/soc.h
include/sound/soc.h
+59
-35
sound/soc/codecs/wm8350.c
sound/soc/codecs/wm8350.c
+1
-1
sound/soc/codecs/wm8753.c
sound/soc/codecs/wm8753.c
+1
-1
sound/soc/codecs/wm8971.c
sound/soc/codecs/wm8971.c
+1
-1
sound/soc/intel/Makefile
sound/soc/intel/Makefile
+2
-1
sound/soc/intel/sst-atom-controls.c
sound/soc/intel/sst-atom-controls.c
+39
-0
sound/soc/intel/sst-atom-controls.h
sound/soc/intel/sst-atom-controls.h
+284
-2
sound/soc/intel/sst-haswell-pcm.c
sound/soc/intel/sst-haswell-pcm.c
+28
-28
sound/soc/intel/sst-mfld-platform-compress.c
sound/soc/intel/sst-mfld-platform-compress.c
+29
-9
sound/soc/intel/sst-mfld-platform-pcm.c
sound/soc/intel/sst-mfld-platform-pcm.c
+18
-16
sound/soc/intel/sst-mfld-platform.h
sound/soc/intel/sst-mfld-platform.h
+29
-28
sound/soc/omap/rx51.c
sound/soc/omap/rx51.c
+1
-1
sound/soc/samsung/speyside.c
sound/soc/samsung/speyside.c
+4
-2
sound/soc/soc-core.c
sound/soc/soc-core.c
+259
-363
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+2
-1
sound/soc/soc-generic-dmaengine-pcm.c
sound/soc/soc-generic-dmaengine-pcm.c
+3
-1
sound/soc/soc-io.c
sound/soc/soc-io.c
+0
-28
No files found.
include/sound/soc-dapm.h
View file @
5bcaca4b
...
...
@@ -593,7 +593,6 @@ struct snd_soc_dapm_context {
struct
device
*
dev
;
/* from parent - for debug */
struct
snd_soc_component
*
component
;
/* parent component */
struct
snd_soc_codec
*
codec
;
/* parent codec */
struct
snd_soc_card
*
card
;
/* parent card */
/* used during DAPM updates */
...
...
include/sound/soc.h
View file @
5bcaca4b
...
...
@@ -690,6 +690,17 @@ struct snd_soc_compr_ops {
struct
snd_soc_component_driver
{
const
char
*
name
;
/* Default control and setup, added after probe() is run */
const
struct
snd_kcontrol_new
*
controls
;
unsigned
int
num_controls
;
const
struct
snd_soc_dapm_widget
*
dapm_widgets
;
unsigned
int
num_dapm_widgets
;
const
struct
snd_soc_dapm_route
*
dapm_routes
;
unsigned
int
num_dapm_routes
;
int
(
*
probe
)(
struct
snd_soc_component
*
);
void
(
*
remove
)(
struct
snd_soc_component
*
);
/* DT */
int
(
*
of_xlate_dai_name
)(
struct
snd_soc_component
*
component
,
struct
of_phandle_args
*
args
,
...
...
@@ -697,6 +708,10 @@ struct snd_soc_component_driver {
void
(
*
seq_notifier
)(
struct
snd_soc_component
*
,
enum
snd_soc_dapm_type
,
int
subseq
);
int
(
*
stream_event
)(
struct
snd_soc_component
*
,
int
event
);
/* probe ordering - for components with runtime dependencies */
int
probe_order
;
int
remove_order
;
};
struct
snd_soc_component
{
...
...
@@ -710,6 +725,7 @@ struct snd_soc_component {
unsigned
int
ignore_pmdown_time
:
1
;
/* pmdown_time is ignored at stop */
unsigned
int
registered_as_component
:
1
;
unsigned
int
probed
:
1
;
struct
list_head
list
;
...
...
@@ -728,9 +744,35 @@ struct snd_soc_component {
struct
mutex
io_mutex
;
#ifdef CONFIG_DEBUG_FS
struct
dentry
*
debugfs_root
;
#endif
/*
* DO NOT use any of the fields below in drivers, they are temporary and
* are going to be removed again soon. If you use them in driver code the
* driver will be marked as BROKEN when these fields are removed.
*/
/* Don't use these, use snd_soc_component_get_dapm() */
struct
snd_soc_dapm_context
dapm
;
struct
snd_soc_dapm_context
*
dapm_ptr
;
const
struct
snd_kcontrol_new
*
controls
;
unsigned
int
num_controls
;
const
struct
snd_soc_dapm_widget
*
dapm_widgets
;
unsigned
int
num_dapm_widgets
;
const
struct
snd_soc_dapm_route
*
dapm_routes
;
unsigned
int
num_dapm_routes
;
struct
snd_soc_codec
*
codec
;
int
(
*
probe
)(
struct
snd_soc_component
*
);
void
(
*
remove
)(
struct
snd_soc_component
*
);
#ifdef CONFIG_DEBUG_FS
void
(
*
init_debugfs
)(
struct
snd_soc_component
*
component
);
const
char
*
debugfs_prefix
;
#endif
};
/* SoC Audio Codec device */
...
...
@@ -746,11 +788,9 @@ struct snd_soc_codec {
struct
snd_ac97
*
ac97
;
/* for ad-hoc ac97 devices */
unsigned
int
cache_bypass
:
1
;
/* Suppress access to the cache */
unsigned
int
suspended
:
1
;
/* Codec is in suspend PM state */
unsigned
int
probed
:
1
;
/* Codec has been probed */
unsigned
int
ac97_registered
:
1
;
/* Codec has been AC97 registered */
unsigned
int
ac97_created
:
1
;
/* Codec has been created by SoC */
unsigned
int
cache_init
:
1
;
/* codec cache has been initialized */
u32
cache_only
;
/* Suppress writes to hardware */
u32
cache_sync
;
/* Cache needs to be synced to hardware */
/* codec IO */
...
...
@@ -766,7 +806,6 @@ struct snd_soc_codec {
struct
snd_soc_dapm_context
dapm
;
#ifdef CONFIG_DEBUG_FS
struct
dentry
*
debugfs_codec_root
;
struct
dentry
*
debugfs_reg
;
#endif
};
...
...
@@ -813,10 +852,6 @@ struct snd_soc_codec_driver {
enum
snd_soc_dapm_type
,
int
);
bool
ignore_pmdown_time
;
/* Doesn't benefit from pmdown delay */
/* probe ordering - for components with runtime dependencies */
int
probe_order
;
int
remove_order
;
};
/* SoC platform interface */
...
...
@@ -832,14 +867,6 @@ struct snd_soc_platform_driver {
int
(
*
pcm_new
)(
struct
snd_soc_pcm_runtime
*
);
void
(
*
pcm_free
)(
struct
snd_pcm
*
);
/* Default control and setup, added after probe() is run */
const
struct
snd_kcontrol_new
*
controls
;
int
num_controls
;
const
struct
snd_soc_dapm_widget
*
dapm_widgets
;
int
num_dapm_widgets
;
const
struct
snd_soc_dapm_route
*
dapm_routes
;
int
num_dapm_routes
;
/*
* For platform caused delay reporting.
* Optional.
...
...
@@ -853,13 +880,6 @@ struct snd_soc_platform_driver {
/* platform stream compress ops */
const
struct
snd_compr_ops
*
compr_ops
;
/* probe ordering - for components with runtime dependencies */
int
probe_order
;
int
remove_order
;
/* platform IO - used for platform DAPM */
unsigned
int
(
*
read
)(
struct
snd_soc_platform
*
,
unsigned
int
);
int
(
*
write
)(
struct
snd_soc_platform
*
,
unsigned
int
,
unsigned
int
);
int
(
*
bespoke_trigger
)(
struct
snd_pcm_substream
*
,
int
);
};
...
...
@@ -874,15 +894,10 @@ struct snd_soc_platform {
const
struct
snd_soc_platform_driver
*
driver
;
unsigned
int
suspended
:
1
;
/* platform is suspended */
unsigned
int
probed
:
1
;
struct
list_head
list
;
struct
snd_soc_component
component
;
#ifdef CONFIG_DEBUG_FS
struct
dentry
*
debugfs_platform_root
;
#endif
};
struct
snd_soc_dai_link
{
...
...
@@ -994,7 +1009,7 @@ struct snd_soc_aux_dev {
const
struct
device_node
*
codec_of_node
;
/* codec/machine specific init - e.g. add machine controls */
int
(
*
init
)(
struct
snd_soc_
dapm_context
*
dapm
);
int
(
*
init
)(
struct
snd_soc_
component
*
component
);
};
/* SoC card */
...
...
@@ -1112,6 +1127,7 @@ struct snd_soc_pcm_runtime {
struct
snd_soc_platform
*
platform
;
struct
snd_soc_dai
*
codec_dai
;
struct
snd_soc_dai
*
cpu_dai
;
struct
snd_soc_component
*
component
;
/* Only valid for AUX dev rtds */
struct
snd_soc_dai
**
codec_dais
;
unsigned
int
num_codecs
;
...
...
@@ -1260,9 +1276,6 @@ void snd_soc_component_async_complete(struct snd_soc_component *component);
int
snd_soc_component_test_bits
(
struct
snd_soc_component
*
component
,
unsigned
int
reg
,
unsigned
int
mask
,
unsigned
int
value
);
int
snd_soc_component_init_io
(
struct
snd_soc_component
*
component
,
struct
regmap
*
regmap
);
/* device driver data */
static
inline
void
snd_soc_card_set_drvdata
(
struct
snd_soc_card
*
card
,
...
...
@@ -1276,26 +1289,37 @@ static inline void *snd_soc_card_get_drvdata(struct snd_soc_card *card)
return
card
->
drvdata
;
}
static
inline
void
snd_soc_component_set_drvdata
(
struct
snd_soc_component
*
c
,
void
*
data
)
{
dev_set_drvdata
(
c
->
dev
,
data
);
}
static
inline
void
*
snd_soc_component_get_drvdata
(
struct
snd_soc_component
*
c
)
{
return
dev_get_drvdata
(
c
->
dev
);
}
static
inline
void
snd_soc_codec_set_drvdata
(
struct
snd_soc_codec
*
codec
,
void
*
data
)
{
dev_set_drvdata
(
codec
->
dev
,
data
);
snd_soc_component_set_drvdata
(
&
codec
->
component
,
data
);
}
static
inline
void
*
snd_soc_codec_get_drvdata
(
struct
snd_soc_codec
*
codec
)
{
return
dev_get_drvdata
(
codec
->
dev
);
return
snd_soc_component_get_drvdata
(
&
codec
->
component
);
}
static
inline
void
snd_soc_platform_set_drvdata
(
struct
snd_soc_platform
*
platform
,
void
*
data
)
{
dev_set_drvdata
(
platform
->
dev
,
data
);
snd_soc_component_set_drvdata
(
&
platform
->
component
,
data
);
}
static
inline
void
*
snd_soc_platform_get_drvdata
(
struct
snd_soc_platform
*
platform
)
{
return
dev_get_drvdata
(
platform
->
dev
);
return
snd_soc_component_get_drvdata
(
&
platform
->
component
);
}
static
inline
void
snd_soc_pcm_set_drvdata
(
struct
snd_soc_pcm_runtime
*
rtd
,
...
...
sound/soc/codecs/wm8350.c
View file @
5bcaca4b
...
...
@@ -212,7 +212,7 @@ static void wm8350_pga_work(struct work_struct *work)
{
struct
snd_soc_dapm_context
*
dapm
=
container_of
(
work
,
struct
snd_soc_dapm_context
,
delayed_work
.
work
);
struct
snd_soc_codec
*
codec
=
dapm
->
codec
;
struct
snd_soc_codec
*
codec
=
snd_soc_dapm_to_codec
(
dapm
)
;
struct
wm8350_data
*
wm8350_data
=
snd_soc_codec_get_drvdata
(
codec
);
struct
wm8350_output
*
out1
=
&
wm8350_data
->
out1
,
*
out2
=
&
wm8350_data
->
out2
;
...
...
sound/soc/codecs/wm8753.c
View file @
5bcaca4b
...
...
@@ -1433,7 +1433,7 @@ static void wm8753_work(struct work_struct *work)
struct
snd_soc_dapm_context
*
dapm
=
container_of
(
work
,
struct
snd_soc_dapm_context
,
delayed_work
.
work
);
struct
snd_soc_codec
*
codec
=
dapm
->
codec
;
struct
snd_soc_codec
*
codec
=
snd_soc_dapm_to_codec
(
dapm
)
;
wm8753_set_bias_level
(
codec
,
dapm
->
bias_level
);
}
...
...
sound/soc/codecs/wm8971.c
View file @
5bcaca4b
...
...
@@ -615,7 +615,7 @@ static void wm8971_work(struct work_struct *work)
struct
snd_soc_dapm_context
*
dapm
=
container_of
(
work
,
struct
snd_soc_dapm_context
,
delayed_work
.
work
);
struct
snd_soc_codec
*
codec
=
dapm
->
codec
;
struct
snd_soc_codec
*
codec
=
snd_soc_dapm_to_codec
(
dapm
)
;
wm8971_set_bias_level
(
codec
,
codec
->
dapm
.
bias_level
);
}
...
...
sound/soc/intel/Makefile
View file @
5bcaca4b
...
...
@@ -2,7 +2,8 @@
snd-soc-sst-dsp-objs
:=
sst-dsp.o sst-firmware.o
snd-soc-sst-acpi-objs
:=
sst-acpi.o
snd-soc-sst-mfld-platform-objs
:=
sst-mfld-platform-pcm.o sst-mfld-platform-compress.o
snd-soc-sst-mfld-platform-objs
:=
sst-mfld-platform-pcm.o
\
sst-mfld-platform-compress.o sst-atom-controls.o
snd-soc-mfld-machine-objs
:=
mfld_machine.o
obj-$(CONFIG_SND_SST_MFLD_PLATFORM)
+=
snd-soc-sst-mfld-platform.o
...
...
sound/soc/intel/sst-atom-controls.c
0 → 100644
View file @
5bcaca4b
/*
* sst-atom-controls.c - Intel MID Platform driver DPCM ALSA controls for Mrfld
*
* Copyright (C) 2013-14 Intel Corp
* Author: Omair Mohammed Abdullah <omair.m.abdullah@intel.com>
* Vinod Koul <vinod.koul@intel.com>
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/slab.h>
#include <sound/soc.h>
#include <sound/tlv.h>
#include "sst-mfld-platform.h"
#include "sst-atom-controls.h"
int
sst_dsp_init_v2_dpcm
(
struct
snd_soc_platform
*
platform
)
{
int
ret
=
0
;
struct
sst_data
*
drv
=
snd_soc_platform_get_drvdata
(
platform
);
drv
->
byte_stream
=
devm_kzalloc
(
platform
->
dev
,
SST_MAX_BIN_BYTES
,
GFP_KERNEL
);
if
(
!
drv
->
byte_stream
)
return
-
ENOMEM
;
return
ret
;
}
sound/soc/intel/sst-atom-controls.h
View file @
5bcaca4b
/*
* sst-atom-controls.h - Intel MID Platform driver header file
*
* Copyright (C) 2013-14 Intel Corp
* Author: Ramesh Babu <ramesh.babu.koul@intel.com>
* Omair M Abdullah <omair.m.abdullah@intel.com>
...
...
@@ -18,13 +20,293 @@
*
*/
#ifndef __SST_
CONTROLS_V2
_H__
#define __SST_
CONTROLS_V2
_H__
#ifndef __SST_
ATOM_CONTROLS
_H__
#define __SST_
ATOM_CONTROLS
_H__
enum
{
MERR_DPCM_AUDIO
=
0
,
MERR_DPCM_COMPR
,
};
/* define a bit for each mixer input */
#define SST_MIX_IP(x) (x)
#define SST_IP_CODEC0 SST_MIX_IP(2)
#define SST_IP_CODEC1 SST_MIX_IP(3)
#define SST_IP_LOOP0 SST_MIX_IP(4)
#define SST_IP_LOOP1 SST_MIX_IP(5)
#define SST_IP_LOOP2 SST_MIX_IP(6)
#define SST_IP_PROBE SST_MIX_IP(7)
#define SST_IP_VOIP SST_MIX_IP(12)
#define SST_IP_PCM0 SST_MIX_IP(13)
#define SST_IP_PCM1 SST_MIX_IP(14)
#define SST_IP_MEDIA0 SST_MIX_IP(17)
#define SST_IP_MEDIA1 SST_MIX_IP(18)
#define SST_IP_MEDIA2 SST_MIX_IP(19)
#define SST_IP_MEDIA3 SST_MIX_IP(20)
#define SST_IP_LAST SST_IP_MEDIA3
#define SST_SWM_INPUT_COUNT (SST_IP_LAST + 1)
#define SST_CMD_SWM_MAX_INPUTS 6
#define SST_PATH_ID_SHIFT 8
#define SST_DEFAULT_LOCATION_ID 0xFFFF
#define SST_DEFAULT_CELL_NBR 0xFF
#define SST_DEFAULT_MODULE_ID 0xFFFF
/*
* Audio DSP Path Ids. Specified by the audio DSP FW
*/
enum
sst_path_index
{
SST_PATH_INDEX_CODEC_OUT0
=
(
0x02
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_CODEC_OUT1
=
(
0x03
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_SPROT_LOOP_OUT
=
(
0x04
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA_LOOP1_OUT
=
(
0x05
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA_LOOP2_OUT
=
(
0x06
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_VOIP_OUT
=
(
0x0C
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_PCM0_OUT
=
(
0x0D
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_PCM1_OUT
=
(
0x0E
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_PCM2_OUT
=
(
0x0F
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA0_OUT
=
(
0x12
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA1_OUT
=
(
0x13
<<
SST_PATH_ID_SHIFT
),
/* Start of input paths */
SST_PATH_INDEX_CODEC_IN0
=
(
0x82
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_CODEC_IN1
=
(
0x83
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_SPROT_LOOP_IN
=
(
0x84
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA_LOOP1_IN
=
(
0x85
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA_LOOP2_IN
=
(
0x86
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_VOIP_IN
=
(
0x8C
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_PCM0_IN
=
(
0x8D
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_PCM1_IN
=
(
0x8E
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA0_IN
=
(
0x8F
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA1_IN
=
(
0x90
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA2_IN
=
(
0x91
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_MEDIA3_IN
=
(
0x9C
<<
SST_PATH_ID_SHIFT
),
SST_PATH_INDEX_RESERVED
=
(
0xFF
<<
SST_PATH_ID_SHIFT
),
};
/*
* path IDs
*/
enum
sst_swm_inputs
{
SST_SWM_IN_CODEC0
=
(
SST_PATH_INDEX_CODEC_IN0
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_IN_CODEC1
=
(
SST_PATH_INDEX_CODEC_IN1
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_IN_SPROT_LOOP
=
(
SST_PATH_INDEX_SPROT_LOOP_IN
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_IN_MEDIA_LOOP1
=
(
SST_PATH_INDEX_MEDIA_LOOP1_IN
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_IN_MEDIA_LOOP2
=
(
SST_PATH_INDEX_MEDIA_LOOP2_IN
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_IN_VOIP
=
(
SST_PATH_INDEX_VOIP_IN
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_IN_PCM0
=
(
SST_PATH_INDEX_PCM0_IN
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_IN_PCM1
=
(
SST_PATH_INDEX_PCM1_IN
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_IN_MEDIA0
=
(
SST_PATH_INDEX_MEDIA0_IN
|
SST_DEFAULT_CELL_NBR
),
/* Part of Media Mixer */
SST_SWM_IN_MEDIA1
=
(
SST_PATH_INDEX_MEDIA1_IN
|
SST_DEFAULT_CELL_NBR
),
/* Part of Media Mixer */
SST_SWM_IN_MEDIA2
=
(
SST_PATH_INDEX_MEDIA2_IN
|
SST_DEFAULT_CELL_NBR
),
/* Part of Media Mixer */
SST_SWM_IN_MEDIA3
=
(
SST_PATH_INDEX_MEDIA3_IN
|
SST_DEFAULT_CELL_NBR
),
/* Part of Media Mixer */
SST_SWM_IN_END
=
(
SST_PATH_INDEX_RESERVED
|
SST_DEFAULT_CELL_NBR
)
};
/*
* path IDs
*/
enum
sst_swm_outputs
{
SST_SWM_OUT_CODEC0
=
(
SST_PATH_INDEX_CODEC_OUT0
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_OUT_CODEC1
=
(
SST_PATH_INDEX_CODEC_OUT1
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_OUT_SPROT_LOOP
=
(
SST_PATH_INDEX_SPROT_LOOP_OUT
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_OUT_MEDIA_LOOP1
=
(
SST_PATH_INDEX_MEDIA_LOOP1_OUT
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_OUT_MEDIA_LOOP2
=
(
SST_PATH_INDEX_MEDIA_LOOP2_OUT
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_OUT_VOIP
=
(
SST_PATH_INDEX_VOIP_OUT
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_OUT_PCM0
=
(
SST_PATH_INDEX_PCM0_OUT
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_OUT_PCM1
=
(
SST_PATH_INDEX_PCM1_OUT
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_OUT_PCM2
=
(
SST_PATH_INDEX_PCM2_OUT
|
SST_DEFAULT_CELL_NBR
),
SST_SWM_OUT_MEDIA0
=
(
SST_PATH_INDEX_MEDIA0_OUT
|
SST_DEFAULT_CELL_NBR
),
/* Part of Media Mixer */
SST_SWM_OUT_MEDIA1
=
(
SST_PATH_INDEX_MEDIA1_OUT
|
SST_DEFAULT_CELL_NBR
),
/* Part of Media Mixer */
SST_SWM_OUT_END
=
(
SST_PATH_INDEX_RESERVED
|
SST_DEFAULT_CELL_NBR
),
};
enum
sst_ipc_msg
{
SST_IPC_IA_CMD
=
1
,
SST_IPC_IA_SET_PARAMS
,
SST_IPC_IA_GET_PARAMS
,
};
enum
sst_cmd_type
{
SST_CMD_BYTES_SET
=
1
,
SST_CMD_BYTES_GET
=
2
,
};
enum
sst_task
{
SST_TASK_SBA
=
1
,
SST_TASK_MMX
,
};
enum
sst_type
{
SST_TYPE_CMD
=
1
,
SST_TYPE_PARAMS
,
};
enum
sst_flag
{
SST_FLAG_BLOCKED
=
1
,
SST_FLAG_NONBLOCK
,
};
/*
* Enumeration for indexing the gain cells in VB_SET_GAIN DSP command
*/
enum
sst_gain_index
{
/* GAIN IDs for SB task start here */
SST_GAIN_INDEX_CODEC_OUT0
,
SST_GAIN_INDEX_CODEC_OUT1
,
SST_GAIN_INDEX_CODEC_IN0
,
SST_GAIN_INDEX_CODEC_IN1
,
SST_GAIN_INDEX_SPROT_LOOP_OUT
,
SST_GAIN_INDEX_MEDIA_LOOP1_OUT
,
SST_GAIN_INDEX_MEDIA_LOOP2_OUT
,
SST_GAIN_INDEX_PCM0_IN_LEFT
,
SST_GAIN_INDEX_PCM0_IN_RIGHT
,
SST_GAIN_INDEX_PCM1_OUT_LEFT
,
SST_GAIN_INDEX_PCM1_OUT_RIGHT
,
SST_GAIN_INDEX_PCM1_IN_LEFT
,
SST_GAIN_INDEX_PCM1_IN_RIGHT
,
SST_GAIN_INDEX_PCM2_OUT_LEFT
,
SST_GAIN_INDEX_PCM2_OUT_RIGHT
,
SST_GAIN_INDEX_VOIP_OUT
,
SST_GAIN_INDEX_VOIP_IN
,
/* Gain IDs for MMX task start here */
SST_GAIN_INDEX_MEDIA0_IN_LEFT
,
SST_GAIN_INDEX_MEDIA0_IN_RIGHT
,
SST_GAIN_INDEX_MEDIA1_IN_LEFT
,
SST_GAIN_INDEX_MEDIA1_IN_RIGHT
,
SST_GAIN_INDEX_MEDIA2_IN_LEFT
,
SST_GAIN_INDEX_MEDIA2_IN_RIGHT
,
SST_GAIN_INDEX_GAIN_END
};
/*
* Audio DSP module IDs specified by FW spec
* TODO: Update with all modules
*/
enum
sst_module_id
{
SST_MODULE_ID_PCM
=
0x0001
,
SST_MODULE_ID_MP3
=
0x0002
,
SST_MODULE_ID_MP24
=
0x0003
,
SST_MODULE_ID_AAC
=
0x0004
,
SST_MODULE_ID_AACP
=
0x0005
,
SST_MODULE_ID_EAACP
=
0x0006
,
SST_MODULE_ID_WMA9
=
0x0007
,
SST_MODULE_ID_WMA10
=
0x0008
,
SST_MODULE_ID_WMA10P
=
0x0009
,
SST_MODULE_ID_RA
=
0x000A
,
SST_MODULE_ID_DDAC3
=
0x000B
,
SST_MODULE_ID_TRUE_HD
=
0x000C
,
SST_MODULE_ID_HD_PLUS
=
0x000D
,
SST_MODULE_ID_SRC
=
0x0064
,
SST_MODULE_ID_DOWNMIX
=
0x0066
,
SST_MODULE_ID_GAIN_CELL
=
0x0067
,
SST_MODULE_ID_SPROT
=
0x006D
,
SST_MODULE_ID_BASS_BOOST
=
0x006E
,
SST_MODULE_ID_STEREO_WDNG
=
0x006F
,
SST_MODULE_ID_AV_REMOVAL
=
0x0070
,
SST_MODULE_ID_MIC_EQ
=
0x0071
,
SST_MODULE_ID_SPL
=
0x0072
,
SST_MODULE_ID_ALGO_VTSV
=
0x0073
,
SST_MODULE_ID_NR
=
0x0076
,
SST_MODULE_ID_BWX
=
0x0077
,
SST_MODULE_ID_DRP
=
0x0078
,
SST_MODULE_ID_MDRP
=
0x0079
,
SST_MODULE_ID_ANA
=
0x007A
,
SST_MODULE_ID_AEC
=
0x007B
,
SST_MODULE_ID_NR_SNS
=
0x007C
,
SST_MODULE_ID_SER
=
0x007D
,
SST_MODULE_ID_AGC
=
0x007E
,
SST_MODULE_ID_CNI
=
0x007F
,
SST_MODULE_ID_CONTEXT_ALGO_AWARE
=
0x0080
,
SST_MODULE_ID_FIR_24
=
0x0081
,
SST_MODULE_ID_IIR_24
=
0x0082
,
SST_MODULE_ID_ASRC
=
0x0083
,
SST_MODULE_ID_TONE_GEN
=
0x0084
,
SST_MODULE_ID_BMF
=
0x0086
,
SST_MODULE_ID_EDL
=
0x0087
,
SST_MODULE_ID_GLC
=
0x0088
,
SST_MODULE_ID_FIR_16
=
0x0089
,
SST_MODULE_ID_IIR_16
=
0x008A
,
SST_MODULE_ID_DNR
=
0x008B
,
SST_MODULE_ID_VIRTUALIZER
=
0x008C
,
SST_MODULE_ID_VISUALIZATION
=
0x008D
,
SST_MODULE_ID_LOUDNESS_OPTIMIZER
=
0x008E
,
SST_MODULE_ID_REVERBERATION
=
0x008F
,
SST_MODULE_ID_CNI_TX
=
0x0090
,
SST_MODULE_ID_REF_LINE
=
0x0091
,
SST_MODULE_ID_VOLUME
=
0x0092
,
SST_MODULE_ID_FILT_DCR
=
0x0094
,
SST_MODULE_ID_SLV
=
0x009A
,
SST_MODULE_ID_NLF
=
0x009B
,
SST_MODULE_ID_TNR
=
0x009C
,
SST_MODULE_ID_WNR
=
0x009D
,
SST_MODULE_ID_LOG
=
0xFF00
,
SST_MODULE_ID_TASK
=
0xFFFF
,
};
enum
sst_cmd
{
SBA_IDLE
=
14
,
SBA_VB_SET_SPEECH_PATH
=
26
,
MMX_SET_GAIN
=
33
,
SBA_VB_SET_GAIN
=
33
,
FBA_VB_RX_CNI
=
35
,
MMX_SET_GAIN_TIMECONST
=
36
,
SBA_VB_SET_TIMECONST
=
36
,
SBA_VB_START
=
85
,
SBA_SET_SWM
=
114
,
SBA_SET_MDRP
=
116
,
SBA_HW_SET_SSP
=
117
,
SBA_SET_MEDIA_LOOP_MAP
=
118
,
SBA_SET_MEDIA_PATH
=
119
,
MMX_SET_MEDIA_PATH
=
119
,
SBA_VB_LPRO
=
126
,
SBA_VB_SET_FIR
=
128
,
SBA_VB_SET_IIR
=
129
,
SBA_SET_SSP_SLOT_MAP
=
130
,
};
enum
sst_dsp_switch
{
SST_SWITCH_OFF
=
0
,
SST_SWITCH_ON
=
3
,
};
enum
sst_path_switch
{
SST_PATH_OFF
=
0
,
SST_PATH_ON
=
1
,
};
enum
sst_swm_state
{
SST_SWM_OFF
=
0
,
SST_SWM_ON
=
3
,
};
#endif
sound/soc/intel/sst-haswell-pcm.c
View file @
5bcaca4b
...
...
@@ -138,11 +138,10 @@ static inline unsigned int hsw_ipc_to_mixer(u32 value)
static
int
hsw_stream_volume_put
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
struct
snd_soc_platform
*
platform
=
snd_soc_kcontrol_platform
(
kcontrol
);
struct
snd_soc_component
*
cmpnt
=
snd_soc_kcontrol_component
(
kcontrol
);
struct
hsw_priv_data
*
pdata
=
snd_soc_component_get_drvdata
(
cmpnt
);
struct
soc_mixer_control
*
mc
=
(
struct
soc_mixer_control
*
)
kcontrol
->
private_value
;
struct
hsw_priv_data
*
pdata
=
snd_soc_platform_get_drvdata
(
platform
);
struct
hsw_pcm_data
*
pcm_data
=
&
pdata
->
pcm
[
mc
->
reg
];
struct
sst_hsw
*
hsw
=
pdata
->
hsw
;
u32
volume
;
...
...
@@ -176,11 +175,10 @@ static int hsw_stream_volume_put(struct snd_kcontrol *kcontrol,
static
int
hsw_stream_volume_get
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
struct
snd_soc_platform
*
platform
=
snd_soc_kcontrol_platform
(
kcontrol
);
struct
snd_soc_component
*
cmpnt
=
snd_soc_kcontrol_component
(
kcontrol
);
struct
hsw_priv_data
*
pdata
=
snd_soc_component_get_drvdata
(
cmpnt
);
struct
soc_mixer_control
*
mc
=
(
struct
soc_mixer_control
*
)
kcontrol
->
private_value
;
struct
hsw_priv_data
*
pdata
=
snd_soc_platform_get_drvdata
(
platform
);
struct
hsw_pcm_data
*
pcm_data
=
&
pdata
->
pcm
[
mc
->
reg
];
struct
sst_hsw
*
hsw
=
pdata
->
hsw
;
u32
volume
;
...
...
@@ -208,8 +206,8 @@ static int hsw_stream_volume_get(struct snd_kcontrol *kcontrol,
static
int
hsw_volume_put
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
struct
snd_soc_
platform
*
platform
=
snd_soc_kcontrol_platform
(
kcontrol
);
struct
hsw_priv_data
*
pdata
=
snd_soc_
platform_get_drvdata
(
platform
);
struct
snd_soc_
component
*
cmpnt
=
snd_soc_kcontrol_component
(
kcontrol
);
struct
hsw_priv_data
*
pdata
=
snd_soc_
component_get_drvdata
(
cmpnt
);
struct
sst_hsw
*
hsw
=
pdata
->
hsw
;
u32
volume
;
...
...
@@ -233,8 +231,8 @@ static int hsw_volume_put(struct snd_kcontrol *kcontrol,
static
int
hsw_volume_get
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
struct
snd_soc_
platform
*
platform
=
snd_soc_kcontrol_platform
(
kcontrol
);
struct
hsw_priv_data
*
pdata
=
snd_soc_
platform_get_drvdata
(
platform
);
struct
snd_soc_
component
*
cmpnt
=
snd_soc_kcontrol_component
(
kcontrol
);
struct
hsw_priv_data
*
pdata
=
snd_soc_
component_get_drvdata
(
cmpnt
);
struct
sst_hsw
*
hsw
=
pdata
->
hsw
;
unsigned
int
volume
=
0
;
...
...
@@ -778,20 +776,11 @@ static const struct snd_soc_dapm_route graph[] = {
static
int
hsw_pcm_probe
(
struct
snd_soc_platform
*
platform
)
{
struct
hsw_priv_data
*
priv_data
=
snd_soc_platform_get_drvdata
(
platform
);
struct
sst_pdata
*
pdata
=
dev_get_platdata
(
platform
->
dev
);
struct
hsw_priv_data
*
priv_data
;
struct
device
*
dma_dev
;
struct
device
*
dma_dev
=
pdata
->
dma_dev
;
int
i
,
ret
=
0
;
if
(
!
pdata
)
return
-
ENODEV
;
dma_dev
=
pdata
->
dma_dev
;
priv_data
=
devm_kzalloc
(
platform
->
dev
,
sizeof
(
*
priv_data
),
GFP_KERNEL
);
priv_data
->
hsw
=
pdata
->
dsp
;
snd_soc_platform_set_drvdata
(
platform
,
priv_data
);
/* allocate DSP buffer page tables */
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
hsw_dais
);
i
++
)
{
...
...
@@ -848,27 +837,38 @@ static struct snd_soc_platform_driver hsw_soc_platform = {
.
ops
=
&
hsw_pcm_ops
,
.
pcm_new
=
hsw_pcm_new
,
.
pcm_free
=
hsw_pcm_free
,
.
controls
=
hsw_volume_controls
,
.
num_controls
=
ARRAY_SIZE
(
hsw_volume_controls
),
.
dapm_widgets
=
widgets
,
.
num_dapm_widgets
=
ARRAY_SIZE
(
widgets
),
.
dapm_routes
=
graph
,
.
num_dapm_routes
=
ARRAY_SIZE
(
graph
),
};
static
const
struct
snd_soc_component_driver
hsw_dai_component
=
{
.
name
=
"haswell-dai"
,
.
name
=
"haswell-dai"
,
.
controls
=
hsw_volume_controls
,
.
num_controls
=
ARRAY_SIZE
(
hsw_volume_controls
),
.
dapm_widgets
=
widgets
,
.
num_dapm_widgets
=
ARRAY_SIZE
(
widgets
),
.
dapm_routes
=
graph
,
.
num_dapm_routes
=
ARRAY_SIZE
(
graph
),
};
static
int
hsw_pcm_dev_probe
(
struct
platform_device
*
pdev
)
{
struct
sst_pdata
*
sst_pdata
=
dev_get_platdata
(
&
pdev
->
dev
);
struct
hsw_priv_data
*
priv_data
;
int
ret
;
if
(
!
sst_pdata
)
return
-
EINVAL
;
priv_data
=
devm_kzalloc
(
&
pdev
->
dev
,
sizeof
(
*
priv_data
),
GFP_KERNEL
);
if
(
!
priv_data
)
return
-
ENOMEM
;
ret
=
sst_hsw_dsp_init
(
&
pdev
->
dev
,
sst_pdata
);
if
(
ret
<
0
)
return
-
ENODEV
;
priv_data
->
hsw
=
sst_pdata
->
dsp
;
platform_set_drvdata
(
pdev
,
priv_data
);
ret
=
snd_soc_register_platform
(
&
pdev
->
dev
,
&
hsw_soc_platform
);
if
(
ret
<
0
)
goto
err_plat
;
...
...
sound/soc/intel/sst-mfld-platform-compress.c
View file @
5bcaca4b
...
...
@@ -86,7 +86,7 @@ static int sst_platform_compr_free(struct snd_compr_stream *cstream)
/*need to check*/
str_id
=
stream
->
id
;
if
(
str_id
)
ret_val
=
stream
->
compr_ops
->
close
(
str_id
);
ret_val
=
stream
->
compr_ops
->
close
(
s
st
->
dev
,
s
tr_id
);
module_put
(
sst
->
dev
->
driver
->
owner
);
kfree
(
stream
);
pr_debug
(
"%s: %d
\n
"
,
__func__
,
ret_val
);
...
...
@@ -158,7 +158,7 @@ static int sst_platform_compr_set_params(struct snd_compr_stream *cstream,
cb
.
drain_cb_param
=
cstream
;
cb
.
drain_notify
=
sst_drain_notify
;
retval
=
stream
->
compr_ops
->
open
(
&
str_params
,
&
cb
);
retval
=
stream
->
compr_ops
->
open
(
sst
->
dev
,
&
str_params
,
&
cb
);
if
(
retval
<
0
)
{
pr_err
(
"stream allocation failed %d
\n
"
,
retval
);
return
retval
;
...
...
@@ -170,10 +170,30 @@ static int sst_platform_compr_set_params(struct snd_compr_stream *cstream,
static
int
sst_platform_compr_trigger
(
struct
snd_compr_stream
*
cstream
,
int
cmd
)
{
struct
sst_runtime_stream
*
stream
=
cstream
->
runtime
->
private_data
;
return
stream
->
compr_ops
->
control
(
cmd
,
stream
->
id
);
struct
sst_runtime_stream
*
stream
=
cstream
->
runtime
->
private_data
;
switch
(
cmd
)
{
case
SNDRV_PCM_TRIGGER_START
:
if
(
stream
->
compr_ops
->
stream_start
)
return
stream
->
compr_ops
->
stream_start
(
sst
->
dev
,
stream
->
id
);
case
SNDRV_PCM_TRIGGER_STOP
:
if
(
stream
->
compr_ops
->
stream_drop
)
return
stream
->
compr_ops
->
stream_drop
(
sst
->
dev
,
stream
->
id
);
case
SND_COMPR_TRIGGER_DRAIN
:
if
(
stream
->
compr_ops
->
stream_drain
)
return
stream
->
compr_ops
->
stream_drain
(
sst
->
dev
,
stream
->
id
);
case
SND_COMPR_TRIGGER_PARTIAL_DRAIN
:
if
(
stream
->
compr_ops
->
stream_partial_drain
)
return
stream
->
compr_ops
->
stream_partial_drain
(
sst
->
dev
,
stream
->
id
);
case
SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
if
(
stream
->
compr_ops
->
stream_pause
)
return
stream
->
compr_ops
->
stream_pause
(
sst
->
dev
,
stream
->
id
);
case
SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
if
(
stream
->
compr_ops
->
stream_pause_release
)
return
stream
->
compr_ops
->
stream_pause_release
(
sst
->
dev
,
stream
->
id
);
default:
return
-
EINVAL
;
}
}
static
int
sst_platform_compr_pointer
(
struct
snd_compr_stream
*
cstream
,
...
...
@@ -182,7 +202,7 @@ static int sst_platform_compr_pointer(struct snd_compr_stream *cstream,
struct
sst_runtime_stream
*
stream
;
stream
=
cstream
->
runtime
->
private_data
;
stream
->
compr_ops
->
tstamp
(
stream
->
id
,
tstamp
);
stream
->
compr_ops
->
tstamp
(
s
st
->
dev
,
s
tream
->
id
,
tstamp
);
tstamp
->
byte_offset
=
tstamp
->
copied_total
%
(
u32
)
cstream
->
runtime
->
buffer_size
;
pr_debug
(
"calc bytes offset/copied bytes as %d
\n
"
,
tstamp
->
byte_offset
);
...
...
@@ -195,7 +215,7 @@ static int sst_platform_compr_ack(struct snd_compr_stream *cstream,
struct
sst_runtime_stream
*
stream
;
stream
=
cstream
->
runtime
->
private_data
;
stream
->
compr_ops
->
ack
(
stream
->
id
,
(
unsigned
long
)
bytes
);
stream
->
compr_ops
->
ack
(
s
st
->
dev
,
s
tream
->
id
,
(
unsigned
long
)
bytes
);
stream
->
bytes_written
+=
bytes
;
return
0
;
...
...
@@ -225,7 +245,7 @@ static int sst_platform_compr_set_metadata(struct snd_compr_stream *cstream,
struct
sst_runtime_stream
*
stream
=
cstream
->
runtime
->
private_data
;
return
stream
->
compr_ops
->
set_metadata
(
stream
->
id
,
metadata
);
return
stream
->
compr_ops
->
set_metadata
(
s
st
->
dev
,
s
tream
->
id
,
metadata
);
}
struct
snd_compr_ops
sst_platform_compr_ops
=
{
...
...
sound/soc/intel/sst-mfld-platform-pcm.c
View file @
5bcaca4b
...
...
@@ -277,7 +277,7 @@ static int sst_platform_alloc_stream(struct snd_pcm_substream *substream,
stream
->
stream_info
.
str_id
=
str_params
.
stream_id
;
ret_val
=
stream
->
ops
->
open
(
&
str_params
);
ret_val
=
stream
->
ops
->
open
(
sst
->
dev
,
&
str_params
);
if
(
ret_val
<=
0
)
return
ret_val
;
...
...
@@ -314,14 +314,12 @@ static int sst_platform_init_stream(struct snd_pcm_substream *substream)
stream
->
stream_info
.
arg
=
substream
;
stream
->
stream_info
.
buffer_ptr
=
0
;
stream
->
stream_info
.
sfreq
=
substream
->
runtime
->
rate
;
ret_val
=
stream
->
ops
->
device_control
(
SST_SND_STREAM_INIT
,
&
stream
->
stream_info
);
ret_val
=
stream
->
ops
->
stream_init
(
sst
->
dev
,
&
stream
->
stream_info
);
if
(
ret_val
)
pr_err
(
"control_set ret error %d
\n
"
,
ret_val
);
return
ret_val
;
}
/* end -- helper functions */
static
int
sst_media_open
(
struct
snd_pcm_substream
*
substream
,
struct
snd_soc_dai
*
dai
)
...
...
@@ -373,7 +371,7 @@ static void sst_media_close(struct snd_pcm_substream *substream,
stream
=
substream
->
runtime
->
private_data
;
str_id
=
stream
->
stream_info
.
str_id
;
if
(
str_id
)
ret_val
=
stream
->
ops
->
close
(
str_id
);
ret_val
=
stream
->
ops
->
close
(
s
st
->
dev
,
s
tr_id
);
module_put
(
sst
->
dev
->
driver
->
owner
);
kfree
(
stream
);
}
...
...
@@ -403,8 +401,7 @@ static int sst_media_prepare(struct snd_pcm_substream *substream,
stream
=
substream
->
runtime
->
private_data
;
str_id
=
stream
->
stream_info
.
str_id
;
if
(
stream
->
stream_info
.
str_id
)
{
ret_val
=
stream
->
ops
->
device_control
(
SST_SND_DROP
,
&
str_id
);
ret_val
=
stream
->
ops
->
stream_drop
(
sst
->
dev
,
str_id
);
return
ret_val
;
}
...
...
@@ -461,7 +458,7 @@ static int sst_platform_pcm_trigger(struct snd_pcm_substream *substream,
{
int
ret_val
=
0
,
str_id
;
struct
sst_runtime_stream
*
stream
;
int
st
r_cmd
,
st
atus
;
int
status
;
pr_debug
(
"sst_platform_pcm_trigger called
\n
"
);
stream
=
substream
->
runtime
->
private_data
;
...
...
@@ -469,29 +466,29 @@ static int sst_platform_pcm_trigger(struct snd_pcm_substream *substream,
switch
(
cmd
)
{
case
SNDRV_PCM_TRIGGER_START
:
pr_debug
(
"sst: Trigger Start
\n
"
);
str_cmd
=
SST_SND_START
;
status
=
SST_PLATFORM_RUNNING
;
stream
->
stream_info
.
arg
=
substream
;
ret_val
=
stream
->
ops
->
stream_start
(
sst
->
dev
,
str_id
);
break
;
case
SNDRV_PCM_TRIGGER_STOP
:
pr_debug
(
"sst: in stop
\n
"
);
str_cmd
=
SST_SND_DROP
;
status
=
SST_PLATFORM_DROPPED
;
ret_val
=
stream
->
ops
->
stream_drop
(
sst
->
dev
,
str_id
);
break
;
case
SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
pr_debug
(
"sst: in pause
\n
"
);
str_cmd
=
SST_SND_PAUSE
;
status
=
SST_PLATFORM_PAUSED
;
ret_val
=
stream
->
ops
->
stream_pause
(
sst
->
dev
,
str_id
);
break
;
case
SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
pr_debug
(
"sst: in pause release
\n
"
);
str_cmd
=
SST_SND_RESUME
;
status
=
SST_PLATFORM_RUNNING
;
ret_val
=
stream
->
ops
->
stream_pause_release
(
sst
->
dev
,
str_id
);
break
;
default:
return
-
EINVAL
;
}
ret_val
=
stream
->
ops
->
device_control
(
str_cmd
,
&
str_id
);
if
(
!
ret_val
)
sst_set_stream_status
(
stream
,
status
);
...
...
@@ -511,8 +508,7 @@ static snd_pcm_uframes_t sst_platform_pcm_pointer
if
(
status
==
SST_PLATFORM_INIT
)
return
0
;
str_info
=
&
stream
->
stream_info
;
ret_val
=
stream
->
ops
->
device_control
(
SST_SND_BUFFER_POINTER
,
str_info
);
ret_val
=
stream
->
ops
->
stream_read_tstamp
(
sst
->
dev
,
str_info
);
if
(
ret_val
)
{
pr_err
(
"sst: error code = %d
\n
"
,
ret_val
);
return
ret_val
;
...
...
@@ -554,7 +550,13 @@ static int sst_pcm_new(struct snd_soc_pcm_runtime *rtd)
return
retval
;
}
static
struct
snd_soc_platform_driver
sst_soc_platform_drv
=
{
static
int
sst_soc_probe
(
struct
snd_soc_platform
*
platform
)
{
return
sst_dsp_init_v2_dpcm
(
platform
);
}
static
struct
snd_soc_platform_driver
sst_soc_platform_drv
=
{
.
probe
=
sst_soc_probe
,
.
ops
=
&
sst_platform_ops
,
.
compr_ops
=
&
sst_platform_compr_ops
,
.
pcm_new
=
sst_pcm_new
,
...
...
sound/soc/intel/sst-mfld-platform.h
View file @
5bcaca4b
...
...
@@ -54,20 +54,6 @@ enum sst_drv_status {
SST_PLATFORM_DROPPED
,
};
enum
sst_controls
{
SST_SND_ALLOC
=
0x00
,
SST_SND_PAUSE
=
0x01
,
SST_SND_RESUME
=
0x02
,
SST_SND_DROP
=
0x03
,
SST_SND_FREE
=
0x04
,
SST_SND_BUFFER_POINTER
=
0x05
,
SST_SND_STREAM_INIT
=
0x06
,
SST_SND_START
=
0x07
,
SST_SET_BYTE_STREAM
=
0x100A
,
SST_GET_BYTE_STREAM
=
0x100B
,
SST_MAX_CONTROLS
=
SST_GET_BYTE_STREAM
,
};
enum
sst_stream_ops
{
STREAM_OPS_PLAYBACK
=
0
,
STREAM_OPS_CAPTURE
,
...
...
@@ -113,24 +99,36 @@ struct sst_compress_cb {
struct
compress_sst_ops
{
const
char
*
name
;
int
(
*
open
)
(
struct
snd_sst_params
*
str_params
,
struct
sst_compress_cb
*
cb
);
int
(
*
control
)
(
unsigned
int
cmd
,
unsigned
int
str_id
);
int
(
*
tstamp
)
(
unsigned
int
str_id
,
struct
snd_compr_tstamp
*
tstamp
);
int
(
*
ack
)
(
unsigned
int
str_id
,
unsigned
long
bytes
);
int
(
*
close
)
(
unsigned
int
str_id
);
int
(
*
get_caps
)
(
struct
snd_compr_caps
*
caps
);
int
(
*
get_codec_caps
)
(
struct
snd_compr_codec_caps
*
codec
);
int
(
*
set_metadata
)
(
unsigned
int
str_id
,
int
(
*
open
)(
struct
device
*
dev
,
struct
snd_sst_params
*
str_params
,
struct
sst_compress_cb
*
cb
);
int
(
*
stream_start
)(
struct
device
*
dev
,
unsigned
int
str_id
);
int
(
*
stream_drop
)(
struct
device
*
dev
,
unsigned
int
str_id
);
int
(
*
stream_drain
)(
struct
device
*
dev
,
unsigned
int
str_id
);
int
(
*
stream_partial_drain
)(
struct
device
*
dev
,
unsigned
int
str_id
);
int
(
*
stream_pause
)(
struct
device
*
dev
,
unsigned
int
str_id
);
int
(
*
stream_pause_release
)(
struct
device
*
dev
,
unsigned
int
str_id
);
int
(
*
tstamp
)(
struct
device
*
dev
,
unsigned
int
str_id
,
struct
snd_compr_tstamp
*
tstamp
);
int
(
*
ack
)(
struct
device
*
dev
,
unsigned
int
str_id
,
unsigned
long
bytes
);
int
(
*
close
)(
struct
device
*
dev
,
unsigned
int
str_id
);
int
(
*
get_caps
)(
struct
snd_compr_caps
*
caps
);
int
(
*
get_codec_caps
)(
struct
snd_compr_codec_caps
*
codec
);
int
(
*
set_metadata
)(
struct
device
*
dev
,
unsigned
int
str_id
,
struct
snd_compr_metadata
*
mdata
);
};
struct
sst_ops
{
int
(
*
open
)
(
struct
snd_sst_params
*
str_param
);
int
(
*
device_control
)
(
int
cmd
,
void
*
arg
);
int
(
*
set_generic_params
)(
enum
sst_controls
cmd
,
void
*
arg
);
int
(
*
close
)
(
unsigned
int
str_id
);
int
(
*
open
)
(
struct
device
*
dev
,
struct
snd_sst_params
*
str_param
);
int
(
*
stream_init
)
(
struct
device
*
dev
,
struct
pcm_stream_info
*
str_info
);
int
(
*
stream_start
)
(
struct
device
*
dev
,
int
str_id
);
int
(
*
stream_drop
)
(
struct
device
*
dev
,
int
str_id
);
int
(
*
stream_pause
)
(
struct
device
*
dev
,
int
str_id
);
int
(
*
stream_pause_release
)
(
struct
device
*
dev
,
int
str_id
);
int
(
*
stream_read_tstamp
)
(
struct
device
*
dev
,
struct
pcm_stream_info
*
str_info
);
int
(
*
send_byte_stream
)(
struct
device
*
dev
,
struct
snd_sst_bytes_v2
*
bytes
);
int
(
*
close
)
(
struct
device
*
dev
,
unsigned
int
str_id
);
};
struct
sst_runtime_stream
{
...
...
@@ -152,6 +150,8 @@ struct sst_device {
};
struct
sst_data
;
int
sst_dsp_init_v2_dpcm
(
struct
snd_soc_platform
*
platform
);
void
sst_set_stream_status
(
struct
sst_runtime_stream
*
stream
,
int
state
);
int
sst_fill_stream_params
(
void
*
substream
,
const
struct
sst_data
*
ctx
,
struct
snd_sst_params
*
str_params
,
bool
is_compress
);
...
...
@@ -166,6 +166,7 @@ struct sst_algo_int_control_v2 {
struct
sst_data
{
struct
platform_device
*
pdev
;
struct
sst_platform_data
*
pdata
;
char
*
byte_stream
;
struct
mutex
lock
;
};
int
sst_register_dsp
(
struct
sst_device
*
sst
);
...
...
sound/soc/omap/rx51.c
View file @
5bcaca4b
...
...
@@ -168,7 +168,7 @@ static int rx51_spk_event(struct snd_soc_dapm_widget *w,
static
int
rx51_hp_event
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
k
,
int
event
)
{
struct
snd_soc_codec
*
codec
=
w
->
dapm
->
codec
;
struct
snd_soc_codec
*
codec
=
snd_soc_dapm_to_codec
(
w
->
dapm
)
;
if
(
SND_SOC_DAPM_EVENT_ON
(
event
))
tpa6130a2_stereo_enable
(
codec
,
1
);
...
...
sound/soc/samsung/speyside.c
View file @
5bcaca4b
...
...
@@ -228,10 +228,12 @@ static struct snd_soc_dai_link speyside_dai[] = {
},
};
static
int
speyside_wm9081_init
(
struct
snd_soc_
dapm_context
*
dapm
)
static
int
speyside_wm9081_init
(
struct
snd_soc_
component
*
component
)
{
struct
snd_soc_codec
*
codec
=
snd_soc_component_to_codec
(
component
);
/* At any time the WM9081 is active it will have this clock */
return
snd_soc_codec_set_sysclk
(
dapm
->
codec
,
WM9081_SYSCLK_MCLK
,
0
,
return
snd_soc_codec_set_sysclk
(
codec
,
WM9081_SYSCLK_MCLK
,
0
,
MCLK_AUDIO_RATE
,
0
);
}
...
...
sound/soc/soc-core.c
View file @
5bcaca4b
This diff is collapsed.
Click to expand it.
sound/soc/soc-dapm.c
View file @
5bcaca4b
...
...
@@ -3109,7 +3109,8 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
}
w
->
dapm
=
dapm
;
w
->
codec
=
dapm
->
codec
;
if
(
dapm
->
component
)
w
->
codec
=
dapm
->
component
->
codec
;
INIT_LIST_HEAD
(
&
w
->
sources
);
INIT_LIST_HEAD
(
&
w
->
sinks
);
INIT_LIST_HEAD
(
&
w
->
list
);
...
...
sound/soc/soc-generic-dmaengine-pcm.c
View file @
5bcaca4b
...
...
@@ -336,10 +336,12 @@ static const struct snd_pcm_ops dmaengine_pcm_ops = {
};
static
const
struct
snd_soc_platform_driver
dmaengine_pcm_platform
=
{
.
component_driver
=
{
.
probe_order
=
SND_SOC_COMP_ORDER_LATE
,
},
.
ops
=
&
dmaengine_pcm_ops
,
.
pcm_new
=
dmaengine_pcm_new
,
.
pcm_free
=
dmaengine_pcm_free
,
.
probe_order
=
SND_SOC_COMP_ORDER_LATE
,
};
static
const
char
*
const
dmaengine_pcm_dma_channel_names
[]
=
{
...
...
sound/soc/soc-io.c
View file @
5bcaca4b
...
...
@@ -271,31 +271,3 @@ int snd_soc_platform_write(struct snd_soc_platform *platform,
return
snd_soc_component_write
(
&
platform
->
component
,
reg
,
val
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_platform_write
);
/**
* snd_soc_component_init_io() - Initialize regmap IO
*
* @component: component to initialize
* @regmap: regmap instance to use for IO operations
*
* Return: 0 on success, a negative error code otherwise
*/
int
snd_soc_component_init_io
(
struct
snd_soc_component
*
component
,
struct
regmap
*
regmap
)
{
int
ret
;
if
(
!
regmap
)
return
-
EINVAL
;
ret
=
regmap_get_val_bytes
(
regmap
);
/* Errors are legitimate for non-integer byte
* multiples */
if
(
ret
>
0
)
component
->
val_bytes
=
ret
;
component
->
regmap
=
regmap
;
return
0
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_component_init_io
);
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