Commit 3679d9d1 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'platform-drivers-x86-v6.9-2' of...

Merge tag 'platform-drivers-x86-v6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86

Pull x86 platform driver fixes from Ilpo Järvinen:
 "Fixes:

   - intel/hid: Solve spurious hibernation aborts (power button release)

   - toshiba_acpi: Ignore 2 keys to avoid log noise during
     suspend/resume

   - intel-vbtn: Fix probe by restoring VBDL and VGBS evalutation order

   - lg-laptop: Fix W=1 %s null argument warning

  New HW Support:

   - acer-wmi: PH18-71 mode button and fan speed sensor

   - intel/hid: Lunar Lake and Arrow Lake HID IDs"

* tag 'platform-drivers-x86-v6.9-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86:
  platform/x86: lg-laptop: fix %s null argument warning
  platform/x86: intel-vbtn: Update tablet mode switch at end of probe
  platform/x86: intel-vbtn: Use acpi_has_method to check for switch
  platform/x86: toshiba_acpi: Silence logging for some events
  platform/x86/intel/hid: Add Lunar Lake and Arrow Lake support
  platform/x86/intel/hid: Don't wake on 5-button releases
  platform/x86: acer-wmi: Add support for Acer PH18-71
parents 2c71fdf0 e71c8481
...@@ -597,6 +597,15 @@ static const struct dmi_system_id acer_quirks[] __initconst = { ...@@ -597,6 +597,15 @@ static const struct dmi_system_id acer_quirks[] __initconst = {
}, },
.driver_data = &quirk_acer_predator_v4, .driver_data = &quirk_acer_predator_v4,
}, },
{
.callback = dmi_matched,
.ident = "Acer Predator PH18-71",
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
DMI_MATCH(DMI_PRODUCT_NAME, "Predator PH18-71"),
},
.driver_data = &quirk_acer_predator_v4,
},
{ {
.callback = set_force_caps, .callback = set_force_caps,
.ident = "Acer Aspire Switch 10E SW3-016", .ident = "Acer Aspire Switch 10E SW3-016",
......
...@@ -49,6 +49,8 @@ static const struct acpi_device_id intel_hid_ids[] = { ...@@ -49,6 +49,8 @@ static const struct acpi_device_id intel_hid_ids[] = {
{"INTC1076", 0}, {"INTC1076", 0},
{"INTC1077", 0}, {"INTC1077", 0},
{"INTC1078", 0}, {"INTC1078", 0},
{"INTC107B", 0},
{"INTC10CB", 0},
{"", 0}, {"", 0},
}; };
MODULE_DEVICE_TABLE(acpi, intel_hid_ids); MODULE_DEVICE_TABLE(acpi, intel_hid_ids);
...@@ -504,6 +506,7 @@ static void notify_handler(acpi_handle handle, u32 event, void *context) ...@@ -504,6 +506,7 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)
struct platform_device *device = context; struct platform_device *device = context;
struct intel_hid_priv *priv = dev_get_drvdata(&device->dev); struct intel_hid_priv *priv = dev_get_drvdata(&device->dev);
unsigned long long ev_index; unsigned long long ev_index;
struct key_entry *ke;
int err; int err;
/* /*
...@@ -545,11 +548,15 @@ static void notify_handler(acpi_handle handle, u32 event, void *context) ...@@ -545,11 +548,15 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)
if (event == 0xc0 || !priv->array) if (event == 0xc0 || !priv->array)
return; return;
if (!sparse_keymap_entry_from_scancode(priv->array, event)) { ke = sparse_keymap_entry_from_scancode(priv->array, event);
if (!ke) {
dev_info(&device->dev, "unknown event 0x%x\n", event); dev_info(&device->dev, "unknown event 0x%x\n", event);
return; return;
} }
if (ke->type == KE_IGNORE)
return;
wakeup: wakeup:
pm_wakeup_hard_event(&device->dev); pm_wakeup_hard_event(&device->dev);
......
...@@ -136,8 +136,6 @@ static int intel_vbtn_input_setup(struct platform_device *device) ...@@ -136,8 +136,6 @@ static int intel_vbtn_input_setup(struct platform_device *device)
priv->switches_dev->id.bustype = BUS_HOST; priv->switches_dev->id.bustype = BUS_HOST;
if (priv->has_switches) { if (priv->has_switches) {
detect_tablet_mode(&device->dev);
ret = input_register_device(priv->switches_dev); ret = input_register_device(priv->switches_dev);
if (ret) if (ret)
return ret; return ret;
...@@ -258,9 +256,6 @@ static const struct dmi_system_id dmi_switches_allow_list[] = { ...@@ -258,9 +256,6 @@ static const struct dmi_system_id dmi_switches_allow_list[] = {
static bool intel_vbtn_has_switches(acpi_handle handle, bool dual_accel) static bool intel_vbtn_has_switches(acpi_handle handle, bool dual_accel)
{ {
unsigned long long vgbs;
acpi_status status;
/* See dual_accel_detect.h for more info */ /* See dual_accel_detect.h for more info */
if (dual_accel) if (dual_accel)
return false; return false;
...@@ -268,8 +263,7 @@ static bool intel_vbtn_has_switches(acpi_handle handle, bool dual_accel) ...@@ -268,8 +263,7 @@ static bool intel_vbtn_has_switches(acpi_handle handle, bool dual_accel)
if (!dmi_check_system(dmi_switches_allow_list)) if (!dmi_check_system(dmi_switches_allow_list))
return false; return false;
status = acpi_evaluate_integer(handle, "VGBS", NULL, &vgbs); return acpi_has_method(handle, "VGBS");
return ACPI_SUCCESS(status);
} }
static int intel_vbtn_probe(struct platform_device *device) static int intel_vbtn_probe(struct platform_device *device)
...@@ -316,6 +310,9 @@ static int intel_vbtn_probe(struct platform_device *device) ...@@ -316,6 +310,9 @@ static int intel_vbtn_probe(struct platform_device *device)
if (ACPI_FAILURE(status)) if (ACPI_FAILURE(status))
dev_err(&device->dev, "Error VBDL failed with ACPI status %d\n", status); dev_err(&device->dev, "Error VBDL failed with ACPI status %d\n", status);
} }
// Check switches after buttons since VBDL may have side effects.
if (has_switches)
detect_tablet_mode(&device->dev);
device_init_wakeup(&device->dev, true); device_init_wakeup(&device->dev, true);
/* /*
......
...@@ -736,7 +736,7 @@ static int acpi_add(struct acpi_device *device) ...@@ -736,7 +736,7 @@ static int acpi_add(struct acpi_device *device)
default: default:
year = 2019; year = 2019;
} }
pr_info("product: %s year: %d\n", product, year); pr_info("product: %s year: %d\n", product ?: "unknown", year);
if (year >= 2019) if (year >= 2019)
battery_limit_use_wmbb = 1; battery_limit_use_wmbb = 1;
......
...@@ -264,6 +264,7 @@ static const struct key_entry toshiba_acpi_keymap[] = { ...@@ -264,6 +264,7 @@ static const struct key_entry toshiba_acpi_keymap[] = {
{ KE_KEY, 0xb32, { KEY_NEXTSONG } }, { KE_KEY, 0xb32, { KEY_NEXTSONG } },
{ KE_KEY, 0xb33, { KEY_PLAYPAUSE } }, { KE_KEY, 0xb33, { KEY_PLAYPAUSE } },
{ KE_KEY, 0xb5a, { KEY_MEDIA } }, { KE_KEY, 0xb5a, { KEY_MEDIA } },
{ KE_IGNORE, 0x0e00, { KEY_RESERVED } }, /* Wake from sleep */
{ KE_IGNORE, 0x1430, { KEY_RESERVED } }, /* Wake from sleep */ { KE_IGNORE, 0x1430, { KEY_RESERVED } }, /* Wake from sleep */
{ KE_IGNORE, 0x1501, { KEY_RESERVED } }, /* Output changed */ { KE_IGNORE, 0x1501, { KEY_RESERVED } }, /* Output changed */
{ KE_IGNORE, 0x1502, { KEY_RESERVED } }, /* HDMI plugged/unplugged */ { KE_IGNORE, 0x1502, { KEY_RESERVED } }, /* HDMI plugged/unplugged */
...@@ -3523,9 +3524,10 @@ static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event) ...@@ -3523,9 +3524,10 @@ static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event)
(dev->kbd_mode == SCI_KBD_MODE_ON) ? (dev->kbd_mode == SCI_KBD_MODE_ON) ?
LED_FULL : LED_OFF); LED_FULL : LED_OFF);
break; break;
case 0x8e: /* Power button pressed */
break;
case 0x85: /* Unknown */ case 0x85: /* Unknown */
case 0x8d: /* Unknown */ case 0x8d: /* Unknown */
case 0x8e: /* Unknown */
case 0x94: /* Unknown */ case 0x94: /* Unknown */
case 0x95: /* Unknown */ case 0x95: /* Unknown */
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment