2020-05-01 09:58:50 -05:00
// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
2019-04-12 11:08:44 -05:00
//
// This file is provided under a dual BSD/GPLv2 license. When using or
// redistributing this file, you may do so under either license.
//
// Copyright(c) 2018 Intel Corporation. All rights reserved.
//
// Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
//
/*
* Hardware interface for audio DSP on Baytrail , Braswell and Cherrytrail .
*/
# include <linux/module.h>
# include <sound/sof.h>
# include <sound/sof/xtensa.h>
2021-03-01 18:31:20 -06:00
# include <sound/soc-acpi.h>
# include <sound/soc-acpi-intel-match.h>
# include <sound/intel-dsp-config.h>
2019-04-12 11:08:44 -05:00
# include "../ops.h"
2021-05-05 12:02:35 -05:00
# include "atom.h"
2019-04-12 11:08:44 -05:00
# include "shim.h"
2021-03-01 18:31:20 -06:00
# include "../sof-acpi-dev.h"
2019-12-04 15:15:53 -06:00
# include "../sof-audio.h"
2019-12-09 18:48:53 -06:00
# include "../../intel/common/soc-intel-quirks.h"
2019-04-12 11:08:44 -05:00
static const struct snd_sof_debugfs_map byt_debugfs [ ] = {
2021-05-05 12:02:34 -05:00
{ " dmac0 " , DSP_BAR , DMAC0_OFFSET , DMAC_SIZE ,
2019-04-12 11:08:44 -05:00
SOF_DEBUGFS_ACCESS_ALWAYS } ,
2021-05-05 12:02:34 -05:00
{ " dmac1 " , DSP_BAR , DMAC1_OFFSET , DMAC_SIZE ,
2019-04-12 11:08:44 -05:00
SOF_DEBUGFS_ACCESS_ALWAYS } ,
2021-05-05 12:02:34 -05:00
{ " ssp0 " , DSP_BAR , SSP0_OFFSET , SSP_SIZE ,
2019-04-12 11:08:44 -05:00
SOF_DEBUGFS_ACCESS_ALWAYS } ,
2021-05-05 12:02:34 -05:00
{ " ssp1 " , DSP_BAR , SSP1_OFFSET , SSP_SIZE ,
2019-04-12 11:08:44 -05:00
SOF_DEBUGFS_ACCESS_ALWAYS } ,
2021-05-05 12:02:34 -05:00
{ " ssp2 " , DSP_BAR , SSP2_OFFSET , SSP_SIZE ,
2019-04-12 11:08:44 -05:00
SOF_DEBUGFS_ACCESS_ALWAYS } ,
2021-05-05 12:02:34 -05:00
{ " iram " , DSP_BAR , IRAM_OFFSET , IRAM_SIZE ,
2019-04-12 11:08:44 -05:00
SOF_DEBUGFS_ACCESS_D0_ONLY } ,
2021-05-05 12:02:34 -05:00
{ " dram " , DSP_BAR , DRAM_OFFSET , DRAM_SIZE ,
2019-04-12 11:08:44 -05:00
SOF_DEBUGFS_ACCESS_D0_ONLY } ,
2021-05-05 12:02:34 -05:00
{ " shim " , DSP_BAR , SHIM_OFFSET , SHIM_SIZE_BYT ,
2019-04-12 11:08:44 -05:00
SOF_DEBUGFS_ACCESS_ALWAYS } ,
} ;
2021-05-05 12:02:35 -05:00
static const struct snd_sof_debugfs_map cht_debugfs [ ] = {
2021-05-05 12:02:34 -05:00
{ " dmac0 " , DSP_BAR , DMAC0_OFFSET , DMAC_SIZE ,
SOF_DEBUGFS_ACCESS_ALWAYS } ,
{ " dmac1 " , DSP_BAR , DMAC1_OFFSET , DMAC_SIZE ,
SOF_DEBUGFS_ACCESS_ALWAYS } ,
2021-05-05 12:02:35 -05:00
{ " dmac2 " , DSP_BAR , DMAC2_OFFSET , DMAC_SIZE ,
SOF_DEBUGFS_ACCESS_ALWAYS } ,
2021-05-05 12:02:34 -05:00
{ " ssp0 " , DSP_BAR , SSP0_OFFSET , SSP_SIZE ,
SOF_DEBUGFS_ACCESS_ALWAYS } ,
{ " ssp1 " , DSP_BAR , SSP1_OFFSET , SSP_SIZE ,
SOF_DEBUGFS_ACCESS_ALWAYS } ,
{ " ssp2 " , DSP_BAR , SSP2_OFFSET , SSP_SIZE ,
SOF_DEBUGFS_ACCESS_ALWAYS } ,
2021-05-05 12:02:35 -05:00
{ " ssp3 " , DSP_BAR , SSP3_OFFSET , SSP_SIZE ,
SOF_DEBUGFS_ACCESS_ALWAYS } ,
{ " ssp4 " , DSP_BAR , SSP4_OFFSET , SSP_SIZE ,
SOF_DEBUGFS_ACCESS_ALWAYS } ,
{ " ssp5 " , DSP_BAR , SSP5_OFFSET , SSP_SIZE ,
SOF_DEBUGFS_ACCESS_ALWAYS } ,
2021-05-05 12:02:34 -05:00
{ " iram " , DSP_BAR , IRAM_OFFSET , IRAM_SIZE ,
SOF_DEBUGFS_ACCESS_D0_ONLY } ,
{ " dram " , DSP_BAR , DRAM_OFFSET , DRAM_SIZE ,
SOF_DEBUGFS_ACCESS_D0_ONLY } ,
2021-05-05 12:02:35 -05:00
{ " shim " , DSP_BAR , SHIM_OFFSET , SHIM_SIZE_CHT ,
2021-05-05 12:02:34 -05:00
SOF_DEBUGFS_ACCESS_ALWAYS } ,
} ;
2020-05-29 10:04:08 -05:00
static void byt_reset_dsp_disable_int ( struct snd_sof_dev * sdev )
{
/* Disable Interrupt from both sides */
2021-05-05 12:02:34 -05:00
snd_sof_dsp_update_bits64 ( sdev , DSP_BAR , SHIM_IMRX , 0x3 , 0x3 ) ;
snd_sof_dsp_update_bits64 ( sdev , DSP_BAR , SHIM_IMRD , 0x3 , 0x3 ) ;
2020-05-29 10:04:08 -05:00
/* Put DSP into reset, set reset vector */
2021-05-05 12:02:34 -05:00
snd_sof_dsp_update_bits64 ( sdev , DSP_BAR , SHIM_CSR ,
2020-05-29 10:04:08 -05:00
SHIM_BYT_CSR_RST | SHIM_BYT_CSR_VECTOR_SEL ,
SHIM_BYT_CSR_RST | SHIM_BYT_CSR_VECTOR_SEL ) ;
}
static int byt_suspend ( struct snd_sof_dev * sdev , u32 target_state )
{
byt_reset_dsp_disable_int ( sdev ) ;
return 0 ;
}
static int byt_resume ( struct snd_sof_dev * sdev )
{
/* enable BUSY and disable DONE Interrupt by default */
2021-05-05 12:02:34 -05:00
snd_sof_dsp_update_bits64 ( sdev , DSP_BAR , SHIM_IMRX ,
2020-05-29 10:04:08 -05:00
SHIM_IMRX_BUSY | SHIM_IMRX_DONE ,
SHIM_IMRX_DONE ) ;
return 0 ;
}
static int byt_remove ( struct snd_sof_dev * sdev )
{
byt_reset_dsp_disable_int ( sdev ) ;
return 0 ;
}
2019-04-12 11:08:44 -05:00
static int byt_acpi_probe ( struct snd_sof_dev * sdev )
{
struct snd_sof_pdata * pdata = sdev - > pdata ;
const struct sof_dev_desc * desc = pdata - > desc ;
struct platform_device * pdev =
container_of ( sdev - > dev , struct platform_device , dev ) ;
2021-11-19 21:26:13 +02:00
const struct sof_intel_dsp_desc * chip ;
2019-04-12 11:08:44 -05:00
struct resource * mmio ;
u32 base , size ;
int ret ;
2021-11-19 21:26:13 +02:00
chip = get_chip_info ( sdev - > pdata ) ;
if ( ! chip ) {
dev_err ( sdev - > dev , " error: no such device supported \n " ) ;
return - EIO ;
}
sdev - > num_cores = chip - > cores_num ;
2019-04-12 11:08:44 -05:00
/* DSP DMA can only access low 31 bits of host memory */
ret = dma_coerce_mask_and_coherent ( sdev - > dev , DMA_BIT_MASK ( 31 ) ) ;
if ( ret < 0 ) {
dev_err ( sdev - > dev , " error: failed to set DMA mask %d \n " , ret ) ;
return ret ;
}
/* LPE base */
mmio = platform_get_resource ( pdev , IORESOURCE_MEM ,
desc - > resindex_lpe_base ) ;
if ( mmio ) {
base = mmio - > start ;
size = resource_size ( mmio ) ;
} else {
dev_err ( sdev - > dev , " error: failed to get LPE base at idx %d \n " ,
desc - > resindex_lpe_base ) ;
return - EINVAL ;
}
dev_dbg ( sdev - > dev , " LPE PHY base at 0x%x size 0x%x " , base , size ) ;
2021-05-05 12:02:34 -05:00
sdev - > bar [ DSP_BAR ] = devm_ioremap ( sdev - > dev , base , size ) ;
if ( ! sdev - > bar [ DSP_BAR ] ) {
2019-04-12 11:08:44 -05:00
dev_err ( sdev - > dev , " error: failed to ioremap LPE base 0x%x size 0x%x \n " ,
base , size ) ;
return - ENODEV ;
}
2021-05-05 12:02:34 -05:00
dev_dbg ( sdev - > dev , " LPE VADDR %p \n " , sdev - > bar [ DSP_BAR ] ) ;
2019-04-12 11:08:44 -05:00
/* TODO: add offsets */
2021-05-05 12:02:34 -05:00
sdev - > mmio_bar = DSP_BAR ;
sdev - > mailbox_bar = DSP_BAR ;
2019-04-12 11:08:44 -05:00
/* IMR base - optional */
if ( desc - > resindex_imr_base = = - 1 )
goto irq ;
mmio = platform_get_resource ( pdev , IORESOURCE_MEM ,
desc - > resindex_imr_base ) ;
if ( mmio ) {
base = mmio - > start ;
size = resource_size ( mmio ) ;
} else {
dev_err ( sdev - > dev , " error: failed to get IMR base at idx %d \n " ,
desc - > resindex_imr_base ) ;
return - ENODEV ;
}
/* some BIOSes don't map IMR */
if ( base = = 0x55aa55aa | | base = = 0x0 ) {
dev_info ( sdev - > dev , " IMR not set by BIOS. Ignoring \n " ) ;
goto irq ;
}
dev_dbg ( sdev - > dev , " IMR base at 0x%x size 0x%x " , base , size ) ;
2021-05-05 12:02:34 -05:00
sdev - > bar [ IMR_BAR ] = devm_ioremap ( sdev - > dev , base , size ) ;
if ( ! sdev - > bar [ IMR_BAR ] ) {
2019-04-12 11:08:44 -05:00
dev_err ( sdev - > dev , " error: failed to ioremap IMR base 0x%x size 0x%x \n " ,
base , size ) ;
return - ENODEV ;
}
2021-05-05 12:02:34 -05:00
dev_dbg ( sdev - > dev , " IMR VADDR %p \n " , sdev - > bar [ IMR_BAR ] ) ;
2019-04-12 11:08:44 -05:00
irq :
/* register our IRQ */
sdev - > ipc_irq = platform_get_irq ( pdev , desc - > irqindex_host_ipc ) ;
2019-07-30 11:15:49 -07:00
if ( sdev - > ipc_irq < 0 )
2019-04-12 11:08:44 -05:00
return sdev - > ipc_irq ;
dev_dbg ( sdev - > dev , " using IRQ %d \n " , sdev - > ipc_irq ) ;
ret = devm_request_threaded_irq ( sdev - > dev , sdev - > ipc_irq ,
2021-05-05 12:02:34 -05:00
atom_irq_handler , atom_irq_thread ,
2019-04-12 11:08:44 -05:00
IRQF_SHARED , " AudioDSP " , sdev ) ;
if ( ret < 0 ) {
dev_err ( sdev - > dev , " error: failed to register IRQ %d \n " ,
sdev - > ipc_irq ) ;
return ret ;
}
2020-05-26 15:36:40 -05:00
/* enable BUSY and disable DONE Interrupt by default */
2021-05-05 12:02:34 -05:00
snd_sof_dsp_update_bits64 ( sdev , DSP_BAR , SHIM_IMRX ,
2020-05-26 15:36:40 -05:00
SHIM_IMRX_BUSY | SHIM_IMRX_DONE ,
SHIM_IMRX_DONE ) ;
2019-04-12 11:08:44 -05:00
/* set default mailbox offset for FW ready message */
sdev - > dsp_box . offset = MBOX_OFFSET ;
return ret ;
}
/* baytrail ops */
2021-03-01 18:31:20 -06:00
static const struct snd_sof_dsp_ops sof_byt_ops = {
2019-04-12 11:08:44 -05:00
/* device init */
. probe = byt_acpi_probe ,
2020-05-26 15:36:38 -05:00
. remove = byt_remove ,
2019-04-12 11:08:44 -05:00
/* DSP core boot / reset */
2021-05-05 12:02:34 -05:00
. run = atom_run ,
. reset = atom_reset ,
2019-04-12 11:08:44 -05:00
/* Register IO */
. write = sof_io_write ,
. read = sof_io_read ,
. write64 = sof_io_write64 ,
. read64 = sof_io_read64 ,
/* Block IO */
. block_read = sof_block_read ,
. block_write = sof_block_write ,
2021-10-04 18:21:44 +03:00
/* Mailbox IO */
. mailbox_read = sof_mailbox_read ,
. mailbox_write = sof_mailbox_write ,
2019-04-12 11:08:44 -05:00
/* doorbell */
2021-05-05 12:02:34 -05:00
. irq_handler = atom_irq_handler ,
. irq_thread = atom_irq_thread ,
2019-04-12 11:08:44 -05:00
/* ipc */
2021-05-05 12:02:34 -05:00
. send_msg = atom_send_msg ,
2019-08-07 10:02:01 -05:00
. fw_ready = sof_fw_ready ,
2021-05-05 12:02:34 -05:00
. get_mailbox_offset = atom_get_mailbox_offset ,
. get_window_offset = atom_get_window_offset ,
2019-04-12 11:08:44 -05:00
2021-10-04 18:21:45 +03:00
. ipc_msg_data = sof_ipc_msg_data ,
. ipc_pcm_params = sof_ipc_pcm_params ,
2019-04-12 11:08:44 -05:00
2019-12-04 15:15:53 -06:00
/* machine driver */
2021-05-05 12:02:34 -05:00
. machine_select = atom_machine_select ,
2019-12-04 15:15:53 -06:00
. machine_register = sof_machine_register ,
. machine_unregister = sof_machine_unregister ,
2021-05-05 12:02:34 -05:00
. set_mach_params = atom_set_mach_params ,
2019-12-04 15:15:53 -06:00
2019-04-12 11:08:44 -05:00
/* debug */
. debug_map = byt_debugfs ,
. debug_map_count = ARRAY_SIZE ( byt_debugfs ) ,
2021-05-05 12:02:34 -05:00
. dbg_dump = atom_dump ,
2021-09-15 15:21:14 +03:00
. debugfs_add_region_item = snd_sof_debugfs_add_region_item_iomem ,
2019-04-12 11:08:44 -05:00
/* stream callbacks */
2021-10-04 18:21:45 +03:00
. pcm_open = sof_stream_pcm_open ,
. pcm_close = sof_stream_pcm_close ,
2019-04-12 11:08:44 -05:00
/* module loading */
. load_module = snd_sof_parse_module_memcpy ,
/*Firmware loading */
. load_firmware = snd_sof_load_firmware_memcpy ,
2020-05-26 15:36:33 -05:00
/* PM */
. suspend = byt_suspend ,
. resume = byt_resume ,
2019-04-12 11:08:44 -05:00
/* DAI drivers */
2021-05-05 12:02:34 -05:00
. drv = atom_dai ,
2019-04-12 11:08:44 -05:00
. num_drv = 3 , /* we have only 3 SSPs on byt*/
2019-10-24 16:03:17 -05:00
/* ALSA HW info flags */
. hw_info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_PAUSE |
2019-10-24 16:03:18 -05:00
SNDRV_PCM_INFO_BATCH ,
2019-12-17 14:22:30 -06:00
2021-09-16 16:03:08 +03:00
. dsp_arch_ops = & sof_xtensa_arch_ops ,
2019-04-12 11:08:44 -05:00
} ;
2021-03-01 18:31:20 -06:00
static const struct sof_intel_dsp_desc byt_chip_info = {
2019-04-12 11:08:44 -05:00
. cores_num = 1 ,
2020-09-10 19:41:22 +03:00
. host_managed_cores_mask = 1 ,
2019-04-12 11:08:44 -05:00
} ;
/* cherrytrail and braswell ops */
2021-03-01 18:31:20 -06:00
static const struct snd_sof_dsp_ops sof_cht_ops = {
2019-04-12 11:08:44 -05:00
/* device init */
. probe = byt_acpi_probe ,
2020-05-26 15:36:38 -05:00
. remove = byt_remove ,
2019-04-12 11:08:44 -05:00
/* DSP core boot / reset */
2021-05-05 12:02:34 -05:00
. run = atom_run ,
. reset = atom_reset ,
2019-04-12 11:08:44 -05:00
/* Register IO */
. write = sof_io_write ,
. read = sof_io_read ,
. write64 = sof_io_write64 ,
. read64 = sof_io_read64 ,
/* Block IO */
. block_read = sof_block_read ,
. block_write = sof_block_write ,
2021-10-04 18:21:44 +03:00
/* Mailbox IO */
. mailbox_read = sof_mailbox_read ,
. mailbox_write = sof_mailbox_write ,
2019-04-12 11:08:44 -05:00
/* doorbell */
2021-05-05 12:02:34 -05:00
. irq_handler = atom_irq_handler ,
. irq_thread = atom_irq_thread ,
2019-04-12 11:08:44 -05:00
/* ipc */
2021-05-05 12:02:34 -05:00
. send_msg = atom_send_msg ,
2019-08-07 10:02:01 -05:00
. fw_ready = sof_fw_ready ,
2021-05-05 12:02:34 -05:00
. get_mailbox_offset = atom_get_mailbox_offset ,
. get_window_offset = atom_get_window_offset ,
2019-04-12 11:08:44 -05:00
2021-10-04 18:21:45 +03:00
. ipc_msg_data = sof_ipc_msg_data ,
. ipc_pcm_params = sof_ipc_pcm_params ,
2019-04-12 11:08:44 -05:00
2019-12-04 15:15:53 -06:00
/* machine driver */
2021-05-05 12:02:34 -05:00
. machine_select = atom_machine_select ,
2019-12-04 15:15:53 -06:00
. machine_register = sof_machine_register ,
. machine_unregister = sof_machine_unregister ,
2021-05-05 12:02:34 -05:00
. set_mach_params = atom_set_mach_params ,
2019-12-04 15:15:53 -06:00
2019-04-12 11:08:44 -05:00
/* debug */
. debug_map = cht_debugfs ,
. debug_map_count = ARRAY_SIZE ( cht_debugfs ) ,
2021-05-05 12:02:34 -05:00
. dbg_dump = atom_dump ,
2021-09-15 15:21:14 +03:00
. debugfs_add_region_item = snd_sof_debugfs_add_region_item_iomem ,
2019-04-12 11:08:44 -05:00
/* stream callbacks */
2021-10-04 18:21:45 +03:00
. pcm_open = sof_stream_pcm_open ,
. pcm_close = sof_stream_pcm_close ,
2019-04-12 11:08:44 -05:00
/* module loading */
. load_module = snd_sof_parse_module_memcpy ,
/*Firmware loading */
. load_firmware = snd_sof_load_firmware_memcpy ,
2020-05-26 15:36:33 -05:00
/* PM */
. suspend = byt_suspend ,
. resume = byt_resume ,
2019-04-12 11:08:44 -05:00
/* DAI drivers */
2021-05-05 12:02:34 -05:00
. drv = atom_dai ,
2019-04-12 11:08:44 -05:00
/* all 6 SSPs may be available for cherrytrail */
2021-05-05 12:02:34 -05:00
. num_drv = 6 ,
2019-10-24 16:03:17 -05:00
/* ALSA HW info flags */
. hw_info = SNDRV_PCM_INFO_MMAP |
SNDRV_PCM_INFO_MMAP_VALID |
SNDRV_PCM_INFO_INTERLEAVED |
SNDRV_PCM_INFO_PAUSE |
2019-10-24 16:03:18 -05:00
SNDRV_PCM_INFO_BATCH ,
2019-12-17 14:22:30 -06:00
2021-09-16 16:03:08 +03:00
. dsp_arch_ops = & sof_xtensa_arch_ops ,
2019-04-12 11:08:44 -05:00
} ;
2021-03-01 18:31:20 -06:00
static const struct sof_intel_dsp_desc cht_chip_info = {
2019-04-12 11:08:44 -05:00
. cores_num = 1 ,
2020-09-10 19:41:22 +03:00
. host_managed_cores_mask = 1 ,
2019-04-12 11:08:44 -05:00
} ;
2021-03-01 18:31:20 -06:00
/* BYTCR uses different IRQ index */
static const struct sof_dev_desc sof_acpi_baytrailcr_desc = {
. machines = snd_soc_acpi_intel_baytrail_machines ,
. resindex_lpe_base = 0 ,
. resindex_pcicfg_base = 1 ,
. resindex_imr_base = 2 ,
. irqindex_host_ipc = 0 ,
. chip_info = & byt_chip_info ,
. default_fw_path = " intel/sof " ,
. default_tplg_path = " intel/sof-tplg " ,
. default_fw_filename = " sof-byt.ri " ,
. nocodec_tplg_filename = " sof-byt-nocodec.tplg " ,
. ops = & sof_byt_ops ,
} ;
static const struct sof_dev_desc sof_acpi_baytrail_desc = {
. machines = snd_soc_acpi_intel_baytrail_machines ,
. resindex_lpe_base = 0 ,
. resindex_pcicfg_base = 1 ,
. resindex_imr_base = 2 ,
. irqindex_host_ipc = 5 ,
. chip_info = & byt_chip_info ,
. default_fw_path = " intel/sof " ,
. default_tplg_path = " intel/sof-tplg " ,
. default_fw_filename = " sof-byt.ri " ,
. nocodec_tplg_filename = " sof-byt-nocodec.tplg " ,
. ops = & sof_byt_ops ,
} ;
static const struct sof_dev_desc sof_acpi_cherrytrail_desc = {
. machines = snd_soc_acpi_intel_cherrytrail_machines ,
. resindex_lpe_base = 0 ,
. resindex_pcicfg_base = 1 ,
. resindex_imr_base = 2 ,
. irqindex_host_ipc = 5 ,
. chip_info = & cht_chip_info ,
. default_fw_path = " intel/sof " ,
. default_tplg_path = " intel/sof-tplg " ,
. default_fw_filename = " sof-cht.ri " ,
. nocodec_tplg_filename = " sof-cht-nocodec.tplg " ,
. ops = & sof_cht_ops ,
} ;
static const struct acpi_device_id sof_baytrail_match [ ] = {
{ " 80860F28 " , ( unsigned long ) & sof_acpi_baytrail_desc } ,
{ " 808622A8 " , ( unsigned long ) & sof_acpi_cherrytrail_desc } ,
{ }
} ;
MODULE_DEVICE_TABLE ( acpi , sof_baytrail_match ) ;
static int sof_baytrail_probe ( struct platform_device * pdev )
{
struct device * dev = & pdev - > dev ;
const struct sof_dev_desc * desc ;
const struct acpi_device_id * id ;
int ret ;
id = acpi_match_device ( dev - > driver - > acpi_match_table , dev ) ;
if ( ! id )
return - ENODEV ;
ret = snd_intel_acpi_dsp_driver_probe ( dev , id - > id ) ;
if ( ret ! = SND_INTEL_DSP_DRIVER_ANY & & ret ! = SND_INTEL_DSP_DRIVER_SOF ) {
dev_dbg ( dev , " SOF ACPI driver not selected, aborting probe \n " ) ;
return - ENODEV ;
}
desc = device_get_match_data ( & pdev - > dev ) ;
if ( ! desc )
return - ENODEV ;
if ( desc = = & sof_acpi_baytrail_desc & & soc_intel_is_byt_cr ( pdev ) )
desc = & sof_acpi_baytrailcr_desc ;
return sof_acpi_probe ( pdev , desc ) ;
}
/* acpi_driver definition */
static struct platform_driver snd_sof_acpi_intel_byt_driver = {
. probe = sof_baytrail_probe ,
. remove = sof_acpi_remove ,
. driver = {
. name = " sof-audio-acpi-intel-byt " ,
. pm = & sof_acpi_pm ,
. acpi_match_table = sof_baytrail_match ,
} ,
} ;
module_platform_driver ( snd_sof_acpi_intel_byt_driver ) ;
2019-04-12 11:08:44 -05:00
MODULE_LICENSE ( " Dual BSD/GPL " ) ;
2019-12-17 14:22:24 -06:00
MODULE_IMPORT_NS ( SND_SOC_SOF_INTEL_HIFI_EP_IPC ) ;
2019-12-17 14:22:31 -06:00
MODULE_IMPORT_NS ( SND_SOC_SOF_XTENSA ) ;
2021-03-01 18:31:20 -06:00
MODULE_IMPORT_NS ( SND_SOC_SOF_ACPI_DEV ) ;
2021-05-05 12:02:35 -05:00
MODULE_IMPORT_NS ( SND_SOC_SOF_INTEL_ATOM_HIFI_EP ) ;