linux/sound/soc/intel/common/sst-acpi.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2013-15, Intel Corporation. All rights reserved.
   3 *
   4 * This program is free software; you can redistribute it and/or
   5 * modify it under the terms of the GNU General Public License version
   6 * 2 as published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11 * GNU General Public License for more details.
  12 *
  13 */
  14
  15#include <linux/stddef.h>
  16#include <linux/acpi.h>
  17
  18struct sst_acpi_package_context {
  19        char *name;           /* package name */
  20        int length;           /* number of elements */
  21        struct acpi_buffer *format;
  22        struct acpi_buffer *state;
  23        bool data_valid;
  24};
  25
  26#if IS_ENABLED(CONFIG_ACPI)
  27/* translation fron HID to I2C name, needed for DAI codec_name */
  28const char *sst_acpi_find_name_from_hid(const u8 hid[ACPI_ID_LEN]);
  29bool sst_acpi_find_package_from_hid(const u8 hid[ACPI_ID_LEN],
  30                                    struct sst_acpi_package_context *ctx);
  31#else
  32static inline const char *sst_acpi_find_name_from_hid(const u8 hid[ACPI_ID_LEN])
  33{
  34        return NULL;
  35}
  36static inline bool sst_acpi_find_package_from_hid(const u8 hid[ACPI_ID_LEN],
  37                                           struct sst_acpi_package_context *ctx)
  38{
  39        return false;
  40}
  41#endif
  42
  43/* acpi match */
  44struct sst_acpi_mach *sst_acpi_find_machine(struct sst_acpi_mach *machines);
  45
  46/* acpi check hid */
  47bool sst_acpi_check_hid(const u8 hid[ACPI_ID_LEN]);
  48
  49/* Descriptor for SST ASoC machine driver */
  50struct sst_acpi_mach {
  51        /* ACPI ID for the matching machine driver. Audio codec for instance */
  52        const u8 id[ACPI_ID_LEN];
  53        /* machine driver name */
  54        const char *drv_name;
  55        /* firmware file name */
  56        const char *fw_filename;
  57
  58        /* board name */
  59        const char *board;
  60        struct sst_acpi_mach * (*machine_quirk)(void *arg);
  61        const void *quirk_data;
  62        void *pdata;
  63};
  64
  65#define SST_ACPI_MAX_CODECS 3
  66
  67/**
  68 * struct sst_codecs: Structure to hold secondary codec information apart from
  69 * the matched one, this data will be passed to the quirk function to match
  70 * with the ACPI detected devices
  71 *
  72 * @num_codecs: number of secondary codecs used in the platform
  73 * @codecs: holds the codec IDs
  74 *
  75 */
  76struct sst_codecs {
  77        int num_codecs;
  78        u8 codecs[SST_ACPI_MAX_CODECS][ACPI_ID_LEN];
  79};
  80
  81/* check all codecs */
  82struct sst_acpi_mach *sst_acpi_codec_list(void *arg);
  83