18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright 2013 Matthew Garrett <mjg59@srcf.ucam.org> 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include <linux/acpi.h> 78c2ecf20Sopenharmony_ci#include <linux/module.h> 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_cistatic int smartconnect_acpi_init(struct acpi_device *acpi) 128c2ecf20Sopenharmony_ci{ 138c2ecf20Sopenharmony_ci unsigned long long value; 148c2ecf20Sopenharmony_ci acpi_status status; 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci status = acpi_evaluate_integer(acpi->handle, "GAOS", NULL, &value); 178c2ecf20Sopenharmony_ci if (ACPI_FAILURE(status)) 188c2ecf20Sopenharmony_ci return -EINVAL; 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci if (value & 0x1) { 218c2ecf20Sopenharmony_ci dev_info(&acpi->dev, "Disabling Intel Smart Connect\n"); 228c2ecf20Sopenharmony_ci status = acpi_execute_simple_method(acpi->handle, "SAOS", 0); 238c2ecf20Sopenharmony_ci } 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci return 0; 268c2ecf20Sopenharmony_ci} 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_cistatic const struct acpi_device_id smartconnect_ids[] = { 298c2ecf20Sopenharmony_ci {"INT33A0", 0}, 308c2ecf20Sopenharmony_ci {"", 0} 318c2ecf20Sopenharmony_ci}; 328c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(acpi, smartconnect_ids); 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistatic struct acpi_driver smartconnect_driver = { 358c2ecf20Sopenharmony_ci .owner = THIS_MODULE, 368c2ecf20Sopenharmony_ci .name = "intel_smart_connect", 378c2ecf20Sopenharmony_ci .class = "intel_smart_connect", 388c2ecf20Sopenharmony_ci .ids = smartconnect_ids, 398c2ecf20Sopenharmony_ci .ops = { 408c2ecf20Sopenharmony_ci .add = smartconnect_acpi_init, 418c2ecf20Sopenharmony_ci }, 428c2ecf20Sopenharmony_ci}; 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_cimodule_acpi_driver(smartconnect_driver); 45