linux/drivers/platform/x86/mxm-wmi.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * MXM WMI driver
   4 *
   5 * Copyright(C) 2010 Red Hat.
   6 */
   7#include <linux/kernel.h>
   8#include <linux/module.h>
   9#include <linux/init.h>
  10#include <linux/mxm-wmi.h>
  11#include <linux/acpi.h>
  12
  13MODULE_AUTHOR("Dave Airlie");
  14MODULE_DESCRIPTION("MXM WMI Driver");
  15MODULE_LICENSE("GPL");
  16
  17#define MXM_WMMX_GUID "F6CB5C3C-9CAE-4EBD-B577-931EA32A2CC0"
  18
  19MODULE_ALIAS("wmi:"MXM_WMMX_GUID);
  20
  21#define MXM_WMMX_FUNC_MXDS 0x5344584D /* "MXDS" */
  22#define MXM_WMMX_FUNC_MXMX 0x53445344 /* "MXMX" */
  23
  24struct mxds_args {
  25        u32 func;
  26        u32 args;
  27        u32 xarg;
  28};
  29
  30int mxm_wmi_call_mxds(int adapter)
  31{
  32        struct mxds_args args = {
  33                .func = MXM_WMMX_FUNC_MXDS,
  34                .args = 0,
  35                .xarg = 1,
  36        };
  37        struct acpi_buffer input = { (acpi_size)sizeof(args), &args };
  38        struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
  39        acpi_status status;
  40
  41        printk("calling mux switch %d\n", adapter);
  42
  43        status = wmi_evaluate_method(MXM_WMMX_GUID, 0x0, adapter, &input,
  44                                     &output);
  45
  46        if (ACPI_FAILURE(status))
  47                return status;
  48
  49        printk("mux switched %d\n", status);
  50        return 0;
  51                            
  52}
  53EXPORT_SYMBOL_GPL(mxm_wmi_call_mxds);
  54
  55int mxm_wmi_call_mxmx(int adapter)
  56{
  57        struct mxds_args args = {
  58                .func = MXM_WMMX_FUNC_MXMX,
  59                .args = 0,
  60                .xarg = 1,
  61        };
  62        struct acpi_buffer input = { (acpi_size)sizeof(args), &args };
  63        struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
  64        acpi_status status;
  65
  66        printk("calling mux switch %d\n", adapter);
  67
  68        status = wmi_evaluate_method(MXM_WMMX_GUID, 0x0, adapter, &input,
  69                                     &output);
  70
  71        if (ACPI_FAILURE(status))
  72                return status;
  73
  74        printk("mux mutex set switched %d\n", status);
  75        return 0;
  76                            
  77}
  78EXPORT_SYMBOL_GPL(mxm_wmi_call_mxmx);
  79
  80bool mxm_wmi_supported(void)
  81{
  82        bool guid_valid;
  83        guid_valid = wmi_has_guid(MXM_WMMX_GUID);
  84        return guid_valid;
  85}
  86EXPORT_SYMBOL_GPL(mxm_wmi_supported);
  87
  88static int __init mxm_wmi_init(void)
  89{
  90        return 0;
  91}
  92
  93static void __exit mxm_wmi_exit(void)
  94{
  95}
  96
  97module_init(mxm_wmi_init);
  98module_exit(mxm_wmi_exit);
  99