mirror of https://github.com/thesofproject/sof.git
dai: add DAI info to sof context
Adds DAI info to sof main context. Also implements getter to easily retrieve the info through one point of access. Signed-off-by: Tomasz Lauda <tomasz.lauda@linux.intel.com>
This commit is contained in:
parent
81730d4da8
commit
781ccb10c7
|
@ -19,13 +19,13 @@
|
|||
#include <platform/lib/dai.h>
|
||||
#include <sof/bit.h>
|
||||
#include <sof/lib/io.h>
|
||||
#include <sof/sof.h>
|
||||
#include <sof/spinlock.h>
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
struct dai;
|
||||
struct sof;
|
||||
struct sof_ipc_dai_config;
|
||||
|
||||
/** \addtogroup sof_dai_drivers DAI Drivers
|
||||
|
@ -136,16 +136,6 @@ struct dai_info {
|
|||
*/
|
||||
int dai_init(struct sof *sof);
|
||||
|
||||
/**
|
||||
* \brief Plugs platform specific DAI array once initialized into the lib.
|
||||
*
|
||||
* Lib serves the DAIs to other FW elements with dai_get()
|
||||
*
|
||||
* \param[in] dai_type_array Array of DAI arrays grouped by type.
|
||||
* \param[in] num_dai_types Number of elements in the dai_type_array.
|
||||
*/
|
||||
void dai_install(struct dai_type_info *dai_type_array, size_t num_dai_types);
|
||||
|
||||
/**
|
||||
* \brief API to request a platform DAI.
|
||||
*
|
||||
|
@ -281,6 +271,11 @@ static inline void dai_update_bits(struct dai *dai, uint32_t reg,
|
|||
io_reg_update_bits(dai_base(dai) + reg, mask, value);
|
||||
}
|
||||
|
||||
static inline struct dai_info *dai_info_get(void)
|
||||
{
|
||||
return sof_get()->dai_info;
|
||||
}
|
||||
|
||||
/** @}*/
|
||||
|
||||
#endif /* __SOF_LIB_DAI_H__ */
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include <sof/lib/memory.h>
|
||||
|
||||
struct clock_info;
|
||||
struct dai_info;
|
||||
struct dma_trace_data;
|
||||
struct ipc;
|
||||
struct ll_schedule_domain;
|
||||
|
@ -68,6 +69,9 @@ struct sof {
|
|||
/* shared notifier data */
|
||||
struct notify_data *notify_data;
|
||||
|
||||
/* platform dai information */
|
||||
struct dai_info *dai_info;
|
||||
|
||||
__aligned(PLATFORM_DCACHE_ALIGN) int alignment[0];
|
||||
} __aligned(PLATFORM_DCACHE_ALIGN);
|
||||
|
||||
|
|
|
@ -14,23 +14,13 @@
|
|||
|
||||
#define trace_dai(__e, ...) trace_event(TRACE_CLASS_DAI, __e, ##__VA_ARGS__)
|
||||
|
||||
static struct dai_info lib_dai = {
|
||||
.dai_type_array = NULL,
|
||||
.num_dai_types = 0
|
||||
};
|
||||
|
||||
void dai_install(struct dai_type_info *dai_type_array, size_t num_dai_types)
|
||||
{
|
||||
lib_dai.dai_type_array = dai_type_array;
|
||||
lib_dai.num_dai_types = num_dai_types;
|
||||
}
|
||||
|
||||
static inline struct dai_type_info *dai_find_type(uint32_t type)
|
||||
{
|
||||
struct dai_info *info = dai_info_get();
|
||||
struct dai_type_info *dti;
|
||||
|
||||
for (dti = lib_dai.dai_type_array;
|
||||
dti < lib_dai.dai_type_array + lib_dai.num_dai_types; dti++) {
|
||||
for (dti = info->dai_type_array;
|
||||
dti < info->dai_type_array + info->num_dai_types; dti++) {
|
||||
if (dti->type == type)
|
||||
return dti;
|
||||
}
|
||||
|
|
|
@ -124,6 +124,11 @@ static struct dai_type_info dti[] = {
|
|||
}
|
||||
};
|
||||
|
||||
static struct dai_info lib_dai = {
|
||||
.dai_type_array = dti,
|
||||
.num_dai_types = ARRAY_SIZE(dti)
|
||||
};
|
||||
|
||||
int dai_init(struct sof *sof)
|
||||
{
|
||||
int i;
|
||||
|
@ -132,6 +137,7 @@ int dai_init(struct sof *sof)
|
|||
for (i = 0; i < ARRAY_SIZE(ssp); i++)
|
||||
spinlock_init(&ssp[i].lock);
|
||||
|
||||
dai_install(dti, ARRAY_SIZE(dti));
|
||||
sof->dai_info = &lib_dai;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -56,6 +56,11 @@ static struct dai_type_info dti[] = {
|
|||
}
|
||||
};
|
||||
|
||||
static struct dai_info lib_dai = {
|
||||
.dai_type_array = dti,
|
||||
.num_dai_types = ARRAY_SIZE(dti)
|
||||
};
|
||||
|
||||
int dai_init(struct sof *sof)
|
||||
{
|
||||
int i;
|
||||
|
@ -64,6 +69,7 @@ int dai_init(struct sof *sof)
|
|||
for (i = 0; i < ARRAY_SIZE(ssp); i++)
|
||||
spinlock_init(&ssp[i].lock);
|
||||
|
||||
dai_install(dti, ARRAY_SIZE(dti));
|
||||
sof->dai_info = &lib_dai;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -76,6 +76,11 @@ static struct dai_type_info dti[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct dai_info lib_dai = {
|
||||
.dai_type_array = dti,
|
||||
.num_dai_types = ARRAY_SIZE(dti)
|
||||
};
|
||||
|
||||
int dai_init(struct sof *sof)
|
||||
{
|
||||
int i;
|
||||
|
@ -87,6 +92,7 @@ int dai_init(struct sof *sof)
|
|||
for (i = 0; i < ARRAY_SIZE(sai); i++)
|
||||
spinlock_init(&sai[i].lock);
|
||||
|
||||
dai_install(dti, ARRAY_SIZE(dti));
|
||||
sof->dai_info = &lib_dai;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -116,6 +116,11 @@ static struct dai_type_info dti[] = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static struct dai_info lib_dai = {
|
||||
.dai_type_array = dti,
|
||||
.num_dai_types = ARRAY_SIZE(dti)
|
||||
};
|
||||
|
||||
int dai_init(struct sof *sof)
|
||||
{
|
||||
int i;
|
||||
|
@ -169,6 +174,7 @@ int dai_init(struct sof *sof)
|
|||
}
|
||||
#endif
|
||||
|
||||
dai_install(dti, ARRAY_SIZE(dti));
|
||||
sof->dai_info = &lib_dai;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue