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
9a9b13dd
Commit
9a9b13dd
authored
Jul 12, 2018
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'topic/hda-core-intel' into topic/hda-acomp
parents
c5a59d24
cb04ba33
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
605 additions
and
674 deletions
+605
-674
include/sound/hdaudio.h
include/sound/hdaudio.h
+29
-0
include/sound/hdaudio_ext.h
include/sound/hdaudio_ext.h
+29
-94
sound/hda/ext/hdac_ext_bus.c
sound/hda/ext/hdac_ext_bus.c
+35
-45
sound/hda/ext/hdac_ext_controller.c
sound/hda/ext/hdac_ext_controller.c
+35
-29
sound/hda/ext/hdac_ext_stream.c
sound/hda/ext/hdac_ext_stream.c
+45
-59
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.c
+51
-17
sound/pci/hda/hda_codec.h
sound/pci/hda/hda_codec.h
+2
-0
sound/soc/codecs/hdac_hdmi.c
sound/soc/codecs/hdac_hdmi.c
+197
-219
sound/soc/intel/skylake/skl-messages.c
sound/soc/intel/skylake/skl-messages.c
+22
-28
sound/soc/intel/skylake/skl-nhlt.c
sound/soc/intel/skylake/skl-nhlt.c
+4
-4
sound/soc/intel/skylake/skl-pcm.c
sound/soc/intel/skylake/skl-pcm.c
+54
-58
sound/soc/intel/skylake/skl-topology.c
sound/soc/intel/skylake/skl-topology.c
+8
-12
sound/soc/intel/skylake/skl-topology.h
sound/soc/intel/skylake/skl-topology.h
+3
-3
sound/soc/intel/skylake/skl.c
sound/soc/intel/skylake/skl.c
+88
-102
sound/soc/intel/skylake/skl.h
sound/soc/intel/skylake/skl.h
+3
-4
No files found.
include/sound/hdaudio.h
View file @
9a9b13dd
...
...
@@ -188,6 +188,11 @@ struct hdac_driver {
const
struct
hda_device_id
*
id_table
;
int
(
*
match
)(
struct
hdac_device
*
dev
,
struct
hdac_driver
*
drv
);
void
(
*
unsol_event
)(
struct
hdac_device
*
dev
,
unsigned
int
event
);
/* fields used by ext bus APIs */
int
(
*
probe
)(
struct
hdac_device
*
dev
);
int
(
*
remove
)(
struct
hdac_device
*
dev
);
void
(
*
shutdown
)(
struct
hdac_device
*
dev
);
};
#define drv_to_hdac_driver(_drv) container_of(_drv, struct hdac_driver, driver)
...
...
@@ -208,6 +213,14 @@ struct hdac_bus_ops {
int
(
*
link_power
)(
struct
hdac_bus
*
bus
,
bool
enable
);
};
/*
* ops used for ASoC HDA codec drivers
*/
struct
hdac_ext_bus_ops
{
int
(
*
hdev_attach
)(
struct
hdac_device
*
hdev
);
int
(
*
hdev_detach
)(
struct
hdac_device
*
hdev
);
};
/*
* Lowlevel I/O operators
*/
...
...
@@ -250,11 +263,17 @@ struct hdac_rb {
* @mlcap: MultiLink capabilities pointer
* @gtscap: gts capabilities pointer
* @drsmcap: dma resume capabilities pointer
* @num_streams: streams supported
* @idx: HDA link index
* @hlink_list: link list of HDA links
* @lock: lock for link mgmt
* @cmd_dma_state: state of cmd DMAs: CORB and RIRB
*/
struct
hdac_bus
{
struct
device
*
dev
;
const
struct
hdac_bus_ops
*
ops
;
const
struct
hdac_io_ops
*
io_ops
;
const
struct
hdac_ext_bus_ops
*
ext_ops
;
/* h/w resources */
unsigned
long
addr
;
...
...
@@ -317,6 +336,16 @@ struct hdac_bus {
/* i915 component interface */
struct
i915_audio_component
*
audio_component
;
int
i915_power_refcount
;
/* parameters required for enhanced capabilities */
int
num_streams
;
int
idx
;
struct
list_head
hlink_list
;
struct
mutex
lock
;
bool
cmd_dma_state
;
};
int
snd_hdac_bus_init
(
struct
hdac_bus
*
bus
,
struct
device
*
dev
,
...
...
include/sound/hdaudio_ext.h
View file @
9a9b13dd
...
...
@@ -4,38 +4,16 @@
#include <sound/hdaudio.h>
/**
* hdac_ext_bus: HDAC extended bus for extended HDA caps
*
* @bus: hdac bus
* @num_streams: streams supported
* @hlink_list: link list of HDA links
* @lock: lock for link mgmt
* @cmd_dma_state: state of cmd DMAs: CORB and RIRB
*/
struct
hdac_ext_bus
{
struct
hdac_bus
bus
;
int
num_streams
;
int
idx
;
struct
list_head
hlink_list
;
struct
mutex
lock
;
bool
cmd_dma_state
;
};
int
snd_hdac_ext_bus_init
(
struct
hdac_ext_bus
*
sbus
,
struct
device
*
dev
,
int
snd_hdac_ext_bus_init
(
struct
hdac_bus
*
bus
,
struct
device
*
dev
,
const
struct
hdac_bus_ops
*
ops
,
const
struct
hdac_io_ops
*
io_ops
);
const
struct
hdac_io_ops
*
io_ops
,
const
struct
hdac_ext_bus_ops
*
ext_ops
);
void
snd_hdac_ext_bus_exit
(
struct
hdac_ext_bus
*
sbus
);
int
snd_hdac_ext_bus_device_init
(
struct
hdac_ext_bus
*
sbus
,
int
addr
);
void
snd_hdac_ext_bus_exit
(
struct
hdac_bus
*
bus
);
int
snd_hdac_ext_bus_device_init
(
struct
hdac_bus
*
bus
,
int
addr
,
struct
hdac_device
*
hdev
);
void
snd_hdac_ext_bus_device_exit
(
struct
hdac_device
*
hdev
);
void
snd_hdac_ext_bus_device_remove
(
struct
hdac_ext_bus
*
ebus
);
#define ebus_to_hbus(ebus) (&(ebus)->bus)
#define hbus_to_ebus(_bus) \
container_of(_bus, struct hdac_ext_bus, bus)
void
snd_hdac_ext_bus_device_remove
(
struct
hdac_bus
*
bus
);
#define HDA_CODEC_REV_EXT_ENTRY(_vid, _rev, _name, drv_data) \
{ .vendor_id = (_vid), .rev_id = (_rev), .name = (_name), \
...
...
@@ -44,14 +22,14 @@ void snd_hdac_ext_bus_device_remove(struct hdac_ext_bus *ebus);
#define HDA_CODEC_EXT_ENTRY(_vid, _revid, _name, _drv_data) \
HDA_CODEC_REV_EXT_ENTRY(_vid, _revid, _name, _drv_data)
void
snd_hdac_ext_bus_ppcap_enable
(
struct
hdac_
ext_
bus
*
chip
,
bool
enable
);
void
snd_hdac_ext_bus_ppcap_int_enable
(
struct
hdac_
ext_
bus
*
chip
,
bool
enable
);
void
snd_hdac_ext_bus_ppcap_enable
(
struct
hdac_bus
*
chip
,
bool
enable
);
void
snd_hdac_ext_bus_ppcap_int_enable
(
struct
hdac_bus
*
chip
,
bool
enable
);
void
snd_hdac_ext_stream_spbcap_enable
(
struct
hdac_
ext_
bus
*
chip
,
void
snd_hdac_ext_stream_spbcap_enable
(
struct
hdac_bus
*
chip
,
bool
enable
,
int
index
);
int
snd_hdac_ext_bus_get_ml_capabilities
(
struct
hdac_
ext_
bus
*
bus
);
struct
hdac_ext_link
*
snd_hdac_ext_bus_get_link
(
struct
hdac_
ext_
bus
*
bus
,
int
snd_hdac_ext_bus_get_ml_capabilities
(
struct
hdac_bus
*
bus
);
struct
hdac_ext_link
*
snd_hdac_ext_bus_get_link
(
struct
hdac_bus
*
bus
,
const
char
*
codec_name
);
enum
hdac_ext_stream_type
{
...
...
@@ -100,28 +78,28 @@ struct hdac_ext_stream {
#define stream_to_hdac_ext_stream(s) \
container_of(s, struct hdac_ext_stream, hstream)
void
snd_hdac_ext_stream_init
(
struct
hdac_
ext_
bus
*
bus
,
void
snd_hdac_ext_stream_init
(
struct
hdac_bus
*
bus
,
struct
hdac_ext_stream
*
stream
,
int
idx
,
int
direction
,
int
tag
);
int
snd_hdac_ext_stream_init_all
(
struct
hdac_
ext_bus
*
e
bus
,
int
start_idx
,
int
snd_hdac_ext_stream_init_all
(
struct
hdac_
bus
*
bus
,
int
start_idx
,
int
num_stream
,
int
dir
);
void
snd_hdac_stream_free_all
(
struct
hdac_
ext_bus
*
e
bus
);
void
snd_hdac_link_free_all
(
struct
hdac_
ext_bus
*
e
bus
);
struct
hdac_ext_stream
*
snd_hdac_ext_stream_assign
(
struct
hdac_
ext_
bus
*
bus
,
void
snd_hdac_stream_free_all
(
struct
hdac_
bus
*
bus
);
void
snd_hdac_link_free_all
(
struct
hdac_
bus
*
bus
);
struct
hdac_ext_stream
*
snd_hdac_ext_stream_assign
(
struct
hdac_bus
*
bus
,
struct
snd_pcm_substream
*
substream
,
int
type
);
void
snd_hdac_ext_stream_release
(
struct
hdac_ext_stream
*
azx_dev
,
int
type
);
void
snd_hdac_ext_stream_decouple
(
struct
hdac_
ext_
bus
*
bus
,
void
snd_hdac_ext_stream_decouple
(
struct
hdac_bus
*
bus
,
struct
hdac_ext_stream
*
azx_dev
,
bool
decouple
);
void
snd_hdac_ext_stop_streams
(
struct
hdac_
ext_bus
*
s
bus
);
void
snd_hdac_ext_stop_streams
(
struct
hdac_
bus
*
bus
);
int
snd_hdac_ext_stream_set_spib
(
struct
hdac_
ext_bus
*
e
bus
,
int
snd_hdac_ext_stream_set_spib
(
struct
hdac_
bus
*
bus
,
struct
hdac_ext_stream
*
stream
,
u32
value
);
int
snd_hdac_ext_stream_get_spbmaxfifo
(
struct
hdac_
ext_bus
*
e
bus
,
int
snd_hdac_ext_stream_get_spbmaxfifo
(
struct
hdac_
bus
*
bus
,
struct
hdac_ext_stream
*
stream
);
void
snd_hdac_ext_stream_drsm_enable
(
struct
hdac_
ext_bus
*
e
bus
,
void
snd_hdac_ext_stream_drsm_enable
(
struct
hdac_
bus
*
bus
,
bool
enable
,
int
index
);
int
snd_hdac_ext_stream_set_dpibr
(
struct
hdac_
ext_bus
*
e
bus
,
int
snd_hdac_ext_stream_set_dpibr
(
struct
hdac_
bus
*
bus
,
struct
hdac_ext_stream
*
stream
,
u32
value
);
int
snd_hdac_ext_stream_set_lpib
(
struct
hdac_ext_stream
*
stream
,
u32
value
);
...
...
@@ -144,17 +122,15 @@ struct hdac_ext_link {
int
snd_hdac_ext_bus_link_power_up
(
struct
hdac_ext_link
*
link
);
int
snd_hdac_ext_bus_link_power_down
(
struct
hdac_ext_link
*
link
);
int
snd_hdac_ext_bus_link_power_up_all
(
struct
hdac_
ext_bus
*
e
bus
);
int
snd_hdac_ext_bus_link_power_down_all
(
struct
hdac_
ext_bus
*
e
bus
);
int
snd_hdac_ext_bus_link_power_up_all
(
struct
hdac_
bus
*
bus
);
int
snd_hdac_ext_bus_link_power_down_all
(
struct
hdac_
bus
*
bus
);
void
snd_hdac_ext_link_set_stream_id
(
struct
hdac_ext_link
*
link
,
int
stream
);
void
snd_hdac_ext_link_clear_stream_id
(
struct
hdac_ext_link
*
link
,
int
stream
);
int
snd_hdac_ext_bus_link_get
(
struct
hdac_ext_bus
*
ebus
,
struct
hdac_ext_link
*
link
);
int
snd_hdac_ext_bus_link_put
(
struct
hdac_ext_bus
*
ebus
,
struct
hdac_ext_link
*
link
);
int
snd_hdac_ext_bus_link_get
(
struct
hdac_bus
*
bus
,
struct
hdac_ext_link
*
link
);
int
snd_hdac_ext_bus_link_put
(
struct
hdac_bus
*
bus
,
struct
hdac_ext_link
*
link
);
/* update register macro */
#define snd_hdac_updatel(addr, reg, mask, val) \
...
...
@@ -181,53 +157,12 @@ struct hda_dai_map {
u32
maxbps
;
};
#define HDA_MAX_NIDS 16
/**
* struct hdac_ext_device - HDAC Ext device
*
* @hdac: hdac core device
* @nid_list - the dai map which matches the dai-name with the nid
* @map_cur_idx - the idx in use in dai_map
* @ops - the hda codec ops common to all codec drivers
* @pvt_data - private data, for asoc contains asoc codec object
*/
struct
hdac_ext_device
{
struct
hdac_device
hdev
;
struct
hdac_ext_bus
*
ebus
;
/* soc-dai to nid map */
struct
hda_dai_map
nid_list
[
HDA_MAX_NIDS
];
unsigned
int
map_cur_idx
;
/* codec ops */
struct
hdac_ext_codec_ops
ops
;
struct
snd_card
*
card
;
void
*
scodec
;
void
*
private_data
;
};
struct
hdac_ext_dma_params
{
u32
format
;
u8
stream_tag
;
};
#define to_ehdac_device(dev) (container_of((dev), \
struct hdac_ext_device, hdev))
/*
* HD-audio codec base driver
*/
struct
hdac_ext_driver
{
struct
hdac_driver
hdac
;
int
(
*
probe
)(
struct
hdac_ext_device
*
dev
);
int
(
*
remove
)(
struct
hdac_ext_device
*
dev
);
void
(
*
shutdown
)(
struct
hdac_ext_device
*
dev
);
};
int
snd_hda_ext_driver_register
(
struct
hdac_ext_driver
*
drv
);
void
snd_hda_ext_driver_unregister
(
struct
hdac_ext_driver
*
drv
);
#define to_ehdac_driver(_drv) container_of(_drv, struct hdac_ext_driver, hdac)
int
snd_hda_ext_driver_register
(
struct
hdac_driver
*
drv
);
void
snd_hda_ext_driver_unregister
(
struct
hdac_driver
*
drv
);
#endif
/* __SOUND_HDAUDIO_EXT_H */
sound/hda/ext/hdac_ext_bus.c
View file @
9a9b13dd
...
...
@@ -87,9 +87,10 @@ static const struct hdac_io_ops hdac_ext_default_io = {
*
* Returns 0 if successful, or a negative error code.
*/
int
snd_hdac_ext_bus_init
(
struct
hdac_
ext_bus
*
e
bus
,
struct
device
*
dev
,
int
snd_hdac_ext_bus_init
(
struct
hdac_
bus
*
bus
,
struct
device
*
dev
,
const
struct
hdac_bus_ops
*
ops
,
const
struct
hdac_io_ops
*
io_ops
)
const
struct
hdac_io_ops
*
io_ops
,
const
struct
hdac_ext_bus_ops
*
ext_ops
)
{
int
ret
;
static
int
idx
;
...
...
@@ -98,15 +99,16 @@ int snd_hdac_ext_bus_init(struct hdac_ext_bus *ebus, struct device *dev,
if
(
io_ops
==
NULL
)
io_ops
=
&
hdac_ext_default_io
;
ret
=
snd_hdac_bus_init
(
&
ebus
->
bus
,
dev
,
ops
,
io_ops
);
ret
=
snd_hdac_bus_init
(
bus
,
dev
,
ops
,
io_ops
);
if
(
ret
<
0
)
return
ret
;
INIT_LIST_HEAD
(
&
ebus
->
hlink_list
);
ebus
->
idx
=
idx
++
;
bus
->
ext_ops
=
ext_ops
;
INIT_LIST_HEAD
(
&
bus
->
hlink_list
);
bus
->
idx
=
idx
++
;
mutex_init
(
&
e
bus
->
lock
);
e
bus
->
cmd_dma_state
=
true
;
mutex_init
(
&
bus
->
lock
);
bus
->
cmd_dma_state
=
true
;
return
0
;
}
...
...
@@ -116,10 +118,10 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_init);
* snd_hdac_ext_bus_exit - clean up a HD-audio extended bus
* @ebus: the pointer to extended bus object
*/
void
snd_hdac_ext_bus_exit
(
struct
hdac_
ext_bus
*
e
bus
)
void
snd_hdac_ext_bus_exit
(
struct
hdac_
bus
*
bus
)
{
snd_hdac_bus_exit
(
&
ebus
->
bus
);
WARN_ON
(
!
list_empty
(
&
e
bus
->
hlink_list
));
snd_hdac_bus_exit
(
bus
);
WARN_ON
(
!
list_empty
(
&
bus
->
hlink_list
));
}
EXPORT_SYMBOL_GPL
(
snd_hdac_ext_bus_exit
);
...
...
@@ -135,21 +137,15 @@ static void default_release(struct device *dev)
*
* Returns zero for success or a negative error code.
*/
int
snd_hdac_ext_bus_device_init
(
struct
hdac_ext_bus
*
ebus
,
int
addr
)
int
snd_hdac_ext_bus_device_init
(
struct
hdac_bus
*
bus
,
int
addr
,
struct
hdac_device
*
hdev
)
{
struct
hdac_ext_device
*
edev
;
struct
hdac_device
*
hdev
=
NULL
;
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
char
name
[
15
];
int
ret
;
edev
=
kzalloc
(
sizeof
(
*
edev
),
GFP_KERNEL
);
if
(
!
edev
)
return
-
ENOMEM
;
hdev
=
&
edev
->
hdev
;
edev
->
ebus
=
ebus
;
hdev
->
bus
=
bus
;
snprintf
(
name
,
sizeof
(
name
),
"ehdaudio%dD%d"
,
e
bus
->
idx
,
addr
);
snprintf
(
name
,
sizeof
(
name
),
"ehdaudio%dD%d"
,
bus
->
idx
,
addr
);
ret
=
snd_hdac_device_init
(
hdev
,
bus
,
name
,
addr
);
if
(
ret
<
0
)
{
...
...
@@ -176,10 +172,8 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_init);
*/
void
snd_hdac_ext_bus_device_exit
(
struct
hdac_device
*
hdev
)
{
struct
hdac_ext_device
*
edev
=
to_ehdac_device
(
hdev
);
snd_hdac_device_exit
(
hdev
);
kfree
(
e
dev
);
kfree
(
h
dev
);
}
EXPORT_SYMBOL_GPL
(
snd_hdac_ext_bus_device_exit
);
...
...
@@ -188,14 +182,14 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_exit);
*
* @ebus: HD-audio extended bus
*/
void
snd_hdac_ext_bus_device_remove
(
struct
hdac_
ext_bus
*
e
bus
)
void
snd_hdac_ext_bus_device_remove
(
struct
hdac_
bus
*
bus
)
{
struct
hdac_device
*
codec
,
*
__codec
;
/*
* we need to remove all the codec devices objects created in the
* snd_hdac_ext_bus_device_init
*/
list_for_each_entry_safe
(
codec
,
__codec
,
&
ebus
->
bus
.
codec_list
,
list
)
{
list_for_each_entry_safe
(
codec
,
__codec
,
&
bus
->
codec_list
,
list
)
{
snd_hdac_device_unregister
(
codec
);
put_device
(
&
codec
->
dev
);
}
...
...
@@ -204,35 +198,31 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_device_remove);
#define dev_to_hdac(dev) (container_of((dev), \
struct hdac_device, dev))
static
inline
struct
hdac_
ext_driver
*
get_e
drv
(
struct
device
*
dev
)
static
inline
struct
hdac_
driver
*
get_h
drv
(
struct
device
*
dev
)
{
struct
hdac_driver
*
hdrv
=
drv_to_hdac_driver
(
dev
->
driver
);
struct
hdac_ext_driver
*
edrv
=
to_ehdac_driver
(
hdrv
);
return
edrv
;
return
hdrv
;
}
static
inline
struct
hdac_
ext_device
*
get_e
dev
(
struct
device
*
dev
)
static
inline
struct
hdac_
device
*
get_h
dev
(
struct
device
*
dev
)
{
struct
hdac_device
*
hdev
=
dev_to_hdac_dev
(
dev
);
struct
hdac_ext_device
*
edev
=
to_ehdac_device
(
hdev
);
return
edev
;
return
hdev
;
}
static
int
hda_ext_drv_probe
(
struct
device
*
dev
)
{
return
(
get_
edrv
(
dev
))
->
probe
(
get_e
dev
(
dev
));
return
(
get_
hdrv
(
dev
))
->
probe
(
get_h
dev
(
dev
));
}
static
int
hdac_ext_drv_remove
(
struct
device
*
dev
)
{
return
(
get_
edrv
(
dev
))
->
remove
(
get_e
dev
(
dev
));
return
(
get_
hdrv
(
dev
))
->
remove
(
get_h
dev
(
dev
));
}
static
void
hdac_ext_drv_shutdown
(
struct
device
*
dev
)
{
return
(
get_
edrv
(
dev
))
->
shutdown
(
get_e
dev
(
dev
));
return
(
get_
hdrv
(
dev
))
->
shutdown
(
get_h
dev
(
dev
));
}
/**
...
...
@@ -240,20 +230,20 @@ static void hdac_ext_drv_shutdown(struct device *dev)
*
* @drv: ext hda driver structure
*/
int
snd_hda_ext_driver_register
(
struct
hdac_
ext_
driver
*
drv
)
int
snd_hda_ext_driver_register
(
struct
hdac_driver
*
drv
)
{
drv
->
hdac
.
type
=
HDA_DEV_ASOC
;
drv
->
hdac
.
driver
.
bus
=
&
snd_hda_bus_type
;
drv
->
type
=
HDA_DEV_ASOC
;
drv
->
driver
.
bus
=
&
snd_hda_bus_type
;
/* we use default match */
if
(
drv
->
probe
)
drv
->
hdac
.
driver
.
probe
=
hda_ext_drv_probe
;
drv
->
driver
.
probe
=
hda_ext_drv_probe
;
if
(
drv
->
remove
)
drv
->
hdac
.
driver
.
remove
=
hdac_ext_drv_remove
;
drv
->
driver
.
remove
=
hdac_ext_drv_remove
;
if
(
drv
->
shutdown
)
drv
->
hdac
.
driver
.
shutdown
=
hdac_ext_drv_shutdown
;
drv
->
driver
.
shutdown
=
hdac_ext_drv_shutdown
;
return
driver_register
(
&
drv
->
hdac
.
driver
);
return
driver_register
(
&
drv
->
driver
);
}
EXPORT_SYMBOL_GPL
(
snd_hda_ext_driver_register
);
...
...
@@ -262,8 +252,8 @@ EXPORT_SYMBOL_GPL(snd_hda_ext_driver_register);
*
* @drv: ext hda driver structure
*/
void
snd_hda_ext_driver_unregister
(
struct
hdac_
ext_
driver
*
drv
)
void
snd_hda_ext_driver_unregister
(
struct
hdac_driver
*
drv
)
{
driver_unregister
(
&
drv
->
hdac
.
driver
);
driver_unregister
(
&
drv
->
driver
);
}
EXPORT_SYMBOL_GPL
(
snd_hda_ext_driver_unregister
);
sound/hda/ext/hdac_ext_controller.c
View file @
9a9b13dd
...
...
@@ -39,9 +39,8 @@
* @ebus: HD-audio extended core bus
* @enable: flag to turn on/off the capability
*/
void
snd_hdac_ext_bus_ppcap_enable
(
struct
hdac_
ext_bus
*
e
bus
,
bool
enable
)
void
snd_hdac_ext_bus_ppcap_enable
(
struct
hdac_
bus
*
bus
,
bool
enable
)
{
struct
hdac_bus
*
bus
=
&
ebus
->
bus
;
if
(
!
bus
->
ppcap
)
{
dev_err
(
bus
->
dev
,
"Address of PP capability is NULL"
);
...
...
@@ -60,9 +59,8 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_ppcap_enable);
* @ebus: HD-audio extended core bus
* @enable: flag to enable/disable interrupt
*/
void
snd_hdac_ext_bus_ppcap_int_enable
(
struct
hdac_
ext_bus
*
e
bus
,
bool
enable
)
void
snd_hdac_ext_bus_ppcap_int_enable
(
struct
hdac_
bus
*
bus
,
bool
enable
)
{
struct
hdac_bus
*
bus
=
&
ebus
->
bus
;
if
(
!
bus
->
ppcap
)
{
dev_err
(
bus
->
dev
,
"Address of PP capability is NULL
\n
"
);
...
...
@@ -89,12 +87,11 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_ppcap_int_enable);
* in hlink_list of extended hdac bus
* Note: this will be freed on bus exit by driver
*/
int
snd_hdac_ext_bus_get_ml_capabilities
(
struct
hdac_
ext_bus
*
e
bus
)
int
snd_hdac_ext_bus_get_ml_capabilities
(
struct
hdac_
bus
*
bus
)
{
int
idx
;
u32
link_count
;
struct
hdac_ext_link
*
hlink
;
struct
hdac_bus
*
bus
=
&
ebus
->
bus
;
link_count
=
readl
(
bus
->
mlcap
+
AZX_REG_ML_MLCD
)
+
1
;
...
...
@@ -114,7 +111,7 @@ int snd_hdac_ext_bus_get_ml_capabilities(struct hdac_ext_bus *ebus)
/* since link in On, update the ref */
hlink
->
ref_count
=
1
;
list_add_tail
(
&
hlink
->
list
,
&
e
bus
->
hlink_list
);
list_add_tail
(
&
hlink
->
list
,
&
bus
->
hlink_list
);
}
return
0
;
...
...
@@ -127,12 +124,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_get_ml_capabilities);
* @ebus: HD-audio ext core bus
*/
void
snd_hdac_link_free_all
(
struct
hdac_
ext_bus
*
e
bus
)
void
snd_hdac_link_free_all
(
struct
hdac_
bus
*
bus
)
{
struct
hdac_ext_link
*
l
;
while
(
!
list_empty
(
&
e
bus
->
hlink_list
))
{
l
=
list_first_entry
(
&
e
bus
->
hlink_list
,
struct
hdac_ext_link
,
list
);
while
(
!
list_empty
(
&
bus
->
hlink_list
))
{
l
=
list_first_entry
(
&
bus
->
hlink_list
,
struct
hdac_ext_link
,
list
);
list_del
(
&
l
->
list
);
kfree
(
l
);
}
...
...
@@ -144,7 +141,7 @@ EXPORT_SYMBOL_GPL(snd_hdac_link_free_all);
* @ebus: HD-audio extended core bus
* @codec_name: codec name
*/
struct
hdac_ext_link
*
snd_hdac_ext_bus_get_link
(
struct
hdac_
ext_bus
*
e
bus
,
struct
hdac_ext_link
*
snd_hdac_ext_bus_get_link
(
struct
hdac_
bus
*
bus
,
const
char
*
codec_name
)
{
int
i
;
...
...
@@ -153,10 +150,10 @@ struct hdac_ext_link *snd_hdac_ext_bus_get_link(struct hdac_ext_bus *ebus,
if
(
sscanf
(
codec_name
,
"ehdaudio%dD%d"
,
&
bus_idx
,
&
addr
)
!=
2
)
return
NULL
;
if
(
e
bus
->
idx
!=
bus_idx
)
if
(
bus
->
idx
!=
bus_idx
)
return
NULL
;
list_for_each_entry
(
hlink
,
&
e
bus
->
hlink_list
,
list
)
{
list_for_each_entry
(
hlink
,
&
bus
->
hlink_list
,
list
)
{
for
(
i
=
0
;
i
<
HDA_MAX_CODECS
;
i
++
)
{
if
(
hlink
->
lsdiid
&
(
0x1
<<
addr
))
return
hlink
;
...
...
@@ -219,12 +216,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_down);
* snd_hdac_ext_bus_link_power_up_all -power up all hda link
* @ebus: HD-audio extended bus
*/
int
snd_hdac_ext_bus_link_power_up_all
(
struct
hdac_
ext_bus
*
e
bus
)
int
snd_hdac_ext_bus_link_power_up_all
(
struct
hdac_
bus
*
bus
)
{
struct
hdac_ext_link
*
hlink
=
NULL
;
int
ret
;
list_for_each_entry
(
hlink
,
&
e
bus
->
hlink_list
,
list
)
{
list_for_each_entry
(
hlink
,
&
bus
->
hlink_list
,
list
)
{
snd_hdac_updatel
(
hlink
->
ml_addr
,
AZX_REG_ML_LCTL
,
0
,
AZX_MLCTL_SPA
);
ret
=
check_hdac_link_power_active
(
hlink
,
true
);
...
...
@@ -240,12 +237,12 @@ EXPORT_SYMBOL_GPL(snd_hdac_ext_bus_link_power_up_all);
* snd_hdac_ext_bus_link_power_down_all -power down all hda link
* @ebus: HD-audio extended bus
*/
int
snd_hdac_ext_bus_link_power_down_all
(
struct
hdac_
ext_bus
*
e
bus
)
int
snd_hdac_ext_bus_link_power_down_all
(
struct
hdac_
bus
*
bus
)
{
struct
hdac_ext_link
*
hlink
=
NULL
;
int
ret
;
list_for_each_entry
(
hlink
,
&
e
bus
->
hlink_list
,
list
)
{
list_for_each_entry
(
hlink
,
&
bus
->
hlink_list
,
list
)
{
snd_hdac_updatel
(
hlink
->
ml_addr
,
AZX_REG_ML_LCTL
,
AZX_MLCTL_SPA
,
0
);
ret
=
check_hdac_link_power_active
(
hlink
,
false
);
if
(
ret
<
0
)
...
...
@@ -256,39 +253,48 @@ int snd_hdac_ext_bus_link_power_down_all(struct hdac_ext_bus *ebus)
}
EXPORT_SYMBOL_GPL
(
snd_hdac_ext_bus_link_power_down_all
);
int
snd_hdac_ext_bus_link_get
(
struct
hdac_
ext_bus
*
e
bus
,
int
snd_hdac_ext_bus_link_get
(
struct
hdac_
bus
*
bus
,
struct
hdac_ext_link
*
link
)
{
int
ret
=
0
;
mutex_lock
(
&
e
bus
->
lock
);
mutex_lock
(
&
bus
->
lock
);
/*
* if we move from 0 to 1, count will be 1 so power up this link
* as well, also check the dma status and trigger that
*/
if
(
++
link
->
ref_count
==
1
)
{
if
(
!
e
bus
->
cmd_dma_state
)
{
snd_hdac_bus_init_cmd_io
(
&
ebus
->
bus
);
e
bus
->
cmd_dma_state
=
true
;
if
(
!
bus
->
cmd_dma_state
)
{
snd_hdac_bus_init_cmd_io
(
bus
);
bus
->
cmd_dma_state
=
true
;
}
ret
=
snd_hdac_ext_bus_link_power_up
(
link
);
/*
* wait for 521usec for codec to report status
* HDA spec section 4.3 - Codec Discovery
*/
udelay
(
521
);
bus
->
codec_mask
=
snd_hdac_chip_readw
(
bus
,
STATESTS
);
dev_dbg
(
bus
->
dev
,
"codec_mask = 0x%lx
\n
"
,
bus
->
codec_mask
);
snd_hdac_chip_writew
(
bus
,
STATESTS
,
bus
->
codec_mask
);
}
mutex_unlock
(
&
e
bus
->
lock
);
mutex_unlock
(
&
bus
->
lock
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
snd_hdac_ext_bus_link_get
);
int
snd_hdac_ext_bus_link_put
(
struct
hdac_
ext_bus
*
e
bus
,
int
snd_hdac_ext_bus_link_put
(
struct
hdac_
bus
*
bus
,
struct
hdac_ext_link
*
link
)
{
int
ret
=
0
;
struct
hdac_ext_link
*
hlink
;
bool
link_up
=
false
;
mutex_lock
(
&
e
bus
->
lock
);
mutex_lock
(
&
bus
->
lock
);
/*
* if we move from 1 to 0, count will be 0
...
...
@@ -301,7 +307,7 @@ int snd_hdac_ext_bus_link_put(struct hdac_ext_bus *ebus,
* now check if all links are off, if so turn off
* cmd dma as well
*/
list_for_each_entry
(
hlink
,
&
e
bus
->
hlink_list
,
list
)
{
list_for_each_entry
(
hlink
,
&
bus
->
hlink_list
,
list
)
{
if
(
hlink
->
ref_count
)
{
link_up
=
true
;
break
;
...
...
@@ -309,12 +315,12 @@ int snd_hdac_ext_bus_link_put(struct hdac_ext_bus *ebus,
}
if
(
!
link_up
)
{
snd_hdac_bus_stop_cmd_io
(
&
ebus
->
bus
);
e
bus
->
cmd_dma_state
=
false
;
snd_hdac_bus_stop_cmd_io
(
bus
);
bus
->
cmd_dma_state
=
false
;
}
}
mutex_unlock
(
&
e
bus
->
lock
);
mutex_unlock
(
&
bus
->
lock
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
snd_hdac_ext_bus_link_put
);
sound/hda/ext/hdac_ext_stream.c
View file @
9a9b13dd
This diff is collapsed.
Click to expand it.
sound/pci/hda/hda_codec.c
View file @
9a9b13dd
...
...
@@ -858,6 +858,39 @@ static void snd_hda_codec_dev_release(struct device *dev)
kfree
(
codec
);
}
#define DEV_NAME_LEN 31
static
int
snd_hda_codec_device_init
(
struct
hda_bus
*
bus
,
struct
snd_card
*
card
,
unsigned
int
codec_addr
,
struct
hda_codec
**
codecp
)
{
char
name
[
DEV_NAME_LEN
];
struct
hda_codec
*
codec
;
int
err
;
dev_dbg
(
card
->
dev
,
"%s: entry
\n
"
,
__func__
);
if
(
snd_BUG_ON
(
!
bus
))
return
-
EINVAL
;
if
(
snd_BUG_ON
(
codec_addr
>
HDA_MAX_CODEC_ADDRESS
))
return
-
EINVAL
;
codec
=
kzalloc
(
sizeof
(
*
codec
),
GFP_KERNEL
);
if
(
!
codec
)
return
-
ENOMEM
;
sprintf
(
name
,
"hdaudioC%dD%d"
,
card
->
number
,
codec_addr
);
err
=
snd_hdac_device_init
(
&
codec
->
core
,
&
bus
->
core
,
name
,
codec_addr
);
if
(
err
<
0
)
{
kfree
(
codec
);
return
err
;
}
codec
->
core
.
type
=
HDA_DEV_LEGACY
;
*
codecp
=
codec
;
return
err
;
}
/**
* snd_hda_codec_new - create a HDA codec
* @bus: the bus to assign
...
...
@@ -869,7 +902,19 @@ static void snd_hda_codec_dev_release(struct device *dev)
int
snd_hda_codec_new
(
struct
hda_bus
*
bus
,
struct
snd_card
*
card
,
unsigned
int
codec_addr
,
struct
hda_codec
**
codecp
)
{
struct
hda_codec
*
codec
;
int
ret
;
ret
=
snd_hda_codec_device_init
(
bus
,
card
,
codec_addr
,
codecp
);
if
(
ret
<
0
)
return
ret
;
return
snd_hda_codec_device_new
(
bus
,
card
,
codec_addr
,
*
codecp
);
}
EXPORT_SYMBOL_GPL
(
snd_hda_codec_new
);
int
snd_hda_codec_device_new
(
struct
hda_bus
*
bus
,
struct
snd_card
*
card
,
unsigned
int
codec_addr
,
struct
hda_codec
*
codec
)
{
char
component
[
31
];
hda_nid_t
fg
;
int
err
;
...
...
@@ -879,25 +924,14 @@ int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card,
.
dev_free
=
snd_hda_codec_dev_free
,
};
dev_dbg
(
card
->
dev
,
"%s: entry
\n
"
,
__func__
);
if
(
snd_BUG_ON
(
!
bus
))
return
-
EINVAL
;
if
(
snd_BUG_ON
(
codec_addr
>
HDA_MAX_CODEC_ADDRESS
))
return
-
EINVAL
;
codec
=
kzalloc
(
sizeof
(
*
codec
),
GFP_KERNEL
);
if
(
!
codec
)
return
-
ENOMEM
;
sprintf
(
component
,
"hdaudioC%dD%d"
,
card
->
number
,
codec_addr
);
err
=
snd_hdac_device_init
(
&
codec
->
core
,
&
bus
->
core
,
component
,
codec_addr
);
if
(
err
<
0
)
{
kfree
(
codec
);
return
err
;
}
codec
->
core
.
dev
.
release
=
snd_hda_codec_dev_release
;
codec
->
core
.
type
=
HDA_DEV_LEGACY
;
codec
->
core
.
exec_verb
=
codec_exec_verb
;
codec
->
bus
=
bus
;
...
...
@@ -957,15 +991,13 @@ int snd_hda_codec_new(struct hda_bus *bus, struct snd_card *card,
if
(
err
<
0
)
goto
error
;
if
(
codecp
)
*
codecp
=
codec
;
return
0
;
error:
put_device
(
hda_codec_dev
(
codec
));
return
err
;
}
EXPORT_SYMBOL_GPL
(
snd_hda_codec_new
);
EXPORT_SYMBOL_GPL
(
snd_hda_codec_
device_
new
);
/**
* snd_hda_codec_update_widgets - Refresh widget caps and pin defaults
...
...
@@ -2992,6 +3024,7 @@ int snd_hda_codec_build_controls(struct hda_codec *codec)
sync_power_up_states
(
codec
);
return
0
;
}
EXPORT_SYMBOL_GPL
(
snd_hda_codec_build_controls
);
/*
* PCM stuff
...
...
@@ -3197,6 +3230,7 @@ int snd_hda_codec_parse_pcms(struct hda_codec *codec)
return
0
;
}
EXPORT_SYMBOL_GPL
(
snd_hda_codec_parse_pcms
);
/* assign all PCMs of the given codec */
int
snd_hda_codec_build_pcms
(
struct
hda_codec
*
codec
)
...
...
sound/pci/hda/hda_codec.h
View file @
9a9b13dd
...
...
@@ -308,6 +308,8 @@ struct hda_codec {
*/
int
snd_hda_codec_new
(
struct
hda_bus
*
bus
,
struct
snd_card
*
card
,
unsigned
int
codec_addr
,
struct
hda_codec
**
codecp
);
int
snd_hda_codec_device_new
(
struct
hda_bus
*
bus
,
struct
snd_card
*
card
,
unsigned
int
codec_addr
,
struct
hda_codec
*
codec
);
int
snd_hda_codec_configure
(
struct
hda_codec
*
codec
);
int
snd_hda_codec_update_widgets
(
struct
hda_codec
*
codec
);
...
...
sound/soc/codecs/hdac_hdmi.c
View file @
9a9b13dd
This diff is collapsed.
Click to expand it.
sound/soc/intel/skylake/skl-messages.c
View file @
9a9b13dd
...
...
@@ -33,8 +33,7 @@
static
int
skl_alloc_dma_buf
(
struct
device
*
dev
,
struct
snd_dma_buffer
*
dmab
,
size_t
size
)
{
struct
hdac_ext_bus
*
ebus
=
dev_get_drvdata
(
dev
);
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
hdac_bus
*
bus
=
dev_get_drvdata
(
dev
);
if
(
!
bus
)
return
-
ENODEV
;
...
...
@@ -44,8 +43,7 @@ static int skl_alloc_dma_buf(struct device *dev,
static
int
skl_free_dma_buf
(
struct
device
*
dev
,
struct
snd_dma_buffer
*
dmab
)
{
struct
hdac_ext_bus
*
ebus
=
dev_get_drvdata
(
dev
);
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
hdac_bus
*
bus
=
dev_get_drvdata
(
dev
);
if
(
!
bus
)
return
-
ENODEV
;
...
...
@@ -89,8 +87,7 @@ void skl_dsp_enable_notification(struct skl_sst *ctx, bool enable)
static
int
skl_dsp_setup_spib
(
struct
device
*
dev
,
unsigned
int
size
,
int
stream_tag
,
int
enable
)
{
struct
hdac_ext_bus
*
ebus
=
dev_get_drvdata
(
dev
);
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
hdac_bus
*
bus
=
dev_get_drvdata
(
dev
);
struct
hdac_stream
*
stream
=
snd_hdac_get_stream
(
bus
,
SNDRV_PCM_STREAM_PLAYBACK
,
stream_tag
);
struct
hdac_ext_stream
*
estream
;
...
...
@@ -100,10 +97,10 @@ static int skl_dsp_setup_spib(struct device *dev, unsigned int size,
estream
=
stream_to_hdac_ext_stream
(
stream
);
/* enable/disable SPIB for this hdac stream */
snd_hdac_ext_stream_spbcap_enable
(
e
bus
,
enable
,
stream
->
index
);
snd_hdac_ext_stream_spbcap_enable
(
bus
,
enable
,
stream
->
index
);
/* set the spib value */
snd_hdac_ext_stream_set_spib
(
e
bus
,
estream
,
size
);
snd_hdac_ext_stream_set_spib
(
bus
,
estream
,
size
);
return
0
;
}
...
...
@@ -111,8 +108,7 @@ static int skl_dsp_setup_spib(struct device *dev, unsigned int size,
static
int
skl_dsp_prepare
(
struct
device
*
dev
,
unsigned
int
format
,
unsigned
int
size
,
struct
snd_dma_buffer
*
dmab
)
{
struct
hdac_ext_bus
*
ebus
=
dev_get_drvdata
(
dev
);
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
hdac_bus
*
bus
=
dev_get_drvdata
(
dev
);
struct
hdac_ext_stream
*
estream
;
struct
hdac_stream
*
stream
;
struct
snd_pcm_substream
substream
;
...
...
@@ -124,7 +120,7 @@ static int skl_dsp_prepare(struct device *dev, unsigned int format,
memset
(
&
substream
,
0
,
sizeof
(
substream
));
substream
.
stream
=
SNDRV_PCM_STREAM_PLAYBACK
;
estream
=
snd_hdac_ext_stream_assign
(
e
bus
,
&
substream
,
estream
=
snd_hdac_ext_stream_assign
(
bus
,
&
substream
,
HDAC_EXT_STREAM_TYPE_HOST
);
if
(
!
estream
)
return
-
ENODEV
;
...
...
@@ -143,9 +139,8 @@ static int skl_dsp_prepare(struct device *dev, unsigned int format,
static
int
skl_dsp_trigger
(
struct
device
*
dev
,
bool
start
,
int
stream_tag
)
{
struct
hdac_
ext_bus
*
e
bus
=
dev_get_drvdata
(
dev
);
struct
hdac_
bus
*
bus
=
dev_get_drvdata
(
dev
);
struct
hdac_stream
*
stream
;
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
if
(
!
bus
)
return
-
ENODEV
;
...
...
@@ -163,10 +158,9 @@ static int skl_dsp_trigger(struct device *dev, bool start, int stream_tag)
static
int
skl_dsp_cleanup
(
struct
device
*
dev
,
struct
snd_dma_buffer
*
dmab
,
int
stream_tag
)
{
struct
hdac_
ext_bus
*
e
bus
=
dev_get_drvdata
(
dev
);
struct
hdac_
bus
*
bus
=
dev_get_drvdata
(
dev
);
struct
hdac_stream
*
stream
;
struct
hdac_ext_stream
*
estream
;
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
if
(
!
bus
)
return
-
ENODEV
;
...
...
@@ -270,8 +264,7 @@ const struct skl_dsp_ops *skl_get_dsp_ops(int pci_id)
int
skl_init_dsp
(
struct
skl
*
skl
)
{
void
__iomem
*
mmio_base
;
struct
hdac_ext_bus
*
ebus
=
&
skl
->
ebus
;
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
hdac_bus
*
bus
=
skl_to_bus
(
skl
);
struct
skl_dsp_loader_ops
loader_ops
;
int
irq
=
bus
->
irq
;
const
struct
skl_dsp_ops
*
ops
;
...
...
@@ -279,8 +272,8 @@ int skl_init_dsp(struct skl *skl)
int
ret
;
/* enable ppcap interrupt */
snd_hdac_ext_bus_ppcap_enable
(
&
skl
->
e
bus
,
true
);
snd_hdac_ext_bus_ppcap_int_enable
(
&
skl
->
e
bus
,
true
);
snd_hdac_ext_bus_ppcap_enable
(
bus
,
true
);
snd_hdac_ext_bus_ppcap_int_enable
(
bus
,
true
);
/* read the BAR of the ADSP MMIO */
mmio_base
=
pci_ioremap_bar
(
skl
->
pci
,
4
);
...
...
@@ -335,12 +328,11 @@ int skl_init_dsp(struct skl *skl)
int
skl_free_dsp
(
struct
skl
*
skl
)
{
struct
hdac_ext_bus
*
ebus
=
&
skl
->
ebus
;
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
hdac_bus
*
bus
=
skl_to_bus
(
skl
);
struct
skl_sst
*
ctx
=
skl
->
skl_sst
;
/* disable ppcap interrupt */
snd_hdac_ext_bus_ppcap_int_enable
(
&
skl
->
e
bus
,
false
);
snd_hdac_ext_bus_ppcap_int_enable
(
bus
,
false
);
ctx
->
dsp_ops
->
cleanup
(
bus
->
dev
,
ctx
);
...
...
@@ -383,10 +375,11 @@ int skl_suspend_late_dsp(struct skl *skl)
int
skl_suspend_dsp
(
struct
skl
*
skl
)
{
struct
skl_sst
*
ctx
=
skl
->
skl_sst
;
struct
hdac_bus
*
bus
=
skl_to_bus
(
skl
);
int
ret
;
/* if ppcap is not supported return 0 */
if
(
!
skl
->
ebus
.
bus
.
ppcap
)
if
(
!
bus
->
ppcap
)
return
0
;
ret
=
skl_dsp_sleep
(
ctx
->
dsp
);
...
...
@@ -394,8 +387,8 @@ int skl_suspend_dsp(struct skl *skl)
return
ret
;
/* disable ppcap interrupt */
snd_hdac_ext_bus_ppcap_int_enable
(
&
skl
->
e
bus
,
false
);
snd_hdac_ext_bus_ppcap_enable
(
&
skl
->
e
bus
,
false
);
snd_hdac_ext_bus_ppcap_int_enable
(
bus
,
false
);
snd_hdac_ext_bus_ppcap_enable
(
bus
,
false
);
return
0
;
}
...
...
@@ -403,15 +396,16 @@ int skl_suspend_dsp(struct skl *skl)
int
skl_resume_dsp
(
struct
skl
*
skl
)
{
struct
skl_sst
*
ctx
=
skl
->
skl_sst
;
struct
hdac_bus
*
bus
=
skl_to_bus
(
skl
);
int
ret
;
/* if ppcap is not supported return 0 */
if
(
!
skl
->
ebus
.
bus
.
ppcap
)
if
(
!
bus
->
ppcap
)
return
0
;
/* enable ppcap interrupt */
snd_hdac_ext_bus_ppcap_enable
(
&
skl
->
e
bus
,
true
);
snd_hdac_ext_bus_ppcap_int_enable
(
&
skl
->
e
bus
,
true
);
snd_hdac_ext_bus_ppcap_enable
(
bus
,
true
);
snd_hdac_ext_bus_ppcap_int_enable
(
bus
,
true
);
/* check if DSP 1st boot is done */
if
(
skl
->
skl_sst
->
is_first_boot
==
true
)
...
...
sound/soc/intel/skylake/skl-nhlt.c
View file @
9a9b13dd
...
...
@@ -141,7 +141,7 @@ struct nhlt_specific_cfg
{
struct
nhlt_fmt
*
fmt
;
struct
nhlt_endpoint
*
epnt
;
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
&
skl
->
ebus
);
struct
hdac_bus
*
bus
=
skl_to_bus
(
skl
);
struct
device
*
dev
=
bus
->
dev
;
struct
nhlt_specific_cfg
*
sp_config
;
struct
nhlt_acpi_table
*
nhlt
=
skl
->
nhlt
;
...
...
@@ -228,7 +228,7 @@ static void skl_nhlt_trim_space(char *trim)
int
skl_nhlt_update_topology_bin
(
struct
skl
*
skl
)
{
struct
nhlt_acpi_table
*
nhlt
=
(
struct
nhlt_acpi_table
*
)
skl
->
nhlt
;
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
&
skl
->
ebus
);
struct
hdac_bus
*
bus
=
skl_to_bus
(
skl
);
struct
device
*
dev
=
bus
->
dev
;
dev_dbg
(
dev
,
"oem_id %.6s, oem_table_id %8s oem_revision %d
\n
"
,
...
...
@@ -248,8 +248,8 @@ static ssize_t skl_nhlt_platform_id_show(struct device *dev,
struct
device_attribute
*
attr
,
char
*
buf
)
{
struct
pci_dev
*
pci
=
to_pci_dev
(
dev
);
struct
hdac_
ext_bus
*
e
bus
=
pci_get_drvdata
(
pci
);
struct
skl
*
skl
=
ebus_to_skl
(
e
bus
);
struct
hdac_
bus
*
bus
=
pci_get_drvdata
(
pci
);
struct
skl
*
skl
=
bus_to_skl
(
bus
);
struct
nhlt_acpi_table
*
nhlt
=
(
struct
nhlt_acpi_table
*
)
skl
->
nhlt
;
char
platform_id
[
32
];
...
...
sound/soc/intel/skylake/skl-pcm.c
View file @
9a9b13dd
This diff is collapsed.
Click to expand it.
sound/soc/intel/skylake/skl-topology.c
View file @
9a9b13dd
...
...
@@ -934,7 +934,7 @@ static int skl_tplg_find_moduleid_from_uuid(struct skl *skl,
struct
soc_bytes_ext
*
sb
=
(
void
*
)
k
->
private_value
;
struct
skl_algo_data
*
bc
=
(
struct
skl_algo_data
*
)
sb
->
dobj
.
private
;
struct
skl_kpb_params
*
uuid_params
,
*
params
;
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
skl_to_ebus
(
skl
)
);
struct
hdac_bus
*
bus
=
skl_to_bus
(
skl
);
int
i
,
size
,
module_id
;
if
(
bc
->
set_params
==
SKL_PARAM_BIND
&&
bc
->
max
)
{
...
...
@@ -3029,9 +3029,8 @@ static int skl_tplg_widget_load(struct snd_soc_component *cmpnt,
struct
snd_soc_tplg_dapm_widget
*
tplg_w
)
{
int
ret
;
struct
hdac_ext_bus
*
ebus
=
snd_soc_component_get_drvdata
(
cmpnt
);
struct
skl
*
skl
=
ebus_to_skl
(
ebus
);
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
hdac_bus
*
bus
=
snd_soc_component_get_drvdata
(
cmpnt
);
struct
skl
*
skl
=
bus_to_skl
(
bus
);
struct
skl_module_cfg
*
mconfig
;
if
(
!
tplg_w
->
priv
.
size
)
...
...
@@ -3137,8 +3136,7 @@ static int skl_tplg_control_load(struct snd_soc_component *cmpnt,
struct
soc_bytes_ext
*
sb
;
struct
snd_soc_tplg_bytes_control
*
tplg_bc
;
struct
snd_soc_tplg_enum_control
*
tplg_ec
;
struct
hdac_ext_bus
*
ebus
=
snd_soc_component_get_drvdata
(
cmpnt
);
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
hdac_bus
*
bus
=
snd_soc_component_get_drvdata
(
cmpnt
);
struct
soc_enum
*
se
;
switch
(
hdr
->
ops
.
info
)
{
...
...
@@ -3622,9 +3620,8 @@ static int skl_tplg_get_manifest_data(struct snd_soc_tplg_manifest *manifest,
static
int
skl_manifest_load
(
struct
snd_soc_component
*
cmpnt
,
struct
snd_soc_tplg_manifest
*
manifest
)
{
struct
hdac_ext_bus
*
ebus
=
snd_soc_component_get_drvdata
(
cmpnt
);
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
skl
*
skl
=
ebus_to_skl
(
ebus
);
struct
hdac_bus
*
bus
=
snd_soc_component_get_drvdata
(
cmpnt
);
struct
skl
*
skl
=
bus_to_skl
(
bus
);
/* proceed only if we have private data defined */
if
(
manifest
->
priv
.
size
==
0
)
...
...
@@ -3713,12 +3710,11 @@ static void skl_tplg_set_pipe_type(struct skl *skl, struct skl_pipe *pipe)
/*
* SKL topology init routine
*/
int
skl_tplg_init
(
struct
snd_soc_component
*
component
,
struct
hdac_
ext_bus
*
e
bus
)
int
skl_tplg_init
(
struct
snd_soc_component
*
component
,
struct
hdac_
bus
*
bus
)
{
int
ret
;
const
struct
firmware
*
fw
;
struct
hdac_bus
*
bus
=
ebus_to_hbus
(
ebus
);
struct
skl
*
skl
=
ebus_to_skl
(
ebus
);
struct
skl
*
skl
=
bus_to_skl
(
bus
);
struct
skl_pipeline
*
ppl
;
ret
=
request_firmware
(
&
fw
,
skl
->
tplg_name
,
bus
->
dev
);
...
...
sound/soc/intel/skylake/skl-topology.h
View file @
9a9b13dd
...
...
@@ -458,9 +458,9 @@ enum skl_channel {
static
inline
struct
skl
*
get_skl_ctx
(
struct
device
*
dev
)
{
struct
hdac_
ext_bus
*
e
bus
=
dev_get_drvdata
(
dev
);
struct
hdac_
bus
*
bus
=
dev_get_drvdata
(
dev
);
return
ebus_to_skl
(
e
bus
);
return
bus_to_skl
(
bus
);
}
int
skl_tplg_be_update_params
(
struct
snd_soc_dai
*
dai
,
...
...
@@ -470,7 +470,7 @@ int skl_dsp_set_dma_control(struct skl_sst *ctx, u32 *caps,
void
skl_tplg_set_be_dmic_config
(
struct
snd_soc_dai
*
dai
,
struct
skl_pipe_params
*
params
,
int
stream
);
int
skl_tplg_init
(
struct
snd_soc_component
*
component
,
struct
hdac_
ext_
bus
*
ebus
);
struct
hdac_bus
*
ebus
);
struct
skl_module_cfg
*
skl_tplg_fe_get_cpr_module
(
struct
snd_soc_dai
*
dai
,
int
stream
);
int
skl_tplg_update_pipe_params
(
struct
device
*
dev
,
...
...
sound/soc/intel/skylake/skl.c
View file @
9a9b13dd
This diff is collapsed.
Click to expand it.
sound/soc/intel/skylake/skl.h
View file @
9a9b13dd
...
...
@@ -71,7 +71,7 @@ struct skl_fw_config {
};
struct
skl
{
struct
hdac_
ext_bus
e
bus
;
struct
hdac_
bus
h
bus
;
struct
pci_dev
*
pci
;
unsigned
int
init_done
:
1
;
/* delayed init status */
...
...
@@ -105,9 +105,8 @@ struct skl {
struct
snd_soc_acpi_mach
*
mach
;
};
#define skl_to_ebus(s) (&(s)->ebus)
#define ebus_to_skl(sbus) \
container_of(sbus, struct skl, sbus)
#define skl_to_bus(s) (&(s)->hbus)
#define bus_to_skl(bus) container_of(bus, struct skl, hbus)
/* to pass dai dma data */
struct
skl_dma_params
{
...
...
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