diff options
Diffstat (limited to 'sound/soc/intel/skylake/skl-pcm.c')
| -rw-r--r-- | sound/soc/intel/skylake/skl-pcm.c | 72 | 
1 files changed, 37 insertions, 35 deletions
diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c index e46828533826..15cb8ac3e374 100644 --- a/sound/soc/intel/skylake/skl-pcm.c +++ b/sound/soc/intel/skylake/skl-pcm.c @@ -959,6 +959,17 @@ static struct snd_soc_dai_driver skl_platform_dai[] = {  	},  },  { +	.name = "DMIC16k Pin", +	.ops = &skl_dmic_dai_ops, +	.capture = { +		.stream_name = "DMIC16k Rx", +		.channels_min = HDA_MONO, +		.channels_max = HDA_QUAD, +		.rates = SNDRV_PCM_RATE_16000, +		.formats = SNDRV_PCM_FMTBIT_S16_LE, +	}, +}, +{  	.name = "HD-Codec Pin",  	.ops = &skl_link_dai_ops,  	.playback = { @@ -1307,29 +1318,31 @@ static int skl_populate_modules(struct skl *skl)  					"query module info failed\n");  				return ret;  			} + +			skl_tplg_add_moduleid_in_bind_params(skl, w);  		}  	}  	return ret;  } -static int skl_platform_soc_probe(struct snd_soc_platform *platform) +static int skl_platform_soc_probe(struct snd_soc_component *component)  { -	struct hdac_ext_bus *ebus = dev_get_drvdata(platform->dev); +	struct hdac_ext_bus *ebus = dev_get_drvdata(component->dev);  	struct skl *skl = ebus_to_skl(ebus);  	const struct skl_dsp_ops *ops;  	int ret; -	pm_runtime_get_sync(platform->dev); +	pm_runtime_get_sync(component->dev);  	if ((ebus_to_hbus(ebus))->ppcap) { -		skl->platform = platform; +		skl->component = component;  		/* init debugfs */  		skl->debugfs = skl_debugfs_init(skl); -		ret = skl_tplg_init(platform, ebus); +		ret = skl_tplg_init(component, ebus);  		if (ret < 0) { -			dev_err(platform->dev, "Failed to init topology!\n"); +			dev_err(component->dev, "Failed to init topology!\n");  			return ret;  		} @@ -1339,17 +1352,22 @@ static int skl_platform_soc_probe(struct snd_soc_platform *platform)  			return -EIO;  		if (skl->skl_sst->is_first_boot == false) { -			dev_err(platform->dev, "DSP reports first boot done!!!\n"); +			dev_err(component->dev, "DSP reports first boot done!!!\n");  			return -EIO;  		} -		/* disable dynamic clock gating during fw and lib download */ -		skl->skl_sst->enable_miscbdcge(platform->dev, false); +		/* +		 * Disable dynamic clock and power gating during firmware +		 * and library download +		 */ +		skl->skl_sst->enable_miscbdcge(component->dev, false); +		skl->skl_sst->clock_power_gating(component->dev, false); -		ret = ops->init_fw(platform->dev, skl->skl_sst); -		skl->skl_sst->enable_miscbdcge(platform->dev, true); +		ret = ops->init_fw(component->dev, skl->skl_sst); +		skl->skl_sst->enable_miscbdcge(component->dev, true); +		skl->skl_sst->clock_power_gating(component->dev, true);  		if (ret < 0) { -			dev_err(platform->dev, "Failed to boot first fw: %d\n", ret); +			dev_err(component->dev, "Failed to boot first fw: %d\n", ret);  			return ret;  		}  		skl_populate_modules(skl); @@ -1362,22 +1380,20 @@ static int skl_platform_soc_probe(struct snd_soc_platform *platform)  					skl->cfg.astate_cfg);  		}  	} -	pm_runtime_mark_last_busy(platform->dev); -	pm_runtime_put_autosuspend(platform->dev); +	pm_runtime_mark_last_busy(component->dev); +	pm_runtime_put_autosuspend(component->dev);  	return 0;  } -static const struct snd_soc_platform_driver skl_platform_drv  = { + +static const struct snd_soc_component_driver skl_component  = { +	.name		= "pcm",  	.probe		= skl_platform_soc_probe,  	.ops		= &skl_platform_ops,  	.pcm_new	= skl_pcm_new,  	.pcm_free	= skl_pcm_free,  }; -static const struct snd_soc_component_driver skl_component = { -	.name           = "pcm", -}; -  int skl_platform_register(struct device *dev)  {  	int ret; @@ -1389,12 +1405,6 @@ int skl_platform_register(struct device *dev)  	INIT_LIST_HEAD(&skl->ppl_list);  	INIT_LIST_HEAD(&skl->bind_list); -	ret = snd_soc_register_platform(dev, &skl_platform_drv); -	if (ret) { -		dev_err(dev, "soc platform registration failed %d\n", ret); -		return ret; -	} -  	skl->dais = kmemdup(skl_platform_dai, sizeof(skl_platform_dai),  			    GFP_KERNEL);  	if (!skl->dais) { @@ -1416,18 +1426,12 @@ int skl_platform_register(struct device *dev)  		num_dais += ARRAY_SIZE(skl_fe_dai);  	} -	ret = snd_soc_register_component(dev, &skl_component, +	ret = devm_snd_soc_register_component(dev, &skl_component,  					 skl->dais, num_dais); -	if (ret) { +	if (ret)  		dev_err(dev, "soc component registration failed %d\n", ret); -		goto err; -	} - -	return 0;  err: -	snd_soc_unregister_platform(dev);  	return ret; -  }  int skl_platform_unregister(struct device *dev) @@ -1443,8 +1447,6 @@ int skl_platform_unregister(struct device *dev)  		}  	} -	snd_soc_unregister_component(dev); -	snd_soc_unregister_platform(dev);  	kfree(skl->dais);  	return 0;  | 

