Merge branch 'fixes' of into for-next
The current set of DMI board IDs from the fixes branch is required to reorder them in the for-next branch.master
commit
594f9cce51
|
|
@ -54,6 +54,7 @@ to matching WMI devices using a struct wmi_device_id table:
|
|||
::
|
||||
|
||||
static const struct wmi_device_id foo_id_table[] = {
|
||||
/* Only use uppercase letters! */
|
||||
{ "936DA01F-9ABD-4D9D-80C7-02AF85C822A8", NULL },
|
||||
{ }
|
||||
};
|
||||
|
|
|
|||
|
|
@ -3841,6 +3841,7 @@ F: drivers/hwmon/asus-ec-sensors.c
|
|||
ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
|
||||
M: Corentin Chary <corentin.chary@gmail.com>
|
||||
M: Luke D. Jones <luke@ljones.dev>
|
||||
M: Denis Benato <benato.denis96@gmail.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
W: https://asus-linux.org/
|
||||
|
|
@ -12862,7 +12863,8 @@ F: tools/testing/selftests/sgx/*
|
|||
K: \bSGX_
|
||||
|
||||
INTEL SKYLAKE INT3472 ACPI DEVICE DRIVER
|
||||
M: Daniel Scally <djrscally@gmail.com>
|
||||
M: Daniel Scally <dan.scally@ideasonboard.com>
|
||||
M: Sakari Ailus <sakari.ailus@linux.intel.com>
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/intel/int3472/
|
||||
F: include/linux/platform_data/x86/int3472.h
|
||||
|
|
|
|||
|
|
@ -124,6 +124,7 @@ static int t14s_ec_write(void *context, unsigned int reg,
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
fsleep(10000);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -161,6 +162,7 @@ static int t14s_ec_read(void *context, unsigned int reg,
|
|||
|
||||
out:
|
||||
i2c_unlock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||
fsleep(10000);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -195,6 +197,8 @@ static int t14s_ec_read_evt(struct t14s_ec *ec, u8 *val)
|
|||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
fsleep(10000);
|
||||
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
|
|
@ -570,12 +574,6 @@ static int t14s_ec_probe(struct i2c_client *client)
|
|||
return dev_err_probe(dev, PTR_ERR(ec->regmap),
|
||||
"Failed to init regmap\n");
|
||||
|
||||
ret = devm_request_threaded_irq(dev, client->irq, NULL,
|
||||
t14s_ec_irq_handler,
|
||||
IRQF_ONESHOT, dev_name(dev), ec);
|
||||
if (ret < 0)
|
||||
return dev_err_probe(dev, ret, "Failed to get IRQ\n");
|
||||
|
||||
ret = t14s_leds_probe(ec);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
|
@ -592,6 +590,12 @@ static int t14s_ec_probe(struct i2c_client *client)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = devm_request_threaded_irq(dev, client->irq, NULL,
|
||||
t14s_ec_irq_handler,
|
||||
IRQF_ONESHOT, dev_name(dev), ec);
|
||||
if (ret < 0)
|
||||
return dev_err_probe(dev, ret, "Failed to get IRQ\n");
|
||||
|
||||
/*
|
||||
* Disable wakeup support by default, because the driver currently does
|
||||
* not support masking any events and the laptop should not wake up when
|
||||
|
|
|
|||
|
|
@ -2015,6 +2015,7 @@ static int mlxbf_pmc_init_perftype_counter(struct device *dev, unsigned int blk_
|
|||
if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) {
|
||||
/* Program crspace counters to count clock cycles using "count_clock" sysfs */
|
||||
attr = &pmc->block[blk_num].attr_count_clock;
|
||||
sysfs_attr_init(&attr->dev_attr.attr);
|
||||
attr->dev_attr.attr.mode = 0644;
|
||||
attr->dev_attr.show = mlxbf_pmc_count_clock_show;
|
||||
attr->dev_attr.store = mlxbf_pmc_count_clock_store;
|
||||
|
|
|
|||
|
|
@ -440,7 +440,7 @@ config WIRELESS_HOTKEY
|
|||
depends on INPUT
|
||||
help
|
||||
This driver provides supports for the wireless buttons found on some AMD,
|
||||
HP, & Xioami laptops.
|
||||
HP, & Xiaomi laptops.
|
||||
On such systems the driver should load automatically (via ACPI alias).
|
||||
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
|
|
@ -553,6 +553,7 @@ config MSI_WMI
|
|||
config MSI_WMI_PLATFORM
|
||||
tristate "MSI WMI Platform features"
|
||||
depends on ACPI_WMI
|
||||
depends on DMI
|
||||
depends on HWMON
|
||||
help
|
||||
Say Y here if you want to have support for WMI-based platform features
|
||||
|
|
|
|||
|
|
@ -121,6 +121,7 @@ MODULE_ALIAS("wmi:676AA15E-6A47-4D9F-A2CC-1E6D18D14026");
|
|||
|
||||
enum acer_wmi_event_ids {
|
||||
WMID_HOTKEY_EVENT = 0x1,
|
||||
WMID_BACKLIGHT_EVENT = 0x4,
|
||||
WMID_ACCEL_OR_KBD_DOCK_EVENT = 0x5,
|
||||
WMID_GAMING_TURBO_KEY_EVENT = 0x7,
|
||||
WMID_AC_EVENT = 0x8,
|
||||
|
|
@ -2512,6 +2513,9 @@ static void acer_wmi_notify(union acpi_object *obj, void *context)
|
|||
sparse_keymap_report_event(acer_wmi_input_dev, scancode, 1, true);
|
||||
}
|
||||
break;
|
||||
case WMID_BACKLIGHT_EVENT:
|
||||
/* Already handled by acpi-video */
|
||||
break;
|
||||
case WMID_ACCEL_OR_KBD_DOCK_EVENT:
|
||||
acer_gsensor_event();
|
||||
acer_kbd_dock_event(&return_value);
|
||||
|
|
|
|||
|
|
@ -122,6 +122,14 @@ static const struct dmi_system_id fwbug_list[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "21A1"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.ident = "ROG Xbox Ally RC73YA",
|
||||
.driver_data = &quirk_spurious_8042,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "RC73YA"),
|
||||
}
|
||||
},
|
||||
/* https://bugzilla.kernel.org/show_bug.cgi?id=218024 */
|
||||
{
|
||||
.ident = "V14 G4 AMN",
|
||||
|
|
@ -204,6 +212,23 @@ static const struct dmi_system_id fwbug_list[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_NAME, "82ND"),
|
||||
}
|
||||
},
|
||||
/* https://gitlab.freedesktop.org/drm/amd/-/issues/4618 */
|
||||
{
|
||||
.ident = "Lenovo Legion Go 2",
|
||||
.driver_data = &quirk_s2idle_bug,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "83N0"),
|
||||
}
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo Legion Go 2",
|
||||
.driver_data = &quirk_s2idle_bug,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "83N1"),
|
||||
}
|
||||
},
|
||||
/* https://gitlab.freedesktop.org/drm/amd/-/issues/2684 */
|
||||
{
|
||||
.ident = "HP Laptop 15s-eq2xxx",
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ static void amd_pmc_get_ip_info(struct amd_pmc_dev *dev)
|
|||
switch (dev->cpu_id) {
|
||||
case AMD_CPU_ID_PCO:
|
||||
case AMD_CPU_ID_RN:
|
||||
case AMD_CPU_ID_VG:
|
||||
case AMD_CPU_ID_YC:
|
||||
case AMD_CPU_ID_CB:
|
||||
dev->num_ips = 12;
|
||||
|
|
@ -517,6 +518,7 @@ static int amd_pmc_get_os_hint(struct amd_pmc_dev *dev)
|
|||
case AMD_CPU_ID_PCO:
|
||||
return MSG_OS_HINT_PCO;
|
||||
case AMD_CPU_ID_RN:
|
||||
case AMD_CPU_ID_VG:
|
||||
case AMD_CPU_ID_YC:
|
||||
case AMD_CPU_ID_CB:
|
||||
case AMD_CPU_ID_PS:
|
||||
|
|
@ -717,6 +719,7 @@ static const struct pci_device_id pmc_pci_ids[] = {
|
|||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_RV) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_SP) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_SHP) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_VG) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M20H_ROOT) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_ROOT) },
|
||||
{ }
|
||||
|
|
|
|||
|
|
@ -156,6 +156,7 @@ void amd_mp2_stb_deinit(struct amd_pmc_dev *dev);
|
|||
#define AMD_CPU_ID_RN 0x1630
|
||||
#define AMD_CPU_ID_PCO AMD_CPU_ID_RV
|
||||
#define AMD_CPU_ID_CZN AMD_CPU_ID_RN
|
||||
#define AMD_CPU_ID_VG 0x1645
|
||||
#define AMD_CPU_ID_YC 0x14B5
|
||||
#define AMD_CPU_ID_CB 0x14D8
|
||||
#define AMD_CPU_ID_PS 0x14E8
|
||||
|
|
|
|||
|
|
@ -89,6 +89,14 @@ static struct awcc_quirks generic_quirks = {
|
|||
static struct awcc_quirks empty_quirks;
|
||||
|
||||
static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
||||
{
|
||||
.ident = "Alienware 16 Aurora",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware 16 Aurora"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware Area-51m",
|
||||
.matches = {
|
||||
|
|
@ -98,26 +106,18 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
|||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware Area-51m R2",
|
||||
.ident = "Alienware m15",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware Area-51m R2"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m15 R5",
|
||||
.ident = "Alienware m16 R1 AMD",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15 R5"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m15 R7",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15 R7"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
|
|
@ -129,14 +129,6 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
|||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m16 R1 AMD",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m16 R2",
|
||||
.matches = {
|
||||
|
|
@ -146,106 +138,66 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
|||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m17 R5",
|
||||
.ident = "Alienware m17",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware m18 R2",
|
||||
.ident = "Alienware m18",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18 R2"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware x15 R1",
|
||||
.ident = "Alienware x15",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R1"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware x15 R2",
|
||||
.ident = "Alienware x17",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x15 R2"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware x17 R2",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G15 5510",
|
||||
.ident = "Dell Inc. G15",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5510"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G15 5511",
|
||||
.ident = "Dell Inc. G16",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5511"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G16"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G15 5515",
|
||||
.ident = "Dell Inc. G3",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5515"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G3"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G16 7630",
|
||||
.ident = "Dell Inc. G5",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G16 7630"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G3 3500",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G3 3500"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G3 3590",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G3 3590"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G5 5500",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G5 5500"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Dell Inc. G5 5505",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G5 5505"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "G5"),
|
||||
},
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
|
|
@ -1629,7 +1581,7 @@ static int wmax_wmi_probe(struct wmi_device *wdev, const void *context)
|
|||
|
||||
static int wmax_wmi_suspend(struct device *dev)
|
||||
{
|
||||
if (awcc->hwmon)
|
||||
if (awcc && awcc->hwmon)
|
||||
awcc_hwmon_suspend(dev);
|
||||
|
||||
return 0;
|
||||
|
|
@ -1637,7 +1589,7 @@ static int wmax_wmi_suspend(struct device *dev)
|
|||
|
||||
static int wmax_wmi_resume(struct device *dev)
|
||||
{
|
||||
if (awcc->hwmon)
|
||||
if (awcc && awcc->hwmon)
|
||||
awcc_hwmon_resume(dev);
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -365,6 +365,13 @@ static const struct key_entry dell_wmi_keymap_type_0012[] = {
|
|||
/* Backlight brightness change event */
|
||||
{ KE_IGNORE, 0x0003, { KEY_RESERVED } },
|
||||
|
||||
/*
|
||||
* Electronic privacy screen toggled, extended data gives state,
|
||||
* separate entries for on/off see handling in dell_wmi_process_key().
|
||||
*/
|
||||
{ KE_KEY, 0x000c, { KEY_EPRIVACY_SCREEN_OFF } },
|
||||
{ KE_KEY, 0x000c, { KEY_EPRIVACY_SCREEN_ON } },
|
||||
|
||||
/* Ultra-performance mode switch request */
|
||||
{ KE_IGNORE, 0x000d, { KEY_RESERVED } },
|
||||
|
||||
|
|
@ -435,6 +442,11 @@ static int dell_wmi_process_key(struct wmi_device *wdev, int type, int code, u16
|
|||
"Dell tablet mode switch",
|
||||
SW_TABLET_MODE, !buffer[0]);
|
||||
return 1;
|
||||
} else if (type == 0x0012 && code == 0x000c && remaining > 0) {
|
||||
/* Eprivacy toggle, switch to "on" key entry for on events */
|
||||
if (buffer[0] == 2)
|
||||
key++;
|
||||
used = 1;
|
||||
} else if (type == 0x0012 && code == 0x000d && remaining > 0) {
|
||||
value = (buffer[2] == 2);
|
||||
used = 1;
|
||||
|
|
|
|||
|
|
@ -92,9 +92,11 @@ static const char * const victus_thermal_profile_boards[] = {
|
|||
"8A25"
|
||||
};
|
||||
|
||||
/* DMI Board names of Victus 16-r1000 and Victus 16-s1000 laptops */
|
||||
/* DMI Board names of Victus 16-r and Victus 16-s laptops */
|
||||
static const char * const victus_s_thermal_profile_boards[] = {
|
||||
"8C99", "8C9C"
|
||||
"8BBE", "8BD4", "8BD5",
|
||||
"8C78", "8C99", "8C9C",
|
||||
"8D41",
|
||||
};
|
||||
|
||||
enum hp_wmi_radio {
|
||||
|
|
|
|||
|
|
@ -81,6 +81,10 @@ static const struct key_entry huawei_wmi_keymap[] = {
|
|||
{ KE_KEY, 0x289, { KEY_WLAN } },
|
||||
// Huawei |M| key
|
||||
{ KE_KEY, 0x28a, { KEY_CONFIG } },
|
||||
// HONOR YOYO key
|
||||
{ KE_KEY, 0x28b, { KEY_NOTIFICATION_CENTER } },
|
||||
// HONOR print screen
|
||||
{ KE_KEY, 0x28e, { KEY_PRINT } },
|
||||
// Keyboard backlit
|
||||
{ KE_IGNORE, 0x293, { KEY_KBDILLUMTOGGLE } },
|
||||
{ KE_IGNORE, 0x294, { KEY_KBDILLUMUP } },
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ static const struct acpi_device_id intel_hid_ids[] = {
|
|||
{ "INTC10CB" },
|
||||
{ "INTC10CC" },
|
||||
{ "INTC10F1" },
|
||||
{ "INTC10F2" },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(acpi, intel_hid_ids);
|
||||
|
|
|
|||
|
|
@ -245,15 +245,12 @@ int skl_int3472_register_regulator(struct int3472_discrete_device *int3472,
|
|||
if (IS_ERR(regulator->rdev))
|
||||
return PTR_ERR(regulator->rdev);
|
||||
|
||||
int3472->regulators[int3472->n_regulator_gpios].ena_gpio = gpio;
|
||||
int3472->n_regulator_gpios++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void skl_int3472_unregister_regulator(struct int3472_discrete_device *int3472)
|
||||
{
|
||||
for (int i = 0; i < int3472->n_regulator_gpios; i++) {
|
||||
for (int i = 0; i < int3472->n_regulator_gpios; i++)
|
||||
regulator_unregister(int3472->regulators[i].rdev);
|
||||
gpiod_put(int3472->regulators[i].ena_gpio);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -250,7 +250,7 @@ static int intel_punit_ipc_probe(struct platform_device *pdev)
|
|||
} else {
|
||||
ret = devm_request_irq(&pdev->dev, irq, intel_punit_ioc,
|
||||
IRQF_NO_SUSPEND, "intel_punit_ipc",
|
||||
&punit_ipcdev);
|
||||
punit_ipcdev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to request irq: %d\n", irq);
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -108,11 +108,11 @@ static int isst_if_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|||
|
||||
ret = pci_read_config_dword(pdev, 0xD0, &mmio_base);
|
||||
if (ret)
|
||||
return ret;
|
||||
return pcibios_err_to_errno(ret);
|
||||
|
||||
ret = pci_read_config_dword(pdev, 0xFC, &pcu_base);
|
||||
if (ret)
|
||||
return ret;
|
||||
return pcibios_err_to_errno(ret);
|
||||
|
||||
pcu_base &= GENMASK(10, 0);
|
||||
base_addr = (u64)mmio_base << 23 | (u64) pcu_base << 12;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
* @agent_type_mask: Bit mask of all hardware agents for this domain
|
||||
* @uncore_attr_group: Attribute group storage
|
||||
* @max_freq_khz_kobj_attr: Storage for kobject attribute max_freq_khz
|
||||
* @mix_freq_khz_kobj_attr: Storage for kobject attribute min_freq_khz
|
||||
* @min_freq_khz_kobj_attr: Storage for kobject attribute min_freq_khz
|
||||
* @initial_max_freq_khz_kobj_attr: Storage for kobject attribute initial_max_freq_khz
|
||||
* @initial_min_freq_khz_kobj_attr: Storage for kobject attribute initial_min_freq_khz
|
||||
* @current_freq_khz_kobj_attr: Storage for kobject attribute current_freq_khz
|
||||
|
|
@ -48,13 +48,14 @@
|
|||
* @fabric_cluster_id_kobj_attr: Storage for kobject attribute fabric_cluster_id
|
||||
* @package_id_kobj_attr: Storage for kobject attribute package_id
|
||||
* @elc_low_threshold_percent_kobj_attr:
|
||||
Storage for kobject attribute elc_low_threshold_percent
|
||||
* Storage for kobject attribute elc_low_threshold_percent
|
||||
* @elc_high_threshold_percent_kobj_attr:
|
||||
Storage for kobject attribute elc_high_threshold_percent
|
||||
* Storage for kobject attribute elc_high_threshold_percent
|
||||
* @elc_high_threshold_enable_kobj_attr:
|
||||
Storage for kobject attribute elc_high_threshold_enable
|
||||
* Storage for kobject attribute elc_high_threshold_enable
|
||||
* @elc_floor_freq_khz_kobj_attr: Storage for kobject attribute elc_floor_freq_khz
|
||||
* @agent_types_kobj_attr: Storage for kobject attribute agent_type
|
||||
* @die_id_kobj_attr: Attribute storage for die_id information
|
||||
* @uncore_attrs: Attribute storage for group creation
|
||||
*
|
||||
* This structure is used to encapsulate all data related to uncore sysfs
|
||||
|
|
|
|||
|
|
@ -256,6 +256,10 @@ static const struct x86_cpu_id intel_uncore_cpu_ids[] = {
|
|||
X86_MATCH_VFM(INTEL_ARROWLAKE, NULL),
|
||||
X86_MATCH_VFM(INTEL_ARROWLAKE_H, NULL),
|
||||
X86_MATCH_VFM(INTEL_LUNARLAKE_M, NULL),
|
||||
X86_MATCH_VFM(INTEL_PANTHERLAKE_L, NULL),
|
||||
X86_MATCH_VFM(INTEL_WILDCATLAKE_L, NULL),
|
||||
X86_MATCH_VFM(INTEL_NOVALAKE, NULL),
|
||||
X86_MATCH_VFM(INTEL_NOVALAKE_L, NULL),
|
||||
{}
|
||||
};
|
||||
MODULE_DEVICE_TABLE(x86cpu, intel_uncore_cpu_ids);
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
#include <linux/debugfs.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/device/driver.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/kernel.h>
|
||||
|
|
@ -28,7 +29,7 @@
|
|||
|
||||
#define DRIVER_NAME "msi-wmi-platform"
|
||||
|
||||
#define MSI_PLATFORM_GUID "ABBC0F6E-8EA1-11d1-00A0-C90629100000"
|
||||
#define MSI_PLATFORM_GUID "ABBC0F6E-8EA1-11D1-00A0-C90629100000"
|
||||
|
||||
#define MSI_WMI_PLATFORM_INTERFACE_VERSION 2
|
||||
|
||||
|
|
@ -448,7 +449,45 @@ static struct wmi_driver msi_wmi_platform_driver = {
|
|||
.probe = msi_wmi_platform_probe,
|
||||
.no_singleton = true,
|
||||
};
|
||||
module_wmi_driver(msi_wmi_platform_driver);
|
||||
|
||||
/*
|
||||
* MSI reused the WMI GUID from the WMI-ACPI sample code provided by Microsoft,
|
||||
* so other manufacturers might use it as well for their WMI-ACPI implementations.
|
||||
*/
|
||||
static const struct dmi_system_id msi_wmi_platform_whitelist[] __initconst = {
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "MICRO-STAR INT"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
static int __init msi_wmi_platform_module_init(void)
|
||||
{
|
||||
if (!dmi_check_system(msi_wmi_platform_whitelist)) {
|
||||
if (!force)
|
||||
return -ENODEV;
|
||||
|
||||
pr_warn("Ignoring DMI whitelist\n");
|
||||
}
|
||||
|
||||
return wmi_driver_register(&msi_wmi_platform_driver);
|
||||
}
|
||||
|
||||
static void __exit msi_wmi_platform_module_exit(void)
|
||||
{
|
||||
wmi_driver_unregister(&msi_wmi_platform_driver);
|
||||
}
|
||||
|
||||
module_init(msi_wmi_platform_module_init);
|
||||
module_exit(msi_wmi_platform_module_exit);
|
||||
|
||||
|
||||
MODULE_AUTHOR("Armin Wolf <W_Armin@gmx.de>");
|
||||
MODULE_DESCRIPTION("MSI WMI platform features");
|
||||
|
|
|
|||
|
|
@ -100,7 +100,6 @@ struct int3472_gpio_regulator {
|
|||
struct regulator_consumer_supply supply_map[GPIO_REGULATOR_SUPPLY_MAP_COUNT * 2];
|
||||
char supply_name_upper[GPIO_SUPPLY_NAME_LENGTH];
|
||||
char regulator_name[GPIO_REGULATOR_NAME_LENGTH];
|
||||
struct gpio_desc *ena_gpio;
|
||||
struct regulator_dev *rdev;
|
||||
struct regulator_desc rdesc;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -631,6 +631,18 @@
|
|||
#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
|
||||
#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
|
||||
|
||||
/*
|
||||
* Keycodes for hotkeys toggling the electronic privacy screen found on some
|
||||
* laptops on/off. Note when the embedded-controller turns on/off the eprivacy
|
||||
* screen itself then the state should be reported through drm connecter props:
|
||||
* https://www.kernel.org/doc/html/latest/gpu/drm-kms.html#standard-connector-properties
|
||||
* Except when implementing the drm connecter properties API is not possible
|
||||
* because e.g. the firmware does not allow querying the presence and/or status
|
||||
* of the eprivacy screen at boot.
|
||||
*/
|
||||
#define KEY_EPRIVACY_SCREEN_ON 0x252
|
||||
#define KEY_EPRIVACY_SCREEN_OFF 0x253
|
||||
|
||||
#define KEY_KBDINPUTASSIST_PREV 0x260
|
||||
#define KEY_KBDINPUTASSIST_NEXT 0x261
|
||||
#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ struct isst_if_cpu_map {
|
|||
/**
|
||||
* struct isst_if_cpu_maps - structure for CPU map IOCTL
|
||||
* @cmd_count: Number of CPU mapping command in cpu_map[]
|
||||
* @cpu_map[]: Holds one or more CPU map data structure
|
||||
* @cpu_map: Holds one or more CPU map data structure
|
||||
*
|
||||
* This structure used with ioctl ISST_IF_GET_PHY_ID to send
|
||||
* one or more CPU mapping commands. Here IOCTL return value indicates
|
||||
|
|
@ -82,8 +82,8 @@ struct isst_if_io_reg {
|
|||
|
||||
/**
|
||||
* struct isst_if_io_regs - structure for IO register commands
|
||||
* @cmd_count: Number of io reg commands in io_reg[]
|
||||
* @io_reg[]: Holds one or more io_reg command structure
|
||||
* @req_count: Number of io reg commands in io_reg[]
|
||||
* @io_reg: Holds one or more io_reg command structure
|
||||
*
|
||||
* This structure used with ioctl ISST_IF_IO_CMD to send
|
||||
* one or more read/write commands to PUNIT. Here IOCTL return value
|
||||
|
|
@ -120,7 +120,7 @@ struct isst_if_mbox_cmd {
|
|||
/**
|
||||
* struct isst_if_mbox_cmds - structure for mailbox commands
|
||||
* @cmd_count: Number of mailbox commands in mbox_cmd[]
|
||||
* @mbox_cmd[]: Holds one or more mbox commands
|
||||
* @mbox_cmd: Holds one or more mbox commands
|
||||
*
|
||||
* This structure used with ioctl ISST_IF_MBOX_COMMAND to send
|
||||
* one or more mailbox commands to PUNIT. Here IOCTL return value
|
||||
|
|
@ -152,7 +152,7 @@ struct isst_if_msr_cmd {
|
|||
/**
|
||||
* struct isst_if_msr_cmds - structure for msr commands
|
||||
* @cmd_count: Number of mailbox commands in msr_cmd[]
|
||||
* @msr_cmd[]: Holds one or more msr commands
|
||||
* @msr_cmd: Holds one or more msr commands
|
||||
*
|
||||
* This structure used with ioctl ISST_IF_MSR_COMMAND to send
|
||||
* one or more MSR commands. IOCTL return value indicates number of
|
||||
|
|
@ -167,8 +167,9 @@ struct isst_if_msr_cmds {
|
|||
* struct isst_core_power - Structure to get/set core_power feature
|
||||
* @get_set: 0: Get, 1: Set
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @enable: Feature enable status
|
||||
* @supported: Power domain supports SST_CP interface
|
||||
* @priority_type: Priority type for the feature (ordered/proportional)
|
||||
*
|
||||
* Structure to get/set core_power feature state using IOCTL
|
||||
|
|
@ -187,11 +188,11 @@ struct isst_core_power {
|
|||
* struct isst_clos_param - Structure to get/set clos praram
|
||||
* @get_set: 0: Get, 1: Set
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* clos: Clos ID for the parameters
|
||||
* min_freq_mhz: Minimum frequency in MHz
|
||||
* max_freq_mhz: Maximum frequency in MHz
|
||||
* prop_prio: Proportional priority from 0-15
|
||||
* @power_domain_id: Power Domain id
|
||||
* @clos: Clos ID for the parameters
|
||||
* @min_freq_mhz: Minimum frequency in MHz
|
||||
* @max_freq_mhz: Maximum frequency in MHz
|
||||
* @prop_prio: Proportional priority from 0-15
|
||||
*
|
||||
* Structure to get/set per clos property using IOCTL
|
||||
* ISST_IF_CLOS_PARAM.
|
||||
|
|
@ -209,7 +210,7 @@ struct isst_clos_param {
|
|||
/**
|
||||
* struct isst_if_clos_assoc - Structure to assign clos to a CPU
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @logical_cpu: CPU number
|
||||
* @clos: Clos ID to assign to the logical CPU
|
||||
*
|
||||
|
|
@ -228,6 +229,7 @@ struct isst_if_clos_assoc {
|
|||
* @get_set: Request is for get or set
|
||||
* @punit_cpu_map: Set to 1 if the CPU number is punit numbering not
|
||||
* Linux CPU number
|
||||
* @assoc_info: CLOS data for this CPU
|
||||
*
|
||||
* Structure used to get/set associate CPUs to clos using IOCTL
|
||||
* ISST_IF_CLOS_ASSOC.
|
||||
|
|
@ -257,7 +259,7 @@ struct isst_tpmi_instance_count {
|
|||
/**
|
||||
* struct isst_perf_level_info - Structure to get information on SST-PP levels
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @logical_cpu: CPU number
|
||||
* @clos: Clos ID to assign to the logical CPU
|
||||
* @max_level: Maximum performance level supported by the platform
|
||||
|
|
@ -267,8 +269,8 @@ struct isst_tpmi_instance_count {
|
|||
* @feature_state: SST-BF and SST-TF (enabled/disabled) status at current level
|
||||
* @locked: SST-PP performance level change is locked/unlocked
|
||||
* @enabled: SST-PP feature is enabled or not
|
||||
* @sst-tf_support: SST-TF support status at this level
|
||||
* @sst-bf_support: SST-BF support status at this level
|
||||
* @sst_tf_support: SST-TF support status at this level
|
||||
* @sst_bf_support: SST-BF support status at this level
|
||||
*
|
||||
* Structure to get SST-PP details using IOCTL ISST_IF_PERF_LEVELS.
|
||||
*/
|
||||
|
|
@ -289,7 +291,7 @@ struct isst_perf_level_info {
|
|||
/**
|
||||
* struct isst_perf_level_control - Structure to set SST-PP level
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: level to set
|
||||
*
|
||||
* Structure used change SST-PP level using IOCTL ISST_IF_PERF_SET_LEVEL.
|
||||
|
|
@ -303,7 +305,7 @@ struct isst_perf_level_control {
|
|||
/**
|
||||
* struct isst_perf_feature_control - Structure to activate SST-BF/SST-TF
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @feature: bit 0 = SST-BF state, bit 1 = SST-TF state
|
||||
*
|
||||
* Structure used to enable SST-BF/SST-TF using IOCTL ISST_IF_PERF_SET_FEATURE.
|
||||
|
|
@ -320,7 +322,7 @@ struct isst_perf_feature_control {
|
|||
/**
|
||||
* struct isst_perf_level_data_info - Structure to get SST-PP level details
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: SST-PP level for which caller wants to get information
|
||||
* @tdp_ratio: TDP Ratio
|
||||
* @base_freq_mhz: Base frequency in MHz
|
||||
|
|
@ -341,8 +343,8 @@ struct isst_perf_feature_control {
|
|||
* @pm_fabric_freq_mhz: Fabric (Uncore) minimum frequency
|
||||
* @max_buckets: Maximum trl buckets
|
||||
* @max_trl_levels: Maximum trl levels
|
||||
* @bucket_core_counts[TRL_MAX_BUCKETS]: Number of cores per bucket
|
||||
* @trl_freq_mhz[TRL_MAX_LEVELS][TRL_MAX_BUCKETS]: maximum frequency
|
||||
* @bucket_core_counts: Number of cores per bucket
|
||||
* @trl_freq_mhz: maximum frequency
|
||||
* for a bucket and trl level
|
||||
*
|
||||
* Structure used to get information on frequencies and TDP for a SST-PP
|
||||
|
|
@ -402,7 +404,7 @@ struct isst_perf_level_fabric_info {
|
|||
/**
|
||||
* struct isst_perf_level_cpu_mask - Structure to get SST-PP level CPU mask
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: SST-PP level for which caller wants to get information
|
||||
* @punit_cpu_map: Set to 1 if the CPU number is punit numbering not
|
||||
* Linux CPU number. If 0 CPU buffer is copied to user space
|
||||
|
|
@ -430,7 +432,7 @@ struct isst_perf_level_cpu_mask {
|
|||
/**
|
||||
* struct isst_base_freq_info - Structure to get SST-BF frequencies
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: SST-PP level for which caller wants to get information
|
||||
* @high_base_freq_mhz: High priority CPU base frequency
|
||||
* @low_base_freq_mhz: Low priority CPU base frequency
|
||||
|
|
@ -453,9 +455,11 @@ struct isst_base_freq_info {
|
|||
/**
|
||||
* struct isst_turbo_freq_info - Structure to get SST-TF frequencies
|
||||
* @socket_id: Socket/package id
|
||||
* @power_domain: Power Domain id
|
||||
* @power_domain_id: Power Domain id
|
||||
* @level: SST-PP level for which caller wants to get information
|
||||
* @max_clip_freqs: Maximum number of low priority core clipping frequencies
|
||||
* @max_buckets: Maximum trl buckets
|
||||
* @max_trl_levels: Maximum trl levels
|
||||
* @lp_clip_freq_mhz: Clip frequencies per trl level
|
||||
* @bucket_core_counts: Maximum number of cores for a bucket
|
||||
* @trl_freq_mhz: Frequencies per trl level for each bucket
|
||||
|
|
|
|||
Loading…
Reference in New Issue