mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Merge branch 'asoc-5.1' into asoc-next
This commit is contained in:
commit
3146089d23
216 changed files with 31718 additions and 3664 deletions
43
include/sound/cs35l36.h
Normal file
43
include/sound/cs35l36.h
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* linux/sound/cs35l36.h -- Platform data for CS35L36
|
||||
*
|
||||
* Copyright 2018 Cirrus Logic, Inc.
|
||||
*
|
||||
* Author: James Schulman <james.schulman@cirrus.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __CS35L36_H
|
||||
#define __CS35L36_H
|
||||
|
||||
struct cs35l36_vpbr_cfg {
|
||||
bool is_present;
|
||||
bool vpbr_en;
|
||||
int vpbr_thld;
|
||||
int vpbr_atk_rate;
|
||||
int vpbr_atk_vol;
|
||||
int vpbr_max_attn;
|
||||
int vpbr_wait;
|
||||
int vpbr_rel_rate;
|
||||
int vpbr_mute_en;
|
||||
};
|
||||
|
||||
struct cs35l36_platform_data {
|
||||
bool multi_amp_mode;
|
||||
bool dcm_mode;
|
||||
bool amp_pcm_inv;
|
||||
bool imon_pol_inv;
|
||||
bool vmon_pol_inv;
|
||||
int boost_ind;
|
||||
int bst_vctl;
|
||||
int bst_vctl_sel;
|
||||
int bst_ipk;
|
||||
bool extern_boost;
|
||||
int temp_warn_thld;
|
||||
int irq_drv_sel;
|
||||
int irq_gpio_sel;
|
||||
struct cs35l36_vpbr_cfg vpbr_config;
|
||||
};
|
||||
|
||||
#endif /* __CS35L36_H */
|
||||
|
|
@ -99,10 +99,6 @@ void snd_dmaengine_pcm_set_config_from_dai_data(
|
|||
* playback.
|
||||
*/
|
||||
#define SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX BIT(3)
|
||||
/*
|
||||
* The PCM streams have custom channel names specified.
|
||||
*/
|
||||
#define SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME BIT(4)
|
||||
|
||||
/**
|
||||
* struct snd_dmaengine_pcm_config - Configuration data for dmaengine based PCM
|
||||
|
|
|
|||
|
|
@ -75,7 +75,7 @@ void asoc_simple_card_clk_disable(struct asoc_simple_dai *dai);
|
|||
&dai_link->codec_dai_name, \
|
||||
list_name, cells_name, NULL)
|
||||
#define asoc_simple_card_parse_platform(node, dai_link, list_name, cells_name) \
|
||||
asoc_simple_card_parse_dai(node, dai_link->platform, \
|
||||
asoc_simple_card_parse_dai(node, dai_link->platforms, \
|
||||
&dai_link->platform_of_node, \
|
||||
NULL, list_name, cells_name, NULL)
|
||||
int asoc_simple_card_parse_dai(struct device_node *node,
|
||||
|
|
@ -108,7 +108,7 @@ int asoc_simple_card_parse_graph_dai(struct device_node *ep,
|
|||
int asoc_simple_card_init_dai(struct snd_soc_dai *dai,
|
||||
struct asoc_simple_dai *simple_dai);
|
||||
|
||||
int asoc_simple_card_canonicalize_dailink(struct snd_soc_dai_link *dai_link);
|
||||
void asoc_simple_card_canonicalize_platform(struct snd_soc_dai_link *dai_link);
|
||||
void asoc_simple_card_canonicalize_cpu(struct snd_soc_dai_link *dai_link,
|
||||
int is_single_links);
|
||||
|
||||
|
|
|
|||
|
|
@ -22,20 +22,37 @@ struct snd_soc_acpi_package_context {
|
|||
#define SND_ACPI_I2C_ID_LEN (4 + ACPI_ID_LEN + 3 + 1)
|
||||
|
||||
#if IS_ENABLED(CONFIG_ACPI)
|
||||
/* acpi match */
|
||||
struct snd_soc_acpi_mach *
|
||||
snd_soc_acpi_find_machine(struct snd_soc_acpi_mach *machines);
|
||||
|
||||
bool snd_soc_acpi_find_package_from_hid(const u8 hid[ACPI_ID_LEN],
|
||||
struct snd_soc_acpi_package_context *ctx);
|
||||
|
||||
/* check all codecs */
|
||||
struct snd_soc_acpi_mach *snd_soc_acpi_codec_list(void *arg);
|
||||
|
||||
#else
|
||||
/* acpi match */
|
||||
static inline struct snd_soc_acpi_mach *
|
||||
snd_soc_acpi_find_machine(struct snd_soc_acpi_mach *machines)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline bool
|
||||
snd_soc_acpi_find_package_from_hid(const u8 hid[ACPI_ID_LEN],
|
||||
struct snd_soc_acpi_package_context *ctx)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* acpi match */
|
||||
struct snd_soc_acpi_mach *
|
||||
snd_soc_acpi_find_machine(struct snd_soc_acpi_mach *machines);
|
||||
/* check all codecs */
|
||||
static inline struct snd_soc_acpi_mach *snd_soc_acpi_codec_list(void *arg)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* snd_soc_acpi_mach_params: interface for machine driver configuration
|
||||
|
|
@ -69,9 +86,6 @@ struct snd_soc_acpi_mach_params {
|
|||
* is not constant since this field may be updated at run-time
|
||||
* @sof_fw_filename: Sound Open Firmware file name, if enabled
|
||||
* @sof_tplg_filename: Sound Open Firmware topology file name, if enabled
|
||||
* @asoc_plat_name: ASoC platform name, used for binding machine drivers
|
||||
* if non NULL
|
||||
* @new_mach_data: machine driver private data fixup
|
||||
*/
|
||||
/* Descriptor for SST ASoC machine driver */
|
||||
struct snd_soc_acpi_mach {
|
||||
|
|
@ -85,8 +99,6 @@ struct snd_soc_acpi_mach {
|
|||
struct snd_soc_acpi_mach_params mach_params;
|
||||
const char *sof_fw_filename;
|
||||
const char *sof_tplg_filename;
|
||||
const char *asoc_plat_name;
|
||||
struct platform_device * (*new_mach_data)(void *pdata);
|
||||
};
|
||||
|
||||
#define SND_SOC_ACPI_MAX_CODECS 3
|
||||
|
|
@ -105,7 +117,4 @@ struct snd_soc_acpi_codecs {
|
|||
u8 codecs[SND_SOC_ACPI_MAX_CODECS][ACPI_ID_LEN];
|
||||
};
|
||||
|
||||
/* check all codecs */
|
||||
struct snd_soc_acpi_mach *snd_soc_acpi_codec_list(void *arg);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -214,21 +214,21 @@ struct device;
|
|||
.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD}
|
||||
|
||||
/* stream domain */
|
||||
#define SND_SOC_DAPM_AIF_IN(wname, stname, wslot, wreg, wshift, winvert) \
|
||||
#define SND_SOC_DAPM_AIF_IN(wname, stname, wchan, wreg, wshift, winvert) \
|
||||
{ .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \
|
||||
SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), }
|
||||
#define SND_SOC_DAPM_AIF_IN_E(wname, stname, wslot, wreg, wshift, winvert, \
|
||||
.channel = wchan, SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), }
|
||||
#define SND_SOC_DAPM_AIF_IN_E(wname, stname, wchan, wreg, wshift, winvert, \
|
||||
wevent, wflags) \
|
||||
{ .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \
|
||||
SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
||||
.channel = wchan, SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
||||
.event = wevent, .event_flags = wflags }
|
||||
#define SND_SOC_DAPM_AIF_OUT(wname, stname, wslot, wreg, wshift, winvert) \
|
||||
#define SND_SOC_DAPM_AIF_OUT(wname, stname, wchan, wreg, wshift, winvert) \
|
||||
{ .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \
|
||||
SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), }
|
||||
#define SND_SOC_DAPM_AIF_OUT_E(wname, stname, wslot, wreg, wshift, winvert, \
|
||||
.channel = wchan, SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), }
|
||||
#define SND_SOC_DAPM_AIF_OUT_E(wname, stname, wchan, wreg, wshift, winvert, \
|
||||
wevent, wflags) \
|
||||
{ .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \
|
||||
SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
||||
.channel = wchan, SND_SOC_DAPM_INIT_REG_VAL(wreg, wshift, winvert), \
|
||||
.event = wevent, .event_flags = wflags }
|
||||
#define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \
|
||||
{ .id = snd_soc_dapm_dac, .name = wname, .sname = stname, \
|
||||
|
|
@ -407,6 +407,10 @@ int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
|
|||
int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card);
|
||||
void snd_soc_dapm_connect_dai_link_widgets(struct snd_soc_card *card);
|
||||
|
||||
int snd_soc_dapm_update_dai(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params,
|
||||
struct snd_soc_dai *dai);
|
||||
|
||||
/* dapm path setup */
|
||||
int snd_soc_dapm_new_widgets(struct snd_soc_card *card);
|
||||
void snd_soc_dapm_free(struct snd_soc_dapm_context *dapm);
|
||||
|
|
@ -519,6 +523,9 @@ enum snd_soc_dapm_type {
|
|||
snd_soc_dapm_asrc, /* DSP/CODEC ASRC component */
|
||||
snd_soc_dapm_encoder, /* FW/SW audio encoder component */
|
||||
snd_soc_dapm_decoder, /* FW/SW audio decoder component */
|
||||
|
||||
/* Don't edit below this line */
|
||||
SND_SOC_DAPM_TYPE_COUNT
|
||||
};
|
||||
|
||||
enum snd_soc_dapm_subclass {
|
||||
|
|
@ -540,6 +547,8 @@ struct snd_soc_dapm_route {
|
|||
/* Note: currently only supported for links where source is a supply */
|
||||
int (*connected)(struct snd_soc_dapm_widget *source,
|
||||
struct snd_soc_dapm_widget *sink);
|
||||
|
||||
struct snd_soc_dobj dobj;
|
||||
};
|
||||
|
||||
/* dapm audio path between two widgets */
|
||||
|
|
@ -625,6 +634,8 @@ struct snd_soc_dapm_widget {
|
|||
int endpoints[2];
|
||||
|
||||
struct clk *clk;
|
||||
|
||||
int channel;
|
||||
};
|
||||
|
||||
struct snd_soc_dapm_update {
|
||||
|
|
|
|||
|
|
@ -38,12 +38,14 @@ struct snd_soc_dapm_route;
|
|||
enum snd_soc_dobj_type {
|
||||
SND_SOC_DOBJ_NONE = 0, /* object is not dynamic */
|
||||
SND_SOC_DOBJ_MIXER,
|
||||
SND_SOC_DOBJ_ENUM,
|
||||
SND_SOC_DOBJ_BYTES,
|
||||
SND_SOC_DOBJ_PCM,
|
||||
SND_SOC_DOBJ_DAI_LINK,
|
||||
SND_SOC_DOBJ_CODEC_LINK,
|
||||
SND_SOC_DOBJ_ENUM,
|
||||
SND_SOC_DOBJ_GRAPH,
|
||||
SND_SOC_DOBJ_WIDGET,
|
||||
SND_SOC_DOBJ_DAI_LINK,
|
||||
SND_SOC_DOBJ_PCM,
|
||||
SND_SOC_DOBJ_CODEC_LINK,
|
||||
SND_SOC_DOBJ_BACKEND_LINK,
|
||||
};
|
||||
|
||||
/* dynamic control object */
|
||||
|
|
|
|||
|
|
@ -802,6 +802,9 @@ struct snd_soc_component_driver {
|
|||
int probe_order;
|
||||
int remove_order;
|
||||
|
||||
/* signal if the module handling the component cannot be removed */
|
||||
unsigned int ignore_module_refcount:1;
|
||||
|
||||
/* bits */
|
||||
unsigned int idle_bias_on:1;
|
||||
unsigned int suspend_bias_off:1;
|
||||
|
|
@ -891,6 +894,18 @@ struct snd_soc_dai_link {
|
|||
/* config - must be set by machine driver */
|
||||
const char *name; /* Codec name */
|
||||
const char *stream_name; /* Stream name */
|
||||
|
||||
/*
|
||||
* cpu_name
|
||||
* cpu_of_node
|
||||
* cpu_dai_name
|
||||
*
|
||||
* These are legacy style, and will be replaced to
|
||||
* modern style (= snd_soc_dai_link_component) in the future,
|
||||
* but, not yet supported so far.
|
||||
* If modern style was supported for CPU, all driver will switch
|
||||
* to use it, and, legacy style code will be removed from ALSA SoC.
|
||||
*/
|
||||
/*
|
||||
* You MAY specify the link's CPU-side device, either by device name,
|
||||
* or by DT/OF node, but not both. If this information is omitted,
|
||||
|
|
@ -906,6 +921,19 @@ struct snd_soc_dai_link {
|
|||
* only, which only works well when that device exposes a single DAI.
|
||||
*/
|
||||
const char *cpu_dai_name;
|
||||
|
||||
/*
|
||||
* codec_name
|
||||
* codec_of_node
|
||||
* codec_dai_name
|
||||
*
|
||||
* These are legacy style, it will be converted to modern style
|
||||
* (= snd_soc_dai_link_component) automatically in soc-core
|
||||
* if driver is using legacy style.
|
||||
* Driver shouldn't use both legacy and modern style in the same time.
|
||||
* If modern style was supported for CPU, all driver will switch
|
||||
* to use it, and, legacy style code will be removed from ALSA SoC.
|
||||
*/
|
||||
/*
|
||||
* You MUST specify the link's codec, either by device name, or by
|
||||
* DT/OF node, but not both.
|
||||
|
|
@ -918,6 +946,17 @@ struct snd_soc_dai_link {
|
|||
struct snd_soc_dai_link_component *codecs;
|
||||
unsigned int num_codecs;
|
||||
|
||||
/*
|
||||
* platform_name
|
||||
* platform_of_node
|
||||
*
|
||||
* These are legacy style, it will be converted to modern style
|
||||
* (= snd_soc_dai_link_component) automatically in soc-core
|
||||
* if driver is using legacy style.
|
||||
* Driver shouldn't use both legacy and modern style in the same time.
|
||||
* If modern style was supported for CPU, all driver will switch
|
||||
* to use it, and, legacy style code will be removed from ALSA SoC.
|
||||
*/
|
||||
/*
|
||||
* You MAY specify the link's platform/PCM/DMA driver, either by
|
||||
* device name, or by DT/OF node, but not both. Some forms of link
|
||||
|
|
@ -925,7 +964,8 @@ struct snd_soc_dai_link {
|
|||
*/
|
||||
const char *platform_name;
|
||||
struct device_node *platform_of_node;
|
||||
struct snd_soc_dai_link_component *platform;
|
||||
struct snd_soc_dai_link_component *platforms;
|
||||
unsigned int num_platforms;
|
||||
|
||||
int id; /* optional ID for machine driver link identification */
|
||||
|
||||
|
|
@ -1543,6 +1583,37 @@ struct snd_soc_dai *snd_soc_card_get_codec_dai(struct snd_soc_card *card,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline
|
||||
int snd_soc_fixup_dai_links_platform_name(struct snd_soc_card *card,
|
||||
const char *platform_name)
|
||||
{
|
||||
struct snd_soc_dai_link *dai_link;
|
||||
const char *name;
|
||||
int i;
|
||||
|
||||
if (!platform_name) /* nothing to do */
|
||||
return 0;
|
||||
|
||||
/* set platform name for each dailink */
|
||||
for_each_card_prelinks(card, i, dai_link) {
|
||||
name = devm_kstrdup(card->dev, platform_name, GFP_KERNEL);
|
||||
if (!name)
|
||||
return -ENOMEM;
|
||||
|
||||
if (dai_link->platforms)
|
||||
/* only single platform is supported for now */
|
||||
dai_link->platforms->name = name;
|
||||
else
|
||||
/*
|
||||
* legacy mode, this case will be removed when all
|
||||
* derivers are switched to modern style dai_link.
|
||||
*/
|
||||
dai_link->platform_name = name;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
extern struct dentry *snd_soc_debugfs_root;
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in a new issue