1*fd7c67d0S谢致邦 (XIE Zhibang) /* SPDX-License-Identifier: GPL-2.0-only */ 2*fd7c67d0S谢致邦 (XIE Zhibang) 3*fd7c67d0S谢致邦 (XIE Zhibang) #ifndef _I2C_HID_ACPI_H 4*fd7c67d0S谢致邦 (XIE Zhibang) #define _I2C_HID_ACPI_H 5*fd7c67d0S谢致邦 (XIE Zhibang) 6*fd7c67d0S谢致邦 (XIE Zhibang) #include <linux/acpi.h> 7*fd7c67d0S谢致邦 (XIE Zhibang) #include <linux/uuid.h> 8*fd7c67d0S谢致邦 (XIE Zhibang) 9*fd7c67d0S谢致邦 (XIE Zhibang) static inline int i2c_hid_acpi_get_descriptor(struct acpi_device *adev) 10*fd7c67d0S谢致邦 (XIE Zhibang) { 11*fd7c67d0S谢致邦 (XIE Zhibang) /* HID I²C Device: 3cdff6f7-4267-4555-ad05-b30a3d8938de */ 12*fd7c67d0S谢致邦 (XIE Zhibang) static const guid_t i2c_hid_guid = 13*fd7c67d0S谢致邦 (XIE Zhibang) GUID_INIT(0x3CDFF6F7, 0x4267, 0x4555, 14*fd7c67d0S谢致邦 (XIE Zhibang) 0xAD, 0x05, 0xB3, 0x0A, 0x3D, 0x89, 0x38, 0xDE); 15*fd7c67d0S谢致邦 (XIE Zhibang) 16*fd7c67d0S谢致邦 (XIE Zhibang) acpi_handle handle = acpi_device_handle(adev); 17*fd7c67d0S谢致邦 (XIE Zhibang) union acpi_object *obj; 18*fd7c67d0S谢致邦 (XIE Zhibang) u16 addr; 19*fd7c67d0S谢致邦 (XIE Zhibang) 20*fd7c67d0S谢致邦 (XIE Zhibang) obj = acpi_evaluate_dsm_typed(handle, &i2c_hid_guid, 21*fd7c67d0S谢致邦 (XIE Zhibang) 1, 1, NULL, ACPI_TYPE_INTEGER); 22*fd7c67d0S谢致邦 (XIE Zhibang) if (!obj) { 23*fd7c67d0S谢致邦 (XIE Zhibang) acpi_handle_err(handle, 24*fd7c67d0S谢致邦 (XIE Zhibang) "Error _DSM call to get HID descriptor address failed\n"); 25*fd7c67d0S谢致邦 (XIE Zhibang) return -ENODEV; 26*fd7c67d0S谢致邦 (XIE Zhibang) } 27*fd7c67d0S谢致邦 (XIE Zhibang) 28*fd7c67d0S谢致邦 (XIE Zhibang) addr = obj->integer.value; 29*fd7c67d0S谢致邦 (XIE Zhibang) ACPI_FREE(obj); 30*fd7c67d0S谢致邦 (XIE Zhibang) return addr; 31*fd7c67d0S谢致邦 (XIE Zhibang) } 32*fd7c67d0S谢致邦 (XIE Zhibang) 33*fd7c67d0S谢致邦 (XIE Zhibang) #endif 34