Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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