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.pull/1354/merge
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[] = {
|
static const struct wmi_device_id foo_id_table[] = {
|
||||||
|
/* Only use uppercase letters! */
|
||||||
{ "936DA01F-9ABD-4D9D-80C7-02AF85C822A8", NULL },
|
{ "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
|
ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
|
||||||
M: Corentin Chary <corentin.chary@gmail.com>
|
M: Corentin Chary <corentin.chary@gmail.com>
|
||||||
M: Luke D. Jones <luke@ljones.dev>
|
M: Luke D. Jones <luke@ljones.dev>
|
||||||
|
M: Denis Benato <benato.denis96@gmail.com>
|
||||||
L: platform-driver-x86@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
W: https://asus-linux.org/
|
W: https://asus-linux.org/
|
||||||
|
|
@ -12862,7 +12863,8 @@ F: tools/testing/selftests/sgx/*
|
||||||
K: \bSGX_
|
K: \bSGX_
|
||||||
|
|
||||||
INTEL SKYLAKE INT3472 ACPI DEVICE DRIVER
|
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
|
S: Maintained
|
||||||
F: drivers/platform/x86/intel/int3472/
|
F: drivers/platform/x86/intel/int3472/
|
||||||
F: include/linux/platform_data/x86/int3472.h
|
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)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
fsleep(10000);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -161,6 +162,7 @@ static int t14s_ec_read(void *context, unsigned int reg,
|
||||||
|
|
||||||
out:
|
out:
|
||||||
i2c_unlock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
i2c_unlock_bus(client->adapter, I2C_LOCK_SEGMENT);
|
||||||
|
fsleep(10000);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -195,6 +197,8 @@ static int t14s_ec_read_evt(struct t14s_ec *ec, u8 *val)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
fsleep(10000);
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
@ -570,12 +574,6 @@ static int t14s_ec_probe(struct i2c_client *client)
|
||||||
return dev_err_probe(dev, PTR_ERR(ec->regmap),
|
return dev_err_probe(dev, PTR_ERR(ec->regmap),
|
||||||
"Failed to init regmap\n");
|
"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);
|
ret = t14s_leds_probe(ec);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -592,6 +590,12 @@ static int t14s_ec_probe(struct i2c_client *client)
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
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
|
* Disable wakeup support by default, because the driver currently does
|
||||||
* not support masking any events and the laptop should not wake up when
|
* 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) {
|
if (pmc->block[blk_num].type == MLXBF_PMC_TYPE_CRSPACE) {
|
||||||
/* Program crspace counters to count clock cycles using "count_clock" sysfs */
|
/* Program crspace counters to count clock cycles using "count_clock" sysfs */
|
||||||
attr = &pmc->block[blk_num].attr_count_clock;
|
attr = &pmc->block[blk_num].attr_count_clock;
|
||||||
|
sysfs_attr_init(&attr->dev_attr.attr);
|
||||||
attr->dev_attr.attr.mode = 0644;
|
attr->dev_attr.attr.mode = 0644;
|
||||||
attr->dev_attr.show = mlxbf_pmc_count_clock_show;
|
attr->dev_attr.show = mlxbf_pmc_count_clock_show;
|
||||||
attr->dev_attr.store = mlxbf_pmc_count_clock_store;
|
attr->dev_attr.store = mlxbf_pmc_count_clock_store;
|
||||||
|
|
|
||||||
|
|
@ -440,7 +440,7 @@ config WIRELESS_HOTKEY
|
||||||
depends on INPUT
|
depends on INPUT
|
||||||
help
|
help
|
||||||
This driver provides supports for the wireless buttons found on some AMD,
|
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).
|
On such systems the driver should load automatically (via ACPI alias).
|
||||||
|
|
||||||
To compile this driver as a module, choose M here: the module will
|
To compile this driver as a module, choose M here: the module will
|
||||||
|
|
@ -553,6 +553,7 @@ config MSI_WMI
|
||||||
config MSI_WMI_PLATFORM
|
config MSI_WMI_PLATFORM
|
||||||
tristate "MSI WMI Platform features"
|
tristate "MSI WMI Platform features"
|
||||||
depends on ACPI_WMI
|
depends on ACPI_WMI
|
||||||
|
depends on DMI
|
||||||
depends on HWMON
|
depends on HWMON
|
||||||
help
|
help
|
||||||
Say Y here if you want to have support for WMI-based platform features
|
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 {
|
enum acer_wmi_event_ids {
|
||||||
WMID_HOTKEY_EVENT = 0x1,
|
WMID_HOTKEY_EVENT = 0x1,
|
||||||
|
WMID_BACKLIGHT_EVENT = 0x4,
|
||||||
WMID_ACCEL_OR_KBD_DOCK_EVENT = 0x5,
|
WMID_ACCEL_OR_KBD_DOCK_EVENT = 0x5,
|
||||||
WMID_GAMING_TURBO_KEY_EVENT = 0x7,
|
WMID_GAMING_TURBO_KEY_EVENT = 0x7,
|
||||||
WMID_AC_EVENT = 0x8,
|
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);
|
sparse_keymap_report_event(acer_wmi_input_dev, scancode, 1, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case WMID_BACKLIGHT_EVENT:
|
||||||
|
/* Already handled by acpi-video */
|
||||||
|
break;
|
||||||
case WMID_ACCEL_OR_KBD_DOCK_EVENT:
|
case WMID_ACCEL_OR_KBD_DOCK_EVENT:
|
||||||
acer_gsensor_event();
|
acer_gsensor_event();
|
||||||
acer_kbd_dock_event(&return_value);
|
acer_kbd_dock_event(&return_value);
|
||||||
|
|
|
||||||
|
|
@ -122,6 +122,14 @@ static const struct dmi_system_id fwbug_list[] = {
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "21A1"),
|
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 */
|
/* https://bugzilla.kernel.org/show_bug.cgi?id=218024 */
|
||||||
{
|
{
|
||||||
.ident = "V14 G4 AMN",
|
.ident = "V14 G4 AMN",
|
||||||
|
|
@ -204,6 +212,23 @@ static const struct dmi_system_id fwbug_list[] = {
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "82ND"),
|
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 */
|
/* https://gitlab.freedesktop.org/drm/amd/-/issues/2684 */
|
||||||
{
|
{
|
||||||
.ident = "HP Laptop 15s-eq2xxx",
|
.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) {
|
switch (dev->cpu_id) {
|
||||||
case AMD_CPU_ID_PCO:
|
case AMD_CPU_ID_PCO:
|
||||||
case AMD_CPU_ID_RN:
|
case AMD_CPU_ID_RN:
|
||||||
|
case AMD_CPU_ID_VG:
|
||||||
case AMD_CPU_ID_YC:
|
case AMD_CPU_ID_YC:
|
||||||
case AMD_CPU_ID_CB:
|
case AMD_CPU_ID_CB:
|
||||||
dev->num_ips = 12;
|
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:
|
case AMD_CPU_ID_PCO:
|
||||||
return MSG_OS_HINT_PCO;
|
return MSG_OS_HINT_PCO;
|
||||||
case AMD_CPU_ID_RN:
|
case AMD_CPU_ID_RN:
|
||||||
|
case AMD_CPU_ID_VG:
|
||||||
case AMD_CPU_ID_YC:
|
case AMD_CPU_ID_YC:
|
||||||
case AMD_CPU_ID_CB:
|
case AMD_CPU_ID_CB:
|
||||||
case AMD_CPU_ID_PS:
|
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_RV) },
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, AMD_CPU_ID_SP) },
|
{ 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_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_M20H_ROOT) },
|
||||||
{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_1AH_M60H_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_RN 0x1630
|
||||||
#define AMD_CPU_ID_PCO AMD_CPU_ID_RV
|
#define AMD_CPU_ID_PCO AMD_CPU_ID_RV
|
||||||
#define AMD_CPU_ID_CZN AMD_CPU_ID_RN
|
#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_YC 0x14B5
|
||||||
#define AMD_CPU_ID_CB 0x14D8
|
#define AMD_CPU_ID_CB 0x14D8
|
||||||
#define AMD_CPU_ID_PS 0x14E8
|
#define AMD_CPU_ID_PS 0x14E8
|
||||||
|
|
|
||||||
|
|
@ -89,6 +89,14 @@ static struct awcc_quirks generic_quirks = {
|
||||||
static struct awcc_quirks empty_quirks;
|
static struct awcc_quirks empty_quirks;
|
||||||
|
|
||||||
static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
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",
|
.ident = "Alienware Area-51m",
|
||||||
.matches = {
|
.matches = {
|
||||||
|
|
@ -98,26 +106,18 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
||||||
.driver_data = &generic_quirks,
|
.driver_data = &generic_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Alienware Area-51m R2",
|
.ident = "Alienware m15",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
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,
|
.driver_data = &generic_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Alienware m15 R5",
|
.ident = "Alienware m16 R1 AMD",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15 R5"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m16 R1 AMD"),
|
||||||
},
|
|
||||||
.driver_data = &generic_quirks,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.ident = "Alienware m15 R7",
|
|
||||||
.matches = {
|
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m15 R7"),
|
|
||||||
},
|
},
|
||||||
.driver_data = &generic_quirks,
|
.driver_data = &generic_quirks,
|
||||||
},
|
},
|
||||||
|
|
@ -129,14 +129,6 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
||||||
},
|
},
|
||||||
.driver_data = &g_series_quirks,
|
.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",
|
.ident = "Alienware m16 R2",
|
||||||
.matches = {
|
.matches = {
|
||||||
|
|
@ -146,106 +138,66 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
||||||
.driver_data = &generic_quirks,
|
.driver_data = &generic_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Alienware m17 R5",
|
.ident = "Alienware m17",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
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,
|
.driver_data = &generic_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Alienware m18 R2",
|
.ident = "Alienware m18",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
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,
|
.driver_data = &generic_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Alienware x15 R1",
|
.ident = "Alienware x15",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
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,
|
.driver_data = &generic_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Alienware x15 R2",
|
.ident = "Alienware x17",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
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,
|
.driver_data = &generic_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Alienware x17 R2",
|
.ident = "Dell Inc. G15",
|
||||||
.matches = {
|
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware x17 R2"),
|
|
||||||
},
|
|
||||||
.driver_data = &generic_quirks,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.ident = "Dell Inc. G15 5510",
|
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
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,
|
.driver_data = &g_series_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Dell Inc. G15 5511",
|
.ident = "Dell Inc. G16",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
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,
|
.driver_data = &g_series_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Dell Inc. G15 5515",
|
.ident = "Dell Inc. G3",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
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,
|
.driver_data = &g_series_quirks,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.ident = "Dell Inc. G16 7630",
|
.ident = "Dell Inc. G5",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell G16 7630"),
|
DMI_MATCH(DMI_PRODUCT_NAME, "G5"),
|
||||||
},
|
|
||||||
.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"),
|
|
||||||
},
|
},
|
||||||
.driver_data = &g_series_quirks,
|
.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)
|
static int wmax_wmi_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
if (awcc->hwmon)
|
if (awcc && awcc->hwmon)
|
||||||
awcc_hwmon_suspend(dev);
|
awcc_hwmon_suspend(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -1637,7 +1589,7 @@ static int wmax_wmi_suspend(struct device *dev)
|
||||||
|
|
||||||
static int wmax_wmi_resume(struct device *dev)
|
static int wmax_wmi_resume(struct device *dev)
|
||||||
{
|
{
|
||||||
if (awcc->hwmon)
|
if (awcc && awcc->hwmon)
|
||||||
awcc_hwmon_resume(dev);
|
awcc_hwmon_resume(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -365,6 +365,13 @@ static const struct key_entry dell_wmi_keymap_type_0012[] = {
|
||||||
/* Backlight brightness change event */
|
/* Backlight brightness change event */
|
||||||
{ KE_IGNORE, 0x0003, { KEY_RESERVED } },
|
{ 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 */
|
/* Ultra-performance mode switch request */
|
||||||
{ KE_IGNORE, 0x000d, { KEY_RESERVED } },
|
{ 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",
|
"Dell tablet mode switch",
|
||||||
SW_TABLET_MODE, !buffer[0]);
|
SW_TABLET_MODE, !buffer[0]);
|
||||||
return 1;
|
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) {
|
} else if (type == 0x0012 && code == 0x000d && remaining > 0) {
|
||||||
value = (buffer[2] == 2);
|
value = (buffer[2] == 2);
|
||||||
used = 1;
|
used = 1;
|
||||||
|
|
|
||||||
|
|
@ -92,9 +92,11 @@ static const char * const victus_thermal_profile_boards[] = {
|
||||||
"8A25"
|
"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[] = {
|
static const char * const victus_s_thermal_profile_boards[] = {
|
||||||
"8C99", "8C9C"
|
"8BBE", "8BD4", "8BD5",
|
||||||
|
"8C78", "8C99", "8C9C",
|
||||||
|
"8D41",
|
||||||
};
|
};
|
||||||
|
|
||||||
enum hp_wmi_radio {
|
enum hp_wmi_radio {
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,10 @@ static const struct key_entry huawei_wmi_keymap[] = {
|
||||||
{ KE_KEY, 0x289, { KEY_WLAN } },
|
{ KE_KEY, 0x289, { KEY_WLAN } },
|
||||||
// Huawei |M| key
|
// Huawei |M| key
|
||||||
{ KE_KEY, 0x28a, { KEY_CONFIG } },
|
{ KE_KEY, 0x28a, { KEY_CONFIG } },
|
||||||
|
// HONOR YOYO key
|
||||||
|
{ KE_KEY, 0x28b, { KEY_NOTIFICATION_CENTER } },
|
||||||
|
// HONOR print screen
|
||||||
|
{ KE_KEY, 0x28e, { KEY_PRINT } },
|
||||||
// Keyboard backlit
|
// Keyboard backlit
|
||||||
{ KE_IGNORE, 0x293, { KEY_KBDILLUMTOGGLE } },
|
{ KE_IGNORE, 0x293, { KEY_KBDILLUMTOGGLE } },
|
||||||
{ KE_IGNORE, 0x294, { KEY_KBDILLUMUP } },
|
{ KE_IGNORE, 0x294, { KEY_KBDILLUMUP } },
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,7 @@ static const struct acpi_device_id intel_hid_ids[] = {
|
||||||
{ "INTC10CB" },
|
{ "INTC10CB" },
|
||||||
{ "INTC10CC" },
|
{ "INTC10CC" },
|
||||||
{ "INTC10F1" },
|
{ "INTC10F1" },
|
||||||
|
{ "INTC10F2" },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(acpi, intel_hid_ids);
|
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))
|
if (IS_ERR(regulator->rdev))
|
||||||
return PTR_ERR(regulator->rdev);
|
return PTR_ERR(regulator->rdev);
|
||||||
|
|
||||||
int3472->regulators[int3472->n_regulator_gpios].ena_gpio = gpio;
|
|
||||||
int3472->n_regulator_gpios++;
|
int3472->n_regulator_gpios++;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void skl_int3472_unregister_regulator(struct int3472_discrete_device *int3472)
|
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);
|
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 {
|
} else {
|
||||||
ret = devm_request_irq(&pdev->dev, irq, intel_punit_ioc,
|
ret = devm_request_irq(&pdev->dev, irq, intel_punit_ioc,
|
||||||
IRQF_NO_SUSPEND, "intel_punit_ipc",
|
IRQF_NO_SUSPEND, "intel_punit_ipc",
|
||||||
&punit_ipcdev);
|
punit_ipcdev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
dev_err(&pdev->dev, "Failed to request irq: %d\n", irq);
|
dev_err(&pdev->dev, "Failed to request irq: %d\n", irq);
|
||||||
return ret;
|
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);
|
ret = pci_read_config_dword(pdev, 0xD0, &mmio_base);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return pcibios_err_to_errno(ret);
|
||||||
|
|
||||||
ret = pci_read_config_dword(pdev, 0xFC, &pcu_base);
|
ret = pci_read_config_dword(pdev, 0xFC, &pcu_base);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return pcibios_err_to_errno(ret);
|
||||||
|
|
||||||
pcu_base &= GENMASK(10, 0);
|
pcu_base &= GENMASK(10, 0);
|
||||||
base_addr = (u64)mmio_base << 23 | (u64) pcu_base << 12;
|
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
|
* @agent_type_mask: Bit mask of all hardware agents for this domain
|
||||||
* @uncore_attr_group: Attribute group storage
|
* @uncore_attr_group: Attribute group storage
|
||||||
* @max_freq_khz_kobj_attr: Storage for kobject attribute max_freq_khz
|
* @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_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
|
* @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
|
* @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
|
* @fabric_cluster_id_kobj_attr: Storage for kobject attribute fabric_cluster_id
|
||||||
* @package_id_kobj_attr: Storage for kobject attribute package_id
|
* @package_id_kobj_attr: Storage for kobject attribute package_id
|
||||||
* @elc_low_threshold_percent_kobj_attr:
|
* @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:
|
* @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:
|
* @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
|
* @elc_floor_freq_khz_kobj_attr: Storage for kobject attribute elc_floor_freq_khz
|
||||||
* @agent_types_kobj_attr: Storage for kobject attribute agent_type
|
* @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
|
* @uncore_attrs: Attribute storage for group creation
|
||||||
*
|
*
|
||||||
* This structure is used to encapsulate all data related to uncore sysfs
|
* 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, NULL),
|
||||||
X86_MATCH_VFM(INTEL_ARROWLAKE_H, NULL),
|
X86_MATCH_VFM(INTEL_ARROWLAKE_H, NULL),
|
||||||
X86_MATCH_VFM(INTEL_LUNARLAKE_M, 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);
|
MODULE_DEVICE_TABLE(x86cpu, intel_uncore_cpu_ids);
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/debugfs.h>
|
#include <linux/debugfs.h>
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/device/driver.h>
|
#include <linux/device/driver.h>
|
||||||
|
#include <linux/dmi.h>
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <linux/hwmon.h>
|
#include <linux/hwmon.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
|
@ -28,7 +29,7 @@
|
||||||
|
|
||||||
#define DRIVER_NAME "msi-wmi-platform"
|
#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
|
#define MSI_WMI_PLATFORM_INTERFACE_VERSION 2
|
||||||
|
|
||||||
|
|
@ -448,7 +449,45 @@ static struct wmi_driver msi_wmi_platform_driver = {
|
||||||
.probe = msi_wmi_platform_probe,
|
.probe = msi_wmi_platform_probe,
|
||||||
.no_singleton = true,
|
.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_AUTHOR("Armin Wolf <W_Armin@gmx.de>");
|
||||||
MODULE_DESCRIPTION("MSI WMI platform features");
|
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];
|
struct regulator_consumer_supply supply_map[GPIO_REGULATOR_SUPPLY_MAP_COUNT * 2];
|
||||||
char supply_name_upper[GPIO_SUPPLY_NAME_LENGTH];
|
char supply_name_upper[GPIO_SUPPLY_NAME_LENGTH];
|
||||||
char regulator_name[GPIO_REGULATOR_NAME_LENGTH];
|
char regulator_name[GPIO_REGULATOR_NAME_LENGTH];
|
||||||
struct gpio_desc *ena_gpio;
|
|
||||||
struct regulator_dev *rdev;
|
struct regulator_dev *rdev;
|
||||||
struct regulator_desc rdesc;
|
struct regulator_desc rdesc;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -631,6 +631,18 @@
|
||||||
#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
|
#define KEY_BRIGHTNESS_MIN 0x250 /* Set Brightness to Minimum */
|
||||||
#define KEY_BRIGHTNESS_MAX 0x251 /* Set Brightness to Maximum */
|
#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_PREV 0x260
|
||||||
#define KEY_KBDINPUTASSIST_NEXT 0x261
|
#define KEY_KBDINPUTASSIST_NEXT 0x261
|
||||||
#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
|
#define KEY_KBDINPUTASSIST_PREVGROUP 0x262
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ struct isst_if_cpu_map {
|
||||||
/**
|
/**
|
||||||
* struct isst_if_cpu_maps - structure for CPU map IOCTL
|
* struct isst_if_cpu_maps - structure for CPU map IOCTL
|
||||||
* @cmd_count: Number of CPU mapping command in cpu_map[]
|
* @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
|
* This structure used with ioctl ISST_IF_GET_PHY_ID to send
|
||||||
* one or more CPU mapping commands. Here IOCTL return value indicates
|
* 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
|
* struct isst_if_io_regs - structure for IO register commands
|
||||||
* @cmd_count: Number of io reg commands in io_reg[]
|
* @req_count: Number of io reg commands in io_reg[]
|
||||||
* @io_reg[]: Holds one or more io_reg command structure
|
* @io_reg: Holds one or more io_reg command structure
|
||||||
*
|
*
|
||||||
* This structure used with ioctl ISST_IF_IO_CMD to send
|
* This structure used with ioctl ISST_IF_IO_CMD to send
|
||||||
* one or more read/write commands to PUNIT. Here IOCTL return value
|
* 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
|
* struct isst_if_mbox_cmds - structure for mailbox commands
|
||||||
* @cmd_count: Number of mailbox commands in mbox_cmd[]
|
* @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
|
* This structure used with ioctl ISST_IF_MBOX_COMMAND to send
|
||||||
* one or more mailbox commands to PUNIT. Here IOCTL return value
|
* 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
|
* struct isst_if_msr_cmds - structure for msr commands
|
||||||
* @cmd_count: Number of mailbox commands in msr_cmd[]
|
* @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
|
* This structure used with ioctl ISST_IF_MSR_COMMAND to send
|
||||||
* one or more MSR commands. IOCTL return value indicates number of
|
* 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
|
* struct isst_core_power - Structure to get/set core_power feature
|
||||||
* @get_set: 0: Get, 1: Set
|
* @get_set: 0: Get, 1: Set
|
||||||
* @socket_id: Socket/package id
|
* @socket_id: Socket/package id
|
||||||
* @power_domain: Power Domain id
|
* @power_domain_id: Power Domain id
|
||||||
* @enable: Feature enable status
|
* @enable: Feature enable status
|
||||||
|
* @supported: Power domain supports SST_CP interface
|
||||||
* @priority_type: Priority type for the feature (ordered/proportional)
|
* @priority_type: Priority type for the feature (ordered/proportional)
|
||||||
*
|
*
|
||||||
* Structure to get/set core_power feature state using IOCTL
|
* 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
|
* struct isst_clos_param - Structure to get/set clos praram
|
||||||
* @get_set: 0: Get, 1: Set
|
* @get_set: 0: Get, 1: Set
|
||||||
* @socket_id: Socket/package id
|
* @socket_id: Socket/package id
|
||||||
* @power_domain: Power Domain id
|
* @power_domain_id: Power Domain id
|
||||||
* clos: Clos ID for the parameters
|
* @clos: Clos ID for the parameters
|
||||||
* min_freq_mhz: Minimum frequency in MHz
|
* @min_freq_mhz: Minimum frequency in MHz
|
||||||
* max_freq_mhz: Maximum frequency in MHz
|
* @max_freq_mhz: Maximum frequency in MHz
|
||||||
* prop_prio: Proportional priority from 0-15
|
* @prop_prio: Proportional priority from 0-15
|
||||||
*
|
*
|
||||||
* Structure to get/set per clos property using IOCTL
|
* Structure to get/set per clos property using IOCTL
|
||||||
* ISST_IF_CLOS_PARAM.
|
* ISST_IF_CLOS_PARAM.
|
||||||
|
|
@ -209,7 +210,7 @@ struct isst_clos_param {
|
||||||
/**
|
/**
|
||||||
* struct isst_if_clos_assoc - Structure to assign clos to a CPU
|
* struct isst_if_clos_assoc - Structure to assign clos to a CPU
|
||||||
* @socket_id: Socket/package id
|
* @socket_id: Socket/package id
|
||||||
* @power_domain: Power Domain id
|
* @power_domain_id: Power Domain id
|
||||||
* @logical_cpu: CPU number
|
* @logical_cpu: CPU number
|
||||||
* @clos: Clos ID to assign to the logical CPU
|
* @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
|
* @get_set: Request is for get or set
|
||||||
* @punit_cpu_map: Set to 1 if the CPU number is punit numbering not
|
* @punit_cpu_map: Set to 1 if the CPU number is punit numbering not
|
||||||
* Linux CPU number
|
* Linux CPU number
|
||||||
|
* @assoc_info: CLOS data for this CPU
|
||||||
*
|
*
|
||||||
* Structure used to get/set associate CPUs to clos using IOCTL
|
* Structure used to get/set associate CPUs to clos using IOCTL
|
||||||
* ISST_IF_CLOS_ASSOC.
|
* 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
|
* struct isst_perf_level_info - Structure to get information on SST-PP levels
|
||||||
* @socket_id: Socket/package id
|
* @socket_id: Socket/package id
|
||||||
* @power_domain: Power Domain id
|
* @power_domain_id: Power Domain id
|
||||||
* @logical_cpu: CPU number
|
* @logical_cpu: CPU number
|
||||||
* @clos: Clos ID to assign to the logical CPU
|
* @clos: Clos ID to assign to the logical CPU
|
||||||
* @max_level: Maximum performance level supported by the platform
|
* @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
|
* @feature_state: SST-BF and SST-TF (enabled/disabled) status at current level
|
||||||
* @locked: SST-PP performance level change is locked/unlocked
|
* @locked: SST-PP performance level change is locked/unlocked
|
||||||
* @enabled: SST-PP feature is enabled or not
|
* @enabled: SST-PP feature is enabled or not
|
||||||
* @sst-tf_support: SST-TF 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
|
* @sst_bf_support: SST-BF support status at this level
|
||||||
*
|
*
|
||||||
* Structure to get SST-PP details using IOCTL ISST_IF_PERF_LEVELS.
|
* 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
|
* struct isst_perf_level_control - Structure to set SST-PP level
|
||||||
* @socket_id: Socket/package id
|
* @socket_id: Socket/package id
|
||||||
* @power_domain: Power Domain id
|
* @power_domain_id: Power Domain id
|
||||||
* @level: level to set
|
* @level: level to set
|
||||||
*
|
*
|
||||||
* Structure used change SST-PP level using IOCTL ISST_IF_PERF_SET_LEVEL.
|
* 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
|
* struct isst_perf_feature_control - Structure to activate SST-BF/SST-TF
|
||||||
* @socket_id: Socket/package id
|
* @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
|
* @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.
|
* 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
|
* struct isst_perf_level_data_info - Structure to get SST-PP level details
|
||||||
* @socket_id: Socket/package id
|
* @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
|
* @level: SST-PP level for which caller wants to get information
|
||||||
* @tdp_ratio: TDP Ratio
|
* @tdp_ratio: TDP Ratio
|
||||||
* @base_freq_mhz: Base frequency in MHz
|
* @base_freq_mhz: Base frequency in MHz
|
||||||
|
|
@ -341,8 +343,8 @@ struct isst_perf_feature_control {
|
||||||
* @pm_fabric_freq_mhz: Fabric (Uncore) minimum frequency
|
* @pm_fabric_freq_mhz: Fabric (Uncore) minimum frequency
|
||||||
* @max_buckets: Maximum trl buckets
|
* @max_buckets: Maximum trl buckets
|
||||||
* @max_trl_levels: Maximum trl levels
|
* @max_trl_levels: Maximum trl levels
|
||||||
* @bucket_core_counts[TRL_MAX_BUCKETS]: Number of cores per bucket
|
* @bucket_core_counts: Number of cores per bucket
|
||||||
* @trl_freq_mhz[TRL_MAX_LEVELS][TRL_MAX_BUCKETS]: maximum frequency
|
* @trl_freq_mhz: maximum frequency
|
||||||
* for a bucket and trl level
|
* for a bucket and trl level
|
||||||
*
|
*
|
||||||
* Structure used to get information on frequencies and TDP for a SST-PP
|
* 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
|
* struct isst_perf_level_cpu_mask - Structure to get SST-PP level CPU mask
|
||||||
* @socket_id: Socket/package id
|
* @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
|
* @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
|
* @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
|
* 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
|
* struct isst_base_freq_info - Structure to get SST-BF frequencies
|
||||||
* @socket_id: Socket/package id
|
* @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
|
* @level: SST-PP level for which caller wants to get information
|
||||||
* @high_base_freq_mhz: High priority CPU base frequency
|
* @high_base_freq_mhz: High priority CPU base frequency
|
||||||
* @low_base_freq_mhz: Low 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
|
* struct isst_turbo_freq_info - Structure to get SST-TF frequencies
|
||||||
* @socket_id: Socket/package id
|
* @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
|
* @level: SST-PP level for which caller wants to get information
|
||||||
* @max_clip_freqs: Maximum number of low priority core clipping frequencies
|
* @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
|
* @lp_clip_freq_mhz: Clip frequencies per trl level
|
||||||
* @bucket_core_counts: Maximum number of cores for a bucket
|
* @bucket_core_counts: Maximum number of cores for a bucket
|
||||||
* @trl_freq_mhz: Frequencies per trl level for each bucket
|
* @trl_freq_mhz: Frequencies per trl level for each bucket
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue