mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'fixes' into 'for-next'
Allows uniwill-laptop feature work that depends on changes in the fixes branch proceed.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
What: /sys/bus/platform/devices/INOU0000:XX/fn_lock_toggle_enable
|
||||
What: /sys/bus/platform/devices/INOU0000:XX/fn_lock
|
||||
Date: November 2025
|
||||
KernelVersion: 6.19
|
||||
Contact: Armin Wolf <W_Armin@gmx.de>
|
||||
@@ -8,15 +8,15 @@ Description:
|
||||
|
||||
Reading this file returns the current enable status of the FN lock functionality.
|
||||
|
||||
What: /sys/bus/platform/devices/INOU0000:XX/super_key_toggle_enable
|
||||
What: /sys/bus/platform/devices/INOU0000:XX/super_key_enable
|
||||
Date: November 2025
|
||||
KernelVersion: 6.19
|
||||
Contact: Armin Wolf <W_Armin@gmx.de>
|
||||
Description:
|
||||
Allows userspace applications to enable/disable the super key functionality
|
||||
of the integrated keyboard by writing "1"/"0" into this file.
|
||||
Allows userspace applications to enable/disable the super key of the integrated
|
||||
keyboard by writing "1"/"0" into this file.
|
||||
|
||||
Reading this file returns the current enable status of the super key functionality.
|
||||
Reading this file returns the current enable status of the super key.
|
||||
|
||||
What: /sys/bus/platform/devices/INOU0000:XX/touchpad_toggle_enable
|
||||
Date: November 2025
|
||||
|
||||
@@ -24,7 +24,7 @@ Keyboard settings
|
||||
|
||||
The ``uniwill-laptop`` driver allows the user to enable/disable:
|
||||
|
||||
- the FN and super key lock functionality of the integrated keyboard
|
||||
- the FN lock and super key of the integrated keyboard
|
||||
- the touchpad toggle functionality of the integrated touchpad
|
||||
|
||||
See Documentation/ABI/testing/sysfs-driver-uniwill-laptop for details.
|
||||
|
||||
+1
-1
@@ -3989,7 +3989,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>
|
||||
M: Denis Benato <denis.benato@linux.dev>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
W: https://asus-linux.org/
|
||||
|
||||
@@ -482,7 +482,7 @@ static int olpc_xo175_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *resp,
|
||||
dev_dbg(dev, "CMD %x, %zd bytes expected\n", cmd, resp_len);
|
||||
|
||||
if (inlen > 5) {
|
||||
dev_err(dev, "command len %zd too big!\n", resp_len);
|
||||
dev_err(dev, "command len %zd too big!\n", inlen);
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ static int __hsmp_send_message(struct hsmp_socket *sock, struct hsmp_message *ms
|
||||
}
|
||||
|
||||
if (unlikely(mbox_status == HSMP_STATUS_NOT_READY)) {
|
||||
dev_err(sock->dev, "Message ID 0x%X failure : SMU tmeout (status = 0x%X)\n",
|
||||
dev_err(sock->dev, "Message ID 0x%X failure : SMU timeout (status = 0x%X)\n",
|
||||
msg->msg_id, mbox_status);
|
||||
return -ETIMEDOUT;
|
||||
} else if (unlikely(mbox_status == HSMP_ERR_INVALID_MSG)) {
|
||||
|
||||
@@ -346,6 +346,35 @@ struct power_data {
|
||||
* _def is not required and will be assumed to be default == max if missing.
|
||||
*/
|
||||
static const struct dmi_system_id power_limits[] = {
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "FA401UM"),
|
||||
},
|
||||
.driver_data = &(struct power_data) {
|
||||
.ac_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 15,
|
||||
.ppt_pl1_spl_max = 80,
|
||||
.ppt_pl2_sppt_min = 35,
|
||||
.ppt_pl2_sppt_max = 80,
|
||||
.ppt_pl3_fppt_min = 35,
|
||||
.ppt_pl3_fppt_max = 80,
|
||||
.nv_dynamic_boost_min = 5,
|
||||
.nv_dynamic_boost_max = 15,
|
||||
.nv_temp_target_min = 75,
|
||||
.nv_temp_target_max = 87,
|
||||
},
|
||||
.dc_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 25,
|
||||
.ppt_pl1_spl_max = 35,
|
||||
.ppt_pl2_sppt_min = 31,
|
||||
.ppt_pl2_sppt_max = 44,
|
||||
.ppt_pl3_fppt_min = 45,
|
||||
.ppt_pl3_fppt_max = 65,
|
||||
.nv_temp_target_min = 75,
|
||||
.nv_temp_target_max = 87,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "FA401UV"),
|
||||
@@ -1051,6 +1080,20 @@ static const struct dmi_system_id power_limits[] = {
|
||||
.requires_fan_curve = true,
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "GA503QM"),
|
||||
},
|
||||
.driver_data = &(struct power_data) {
|
||||
.ac_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 15,
|
||||
.ppt_pl1_spl_def = 35,
|
||||
.ppt_pl1_spl_max = 80,
|
||||
.ppt_pl2_sppt_min = 65,
|
||||
.ppt_pl2_sppt_max = 80,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "GA503QR"),
|
||||
@@ -1457,6 +1500,67 @@ static const struct dmi_system_id power_limits[] = {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "GX650RX"),
|
||||
},
|
||||
.driver_data = &(struct power_data) {
|
||||
.ac_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 28,
|
||||
.ppt_pl1_spl_def = 70,
|
||||
.ppt_pl1_spl_max = 90,
|
||||
.ppt_pl2_sppt_min = 28,
|
||||
.ppt_pl2_sppt_def = 70,
|
||||
.ppt_pl2_sppt_max = 100,
|
||||
.ppt_pl3_fppt_min = 28,
|
||||
.ppt_pl3_fppt_def = 110,
|
||||
.ppt_pl3_fppt_max = 125,
|
||||
.nv_dynamic_boost_min = 5,
|
||||
.nv_dynamic_boost_max = 25,
|
||||
.nv_temp_target_min = 76,
|
||||
.nv_temp_target_max = 87,
|
||||
},
|
||||
.dc_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 28,
|
||||
.ppt_pl1_spl_max = 50,
|
||||
.ppt_pl2_sppt_min = 28,
|
||||
.ppt_pl2_sppt_max = 50,
|
||||
.ppt_pl3_fppt_min = 28,
|
||||
.ppt_pl3_fppt_max = 65,
|
||||
.nv_temp_target_min = 76,
|
||||
.nv_temp_target_max = 87,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "GZ302EA"),
|
||||
},
|
||||
.driver_data = &(struct power_data) {
|
||||
.ac_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 28,
|
||||
.ppt_pl1_spl_def = 60,
|
||||
.ppt_pl1_spl_max = 80,
|
||||
.ppt_pl2_sppt_min = 32,
|
||||
.ppt_pl2_sppt_def = 75,
|
||||
.ppt_pl2_sppt_max = 92,
|
||||
.ppt_pl3_fppt_min = 45,
|
||||
.ppt_pl3_fppt_def = 86,
|
||||
.ppt_pl3_fppt_max = 93,
|
||||
},
|
||||
.dc_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 28,
|
||||
.ppt_pl1_spl_def = 45,
|
||||
.ppt_pl1_spl_max = 80,
|
||||
.ppt_pl2_sppt_min = 32,
|
||||
.ppt_pl2_sppt_def = 52,
|
||||
.ppt_pl2_sppt_max = 92,
|
||||
.ppt_pl3_fppt_min = 45,
|
||||
.ppt_pl3_fppt_def = 71,
|
||||
.ppt_pl3_fppt_max = 93,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "G513I"),
|
||||
@@ -1535,6 +1639,40 @@ static const struct dmi_system_id power_limits[] = {
|
||||
.requires_fan_curve = true,
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "G614FP"),
|
||||
},
|
||||
.driver_data = &(struct power_data) {
|
||||
.ac_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 30,
|
||||
.ppt_pl1_spl_max = 120,
|
||||
.ppt_pl2_sppt_min = 65,
|
||||
.ppt_pl2_sppt_def = 140,
|
||||
.ppt_pl2_sppt_max = 165,
|
||||
.ppt_pl3_fppt_min = 65,
|
||||
.ppt_pl3_fppt_def = 140,
|
||||
.ppt_pl3_fppt_max = 165,
|
||||
.nv_temp_target_min = 75,
|
||||
.nv_temp_target_max = 87,
|
||||
.nv_dynamic_boost_min = 5,
|
||||
.nv_dynamic_boost_max = 15,
|
||||
.nv_tgp_min = 50,
|
||||
.nv_tgp_max = 100,
|
||||
},
|
||||
.dc_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 25,
|
||||
.ppt_pl1_spl_max = 65,
|
||||
.ppt_pl2_sppt_min = 25,
|
||||
.ppt_pl2_sppt_max = 65,
|
||||
.ppt_pl3_fppt_min = 35,
|
||||
.ppt_pl3_fppt_max = 75,
|
||||
.nv_temp_target_min = 75,
|
||||
.nv_temp_target_max = 87,
|
||||
},
|
||||
.requires_fan_curve = true,
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "G614J"),
|
||||
@@ -1708,6 +1846,20 @@ static const struct dmi_system_id power_limits[] = {
|
||||
.requires_fan_curve = true,
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "G733QS"),
|
||||
},
|
||||
.driver_data = &(struct power_data) {
|
||||
.ac_data = &(struct power_limits) {
|
||||
.ppt_pl1_spl_min = 15,
|
||||
.ppt_pl1_spl_max = 80,
|
||||
.ppt_pl2_sppt_min = 15,
|
||||
.ppt_pl2_sppt_max = 80,
|
||||
},
|
||||
.requires_fan_curve = false,
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "G814J"),
|
||||
|
||||
@@ -548,7 +548,7 @@ static const struct dmi_system_id asus_quirks[] = {
|
||||
.callback = dmi_matched,
|
||||
.ident = "ASUS ROG Z13",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUS"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "ROG Flow Z13"),
|
||||
},
|
||||
.driver_data = &quirk_asus_z13,
|
||||
|
||||
@@ -175,7 +175,7 @@ static const struct dmi_system_id awcc_dmi_table[] __initconst = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Alienware"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m18"),
|
||||
},
|
||||
.driver_data = &generic_quirks,
|
||||
.driver_data = &g_series_quirks,
|
||||
},
|
||||
{
|
||||
.ident = "Alienware x15",
|
||||
|
||||
@@ -80,6 +80,12 @@ static const struct dmi_system_id dell_wmi_smbios_list[] __initconst = {
|
||||
static const struct key_entry dell_wmi_keymap_type_0000[] = {
|
||||
{ KE_IGNORE, 0x003a, { KEY_CAPSLOCK } },
|
||||
|
||||
/* Audio mute toggle */
|
||||
{ KE_KEY, 0x0109, { KEY_MUTE } },
|
||||
|
||||
/* Mic mute toggle */
|
||||
{ KE_KEY, 0x0150, { KEY_MICMUTE } },
|
||||
|
||||
/* Meta key lock */
|
||||
{ KE_IGNORE, 0xe000, { KEY_RIGHTMETA } },
|
||||
|
||||
|
||||
@@ -93,7 +93,6 @@ int set_new_password(const char *password_type, const char *new)
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
print_hex_dump_bytes("set new password data: ", DUMP_PREFIX_NONE, buffer, buffer_size);
|
||||
ret = call_password_interface(wmi_priv.password_attr_wdev, buffer, buffer_size);
|
||||
/* on success copy the new password to current password */
|
||||
if (!ret)
|
||||
|
||||
@@ -94,8 +94,11 @@ int hp_alloc_enumeration_data(void)
|
||||
bioscfg_drv.enumeration_instances_count =
|
||||
hp_get_instance_count(HP_WMI_BIOS_ENUMERATION_GUID);
|
||||
|
||||
bioscfg_drv.enumeration_data = kzalloc_objs(*bioscfg_drv.enumeration_data,
|
||||
bioscfg_drv.enumeration_instances_count);
|
||||
if (!bioscfg_drv.enumeration_instances_count)
|
||||
return -EINVAL;
|
||||
bioscfg_drv.enumeration_data = kvcalloc(bioscfg_drv.enumeration_instances_count,
|
||||
sizeof(*bioscfg_drv.enumeration_data), GFP_KERNEL);
|
||||
|
||||
if (!bioscfg_drv.enumeration_data) {
|
||||
bioscfg_drv.enumeration_instances_count = 0;
|
||||
return -ENOMEM;
|
||||
@@ -444,6 +447,6 @@ void hp_exit_enumeration_attributes(void)
|
||||
}
|
||||
bioscfg_drv.enumeration_instances_count = 0;
|
||||
|
||||
kfree(bioscfg_drv.enumeration_data);
|
||||
kvfree(bioscfg_drv.enumeration_data);
|
||||
bioscfg_drv.enumeration_data = NULL;
|
||||
}
|
||||
|
||||
@@ -120,6 +120,13 @@ static const struct thermal_profile_params omen_v1_thermal_params = {
|
||||
.ec_tp_offset = HP_VICTUS_S_EC_THERMAL_PROFILE_OFFSET,
|
||||
};
|
||||
|
||||
static const struct thermal_profile_params omen_v1_legacy_thermal_params = {
|
||||
.performance = HP_OMEN_V1_THERMAL_PROFILE_PERFORMANCE,
|
||||
.balanced = HP_OMEN_V1_THERMAL_PROFILE_DEFAULT,
|
||||
.low_power = HP_OMEN_V1_THERMAL_PROFILE_DEFAULT,
|
||||
.ec_tp_offset = HP_OMEN_EC_THERMAL_PROFILE_OFFSET,
|
||||
};
|
||||
|
||||
/*
|
||||
* A generic pointer for the currently-active board's thermal profile
|
||||
* parameters.
|
||||
@@ -146,6 +153,7 @@ static const char * const omen_thermal_profile_boards[] = {
|
||||
"8900", "8901", "8902", "8912", "8917", "8918", "8949", "894A", "89EB",
|
||||
"8A15", "8A42",
|
||||
"8BAD",
|
||||
"8E41",
|
||||
};
|
||||
|
||||
/* DMI Board names of Omen laptops that are specifically set to be thermal
|
||||
@@ -166,17 +174,34 @@ static const char * const omen_timed_thermal_profile_boards[] = {
|
||||
"8BAD",
|
||||
};
|
||||
|
||||
/* DMI Board names of Victus 16-d1xxx laptops */
|
||||
/* DMI Board names of Victus 16-d laptops */
|
||||
static const char * const victus_thermal_profile_boards[] = {
|
||||
"88F8",
|
||||
"8A25",
|
||||
};
|
||||
|
||||
/* DMI Board names of Victus 16-r and Victus 16-s laptops */
|
||||
static const struct dmi_system_id victus_s_thermal_profile_boards[] __initconst = {
|
||||
{
|
||||
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8A4D") },
|
||||
.driver_data = (void *)&omen_v1_legacy_thermal_params,
|
||||
},
|
||||
{
|
||||
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8BAB") },
|
||||
.driver_data = (void *)&omen_v1_thermal_params,
|
||||
},
|
||||
{
|
||||
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8BBE") },
|
||||
.driver_data = (void *)&victus_s_thermal_params,
|
||||
},
|
||||
{
|
||||
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8BCA") },
|
||||
.driver_data = (void *)&omen_v1_thermal_params,
|
||||
},
|
||||
{
|
||||
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8BCD") },
|
||||
.driver_data = (void *)&omen_v1_thermal_params,
|
||||
},
|
||||
{
|
||||
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8BD4") },
|
||||
.driver_data = (void *)&victus_s_thermal_params,
|
||||
@@ -185,6 +210,10 @@ static const struct dmi_system_id victus_s_thermal_profile_boards[] __initconst
|
||||
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8BD5") },
|
||||
.driver_data = (void *)&victus_s_thermal_params,
|
||||
},
|
||||
{
|
||||
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8C76") },
|
||||
.driver_data = (void *)&omen_v1_thermal_params,
|
||||
},
|
||||
{
|
||||
.matches = { DMI_MATCH(DMI_BOARD_NAME, "8C78") },
|
||||
.driver_data = (void *)&omen_v1_thermal_params,
|
||||
|
||||
@@ -135,6 +135,13 @@ static const struct dmi_system_id button_array_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_FAMILY, "ThinkPad X1 Tablet Gen 2"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo ThinkPad X1 Fold 16 Gen 1",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_FAMILY, "ThinkPad X1 Fold 16 Gen 1"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Microsoft Surface Go 3",
|
||||
.matches = {
|
||||
@@ -189,6 +196,18 @@ static const struct dmi_system_id dmi_vgbs_allow_list[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell Pro Rugged 12 Tablet RA02260"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell 14 Plus 2-in-1 DB04250"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "Dell 16 Plus 2-in-1 DB06250"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
@@ -419,6 +438,14 @@ static int intel_hid_pl_suspend_handler(struct device *device)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int intel_hid_pl_freeze_handler(struct device *device)
|
||||
{
|
||||
struct intel_hid_priv *priv = dev_get_drvdata(device);
|
||||
|
||||
priv->wakeup_mode = false;
|
||||
return intel_hid_pl_suspend_handler(device);
|
||||
}
|
||||
|
||||
static int intel_hid_pl_resume_handler(struct device *device)
|
||||
{
|
||||
intel_hid_pm_complete(device);
|
||||
@@ -433,7 +460,7 @@ static int intel_hid_pl_resume_handler(struct device *device)
|
||||
static const struct dev_pm_ops intel_hid_pl_pm_ops = {
|
||||
.prepare = intel_hid_pm_prepare,
|
||||
.complete = intel_hid_pm_complete,
|
||||
.freeze = intel_hid_pl_suspend_handler,
|
||||
.freeze = intel_hid_pl_freeze_handler,
|
||||
.thaw = intel_hid_pl_resume_handler,
|
||||
.restore = intel_hid_pl_resume_handler,
|
||||
.suspend = intel_hid_pl_suspend_handler,
|
||||
|
||||
@@ -223,6 +223,10 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3
|
||||
*con_id = "avdd";
|
||||
*gpio_flags = GPIO_ACTIVE_HIGH;
|
||||
break;
|
||||
case INT3472_GPIO_TYPE_DOVDD:
|
||||
*con_id = "dovdd";
|
||||
*gpio_flags = GPIO_ACTIVE_HIGH;
|
||||
break;
|
||||
case INT3472_GPIO_TYPE_HANDSHAKE:
|
||||
*con_id = "dvdd";
|
||||
*gpio_flags = GPIO_ACTIVE_HIGH;
|
||||
@@ -251,6 +255,7 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3
|
||||
* 0x0b Power enable
|
||||
* 0x0c Clock enable
|
||||
* 0x0d Privacy LED
|
||||
* 0x10 DOVDD (digital I/O voltage)
|
||||
* 0x13 Hotplug detect
|
||||
*
|
||||
* There are some known platform specific quirks where that does not quite
|
||||
@@ -332,6 +337,7 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares,
|
||||
case INT3472_GPIO_TYPE_CLK_ENABLE:
|
||||
case INT3472_GPIO_TYPE_PRIVACY_LED:
|
||||
case INT3472_GPIO_TYPE_POWER_ENABLE:
|
||||
case INT3472_GPIO_TYPE_DOVDD:
|
||||
case INT3472_GPIO_TYPE_HANDSHAKE:
|
||||
gpio = skl_int3472_gpiod_get_from_temp_lookup(int3472, agpio, con_id, gpio_flags);
|
||||
if (IS_ERR(gpio)) {
|
||||
@@ -356,6 +362,7 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares,
|
||||
case INT3472_GPIO_TYPE_POWER_ENABLE:
|
||||
second_sensor = int3472->quirks.avdd_second_sensor;
|
||||
fallthrough;
|
||||
case INT3472_GPIO_TYPE_DOVDD:
|
||||
case INT3472_GPIO_TYPE_HANDSHAKE:
|
||||
ret = skl_int3472_register_regulator(int3472, gpio, enable_time_us,
|
||||
con_id, second_sensor);
|
||||
|
||||
@@ -558,6 +558,9 @@ static bool disable_dynamic_sst_features(void)
|
||||
{
|
||||
u64 value;
|
||||
|
||||
if (!static_cpu_has(X86_FEATURE_HWP))
|
||||
return true;
|
||||
|
||||
rdmsrq(MSR_PM_ENABLE, value);
|
||||
return !(value & 0x1);
|
||||
}
|
||||
@@ -869,7 +872,7 @@ static int isst_if_get_perf_level(void __user *argp)
|
||||
_read_pp_info("current_level", perf_level.current_level, SST_PP_STATUS_OFFSET,
|
||||
SST_PP_LEVEL_START, SST_PP_LEVEL_WIDTH, SST_MUL_FACTOR_NONE)
|
||||
_read_pp_info("locked", perf_level.locked, SST_PP_STATUS_OFFSET,
|
||||
SST_PP_LOCK_START, SST_PP_LEVEL_WIDTH, SST_MUL_FACTOR_NONE)
|
||||
SST_PP_LOCK_START, SST_PP_LOCK_WIDTH, SST_MUL_FACTOR_NONE)
|
||||
_read_pp_info("feature_state", perf_level.feature_state, SST_PP_STATUS_OFFSET,
|
||||
SST_PP_FEATURE_STATE_START, SST_PP_FEATURE_STATE_WIDTH, SST_MUL_FACTOR_NONE)
|
||||
perf_level.enabled = !!(power_domain_info->sst_header.cap_mask & BIT(1));
|
||||
|
||||
@@ -9551,14 +9551,16 @@ static int tpacpi_battery_get(int what, int battery, int *ret)
|
||||
{
|
||||
switch (what) {
|
||||
case THRESHOLD_START:
|
||||
if ACPI_FAILURE(tpacpi_battery_acpi_eval(GET_START, ret, battery))
|
||||
if (!battery_info.batteries[battery].start_support ||
|
||||
ACPI_FAILURE(tpacpi_battery_acpi_eval(GET_START, ret, battery)))
|
||||
return -ENODEV;
|
||||
|
||||
/* The value is in the low 8 bits of the response */
|
||||
*ret = *ret & 0xFF;
|
||||
return 0;
|
||||
case THRESHOLD_STOP:
|
||||
if ACPI_FAILURE(tpacpi_battery_acpi_eval(GET_STOP, ret, battery))
|
||||
if (!battery_info.batteries[battery].stop_support ||
|
||||
ACPI_FAILURE(tpacpi_battery_acpi_eval(GET_STOP, ret, battery)))
|
||||
return -ENODEV;
|
||||
/* Value is in lower 8 bits */
|
||||
*ret = *ret & 0xFF;
|
||||
|
||||
@@ -31,8 +31,6 @@
|
||||
#define LWMI_GZ_METHOD_ID_SMARTFAN_SET 44
|
||||
#define LWMI_GZ_METHOD_ID_SMARTFAN_GET 45
|
||||
|
||||
static BLOCKING_NOTIFIER_HEAD(gz_chain_head);
|
||||
|
||||
struct lwmi_gz_priv {
|
||||
enum thermal_mode current_mode;
|
||||
struct notifier_block event_nb;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
*
|
||||
* Copyright (C) 2022 Joaquín I. Aramendía <samsagax@gmail.com>
|
||||
* Copyright (C) 2024 Derek J. Clark <derekjohn.clark@gmail.com>
|
||||
* Copyright (C) 2025 Antheas Kapenekakis <lkml@antheas.dev>
|
||||
* Copyright (C) 2025-2026 Antheas Kapenekakis <lkml@antheas.dev>
|
||||
*/
|
||||
|
||||
#include <linux/acpi.h>
|
||||
@@ -114,6 +114,13 @@ static const struct dmi_system_id dmi_table[] = {
|
||||
},
|
||||
.driver_data = (void *)aok_zoe_a1,
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "AOKZOE"),
|
||||
DMI_EXACT_MATCH(DMI_BOARD_NAME, "AOKZOE A2 Pro"),
|
||||
},
|
||||
.driver_data = (void *)aok_zoe_a1,
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "AOKZOE"),
|
||||
@@ -142,6 +149,13 @@ static const struct dmi_system_id dmi_table[] = {
|
||||
},
|
||||
.driver_data = (void *)oxp_2,
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
|
||||
DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER APEX"),
|
||||
},
|
||||
.driver_data = (void *)oxp_fly,
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
|
||||
@@ -212,6 +226,13 @@ static const struct dmi_system_id dmi_table[] = {
|
||||
},
|
||||
.driver_data = (void *)oxp_mini_amd_pro,
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
|
||||
DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER X1z"),
|
||||
},
|
||||
.driver_data = (void *)oxp_x1,
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
|
||||
@@ -226,6 +247,13 @@ static const struct dmi_system_id dmi_table[] = {
|
||||
},
|
||||
.driver_data = (void *)oxp_x1,
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
|
||||
DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER X1Air"),
|
||||
},
|
||||
.driver_data = (void *)oxp_x1,
|
||||
},
|
||||
{
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
|
||||
|
||||
@@ -20,7 +20,10 @@
|
||||
static const struct key_entry redmi_wmi_keymap[] = {
|
||||
{KE_KEY, 0x00000201, {KEY_SELECTIVE_SCREENSHOT}},
|
||||
{KE_KEY, 0x00000301, {KEY_ALL_APPLICATIONS}},
|
||||
{KE_KEY, 0x00001b01, {KEY_SETUP}},
|
||||
{KE_KEY, 0x00001b01, {KEY_CONFIG}},
|
||||
{KE_KEY, 0x00011b01, {KEY_CONFIG}},
|
||||
{KE_KEY, 0x00010101, {KEY_SWITCHVIDEOMODE}},
|
||||
{KE_KEY, 0x00001a01, {KEY_REFRESH_RATE_TOGGLE}},
|
||||
|
||||
/* AI button has code for each position */
|
||||
{KE_KEY, 0x00011801, {KEY_ASSISTANT}},
|
||||
@@ -32,6 +35,26 @@ static const struct key_entry redmi_wmi_keymap[] = {
|
||||
{KE_IGNORE, 0x00050501, {}},
|
||||
{KE_IGNORE, 0x000a0501, {}},
|
||||
|
||||
/* Xiaomi G Command Center */
|
||||
{KE_KEY, 0x00010a01, {KEY_VENDOR}},
|
||||
|
||||
/* OEM preset power mode */
|
||||
{KE_IGNORE, 0x00011601, {}},
|
||||
{KE_IGNORE, 0x00021601, {}},
|
||||
{KE_IGNORE, 0x00031601, {}},
|
||||
{KE_IGNORE, 0x00041601, {}},
|
||||
|
||||
/* Fn Lock state */
|
||||
{KE_IGNORE, 0x00000701, {}},
|
||||
{KE_IGNORE, 0x00010701, {}},
|
||||
|
||||
/* Fn+`/1/2/3/4 */
|
||||
{KE_KEY, 0x00011101, {KEY_F13}},
|
||||
{KE_KEY, 0x00011201, {KEY_F14}},
|
||||
{KE_KEY, 0x00011301, {KEY_F15}},
|
||||
{KE_KEY, 0x00011401, {KEY_F16}},
|
||||
{KE_KEY, 0x00011501, {KEY_F17}},
|
||||
|
||||
{KE_END}
|
||||
};
|
||||
|
||||
|
||||
@@ -410,6 +410,16 @@ static const struct ts_dmi_data gdix1002_upside_down_data = {
|
||||
.properties = gdix1001_upside_down_props,
|
||||
};
|
||||
|
||||
static const struct property_entry gdix1001_y_inverted_props[] = {
|
||||
PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
|
||||
{ }
|
||||
};
|
||||
|
||||
static const struct ts_dmi_data gdix1001_y_inverted_data = {
|
||||
.acpi_name = "GDIX1001",
|
||||
.properties = gdix1001_y_inverted_props,
|
||||
};
|
||||
|
||||
static const struct property_entry gp_electronic_t701_props[] = {
|
||||
PROPERTY_ENTRY_U32("touchscreen-size-x", 960),
|
||||
PROPERTY_ENTRY_U32("touchscreen-size-y", 640),
|
||||
@@ -1658,6 +1668,14 @@ const struct dmi_system_id touchscreen_dmi_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_SKU, "PN20170413488"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* SUPI S10 */
|
||||
.driver_data = (void *)&gdix1001_y_inverted_data,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "SUPI"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "S10"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Techbite Arc 11.6 */
|
||||
.driver_data = (void *)&techbite_arc_11_6_data,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user