Lines Matching +full:sig +full:- +full:dir
1 // SPDX-License-Identifier: GPL-2.0-only
3 * skl-nhlt.c - Intel SKL Platform NHLT parsing
12 #include <sound/intel-nhlt.h>
14 #include "skl-i2s.h"
22 struct nhlt_fmt_cfg *fmt_config = fmt->fmt_config; in skl_get_specific_cfg()
25 dev_dbg(dev, "Format count =%d\n", fmt->fmt_count); in skl_get_specific_cfg()
27 for (i = 0; i < fmt->fmt_count; i++) { in skl_get_specific_cfg()
28 wfmt = &fmt_config->fmt_ext.fmt; in skl_get_specific_cfg()
29 dev_dbg(dev, "ch=%d fmt=%d s_rate=%d\n", wfmt->channels, in skl_get_specific_cfg()
30 wfmt->bits_per_sample, wfmt->samples_per_sec); in skl_get_specific_cfg()
31 if (wfmt->channels == no_ch && wfmt->bits_per_sample == bps) { in skl_get_specific_cfg()
36 sp_config = &fmt_config->config; in skl_get_specific_cfg()
40 if (wfmt->samples_per_sec == rate) in skl_get_specific_cfg()
44 fmt_config = (struct nhlt_fmt_cfg *)(fmt_config->config.caps + in skl_get_specific_cfg()
45 fmt_config->config.size); in skl_get_specific_cfg()
63 dev_dbg(dev, "vbus_id=%d link_type=%d dir=%d dev_type = %d\n", in skl_check_ep_match()
64 epnt->virtual_bus_id, epnt->linktype, in skl_check_ep_match()
65 epnt->direction, epnt->device_type); in skl_check_ep_match()
67 if ((epnt->virtual_bus_id == instance_id) && in skl_check_ep_match()
68 (epnt->linktype == link_type) && in skl_check_ep_match()
69 (epnt->direction == dirn)) { in skl_check_ep_match()
71 if (epnt->linktype == NHLT_LINK_DMIC) in skl_check_ep_match()
74 if (epnt->device_type == dev_type) in skl_check_ep_match()
89 struct device *dev = bus->dev; in skl_get_ep_blob()
91 struct nhlt_acpi_table *nhlt = skl->nhlt; in skl_get_ep_blob()
97 epnt = (struct nhlt_endpoint *)nhlt->desc; in skl_get_ep_blob()
99 dev_dbg(dev, "endpoint count =%d\n", nhlt->endpoint_count); in skl_get_ep_blob()
101 for (j = 0; j < nhlt->endpoint_count; j++) { in skl_get_ep_blob()
104 fmt = (struct nhlt_fmt *)(epnt->config.caps + in skl_get_ep_blob()
105 epnt->config.size); in skl_get_ep_blob()
112 epnt = (struct nhlt_endpoint *)((u8 *)epnt + epnt->length); in skl_get_ep_blob()
135 struct nhlt_acpi_table *nhlt = (struct nhlt_acpi_table *)skl->nhlt; in skl_nhlt_update_topology_bin()
137 struct device *dev = bus->dev; in skl_nhlt_update_topology_bin()
140 nhlt->header.oem_id, nhlt->header.oem_table_id, in skl_nhlt_update_topology_bin()
141 nhlt->header.oem_revision); in skl_nhlt_update_topology_bin()
143 snprintf(skl->tplg_name, sizeof(skl->tplg_name), "%x-%.6s-%.8s-%d%s", in skl_nhlt_update_topology_bin()
144 skl->pci_id, nhlt->header.oem_id, nhlt->header.oem_table_id, in skl_nhlt_update_topology_bin()
145 nhlt->header.oem_revision, "-tplg.bin"); in skl_nhlt_update_topology_bin()
147 skl_nhlt_trim_space(skl->tplg_name); in skl_nhlt_update_topology_bin()
158 struct nhlt_acpi_table *nhlt = (struct nhlt_acpi_table *)skl->nhlt; in platform_id_show()
161 sprintf(platform_id, "%x-%.6s-%.8s-%d", skl->pci_id, in platform_id_show()
162 nhlt->header.oem_id, nhlt->header.oem_table_id, in platform_id_show()
163 nhlt->header.oem_revision); in platform_id_show()
173 struct device *dev = &skl->pci->dev; in skl_nhlt_create_sysfs()
175 if (sysfs_create_file(&dev->kobj, &dev_attr_platform_id.attr)) in skl_nhlt_create_sysfs()
183 struct device *dev = &skl->pci->dev; in skl_nhlt_remove_sysfs()
185 if (skl->nhlt) in skl_nhlt_remove_sysfs()
186 sysfs_remove_file(&dev->kobj, &dev_attr_platform_id.attr); in skl_nhlt_remove_sysfs()
214 if (fmt->fmt_count == 0) in skl_get_ssp_clks()
217 for (i = 0; i < fmt->fmt_count; i++) { in skl_get_ssp_clks()
218 fmt_cfg = &fmt->fmt_config[i]; in skl_get_ssp_clks()
219 wav_fmt = &fmt_cfg->fmt_ext; in skl_get_ssp_clks()
221 channels = wav_fmt->fmt.channels; in skl_get_ssp_clks()
222 bps = wav_fmt->fmt.bits_per_sample; in skl_get_ssp_clks()
223 fs = wav_fmt->fmt.samples_per_sec; in skl_get_ssp_clks()
236 for (j = i; j < fmt->fmt_count; j++) { in skl_get_ssp_clks()
237 fmt_cfg = &fmt->fmt_config[j]; in skl_get_ssp_clks()
238 wav_fmt = &fmt_cfg->fmt_ext; in skl_get_ssp_clks()
239 if ((fs == wav_fmt->fmt.samples_per_sec) && in skl_get_ssp_clks()
240 (bps == wav_fmt->fmt.bits_per_sample)) in skl_get_ssp_clks()
242 wav_fmt->fmt.channels); in skl_get_ssp_clks()
259 fmt->fmt_config[0].config.caps; in skl_get_ssp_clks()
262 if (is_legacy_blob(i2s_config_ext->hdr.sig)) { in skl_get_ssp_clks()
264 clk_src = get_clk_src(i2s_config->mclk, in skl_get_ssp_clks()
267 clk_src = get_clk_src(i2s_config_ext->mclk, in skl_get_ssp_clks()
284 sclk[id].parent_name = parent->name; in skl_get_ssp_clks()
285 sclkfs[id].parent_name = parent->name; in skl_get_ssp_clks()
302 fmt_cfg = &fmt->fmt_config[0].config; in skl_get_mclk()
303 i2s_config_ext = (struct skl_i2s_config_blob_ext *)fmt_cfg->caps; in skl_get_mclk()
306 if (is_legacy_blob(i2s_config_ext->hdr.sig)) { in skl_get_mclk()
308 clk_src = get_clk_src(i2s_config->mclk, in skl_get_mclk()
310 clkdiv = i2s_config->mclk.mdivr & in skl_get_mclk()
313 clk_src = get_clk_src(i2s_config_ext->mclk, in skl_get_mclk()
315 clkdiv = i2s_config_ext->mclk.mdivr[0] & in skl_get_mclk()
331 mclk[id].rate_cfg[0].rate = parent->rate/div_ratio; in skl_get_mclk()
332 mclk[id].rate_cfg[0].config = &fmt->fmt_config[0]; in skl_get_mclk()
333 mclk[id].parent_name = parent->name; in skl_get_mclk()
338 struct nhlt_acpi_table *nhlt = (struct nhlt_acpi_table *)skl->nhlt; in skl_get_clks()
344 epnt = (struct nhlt_endpoint *)nhlt->desc; in skl_get_clks()
345 for (i = 0; i < nhlt->endpoint_count; i++) { in skl_get_clks()
346 if (epnt->linktype == NHLT_LINK_SSP) { in skl_get_clks()
347 id = epnt->virtual_bus_id; in skl_get_clks()
349 fmt = (struct nhlt_fmt *)(epnt->config.caps in skl_get_clks()
350 + epnt->config.size); in skl_get_clks()
355 epnt = (struct nhlt_endpoint *)((u8 *)epnt + epnt->length); in skl_get_clks()