Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

Pull x86 platform driver fixes from Hans de Goede:

- Fix lg-laptop driver not working with 2024 LG laptop models

- Add missing MODULE_DESCRIPTION() macros to various modules

- nvsw-sn2201: Add check for platform_device_add_resources

* tag 'platform-drivers-x86-v6.10-4' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86:
platform/x86: add missing MODULE_DESCRIPTION() macros
platform/x86/intel: add missing MODULE_DESCRIPTION() macros
platform/x86/siemens: add missing MODULE_DESCRIPTION() macros
platform/x86: lg-laptop: Use ACPI device handle when evaluating WMAB/WMBB
platform/x86: lg-laptop: Change ACPI device id
platform/x86: lg-laptop: Remove LGEX0815 hotkey handling
platform/x86: wireless-hotkey: Add support for LG Airplane Button
platform/mellanox: nvsw-sn2201: Add check for platform_device_add_resources

+56 -56
+4 -1
drivers/platform/mellanox/nvsw-sn2201.c
··· 1198 1198 static int nvsw_sn2201_probe(struct platform_device *pdev) 1199 1199 { 1200 1200 struct nvsw_sn2201 *nvsw_sn2201; 1201 + int ret; 1201 1202 1202 1203 nvsw_sn2201 = devm_kzalloc(&pdev->dev, sizeof(*nvsw_sn2201), GFP_KERNEL); 1203 1204 if (!nvsw_sn2201) ··· 1206 1205 1207 1206 nvsw_sn2201->dev = &pdev->dev; 1208 1207 platform_set_drvdata(pdev, nvsw_sn2201); 1209 - platform_device_add_resources(pdev, nvsw_sn2201_lpc_io_resources, 1208 + ret = platform_device_add_resources(pdev, nvsw_sn2201_lpc_io_resources, 1210 1209 ARRAY_SIZE(nvsw_sn2201_lpc_io_resources)); 1210 + if (ret) 1211 + return ret; 1211 1212 1212 1213 nvsw_sn2201->main_mux_deferred_nr = NVSW_SN2201_MAIN_MUX_DEFER_NR; 1213 1214 nvsw_sn2201->main_mux_devs = nvsw_sn2201_main_mux_brdinfo;
+1
drivers/platform/x86/amilo-rfkill.c
··· 171 171 } 172 172 173 173 MODULE_AUTHOR("Ben Hutchings <ben@decadent.org.uk>"); 174 + MODULE_DESCRIPTION("Fujitsu-Siemens Amilo rfkill support"); 174 175 MODULE_LICENSE("GPL"); 175 176 MODULE_DEVICE_TABLE(dmi, amilo_rfkill_id_table); 176 177
+1
drivers/platform/x86/firmware_attributes_class.c
··· 49 49 EXPORT_SYMBOL_GPL(fw_attributes_class_put); 50 50 51 51 MODULE_AUTHOR("Mark Pearson <markpearson@lenovo.com>"); 52 + MODULE_DESCRIPTION("Firmware attributes class helper module"); 52 53 MODULE_LICENSE("GPL");
+1
drivers/platform/x86/ibm_rtl.c
··· 29 29 module_param(debug, bool, 0644); 30 30 MODULE_PARM_DESC(debug, "Show debug output"); 31 31 32 + MODULE_DESCRIPTION("IBM Premium Real Time Mode (PRTM) driver"); 32 33 MODULE_LICENSE("GPL"); 33 34 MODULE_AUTHOR("Keith Mannthey <kmmanth@us.ibm.com>"); 34 35 MODULE_AUTHOR("Vernon Mauery <vernux@us.ibm.com>");
+1
drivers/platform/x86/intel/hid.c
··· 38 38 /* When NOT in tablet mode, VGBS returns with the flag 0x40 */ 39 39 #define TABLET_MODE_FLAG BIT(6) 40 40 41 + MODULE_DESCRIPTION("Intel HID Event hotkey driver"); 41 42 MODULE_LICENSE("GPL"); 42 43 MODULE_AUTHOR("Alex Hung"); 43 44
+1
drivers/platform/x86/intel/pmc/pltdrv.c
··· 86 86 87 87 module_init(pmc_core_platform_init); 88 88 module_exit(pmc_core_platform_exit); 89 + MODULE_DESCRIPTION("Intel PMC Core platform driver"); 89 90 MODULE_LICENSE("GPL v2");
+1
drivers/platform/x86/intel/rst.c
··· 7 7 #include <linux/module.h> 8 8 #include <linux/slab.h> 9 9 10 + MODULE_DESCRIPTION("Intel Rapid Start Technology Driver"); 10 11 MODULE_LICENSE("GPL"); 11 12 12 13 static ssize_t irst_show_wakeup_events(struct device *dev,
+1
drivers/platform/x86/intel/smartconnect.c
··· 6 6 #include <linux/acpi.h> 7 7 #include <linux/module.h> 8 8 9 + MODULE_DESCRIPTION("Intel Smart Connect disabling driver"); 9 10 MODULE_LICENSE("GPL"); 10 11 11 12 static int smartconnect_acpi_init(struct acpi_device *acpi)
+1
drivers/platform/x86/intel/vbtn.c
··· 24 24 25 25 #define VGBS_TABLET_MODE_FLAGS (VGBS_TABLET_MODE_FLAG | VGBS_TABLET_MODE_FLAG_ALT) 26 26 27 + MODULE_DESCRIPTION("Intel Virtual Button driver"); 27 28 MODULE_LICENSE("GPL"); 28 29 MODULE_AUTHOR("AceLan Kao"); 29 30
+34 -55
drivers/platform/x86/lg-laptop.c
··· 39 39 #define WMI_METHOD_WMBB "2B4F501A-BD3C-4394-8DCF-00A7D2BC8210" 40 40 #define WMI_EVENT_GUID WMI_EVENT_GUID0 41 41 42 - #define WMAB_METHOD "\\XINI.WMAB" 43 - #define WMBB_METHOD "\\XINI.WMBB" 44 42 #define SB_GGOV_METHOD "\\_SB.GGOV" 45 43 #define GOV_TLED 0x2020008 46 44 #define WM_GET 1 ··· 72 74 73 75 static int battery_limit_use_wmbb; 74 76 static struct led_classdev kbd_backlight; 75 - static enum led_brightness get_kbd_backlight_level(void); 77 + static enum led_brightness get_kbd_backlight_level(struct device *dev); 76 78 77 79 static const struct key_entry wmi_keymap[] = { 78 80 {KE_KEY, 0x70, {KEY_F15} }, /* LG control panel (F1) */ ··· 82 84 * this key both sends an event and 83 85 * changes backlight level. 84 86 */ 85 - {KE_KEY, 0x80, {KEY_RFKILL} }, 86 87 {KE_END, 0} 87 88 }; 88 89 ··· 125 128 return res; 126 129 } 127 130 128 - static union acpi_object *lg_wmab(u32 method, u32 arg1, u32 arg2) 131 + static union acpi_object *lg_wmab(struct device *dev, u32 method, u32 arg1, u32 arg2) 129 132 { 130 133 union acpi_object args[3]; 131 134 acpi_status status; 132 - acpi_handle handle; 133 135 struct acpi_object_list arg; 134 136 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 135 137 ··· 139 143 args[2].type = ACPI_TYPE_INTEGER; 140 144 args[2].integer.value = arg2; 141 145 142 - status = acpi_get_handle(NULL, (acpi_string) WMAB_METHOD, &handle); 143 - if (ACPI_FAILURE(status)) { 144 - pr_err("Cannot get handle"); 145 - return NULL; 146 - } 147 - 148 146 arg.count = 3; 149 147 arg.pointer = args; 150 148 151 - status = acpi_evaluate_object(handle, NULL, &arg, &buffer); 149 + status = acpi_evaluate_object(ACPI_HANDLE(dev), "WMAB", &arg, &buffer); 152 150 if (ACPI_FAILURE(status)) { 153 - acpi_handle_err(handle, "WMAB: call failed.\n"); 151 + dev_err(dev, "WMAB: call failed.\n"); 154 152 return NULL; 155 153 } 156 154 157 155 return buffer.pointer; 158 156 } 159 157 160 - static union acpi_object *lg_wmbb(u32 method_id, u32 arg1, u32 arg2) 158 + static union acpi_object *lg_wmbb(struct device *dev, u32 method_id, u32 arg1, u32 arg2) 161 159 { 162 160 union acpi_object args[3]; 163 161 acpi_status status; 164 - acpi_handle handle; 165 162 struct acpi_object_list arg; 166 163 struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; 167 164 u8 buf[32]; ··· 170 181 args[2].buffer.length = 32; 171 182 args[2].buffer.pointer = buf; 172 183 173 - status = acpi_get_handle(NULL, (acpi_string)WMBB_METHOD, &handle); 174 - if (ACPI_FAILURE(status)) { 175 - pr_err("Cannot get handle"); 176 - return NULL; 177 - } 178 - 179 184 arg.count = 3; 180 185 arg.pointer = args; 181 186 182 - status = acpi_evaluate_object(handle, NULL, &arg, &buffer); 187 + status = acpi_evaluate_object(ACPI_HANDLE(dev), "WMBB", &arg, &buffer); 183 188 if (ACPI_FAILURE(status)) { 184 - acpi_handle_err(handle, "WMAB: call failed.\n"); 189 + dev_err(dev, "WMBB: call failed.\n"); 185 190 return NULL; 186 191 } 187 192 ··· 206 223 207 224 if (eventcode == 0x10000000) { 208 225 led_classdev_notify_brightness_hw_changed( 209 - &kbd_backlight, get_kbd_backlight_level()); 226 + &kbd_backlight, get_kbd_backlight_level(kbd_backlight.dev->parent)); 210 227 } else { 211 228 key = sparse_keymap_entry_from_scancode( 212 229 wmi_input_dev, eventcode); ··· 255 272 256 273 static void acpi_notify(struct acpi_device *device, u32 event) 257 274 { 258 - struct key_entry *key; 259 - 260 275 acpi_handle_debug(device->handle, "notify: %d\n", event); 261 - if (inited & INIT_SPARSE_KEYMAP) { 262 - key = sparse_keymap_entry_from_scancode(wmi_input_dev, 0x80); 263 - if (key && key->type == KE_KEY) 264 - sparse_keymap_report_entry(wmi_input_dev, key, 1, true); 265 - } 266 276 } 267 277 268 278 static ssize_t fan_mode_store(struct device *dev, ··· 271 295 if (ret) 272 296 return ret; 273 297 274 - r = lg_wmab(WM_FAN_MODE, WM_GET, 0); 298 + r = lg_wmab(dev, WM_FAN_MODE, WM_GET, 0); 275 299 if (!r) 276 300 return -EIO; 277 301 ··· 282 306 283 307 m = r->integer.value; 284 308 kfree(r); 285 - r = lg_wmab(WM_FAN_MODE, WM_SET, (m & 0xffffff0f) | (value << 4)); 309 + r = lg_wmab(dev, WM_FAN_MODE, WM_SET, (m & 0xffffff0f) | (value << 4)); 286 310 kfree(r); 287 - r = lg_wmab(WM_FAN_MODE, WM_SET, (m & 0xfffffff0) | value); 311 + r = lg_wmab(dev, WM_FAN_MODE, WM_SET, (m & 0xfffffff0) | value); 288 312 kfree(r); 289 313 290 314 return count; ··· 296 320 unsigned int status; 297 321 union acpi_object *r; 298 322 299 - r = lg_wmab(WM_FAN_MODE, WM_GET, 0); 323 + r = lg_wmab(dev, WM_FAN_MODE, WM_GET, 0); 300 324 if (!r) 301 325 return -EIO; 302 326 ··· 323 347 if (ret) 324 348 return ret; 325 349 326 - r = lg_wmbb(WMBB_USB_CHARGE, WM_SET, value); 350 + r = lg_wmbb(dev, WMBB_USB_CHARGE, WM_SET, value); 327 351 if (!r) 328 352 return -EIO; 329 353 ··· 337 361 unsigned int status; 338 362 union acpi_object *r; 339 363 340 - r = lg_wmbb(WMBB_USB_CHARGE, WM_GET, 0); 364 + r = lg_wmbb(dev, WMBB_USB_CHARGE, WM_GET, 0); 341 365 if (!r) 342 366 return -EIO; 343 367 ··· 365 389 if (ret) 366 390 return ret; 367 391 368 - r = lg_wmab(WM_READER_MODE, WM_SET, value); 392 + r = lg_wmab(dev, WM_READER_MODE, WM_SET, value); 369 393 if (!r) 370 394 return -EIO; 371 395 ··· 379 403 unsigned int status; 380 404 union acpi_object *r; 381 405 382 - r = lg_wmab(WM_READER_MODE, WM_GET, 0); 406 + r = lg_wmab(dev, WM_READER_MODE, WM_GET, 0); 383 407 if (!r) 384 408 return -EIO; 385 409 ··· 407 431 if (ret) 408 432 return ret; 409 433 410 - r = lg_wmab(WM_FN_LOCK, WM_SET, value); 434 + r = lg_wmab(dev, WM_FN_LOCK, WM_SET, value); 411 435 if (!r) 412 436 return -EIO; 413 437 ··· 421 445 unsigned int status; 422 446 union acpi_object *r; 423 447 424 - r = lg_wmab(WM_FN_LOCK, WM_GET, 0); 448 + r = lg_wmab(dev, WM_FN_LOCK, WM_GET, 0); 425 449 if (!r) 426 450 return -EIO; 427 451 ··· 451 475 union acpi_object *r; 452 476 453 477 if (battery_limit_use_wmbb) 454 - r = lg_wmbb(WMBB_BATT_LIMIT, WM_SET, value); 478 + r = lg_wmbb(&pf_device->dev, WMBB_BATT_LIMIT, WM_SET, value); 455 479 else 456 - r = lg_wmab(WM_BATT_LIMIT, WM_SET, value); 480 + r = lg_wmab(&pf_device->dev, WM_BATT_LIMIT, WM_SET, value); 457 481 if (!r) 458 482 return -EIO; 459 483 ··· 472 496 union acpi_object *r; 473 497 474 498 if (battery_limit_use_wmbb) { 475 - r = lg_wmbb(WMBB_BATT_LIMIT, WM_GET, 0); 499 + r = lg_wmbb(&pf_device->dev, WMBB_BATT_LIMIT, WM_GET, 0); 476 500 if (!r) 477 501 return -EIO; 478 502 ··· 483 507 484 508 status = r->buffer.pointer[0x10]; 485 509 } else { 486 - r = lg_wmab(WM_BATT_LIMIT, WM_GET, 0); 510 + r = lg_wmab(&pf_device->dev, WM_BATT_LIMIT, WM_GET, 0); 487 511 if (!r) 488 512 return -EIO; 489 513 ··· 562 586 { 563 587 union acpi_object *r; 564 588 565 - r = lg_wmab(WM_TLED, WM_SET, brightness > LED_OFF); 589 + r = lg_wmab(cdev->dev->parent, WM_TLED, WM_SET, brightness > LED_OFF); 566 590 kfree(r); 567 591 } 568 592 ··· 584 608 val = 0; 585 609 if (brightness >= LED_FULL) 586 610 val = 0x24; 587 - r = lg_wmab(WM_KEY_LIGHT, WM_SET, val); 611 + r = lg_wmab(cdev->dev->parent, WM_KEY_LIGHT, WM_SET, val); 588 612 kfree(r); 589 613 } 590 614 591 - static enum led_brightness get_kbd_backlight_level(void) 615 + static enum led_brightness get_kbd_backlight_level(struct device *dev) 592 616 { 593 617 union acpi_object *r; 594 618 int val; 595 619 596 - r = lg_wmab(WM_KEY_LIGHT, WM_GET, 0); 620 + r = lg_wmab(dev, WM_KEY_LIGHT, WM_GET, 0); 597 621 598 622 if (!r) 599 623 return LED_OFF; ··· 621 645 622 646 static enum led_brightness kbd_backlight_get(struct led_classdev *cdev) 623 647 { 624 - return get_kbd_backlight_level(); 648 + return get_kbd_backlight_level(cdev->dev->parent); 625 649 } 626 650 627 651 static LED_DEVICE(kbd_backlight, 255, LED_BRIGHT_HW_CHANGED); ··· 648 672 649 673 static int acpi_add(struct acpi_device *device) 650 674 { 675 + struct platform_device_info pdev_info = { 676 + .fwnode = acpi_fwnode_handle(device), 677 + .name = PLATFORM_NAME, 678 + .id = PLATFORM_DEVID_NONE, 679 + }; 651 680 int ret; 652 681 const char *product; 653 682 int year = 2017; ··· 664 683 if (ret) 665 684 return ret; 666 685 667 - pf_device = platform_device_register_simple(PLATFORM_NAME, 668 - PLATFORM_DEVID_NONE, 669 - NULL, 0); 686 + pf_device = platform_device_register_full(&pdev_info); 670 687 if (IS_ERR(pf_device)) { 671 688 ret = PTR_ERR(pf_device); 672 689 pf_device = NULL; ··· 755 776 } 756 777 757 778 static const struct acpi_device_id device_ids[] = { 758 - {"LGEX0815", 0}, 779 + {"LGEX0820", 0}, 759 780 {"", 0} 760 781 }; 761 782 MODULE_DEVICE_TABLE(acpi, device_ids);
+1
drivers/platform/x86/siemens/simatic-ipc-batt-apollolake.c
··· 45 45 46 46 module_platform_driver(simatic_ipc_batt_driver); 47 47 48 + MODULE_DESCRIPTION("CMOS Battery monitoring for Simatic IPCs based on Apollo Lake GPIO"); 48 49 MODULE_LICENSE("GPL"); 49 50 MODULE_ALIAS("platform:" KBUILD_MODNAME); 50 51 MODULE_SOFTDEP("pre: simatic-ipc-batt platform:apollolake-pinctrl");
+1
drivers/platform/x86/siemens/simatic-ipc-batt-elkhartlake.c
··· 45 45 46 46 module_platform_driver(simatic_ipc_batt_driver); 47 47 48 + MODULE_DESCRIPTION("CMOS Battery monitoring for Simatic IPCs based on Elkhart Lake GPIO"); 48 49 MODULE_LICENSE("GPL"); 49 50 MODULE_ALIAS("platform:" KBUILD_MODNAME); 50 51 MODULE_SOFTDEP("pre: simatic-ipc-batt platform:elkhartlake-pinctrl");
+1
drivers/platform/x86/siemens/simatic-ipc-batt-f7188x.c
··· 81 81 82 82 module_platform_driver(simatic_ipc_batt_driver); 83 83 84 + MODULE_DESCRIPTION("CMOS Battery monitoring for Simatic IPCs based on Nuvoton GPIO"); 84 85 MODULE_LICENSE("GPL"); 85 86 MODULE_ALIAS("platform:" KBUILD_MODNAME); 86 87 MODULE_SOFTDEP("pre: simatic-ipc-batt gpio_f7188x platform:elkhartlake-pinctrl platform:alderlake-pinctrl");
+1
drivers/platform/x86/siemens/simatic-ipc-batt.c
··· 247 247 248 248 module_platform_driver(simatic_ipc_batt_driver); 249 249 250 + MODULE_DESCRIPTION("CMOS core battery driver for Siemens Simatic IPCs"); 250 251 MODULE_LICENSE("GPL"); 251 252 MODULE_ALIAS("platform:" KBUILD_MODNAME); 252 253 MODULE_AUTHOR("Henning Schild <henning.schild@siemens.com>");
+1
drivers/platform/x86/siemens/simatic-ipc.c
··· 231 231 module_init(simatic_ipc_init_module); 232 232 module_exit(simatic_ipc_exit_module); 233 233 234 + MODULE_DESCRIPTION("Siemens SIMATIC IPC platform driver"); 234 235 MODULE_LICENSE("GPL v2"); 235 236 MODULE_AUTHOR("Gerd Haeussler <gerd.haeussler.ext@siemens.com>"); 236 237 MODULE_ALIAS("dmi:*:svnSIEMENSAG:*");
+1
drivers/platform/x86/uv_sysfs.c
··· 929 929 module_exit(uv_sysfs_exit); 930 930 931 931 MODULE_AUTHOR("Hewlett Packard Enterprise"); 932 + MODULE_DESCRIPTION("Sysfs structure for HPE UV systems"); 932 933 MODULE_LICENSE("GPL");
+3
drivers/platform/x86/wireless-hotkey.c
··· 14 14 #include <linux/acpi.h> 15 15 #include <acpi/acpi_bus.h> 16 16 17 + MODULE_DESCRIPTION("Airplane mode button for AMD, HP & Xiaomi laptops"); 17 18 MODULE_LICENSE("GPL"); 18 19 MODULE_AUTHOR("Alex Hung"); 19 20 MODULE_ALIAS("acpi*:HPQ6001:*"); 20 21 MODULE_ALIAS("acpi*:WSTADEF:*"); 21 22 MODULE_ALIAS("acpi*:AMDI0051:*"); 23 + MODULE_ALIAS("acpi*:LGEX0815:*"); 22 24 23 25 struct wl_button { 24 26 struct input_dev *input_dev; ··· 31 29 {"HPQ6001", 0}, 32 30 {"WSTADEF", 0}, 33 31 {"AMDI0051", 0}, 32 + {"LGEX0815", 0}, 34 33 {"", 0}, 35 34 }; 36 35
+1
drivers/platform/x86/xo1-rfkill.c
··· 74 74 module_platform_driver(xo1_rfkill_driver); 75 75 76 76 MODULE_AUTHOR("Daniel Drake <dsd@laptop.org>"); 77 + MODULE_DESCRIPTION("OLPC XO-1 software RF kill switch"); 77 78 MODULE_LICENSE("GPL"); 78 79 MODULE_ALIAS("platform:xo1-rfkill");