brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · 94fd7d5 Raw
90 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2//3// Copyright (c) Intel Corporation, 20224// Copyright Everest Semiconductor Co.,Ltd5 6#include <linux/module.h>7#include <linux/acpi.h>8#include "es83xx-dsm-common.h"9 10/* UUID ("a9800c04-e016-343e-41f4-6bcce70f4332") */11static const guid_t es83xx_dsm_guid =12	GUID_INIT(0xa9800c04, 0xe016, 0x343e,13		  0x41, 0xf4, 0x6b, 0xcc, 0xe7, 0x0f, 0x43, 0x32);14 15#define ES83xx_DSM_REVID 116 17int es83xx_dsm(struct device *dev, int arg, int *value)18{19	acpi_handle dhandle;20	union acpi_object *obj;21	int ret = 0;22 23	dhandle = ACPI_HANDLE(dev);24	if (!dhandle)25		return -ENOENT;26 27	obj = acpi_evaluate_dsm(dhandle, &es83xx_dsm_guid, ES83xx_DSM_REVID,28				arg, NULL);29	if (!obj) {30		dev_err(dev, "%s: acpi_evaluate_dsm() failed\n", __func__);31		ret = -EINVAL;32		goto out;33	}34 35	if (obj->type != ACPI_TYPE_INTEGER) {36		dev_err(dev, "%s: object is not ACPI_TYPE_INTEGER\n", __func__);37		ret = -EINVAL;38		goto err;39	}40 41	*value = obj->integer.value;42err:43	ACPI_FREE(obj);44out:45	return ret;46}47EXPORT_SYMBOL_GPL(es83xx_dsm);48 49int es83xx_dsm_dump(struct device *dev)50{51	int value;52	int ret;53 54	ret = es83xx_dsm(dev, PLATFORM_MAINMIC_TYPE_ARG, &value);55	if (ret < 0)56		return ret;57	dev_info(dev, "PLATFORM_MAINMIC_TYPE %#x\n", value);58 59	ret = es83xx_dsm(dev, PLATFORM_HPMIC_TYPE_ARG, &value);60	if (ret < 0)61		return ret;62	dev_info(dev, "PLATFORM_HPMIC_TYPE %#x\n", value);63 64	ret = es83xx_dsm(dev, PLATFORM_SPK_TYPE_ARG, &value);65	if (ret < 0)66		return ret;67	dev_info(dev, "PLATFORM_SPK_TYPE %#x\n", value);68 69	ret = es83xx_dsm(dev, PLATFORM_HPDET_INV_ARG, &value);70	if (ret < 0)71		return ret;72	dev_info(dev, "PLATFORM_HPDET_INV %#x\n", value);73 74	ret = es83xx_dsm(dev, PLATFORM_PCM_TYPE_ARG, &value);75	if (ret < 0)76		return ret;77	dev_info(dev, "PLATFORM_PCM_TYPE %#x\n", value);78 79	ret = es83xx_dsm(dev, PLATFORM_MIC_DE_POP_ARG, &value);80	if (ret < 0)81		return ret;82	dev_info(dev, "PLATFORM_MIC_DE_POP %#x\n", value);83 84	return 0;85}86EXPORT_SYMBOL_GPL(es83xx_dsm_dump);87 88MODULE_DESCRIPTION("Everest Semi ES83xx DSM helpers");89MODULE_LICENSE("GPL");90