Commit d1c2b55d authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'platform-drivers-x86-v5.16-2' of...

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

Pull x86 platform driver fixes from Hans de Goede:
 "Various build- and bug-fixes as well as one hardware-id addition"

* tag 'platform-drivers-x86-v5.16-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86:
  platform/x86: thinkpad_acpi: fix documentation for adaptive keyboard
  platform/x86: thinkpad_acpi: Fix WWAN device disabled issue after S3 deep
  platform/x86: thinkpad_acpi: Add support for dual fan control
  platform/x86: think-lmi: Abort probe on analyze failure
  platform/x86: dell-wmi-descriptor: disable by default
  platform/x86: samsung-laptop: Fix typo in a comment
  platform/x86: hp_accel: Fix an error handling path in 'lis3lv02d_probe()'
  platform/x86: amd-pmc: Make CONFIG_AMD_PMC depend on RTC_CLASS
  platform/mellanox: mlxreg-lc: fix error code in mlxreg_lc_create_static_devices()
parents ea229296 d477a907
...@@ -1520,15 +1520,15 @@ This sysfs attribute controls the keyboard "face" that will be shown on the ...@@ -1520,15 +1520,15 @@ This sysfs attribute controls the keyboard "face" that will be shown on the
Lenovo X1 Carbon 2nd gen (2014)'s adaptive keyboard. The value can be read Lenovo X1 Carbon 2nd gen (2014)'s adaptive keyboard. The value can be read
and set. and set.
- 1 = Home mode - 0 = Home mode
- 2 = Web-browser mode - 1 = Web-browser mode
- 3 = Web-conference mode - 2 = Web-conference mode
- 4 = Function mode - 3 = Function mode
- 5 = Layflat mode - 4 = Layflat mode
For more details about which buttons will appear depending on the mode, please For more details about which buttons will appear depending on the mode, please
review the laptop's user guide: review the laptop's user guide:
http://www.lenovo.com/shop/americas/content/user_guides/x1carbon_2_ug_en.pdf https://download.lenovo.com/ibmdl/pub/pc/pccbbs/mobiles_pdf/x1carbon_2_ug_en.pdf
Battery charge control Battery charge control
---------------------- ----------------------
......
...@@ -413,7 +413,7 @@ mlxreg_lc_create_static_devices(struct mlxreg_lc *mlxreg_lc, struct mlxreg_hotpl ...@@ -413,7 +413,7 @@ mlxreg_lc_create_static_devices(struct mlxreg_lc *mlxreg_lc, struct mlxreg_hotpl
int size) int size)
{ {
struct mlxreg_hotplug_device *dev = devs; struct mlxreg_hotplug_device *dev = devs;
int i; int i, ret;
/* Create static I2C device feeding by auxiliary or main power. */ /* Create static I2C device feeding by auxiliary or main power. */
for (i = 0; i < size; i++, dev++) { for (i = 0; i < size; i++, dev++) {
...@@ -423,6 +423,7 @@ mlxreg_lc_create_static_devices(struct mlxreg_lc *mlxreg_lc, struct mlxreg_hotpl ...@@ -423,6 +423,7 @@ mlxreg_lc_create_static_devices(struct mlxreg_lc *mlxreg_lc, struct mlxreg_hotpl
dev->brdinfo->type, dev->nr, dev->brdinfo->addr); dev->brdinfo->type, dev->nr, dev->brdinfo->addr);
dev->adapter = NULL; dev->adapter = NULL;
ret = PTR_ERR(dev->client);
goto fail_create_static_devices; goto fail_create_static_devices;
} }
} }
...@@ -435,7 +436,7 @@ mlxreg_lc_create_static_devices(struct mlxreg_lc *mlxreg_lc, struct mlxreg_hotpl ...@@ -435,7 +436,7 @@ mlxreg_lc_create_static_devices(struct mlxreg_lc *mlxreg_lc, struct mlxreg_hotpl
i2c_unregister_device(dev->client); i2c_unregister_device(dev->client);
dev->client = NULL; dev->client = NULL;
} }
return IS_ERR(dev->client); return ret;
} }
static void static void
......
...@@ -185,7 +185,7 @@ config ACER_WMI ...@@ -185,7 +185,7 @@ config ACER_WMI
config AMD_PMC config AMD_PMC
tristate "AMD SoC PMC driver" tristate "AMD SoC PMC driver"
depends on ACPI && PCI depends on ACPI && PCI && RTC_CLASS
help help
The driver provides support for AMD Power Management Controller The driver provides support for AMD Power Management Controller
primarily responsible for S2Idle transactions that are driven from primarily responsible for S2Idle transactions that are driven from
......
...@@ -187,7 +187,7 @@ config DELL_WMI_AIO ...@@ -187,7 +187,7 @@ config DELL_WMI_AIO
config DELL_WMI_DESCRIPTOR config DELL_WMI_DESCRIPTOR
tristate tristate
default m default n
depends on ACPI_WMI depends on ACPI_WMI
config DELL_WMI_LED config DELL_WMI_LED
......
...@@ -331,9 +331,11 @@ static int lis3lv02d_probe(struct platform_device *device) ...@@ -331,9 +331,11 @@ static int lis3lv02d_probe(struct platform_device *device)
INIT_WORK(&hpled_led.work, delayed_set_status_worker); INIT_WORK(&hpled_led.work, delayed_set_status_worker);
ret = led_classdev_register(NULL, &hpled_led.led_classdev); ret = led_classdev_register(NULL, &hpled_led.led_classdev);
if (ret) { if (ret) {
i8042_remove_filter(hp_accel_i8042_filter);
lis3lv02d_joystick_disable(&lis3_dev); lis3lv02d_joystick_disable(&lis3_dev);
lis3lv02d_poweroff(&lis3_dev); lis3lv02d_poweroff(&lis3_dev);
flush_work(&hpled_led.work); flush_work(&hpled_led.work);
lis3lv02d_remove_fs(&lis3_dev);
return ret; return ret;
} }
......
...@@ -152,7 +152,7 @@ struct sabi_config { ...@@ -152,7 +152,7 @@ struct sabi_config {
static const struct sabi_config sabi_configs[] = { static const struct sabi_config sabi_configs[] = {
{ {
/* I don't know if it is really 2, but it it is /* I don't know if it is really 2, but it is
* less than 3 anyway */ * less than 3 anyway */
.sabi_version = 2, .sabi_version = 2,
......
...@@ -888,8 +888,10 @@ static int tlmi_analyze(void) ...@@ -888,8 +888,10 @@ static int tlmi_analyze(void)
break; break;
if (!item) if (!item)
break; break;
if (!*item) if (!*item) {
kfree(item);
continue; continue;
}
/* It is not allowed to have '/' for file name. Convert it into '\'. */ /* It is not allowed to have '/' for file name. Convert it into '\'. */
strreplace(item, '/', '\\'); strreplace(item, '/', '\\');
...@@ -902,6 +904,7 @@ static int tlmi_analyze(void) ...@@ -902,6 +904,7 @@ static int tlmi_analyze(void)
setting = kzalloc(sizeof(*setting), GFP_KERNEL); setting = kzalloc(sizeof(*setting), GFP_KERNEL);
if (!setting) { if (!setting) {
ret = -ENOMEM; ret = -ENOMEM;
kfree(item);
goto fail_clear_attr; goto fail_clear_attr;
} }
setting->index = i; setting->index = i;
...@@ -916,7 +919,6 @@ static int tlmi_analyze(void) ...@@ -916,7 +919,6 @@ static int tlmi_analyze(void)
} }
kobject_init(&setting->kobj, &tlmi_attr_setting_ktype); kobject_init(&setting->kobj, &tlmi_attr_setting_ktype);
tlmi_priv.setting[i] = setting; tlmi_priv.setting[i] = setting;
tlmi_priv.settings_count++;
kfree(item); kfree(item);
} }
...@@ -983,7 +985,12 @@ static void tlmi_remove(struct wmi_device *wdev) ...@@ -983,7 +985,12 @@ static void tlmi_remove(struct wmi_device *wdev)
static int tlmi_probe(struct wmi_device *wdev, const void *context) static int tlmi_probe(struct wmi_device *wdev, const void *context)
{ {
tlmi_analyze(); int ret;
ret = tlmi_analyze();
if (ret)
return ret;
return tlmi_sysfs_init(); return tlmi_sysfs_init();
} }
......
...@@ -55,7 +55,6 @@ struct tlmi_attr_setting { ...@@ -55,7 +55,6 @@ struct tlmi_attr_setting {
struct think_lmi { struct think_lmi {
struct wmi_device *wmi_device; struct wmi_device *wmi_device;
int settings_count;
bool can_set_bios_settings; bool can_set_bios_settings;
bool can_get_bios_selections; bool can_get_bios_selections;
bool can_set_bios_password; bool can_set_bios_password;
......
...@@ -1105,15 +1105,6 @@ static int tpacpi_rfk_update_swstate(const struct tpacpi_rfk *tp_rfk) ...@@ -1105,15 +1105,6 @@ static int tpacpi_rfk_update_swstate(const struct tpacpi_rfk *tp_rfk)
return status; return status;
} }
/* Query FW and update rfkill sw state for all rfkill switches */
static void tpacpi_rfk_update_swstate_all(void)
{
unsigned int i;
for (i = 0; i < TPACPI_RFK_SW_MAX; i++)
tpacpi_rfk_update_swstate(tpacpi_rfkill_switches[i]);
}
/* /*
* Sync the HW-blocking state of all rfkill switches, * Sync the HW-blocking state of all rfkill switches,
* do notice it causes the rfkill core to schedule uevents * do notice it causes the rfkill core to schedule uevents
...@@ -3074,9 +3065,6 @@ static void tpacpi_send_radiosw_update(void) ...@@ -3074,9 +3065,6 @@ static void tpacpi_send_radiosw_update(void)
if (wlsw == TPACPI_RFK_RADIO_OFF) if (wlsw == TPACPI_RFK_RADIO_OFF)
tpacpi_rfk_update_hwblock_state(true); tpacpi_rfk_update_hwblock_state(true);
/* Sync sw blocking state */
tpacpi_rfk_update_swstate_all();
/* Sync hw blocking state last if it is hw-unblocked */ /* Sync hw blocking state last if it is hw-unblocked */
if (wlsw == TPACPI_RFK_RADIO_ON) if (wlsw == TPACPI_RFK_RADIO_ON)
tpacpi_rfk_update_hwblock_state(false); tpacpi_rfk_update_hwblock_state(false);
...@@ -8766,6 +8754,7 @@ static const struct tpacpi_quirk fan_quirk_table[] __initconst = { ...@@ -8766,6 +8754,7 @@ static const struct tpacpi_quirk fan_quirk_table[] __initconst = {
TPACPI_Q_LNV3('N', '2', 'E', TPACPI_FAN_2CTL), /* P1 / X1 Extreme (1st gen) */ TPACPI_Q_LNV3('N', '2', 'E', TPACPI_FAN_2CTL), /* P1 / X1 Extreme (1st gen) */
TPACPI_Q_LNV3('N', '2', 'O', TPACPI_FAN_2CTL), /* P1 / X1 Extreme (2nd gen) */ TPACPI_Q_LNV3('N', '2', 'O', TPACPI_FAN_2CTL), /* P1 / X1 Extreme (2nd gen) */
TPACPI_Q_LNV3('N', '2', 'V', TPACPI_FAN_2CTL), /* P1 / X1 Extreme (3nd gen) */ TPACPI_Q_LNV3('N', '2', 'V', TPACPI_FAN_2CTL), /* P1 / X1 Extreme (3nd gen) */
TPACPI_Q_LNV3('N', '4', '0', TPACPI_FAN_2CTL), /* P1 / X1 Extreme (4nd gen) */
TPACPI_Q_LNV3('N', '3', '0', TPACPI_FAN_2CTL), /* P15 (1st gen) / P15v (1st gen) */ TPACPI_Q_LNV3('N', '3', '0', TPACPI_FAN_2CTL), /* P15 (1st gen) / P15v (1st gen) */
TPACPI_Q_LNV3('N', '3', '2', TPACPI_FAN_2CTL), /* X1 Carbon (9th gen) */ TPACPI_Q_LNV3('N', '3', '2', TPACPI_FAN_2CTL), /* X1 Carbon (9th gen) */
}; };
......
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