• Richard Fitzgerald's avatar
    ASoC: SOF: Pass PCI SSID to machine driver · ba2de401
    Richard Fitzgerald authored
    Pass the PCI SSID of the audio interface through to the machine driver.
    This allows the machine driver to use the SSID to uniquely identify the
    specific hardware configuration and apply any platform-specific
    configuration.
    
    struct snd_sof_pdata is passed around inside the SOF code, but it then
    passes configuration information to the machine driver through
    struct snd_soc_acpi_mach and struct snd_soc_acpi_mach_params. So SSID
    information has been added to both snd_sof_pdata and
    snd_soc_acpi_mach_params.
    
    PCI does not define 0x0000 as an invalid value so we can't use zero to
    indicate that the struct member was not written. Instead a flag is
    included to indicate that a value has been written to the
    subsystem_vendor and subsystem_device members.
    
    sof_pci_probe() creates the struct snd_sof_pdata. It is passed a struct
    pci_dev so it can fill in the SSID value.
    
    sof_machine_check() finds the appropriate struct snd_soc_acpi_mach. It
    copies the SSID information across to the struct snd_soc_acpi_mach_params.
    This done before calling any custom set_mach_params() so that it could be
    used by the set_mach_params() callback to apply variant params.
    
    The machine driver receives the struct snd_soc_acpi_mach as its
    platform_data.
    Signed-off-by: default avatarRichard Fitzgerald <rf@opensource.cirrus.com>
    Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://lore.kernel.org/r/20230912163207.3498161-3-rf@opensource.cirrus.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    ba2de401
sof-audio.c 29.2 KB