Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e01e060f authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'platform-drivers-x86-v5.2-3' of git://git.infradead.org/linux-platform-drivers-x86

Pull x86 platform driver fixes from Andy Shevchenko:

 - fix a couple of Mellanox driver enumeration issues

 - fix ASUS laptop regression with backlight

 - fix Dell computers that got a wrong mode (tablet versus laptop) after
   resume

* tag 'platform-drivers-x86-v5.2-3' of git://git.infradead.org/linux-platform-drivers-x86:
  platform/mellanox: mlxreg-hotplug: Add devm_free_irq call to remove flow
  platform/x86: mlx-platform: Fix parent device in i2c-mux-reg device registration
  platform/x86: intel-vbtn: Report switch events when event wakes device
  platform/x86: asus-wmi: Only Tell EC the OS will handle display hotkeys from asus_nb_wmi
parents ff39074b 8c2eb7b6
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -694,6 +694,7 @@ static int mlxreg_hotplug_remove(struct platform_device *pdev)


	/* Clean interrupts setup. */
	/* Clean interrupts setup. */
	mlxreg_hotplug_unset_irq(priv);
	mlxreg_hotplug_unset_irq(priv);
	devm_free_irq(&pdev->dev, priv->irq, priv);


	return 0;
	return 0;
}
}
+8 −0
Original line number Original line Diff line number Diff line
@@ -65,10 +65,12 @@ static bool asus_q500a_i8042_filter(unsigned char data, unsigned char str,


static struct quirk_entry quirk_asus_unknown = {
static struct quirk_entry quirk_asus_unknown = {
	.wapf = 0,
	.wapf = 0,
	.wmi_backlight_set_devstate = true,
};
};


static struct quirk_entry quirk_asus_q500a = {
static struct quirk_entry quirk_asus_q500a = {
	.i8042_filter = asus_q500a_i8042_filter,
	.i8042_filter = asus_q500a_i8042_filter,
	.wmi_backlight_set_devstate = true,
};
};


/*
/*
@@ -79,26 +81,32 @@ static struct quirk_entry quirk_asus_q500a = {
static struct quirk_entry quirk_asus_x55u = {
static struct quirk_entry quirk_asus_x55u = {
	.wapf = 4,
	.wapf = 4,
	.wmi_backlight_power = true,
	.wmi_backlight_power = true,
	.wmi_backlight_set_devstate = true,
	.no_display_toggle = true,
	.no_display_toggle = true,
};
};


static struct quirk_entry quirk_asus_wapf4 = {
static struct quirk_entry quirk_asus_wapf4 = {
	.wapf = 4,
	.wapf = 4,
	.wmi_backlight_set_devstate = true,
};
};


static struct quirk_entry quirk_asus_x200ca = {
static struct quirk_entry quirk_asus_x200ca = {
	.wapf = 2,
	.wapf = 2,
	.wmi_backlight_set_devstate = true,
};
};


static struct quirk_entry quirk_asus_ux303ub = {
static struct quirk_entry quirk_asus_ux303ub = {
	.wmi_backlight_native = true,
	.wmi_backlight_native = true,
	.wmi_backlight_set_devstate = true,
};
};


static struct quirk_entry quirk_asus_x550lb = {
static struct quirk_entry quirk_asus_x550lb = {
	.wmi_backlight_set_devstate = true,
	.xusb2pr = 0x01D9,
	.xusb2pr = 0x01D9,
};
};


static struct quirk_entry quirk_asus_forceals = {
static struct quirk_entry quirk_asus_forceals = {
	.wmi_backlight_set_devstate = true,
	.wmi_force_als_set = true,
	.wmi_force_als_set = true,
};
};


+1 −1
Original line number Original line Diff line number Diff line
@@ -2146,7 +2146,7 @@ static int asus_wmi_add(struct platform_device *pdev)
		err = asus_wmi_backlight_init(asus);
		err = asus_wmi_backlight_init(asus);
		if (err && err != -ENODEV)
		if (err && err != -ENODEV)
			goto fail_backlight;
			goto fail_backlight;
	} else
	} else if (asus->driver->quirks->wmi_backlight_set_devstate)
		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BACKLIGHT, 2, NULL);
		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BACKLIGHT, 2, NULL);


	if (asus_wmi_has_fnlock_key(asus)) {
	if (asus_wmi_has_fnlock_key(asus)) {
+1 −0
Original line number Original line Diff line number Diff line
@@ -31,6 +31,7 @@ struct quirk_entry {
	bool store_backlight_power;
	bool store_backlight_power;
	bool wmi_backlight_power;
	bool wmi_backlight_power;
	bool wmi_backlight_native;
	bool wmi_backlight_native;
	bool wmi_backlight_set_devstate;
	bool wmi_force_als_set;
	bool wmi_force_als_set;
	int wapf;
	int wapf;
	/*
	/*
+14 −2
Original line number Original line Diff line number Diff line
@@ -76,12 +76,24 @@ static void notify_handler(acpi_handle handle, u32 event, void *context)
	struct platform_device *device = context;
	struct platform_device *device = context;
	struct intel_vbtn_priv *priv = dev_get_drvdata(&device->dev);
	struct intel_vbtn_priv *priv = dev_get_drvdata(&device->dev);
	unsigned int val = !(event & 1); /* Even=press, Odd=release */
	unsigned int val = !(event & 1); /* Even=press, Odd=release */
	const struct key_entry *ke_rel;
	const struct key_entry *ke, *ke_rel;
	bool autorelease;
	bool autorelease;


	if (priv->wakeup_mode) {
	if (priv->wakeup_mode) {
		if (sparse_keymap_entry_from_scancode(priv->input_dev, event)) {
		ke = sparse_keymap_entry_from_scancode(priv->input_dev, event);
		if (ke) {
			pm_wakeup_hard_event(&device->dev);
			pm_wakeup_hard_event(&device->dev);

			/*
			 * Switch events like tablet mode will wake the device
			 * and report the new switch position to the input
			 * subsystem.
			 */
			if (ke->type == KE_SW)
				sparse_keymap_report_event(priv->input_dev,
							   event,
							   val,
							   0);
			return;
			return;
		}
		}
		goto out_unknown;
		goto out_unknown;
Loading