Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
0002 //
0003 // This file is provided under a dual BSD/GPLv2 license.  When using or
0004 // redistributing this file, you may do so under either license.
0005 //
0006 // Copyright(c) 2018-2021 Intel Corporation. All rights reserved.
0007 //
0008 // Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
0009 //
0010 
0011 #include <linux/module.h>
0012 #include <linux/pci.h>
0013 #include <sound/soc-acpi.h>
0014 #include <sound/soc-acpi-intel-match.h>
0015 #include <sound/sof.h>
0016 #include "../ops.h"
0017 #include "../sof-pci-dev.h"
0018 
0019 /* platform specific devices */
0020 #include "hda.h"
0021 
0022 static const struct sof_dev_desc tgl_desc = {
0023     .machines               = snd_soc_acpi_intel_tgl_machines,
0024     .alt_machines       = snd_soc_acpi_intel_tgl_sdw_machines,
0025     .use_acpi_target_states = true,
0026     .resindex_lpe_base      = 0,
0027     .resindex_pcicfg_base   = -1,
0028     .resindex_imr_base      = -1,
0029     .irqindex_host_ipc      = -1,
0030     .chip_info = &tgl_chip_info,
0031     .ipc_supported_mask = BIT(SOF_IPC) | BIT(SOF_INTEL_IPC4),
0032     .ipc_default        = SOF_IPC,
0033     .default_fw_path = {
0034         [SOF_IPC] = "intel/sof",
0035         [SOF_INTEL_IPC4] = "intel/avs/tgl",
0036     },
0037     .default_tplg_path = {
0038         [SOF_IPC] = "intel/sof-tplg",
0039         [SOF_INTEL_IPC4] = "intel/avs-tplg",
0040     },
0041     .default_fw_filename = {
0042         [SOF_IPC] = "sof-tgl.ri",
0043         [SOF_INTEL_IPC4] = "dsp_basefw.bin",
0044     },
0045     .nocodec_tplg_filename = "sof-tgl-nocodec.tplg",
0046     .ops = &sof_tgl_ops,
0047     .ops_init = sof_tgl_ops_init,
0048 };
0049 
0050 static const struct sof_dev_desc tglh_desc = {
0051     .machines               = snd_soc_acpi_intel_tgl_machines,
0052     .alt_machines       = snd_soc_acpi_intel_tgl_sdw_machines,
0053     .use_acpi_target_states = true,
0054     .resindex_lpe_base      = 0,
0055     .resindex_pcicfg_base   = -1,
0056     .resindex_imr_base      = -1,
0057     .irqindex_host_ipc      = -1,
0058     .chip_info = &tglh_chip_info,
0059     .ipc_supported_mask = BIT(SOF_IPC) | BIT(SOF_INTEL_IPC4),
0060     .ipc_default        = SOF_IPC,
0061     .default_fw_path = {
0062         [SOF_IPC] = "intel/sof",
0063         [SOF_INTEL_IPC4] = "intel/avs/tgl-h",
0064     },
0065     .default_tplg_path = {
0066         [SOF_IPC] = "intel/sof-tplg",
0067         [SOF_INTEL_IPC4] = "intel/avs-tplg",
0068     },
0069     .default_fw_filename = {
0070         [SOF_IPC] = "sof-tgl-h.ri",
0071         [SOF_INTEL_IPC4] = "dsp_basefw.bin",
0072     },
0073     .nocodec_tplg_filename = "sof-tgl-nocodec.tplg",
0074     .ops = &sof_tgl_ops,
0075     .ops_init = sof_tgl_ops_init,
0076     .ops_free = hda_ops_free,
0077 };
0078 
0079 static const struct sof_dev_desc ehl_desc = {
0080     .machines               = snd_soc_acpi_intel_ehl_machines,
0081     .use_acpi_target_states = true,
0082     .resindex_lpe_base      = 0,
0083     .resindex_pcicfg_base   = -1,
0084     .resindex_imr_base      = -1,
0085     .irqindex_host_ipc      = -1,
0086     .chip_info = &ehl_chip_info,
0087     .ipc_supported_mask = BIT(SOF_IPC) | BIT(SOF_INTEL_IPC4),
0088     .ipc_default        = SOF_IPC,
0089     .default_fw_path = {
0090         [SOF_IPC] = "intel/sof",
0091         [SOF_INTEL_IPC4] = "intel/avs/ehl",
0092     },
0093     .default_tplg_path = {
0094         [SOF_IPC] = "intel/sof-tplg",
0095         [SOF_INTEL_IPC4] = "intel/avs-tplg",
0096     },
0097     .default_fw_filename = {
0098         [SOF_IPC] = "sof-ehl.ri",
0099         [SOF_INTEL_IPC4] = "dsp_basefw.bin",
0100     },
0101     .nocodec_tplg_filename = "sof-ehl-nocodec.tplg",
0102     .ops = &sof_tgl_ops,
0103     .ops_init = sof_tgl_ops_init,
0104 };
0105 
0106 static const struct sof_dev_desc adls_desc = {
0107     .machines               = snd_soc_acpi_intel_adl_machines,
0108     .alt_machines           = snd_soc_acpi_intel_adl_sdw_machines,
0109     .use_acpi_target_states = true,
0110     .resindex_lpe_base      = 0,
0111     .resindex_pcicfg_base   = -1,
0112     .resindex_imr_base      = -1,
0113     .irqindex_host_ipc      = -1,
0114     .chip_info = &adls_chip_info,
0115     .ipc_supported_mask = BIT(SOF_IPC) | BIT(SOF_INTEL_IPC4),
0116     .ipc_default        = SOF_IPC,
0117     .default_fw_path = {
0118         [SOF_IPC] = "intel/sof",
0119         [SOF_INTEL_IPC4] = "intel/avs/adl-s",
0120     },
0121     .default_tplg_path = {
0122         [SOF_IPC] = "intel/sof-tplg",
0123         [SOF_INTEL_IPC4] = "intel/avs-tplg",
0124     },
0125     .default_fw_filename = {
0126         [SOF_IPC] = "sof-adl-s.ri",
0127         [SOF_INTEL_IPC4] = "dsp_basefw.bin",
0128     },
0129     .nocodec_tplg_filename = "sof-adl-nocodec.tplg",
0130     .ops = &sof_tgl_ops,
0131     .ops_init = sof_tgl_ops_init,
0132 };
0133 
0134 static const struct sof_dev_desc adl_desc = {
0135     .machines               = snd_soc_acpi_intel_adl_machines,
0136     .alt_machines           = snd_soc_acpi_intel_adl_sdw_machines,
0137     .use_acpi_target_states = true,
0138     .resindex_lpe_base      = 0,
0139     .resindex_pcicfg_base   = -1,
0140     .resindex_imr_base      = -1,
0141     .irqindex_host_ipc      = -1,
0142     .chip_info = &tgl_chip_info,
0143     .ipc_supported_mask = BIT(SOF_IPC) | BIT(SOF_INTEL_IPC4),
0144     .ipc_default        = SOF_IPC,
0145     .default_fw_path = {
0146         [SOF_IPC] = "intel/sof",
0147         [SOF_INTEL_IPC4] = "intel/avs/adl",
0148     },
0149     .default_tplg_path = {
0150         [SOF_IPC] = "intel/sof-tplg",
0151         [SOF_INTEL_IPC4] = "intel/avs-tplg",
0152     },
0153     .default_fw_filename = {
0154         [SOF_IPC] = "sof-adl.ri",
0155         [SOF_INTEL_IPC4] = "dsp_basefw.bin",
0156     },
0157     .nocodec_tplg_filename = "sof-adl-nocodec.tplg",
0158     .ops = &sof_tgl_ops,
0159     .ops_init = sof_tgl_ops_init,
0160 };
0161 
0162 /* PCI IDs */
0163 static const struct pci_device_id sof_pci_ids[] = {
0164     { PCI_DEVICE(0x8086, 0xa0c8), /* TGL-LP */
0165         .driver_data = (unsigned long)&tgl_desc},
0166     { PCI_DEVICE(0x8086, 0x43c8), /* TGL-H */
0167         .driver_data = (unsigned long)&tglh_desc},
0168     { PCI_DEVICE(0x8086, 0x4b55), /* EHL */
0169         .driver_data = (unsigned long)&ehl_desc},
0170     { PCI_DEVICE(0x8086, 0x4b58), /* EHL */
0171         .driver_data = (unsigned long)&ehl_desc},
0172     { PCI_DEVICE(0x8086, 0x7ad0), /* ADL-S */
0173         .driver_data = (unsigned long)&adls_desc},
0174     { PCI_DEVICE(0x8086, 0x7a50), /* RPL-S */
0175         .driver_data = (unsigned long)&adls_desc},
0176     { PCI_DEVICE(0x8086, 0x51c8), /* ADL-P */
0177         .driver_data = (unsigned long)&adl_desc},
0178     { PCI_DEVICE(0x8086, 0x51cd), /* ADL-P */
0179         .driver_data = (unsigned long)&adl_desc},
0180     { PCI_DEVICE(0x8086, 0x51c9), /* ADL-PS */
0181         .driver_data = (unsigned long)&adl_desc},
0182     { PCI_DEVICE(0x8086, 0x51ca), /* RPL-P */
0183         .driver_data = (unsigned long)&adl_desc},
0184     { PCI_DEVICE(0x8086, 0x51cb), /* RPL-P */
0185         .driver_data = (unsigned long)&adl_desc},
0186     { PCI_DEVICE(0x8086, 0x51cc), /* ADL-M */
0187         .driver_data = (unsigned long)&adl_desc},
0188     { PCI_DEVICE(0x8086, 0x54c8), /* ADL-N */
0189         .driver_data = (unsigned long)&adl_desc},
0190     { 0, }
0191 };
0192 MODULE_DEVICE_TABLE(pci, sof_pci_ids);
0193 
0194 /* pci_driver definition */
0195 static struct pci_driver snd_sof_pci_intel_tgl_driver = {
0196     .name = "sof-audio-pci-intel-tgl",
0197     .id_table = sof_pci_ids,
0198     .probe = hda_pci_intel_probe,
0199     .remove = sof_pci_remove,
0200     .shutdown = sof_pci_shutdown,
0201     .driver = {
0202         .pm = &sof_pci_pm,
0203     },
0204 };
0205 module_pci_driver(snd_sof_pci_intel_tgl_driver);
0206 
0207 MODULE_LICENSE("Dual BSD/GPL");
0208 MODULE_IMPORT_NS(SND_SOC_SOF_INTEL_HDA_COMMON);
0209 MODULE_IMPORT_NS(SND_SOC_SOF_PCI_DEV);