2018-07-02 09:24:04 +03:00
/* SPDX-License-Identifier: GPL-2.0
2017-10-13 02:49:38 +03:00
*
2018-07-02 09:24:04 +03:00
* Copyright ( C ) 2013 - 15 , Intel Corporation . All rights reserved .
2017-10-13 02:49:38 +03:00
*/
# ifndef __LINUX_SND_SOC_ACPI_H
# define __LINUX_SND_SOC_ACPI_H
# include <linux/stddef.h>
# include <linux/acpi.h>
2018-01-05 01:35:52 +03:00
# include <linux/mod_devicetable.h>
2017-10-13 02:49:38 +03:00
struct snd_soc_acpi_package_context {
char * name ; /* package name */
int length ; /* number of elements */
struct acpi_buffer * format ;
struct acpi_buffer * state ;
bool data_valid ;
} ;
2018-01-11 22:52:09 +03:00
/* codec name is used in DAIs is i2c-<HID>:00 with HID being 8 chars */
# define SND_ACPI_I2C_ID_LEN (4 + ACPI_ID_LEN + 3 + 1)
2017-10-13 02:49:38 +03:00
# if IS_ENABLED(CONFIG_ACPI)
2019-01-25 23:16:17 +03:00
/* acpi match */
struct snd_soc_acpi_mach *
snd_soc_acpi_find_machine ( struct snd_soc_acpi_mach * machines ) ;
2017-10-13 02:49:38 +03:00
bool snd_soc_acpi_find_package_from_hid ( const u8 hid [ ACPI_ID_LEN ] ,
struct snd_soc_acpi_package_context * ctx ) ;
2019-01-25 23:16:17 +03:00
/* check all codecs */
struct snd_soc_acpi_mach * snd_soc_acpi_codec_list ( void * arg ) ;
2017-10-13 02:49:38 +03:00
# else
2019-01-25 23:16:17 +03:00
/* acpi match */
static inline struct snd_soc_acpi_mach *
snd_soc_acpi_find_machine ( struct snd_soc_acpi_mach * machines )
{
return NULL ;
}
2017-10-13 02:49:38 +03:00
static inline bool
snd_soc_acpi_find_package_from_hid ( const u8 hid [ ACPI_ID_LEN ] ,
struct snd_soc_acpi_package_context * ctx )
{
return false ;
}
2019-01-25 23:16:17 +03:00
/* check all codecs */
static inline struct snd_soc_acpi_mach * snd_soc_acpi_codec_list ( void * arg )
{
return NULL ;
}
# endif
2017-10-13 02:49:38 +03:00
2018-11-02 00:34:48 +03:00
/**
* snd_soc_acpi_mach_params : interface for machine driver configuration
*
* @ acpi_ipc_irq_index : used for BYT - CR detection
* @ platform : string used for HDaudio codec support
* @ codec_mask : used for HDAudio support
*/
struct snd_soc_acpi_mach_params {
u32 acpi_ipc_irq_index ;
const char * platform ;
u32 codec_mask ;
2018-11-17 03:47:05 +03:00
u32 dmic_num ;
2018-11-02 00:34:48 +03:00
} ;
2017-10-13 02:49:38 +03:00
/**
* snd_soc_acpi_mach : ACPI - based machine descriptor . Most of the fields are
* related to the hardware , except for the firmware and topology file names .
2017-10-13 02:49:40 +03:00
* A platform supported by legacy and Sound Open Firmware ( SOF ) would expose
* all firmware / topology related fields .
2017-10-13 02:49:38 +03:00
*
* @ id : ACPI ID ( usually the codec ' s ) used to find a matching machine driver .
* @ drv_name : machine driver name
2017-10-13 02:49:40 +03:00
* @ fw_filename : firmware file name . Used when SOF is not enabled .
2017-10-13 02:49:38 +03:00
* @ board : board name
* @ machine_quirk : pointer to quirk , usually based on DMI information when
* ACPI ID alone is not sufficient , wrong or misleading
* @ quirk_data : data used to uniquely identify a machine , usually a list of
* audio codecs whose presence if checked with ACPI
* @ pdata : intended for platform data or machine specific - ops . This structure
* is not constant since this field may be updated at run - time
2017-10-13 02:49:40 +03:00
* @ sof_fw_filename : Sound Open Firmware file name , if enabled
* @ sof_tplg_filename : Sound Open Firmware topology file name , if enabled
2017-10-13 02:49:38 +03:00
*/
/* Descriptor for SST ASoC machine driver */
struct snd_soc_acpi_mach {
const u8 id [ ACPI_ID_LEN ] ;
const char * drv_name ;
const char * fw_filename ;
const char * board ;
struct snd_soc_acpi_mach * ( * machine_quirk ) ( void * arg ) ;
const void * quirk_data ;
void * pdata ;
2018-11-02 00:34:48 +03:00
struct snd_soc_acpi_mach_params mach_params ;
2017-10-13 02:49:40 +03:00
const char * sof_fw_filename ;
const char * sof_tplg_filename ;
2017-10-13 02:49:38 +03:00
} ;
# define SND_SOC_ACPI_MAX_CODECS 3
/**
* struct snd_soc_acpi_codecs : Structure to hold secondary codec information
* apart from the matched one , this data will be passed to the quirk function
* to match with the ACPI detected devices
*
* @ num_codecs : number of secondary codecs used in the platform
* @ codecs : holds the codec IDs
*
*/
struct snd_soc_acpi_codecs {
int num_codecs ;
u8 codecs [ SND_SOC_ACPI_MAX_CODECS ] [ ACPI_ID_LEN ] ;
} ;
# endif