···29172917#ifdef CONFIG_PM_SLEEP29182918static int hda_codec_pm_prepare(struct device *dev)29192919{29202920+ dev->power.power_state = PMSG_SUSPEND;29202921 return pm_runtime_suspended(dev);29212922}2922292329232924static void hda_codec_pm_complete(struct device *dev)29242925{29252926 struct hda_codec *codec = dev_to_hda_codec(dev);29272927+29282928+ /* If no other pm-functions are called between prepare() and complete() */29292929+ if (dev->power.power_state.event == PM_EVENT_SUSPEND)29302930+ dev->power.power_state = PMSG_RESUME;2926293129272932 if (pm_runtime_suspended(dev) && (codec->jackpoll_interval ||29282933 hda_codec_need_resume(codec) || codec->forced_resume))
···22062206 break;22072207 case HDA_FIXUP_ACT_PROBE:2208220822092209- /* Set initial volume on Bullseye to -26 dB */22102210- if (codec->fixup_id == CS8409_BULLSEYE)22112211- snd_hda_codec_amp_init_stereo(codec, CS8409_CS42L42_DMIC_ADC_PIN_NID,22122212- HDA_INPUT, 0, 0xff, 0x19);22092209+ /* Set initial DMIC volume to -26 dB */22102210+ snd_hda_codec_amp_init_stereo(codec, CS8409_CS42L42_DMIC_ADC_PIN_NID,22112211+ HDA_INPUT, 0, 0xff, 0x19);22132212 snd_hda_gen_add_kctl(&spec->gen,22142213 NULL, &cs8409_cs42l42_hp_volume_mixer);22152214 snd_hda_gen_add_kctl(&spec->gen,
···408408 },409409 {},410410};411411+MODULE_DEVICE_TABLE(of, sti_sas_dev_match);411412412413static int sti_sas_driver_probe(struct platform_device *pdev)413414{
+1
sound/soc/fsl/Kconfig
···119119 tristate "NXP Audio Base On RPMSG support"120120 depends on COMMON_CLK121121 depends on RPMSG122122+ depends on SND_IMX_SOC || SND_IMX_SOC = n122123 select SND_SOC_IMX_RPMSG if SND_IMX_SOC != n123124 help124125 Say Y if you want to add rpmsg audio support for the Freescale CPUs.
+29-28
sound/soc/generic/audio-graph-card.c
···209209static int graph_parse_node(struct asoc_simple_priv *priv,210210 struct device_node *ep,211211 struct link_info *li,212212- int is_cpu)212212+ int *cpu)213213{214214 struct device *dev = simple_priv_to_dev(priv);215215 struct device_node *top = dev->of_node;···217217 struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);218218 struct snd_soc_dai_link_component *dlc;219219 struct asoc_simple_dai *dai;220220- int ret, single = 0;220220+ int ret;221221222222- if (is_cpu) {222222+ if (cpu) {223223 dlc = asoc_link_to_cpu(dai_link, 0);224224 dai = simple_props_to_dai_cpu(dai_props, 0);225225 } else {···229229230230 graph_parse_mclk_fs(top, ep, dai_props);231231232232- ret = asoc_simple_parse_dai(ep, dlc, &single);232232+ ret = asoc_simple_parse_dai(ep, dlc, cpu);233233 if (ret < 0)234234 return ret;235235···240240 ret = asoc_simple_parse_clk(dev, ep, dai, dlc);241241 if (ret < 0)242242 return ret;243243-244244- if (is_cpu)245245- asoc_simple_canonicalize_cpu(dlc, single);246243247244 return 0;248245}···273276 struct link_info *li)274277{275278 struct device *dev = simple_priv_to_dev(priv);276276- struct snd_soc_card *card = simple_priv_to_card(priv);277279 struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);278280 struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);279281 struct device_node *top = dev->of_node;280282 struct device_node *ep = li->cpu ? cpu_ep : codec_ep;281281- struct device_node *port;282282- struct device_node *ports;283283- struct snd_soc_dai_link_component *cpus = asoc_link_to_cpu(dai_link, 0);284284- struct snd_soc_dai_link_component *codecs = asoc_link_to_codec(dai_link, 0);285283 char dai_name[64];286284 int ret;287287-288288- port = of_get_parent(ep);289289- ports = of_get_parent(port);290285291286 dev_dbg(dev, "link_of DPCM (%pOF)\n", ep);292287293288 if (li->cpu) {289289+ struct snd_soc_card *card = simple_priv_to_card(priv);290290+ struct snd_soc_dai_link_component *cpus = asoc_link_to_cpu(dai_link, 0);291291+ int is_single_links = 0;292292+294293 /* Codec is dummy */295294296295 /* FE settings */297296 dai_link->dynamic = 1;298297 dai_link->dpcm_merged_format = 1;299298300300- ret = graph_parse_node(priv, cpu_ep, li, 1);299299+ ret = graph_parse_node(priv, cpu_ep, li, &is_single_links);301300 if (ret)302302- goto out_put_node;301301+ return ret;303302304303 snprintf(dai_name, sizeof(dai_name),305304 "fe.%pOFP.%s", cpus->of_node, cpus->dai_name);···311318 */312319 if (card->component_chaining && !soc_component_is_pcm(cpus))313320 dai_link->no_pcm = 1;321321+322322+ asoc_simple_canonicalize_cpu(cpus, is_single_links);314323 } else {315315- struct snd_soc_codec_conf *cconf;324324+ struct snd_soc_codec_conf *cconf = simple_props_to_codec_conf(dai_props, 0);325325+ struct snd_soc_dai_link_component *codecs = asoc_link_to_codec(dai_link, 0);326326+ struct device_node *port;327327+ struct device_node *ports;316328317329 /* CPU is dummy */318330···325327 dai_link->no_pcm = 1;326328 dai_link->be_hw_params_fixup = asoc_simple_be_hw_params_fixup;327329328328- cconf = simple_props_to_codec_conf(dai_props, 0);329329-330330- ret = graph_parse_node(priv, codec_ep, li, 0);330330+ ret = graph_parse_node(priv, codec_ep, li, NULL);331331 if (ret < 0)332332- goto out_put_node;332332+ return ret;333333334334 snprintf(dai_name, sizeof(dai_name),335335 "be.%pOFP.%s", codecs->of_node, codecs->dai_name);336336337337 /* check "prefix" from top node */338338+ port = of_get_parent(ep);339339+ ports = of_get_parent(port);338340 snd_soc_of_parse_node_prefix(top, cconf, codecs->of_node,339341 "prefix");340342 if (of_node_name_eq(ports, "ports"))341343 snd_soc_of_parse_node_prefix(ports, cconf, codecs->of_node, "prefix");342344 snd_soc_of_parse_node_prefix(port, cconf, codecs->of_node,343345 "prefix");346346+347347+ of_node_put(ports);348348+ of_node_put(port);344349 }345350346351 graph_parse_convert(dev, ep, &dai_props->adata);···352351353352 ret = graph_link_init(priv, cpu_ep, codec_ep, li, dai_name);354353355355-out_put_node:356354 li->link++;357355358358- of_node_put(ports);359359- of_node_put(port);360356 return ret;361357}362358···367369 struct snd_soc_dai_link_component *cpus = asoc_link_to_cpu(dai_link, 0);368370 struct snd_soc_dai_link_component *codecs = asoc_link_to_codec(dai_link, 0);369371 char dai_name[64];370370- int ret;372372+ int ret, is_single_links = 0;371373372374 dev_dbg(dev, "link_of (%pOF)\n", cpu_ep);373375374374- ret = graph_parse_node(priv, cpu_ep, li, 1);376376+ ret = graph_parse_node(priv, cpu_ep, li, &is_single_links);375377 if (ret < 0)376378 return ret;377379378378- ret = graph_parse_node(priv, codec_ep, li, 0);380380+ ret = graph_parse_node(priv, codec_ep, li, NULL);379381 if (ret < 0)380382 return ret;381383382384 snprintf(dai_name, sizeof(dai_name),383385 "%s-%s", cpus->dai_name, codecs->dai_name);386386+387387+ asoc_simple_canonicalize_cpu(cpus, is_single_links);388388+384389 ret = graph_link_init(priv, cpu_ep, codec_ep, li, dai_name);385390 if (ret < 0)386391 return ret;
+83-85
sound/soc/generic/simple-card.c
···9393}94949595static void simple_parse_mclk_fs(struct device_node *top,9696- struct device_node *cpu,9797- struct device_node *codec,9696+ struct device_node *np,9897 struct simple_dai_props *props,9998 char *prefix)10099{101101- struct device_node *node = of_get_parent(cpu);100100+ struct device_node *node = of_get_parent(np);102101 char prop[128];103102104103 snprintf(prop, sizeof(prop), "%smclk-fs", PREFIX);···105106106107 snprintf(prop, sizeof(prop), "%smclk-fs", prefix);107108 of_property_read_u32(node, prop, &props->mclk_fs);108108- of_property_read_u32(cpu, prop, &props->mclk_fs);109109- of_property_read_u32(codec, prop, &props->mclk_fs);109109+ of_property_read_u32(np, prop, &props->mclk_fs);110110111111 of_node_put(node);112112+}113113+114114+static int simple_parse_node(struct asoc_simple_priv *priv,115115+ struct device_node *np,116116+ struct link_info *li,117117+ char *prefix,118118+ int *cpu)119119+{120120+ struct device *dev = simple_priv_to_dev(priv);121121+ struct device_node *top = dev->of_node;122122+ struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);123123+ struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);124124+ struct snd_soc_dai_link_component *dlc;125125+ struct asoc_simple_dai *dai;126126+ int ret;127127+128128+ if (cpu) {129129+ dlc = asoc_link_to_cpu(dai_link, 0);130130+ dai = simple_props_to_dai_cpu(dai_props, 0);131131+ } else {132132+ dlc = asoc_link_to_codec(dai_link, 0);133133+ dai = simple_props_to_dai_codec(dai_props, 0);134134+ }135135+136136+ simple_parse_mclk_fs(top, np, dai_props, prefix);137137+138138+ ret = asoc_simple_parse_dai(np, dlc, cpu);139139+ if (ret)140140+ return ret;141141+142142+ ret = asoc_simple_parse_clk(dev, np, dai, dlc);143143+ if (ret)144144+ return ret;145145+146146+ ret = asoc_simple_parse_tdm(np, dai);147147+ if (ret)148148+ return ret;149149+150150+ return 0;151151+}152152+153153+static int simple_link_init(struct asoc_simple_priv *priv,154154+ struct device_node *node,155155+ struct device_node *codec,156156+ struct link_info *li,157157+ char *prefix, char *name)158158+{159159+ struct device *dev = simple_priv_to_dev(priv);160160+ struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);161161+ int ret;162162+163163+ ret = asoc_simple_parse_daifmt(dev, node, codec,164164+ prefix, &dai_link->dai_fmt);165165+ if (ret < 0)166166+ return 0;167167+168168+ dai_link->init = asoc_simple_dai_init;169169+ dai_link->ops = &simple_ops;170170+171171+ return asoc_simple_set_dailink_name(dev, dai_link, name);112172}113173114174static int simple_dai_link_of_dpcm(struct asoc_simple_priv *priv,···179121 struct device *dev = simple_priv_to_dev(priv);180122 struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);181123 struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);182182- struct asoc_simple_dai *dai;183183- struct snd_soc_dai_link_component *cpus = asoc_link_to_cpu(dai_link, 0);184184- struct snd_soc_dai_link_component *codecs = asoc_link_to_codec(dai_link, 0);185185- struct snd_soc_dai_link_component *platforms = asoc_link_to_platform(dai_link, 0);186124 struct device_node *top = dev->of_node;187125 struct device_node *node = of_get_parent(np);188126 char *prefix = "";127127+ char dai_name[64];189128 int ret;190129191130 dev_dbg(dev, "link_of DPCM (%pOF)\n", np);192192-193193- li->link++;194131195132 /* For single DAI link & old style of DT node */196133 if (is_top)197134 prefix = PREFIX;198135199136 if (li->cpu) {137137+ struct snd_soc_dai_link_component *cpus = asoc_link_to_cpu(dai_link, 0);138138+ struct snd_soc_dai_link_component *platforms = asoc_link_to_platform(dai_link, 0);200139 int is_single_links = 0;201140202141 /* Codec is dummy */···202147 dai_link->dynamic = 1;203148 dai_link->dpcm_merged_format = 1;204149205205- dai = simple_props_to_dai_cpu(dai_props, 0);206206-207207- ret = asoc_simple_parse_dai(np, cpus, &is_single_links);208208- if (ret)209209- goto out_put_node;210210-211211- ret = asoc_simple_parse_clk(dev, np, dai, cpus);150150+ ret = simple_parse_node(priv, np, li, prefix, &is_single_links);212151 if (ret < 0)213152 goto out_put_node;214153215215- ret = asoc_simple_set_dailink_name(dev, dai_link,216216- "fe.%s",217217- cpus->dai_name);218218- if (ret < 0)219219- goto out_put_node;154154+ snprintf(dai_name, sizeof(dai_name), "fe.%s", cpus->dai_name);220155221156 asoc_simple_canonicalize_cpu(cpus, is_single_links);222157 asoc_simple_canonicalize_platform(platforms, cpus);223158 } else {159159+ struct snd_soc_dai_link_component *codecs = asoc_link_to_codec(dai_link, 0);224160 struct snd_soc_codec_conf *cconf;225161226162 /* CPU is dummy */···220174 dai_link->no_pcm = 1;221175 dai_link->be_hw_params_fixup = asoc_simple_be_hw_params_fixup;222176223223- dai = simple_props_to_dai_codec(dai_props, 0);224177 cconf = simple_props_to_codec_conf(dai_props, 0);225178226226- ret = asoc_simple_parse_dai(np, codecs, NULL);179179+ ret = simple_parse_node(priv, np, li, prefix, NULL);227180 if (ret < 0)228181 goto out_put_node;229182230230- ret = asoc_simple_parse_clk(dev, np, dai, codecs);231231- if (ret < 0)232232- goto out_put_node;233233-234234- ret = asoc_simple_set_dailink_name(dev, dai_link,235235- "be.%s",236236- codecs->dai_name);237237- if (ret < 0)238238- goto out_put_node;183183+ snprintf(dai_name, sizeof(dai_name), "be.%s", codecs->dai_name);239184240185 /* check "prefix" from top node */241186 snd_soc_of_parse_node_prefix(top, cconf, codecs->of_node,···238201 }239202240203 simple_parse_convert(dev, np, &dai_props->adata);241241- simple_parse_mclk_fs(top, np, codec, dai_props, prefix);242242-243243- ret = asoc_simple_parse_tdm(np, dai);244244- if (ret)245245- goto out_put_node;246246-247247- ret = asoc_simple_parse_daifmt(dev, node, codec,248248- prefix, &dai_link->dai_fmt);249249- if (ret < 0)250250- goto out_put_node;251204252205 snd_soc_dai_link_set_capabilities(dai_link);253206254254- dai_link->ops = &simple_ops;255255- dai_link->init = asoc_simple_dai_init;207207+ ret = simple_link_init(priv, node, codec, li, prefix, dai_name);256208257209out_put_node:210210+ li->link++;211211+258212 of_node_put(node);259213 return ret;260214}···258230{259231 struct device *dev = simple_priv_to_dev(priv);260232 struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, li->link);261261- struct simple_dai_props *dai_props = simple_priv_to_props(priv, li->link);262262- struct asoc_simple_dai *cpu_dai = simple_props_to_dai_cpu(dai_props, 0);263263- struct asoc_simple_dai *codec_dai = simple_props_to_dai_codec(dai_props, 0);264233 struct snd_soc_dai_link_component *cpus = asoc_link_to_cpu(dai_link, 0);265234 struct snd_soc_dai_link_component *codecs = asoc_link_to_codec(dai_link, 0);266235 struct snd_soc_dai_link_component *platforms = asoc_link_to_platform(dai_link, 0);267267- struct device_node *top = dev->of_node;268236 struct device_node *cpu = NULL;269237 struct device_node *node = NULL;270238 struct device_node *plat = NULL;239239+ char dai_name[64];271240 char prop[128];272241 char *prefix = "";273242 int ret, single_cpu = 0;274243275244 cpu = np;276245 node = of_get_parent(np);277277- li->link++;278246279247 dev_dbg(dev, "link_of (%pOF)\n", node);280248···281257 snprintf(prop, sizeof(prop), "%splat", prefix);282258 plat = of_get_child_by_name(node, prop);283259284284- ret = asoc_simple_parse_daifmt(dev, node, codec,285285- prefix, &dai_link->dai_fmt);260260+ ret = simple_parse_node(priv, cpu, li, prefix, &single_cpu);286261 if (ret < 0)287262 goto dai_link_of_err;288263289289- simple_parse_mclk_fs(top, cpu, codec, dai_props, prefix);290290-291291- ret = asoc_simple_parse_dai(cpu, cpus, &single_cpu);292292- if (ret < 0)293293- goto dai_link_of_err;294294-295295- ret = asoc_simple_parse_dai(codec, codecs, NULL);264264+ ret = simple_parse_node(priv, codec, li, prefix, NULL);296265 if (ret < 0)297266 goto dai_link_of_err;298267···293276 if (ret < 0)294277 goto dai_link_of_err;295278296296- ret = asoc_simple_parse_tdm(cpu, cpu_dai);297297- if (ret < 0)298298- goto dai_link_of_err;299299-300300- ret = asoc_simple_parse_tdm(codec, codec_dai);301301- if (ret < 0)302302- goto dai_link_of_err;303303-304304- ret = asoc_simple_parse_clk(dev, cpu, cpu_dai, cpus);305305- if (ret < 0)306306- goto dai_link_of_err;307307-308308- ret = asoc_simple_parse_clk(dev, codec, codec_dai, codecs);309309- if (ret < 0)310310- goto dai_link_of_err;311311-312312- ret = asoc_simple_set_dailink_name(dev, dai_link,313313- "%s-%s",314314- cpus->dai_name,315315- codecs->dai_name);316316- if (ret < 0)317317- goto dai_link_of_err;318318-319319- dai_link->ops = &simple_ops;320320- dai_link->init = asoc_simple_dai_init;279279+ snprintf(dai_name, sizeof(dai_name),280280+ "%s-%s", cpus->dai_name, codecs->dai_name);321281322282 asoc_simple_canonicalize_cpu(cpus, single_cpu);323283 asoc_simple_canonicalize_platform(platforms, cpus);324284285285+ ret = simple_link_init(priv, node, codec, li, prefix, dai_name);286286+325287dai_link_of_err:326288 of_node_put(plat);327289 of_node_put(node);290290+291291+ li->link++;328292329293 return ret;330294}