coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
adau7002.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <acpi/acpi_device.h>
4 #include <acpi/acpigen.h>
5 #include <console/console.h>
6 #include <device/device.h>
7 #include <device/path.h>
8 #include "chip.h"
9 
10 #if CONFIG(HAVE_ACPI_TABLES)
11 
12 #define ADAU7002_ACPI_NAME "ADAU"
13 #define ADAU7002_ACPI_HID "ADAU7002"
14 
15 static void adau7002_fill_ssdt(const struct device *dev)
16 {
18  struct acpi_dp *dp;
19 
20  if (!dev)
21  return;
22 
23  const char *scope = acpi_device_scope(dev);
24  const char *name = acpi_device_name(dev);
25  if (!scope || !name)
26  return;
27 
28  /* Device */
29  acpigen_write_scope(scope);
31  acpigen_write_name_string("_HID", ADAU7002_ACPI_HID);
32  acpigen_write_name_integer("_UID", 0);
35 
36  /* _DSD for devicetree properties */
37  config = dev->chip_info;
38  dp = acpi_dp_new_table("_DSD");
39  acpi_dp_add_integer(dp, "wakeup-delay-ms", config->wakeup_delay);
40  acpi_dp_write(dp);
41 
42  acpigen_pop_len(); /* Device */
43  acpigen_pop_len(); /* Scope */
44 
45  printk(BIOS_INFO, "%s: %s\n", acpi_device_path(dev),
46  dev->chip_ops->name);
47 }
48 
49 static const char *adau7002_acpi_name(const struct device *dev)
50 {
51  return ADAU7002_ACPI_NAME;
52 }
53 #endif
54 
55 static struct device_operations adau7002_ops = {
57  .set_resources = noop_set_resources,
58 #if CONFIG(HAVE_ACPI_TABLES)
59  .acpi_name = adau7002_acpi_name,
60  .acpi_fill_ssdt = adau7002_fill_ssdt,
61 #endif
62 };
63 
64 static void adau7002_enable(struct device *dev)
65 {
66  dev->ops = &adau7002_ops;
67 }
68 
70  CHIP_NAME("Analog Digital DMIC")
71  .enable_dev = adau7002_enable
72 };
const char * acpi_device_path(const struct device *dev)
Definition: device.c:144
struct acpi_dp * acpi_dp_add_integer(struct acpi_dp *dp, const char *name, uint64_t value)
Definition: device.c:977
void acpi_dp_write(struct acpi_dp *table)
Definition: device.c:898
int acpi_device_status(const struct device *dev)
Definition: device.c:193
const char * acpi_device_name(const struct device *dev)
Definition: device.c:49
struct acpi_dp * acpi_dp_new_table(const char *name)
Definition: device.c:930
const char * acpi_device_scope(const struct device *dev)
Definition: device.c:158
void acpigen_pop_len(void)
Definition: acpigen.c:37
void acpigen_write_scope(const char *name)
Definition: acpigen.c:326
void acpigen_write_name_integer(const char *name, uint64_t val)
Definition: acpigen.c:170
void acpigen_write_STA(uint8_t status)
Definition: acpigen.c:783
void acpigen_write_device(const char *name)
Definition: acpigen.c:769
void acpigen_write_name_string(const char *name, const char *string)
Definition: acpigen.c:176
static void adau7002_enable(struct device *dev)
Definition: adau7002.c:64
static struct device_operations adau7002_ops
Definition: adau7002.c:55
struct chip_operations drivers_generic_adau7002_ops
Definition: adau7002.c:69
const char * name
Definition: mmu.c:92
#define printk(level,...)
Definition: stdlib.h:16
#define CHIP_NAME(X)
Definition: device.h:32
static void noop_read_resources(struct device *dev)
Standard device operations function pointers shims.
Definition: device.h:73
static void noop_set_resources(struct device *dev)
Definition: device.h:74
#define BIOS_INFO
BIOS_INFO - Expected events.
Definition: loglevel.h:113
enum board_config config
Definition: memory.c:448
const char * name
Definition: device.h:29
void(* read_resources)(struct device *dev)
Definition: device.h:39
Definition: device.h:107
struct chip_operations * chip_ops
Definition: device.h:144
struct device_operations * ops
Definition: device.h:143
DEVTREE_CONST void * chip_info
Definition: device.h:164