Path: blob/main/sys/contrib/dev/broadcom/brcm80211/brcmfmac/acpi.c
178665 views
// SPDX-License-Identifier: ISC1/*2* Copyright The Asahi Linux Contributors3*/45#include <linux/acpi.h>6#include "debug.h"7#include "core.h"8#include "common.h"910void brcmf_acpi_probe(struct device *dev, enum brcmf_bus_type bus_type,11struct brcmf_mp_device *settings)12{13acpi_status status;14const union acpi_object *o;15struct acpi_buffer buf = {ACPI_ALLOCATE_BUFFER, NULL};16struct acpi_device *adev = ACPI_COMPANION(dev);1718if (!adev)19return;2021if (!ACPI_FAILURE(acpi_dev_get_property(adev, "module-instance",22ACPI_TYPE_STRING, &o))) {23brcmf_dbg(INFO, "ACPI module-instance=%s\n", o->string.pointer);24settings->board_type = devm_kasprintf(dev, GFP_KERNEL,25"apple,%s",26o->string.pointer);27} else {28brcmf_dbg(INFO, "No ACPI module-instance\n");29return;30}3132status = acpi_evaluate_object(adev->handle, "RWCV", NULL, &buf);33o = buf.pointer;34if (!ACPI_FAILURE(status) && o && o->type == ACPI_TYPE_BUFFER &&35o->buffer.length >= 2) {36char *antenna_sku = devm_kzalloc(dev, 3, GFP_KERNEL);3738if (antenna_sku) {39memcpy(antenna_sku, o->buffer.pointer, 2);40brcmf_dbg(INFO, "ACPI RWCV data=%*phN antenna-sku=%s\n",41(int)o->buffer.length, o->buffer.pointer,42antenna_sku);43settings->antenna_sku = antenna_sku;44}4546kfree(buf.pointer);47} else {48brcmf_dbg(INFO, "No ACPI antenna-sku\n");49}50}515253