Lines Matching full:samsung
2 * Samsung Laptop driver
34 * This driver is needed because a number of Samsung laptops do not hook
294 * samsung-laptop/ - debugfs root directory
326 struct samsung_laptop *samsung; member
398 static int sabi_command(struct samsung_laptop *samsung, u16 command, in sabi_command() argument
402 const struct sabi_config *config = samsung->config; in sabi_command()
404 u16 port = readw(samsung->sabi + config->header_offsets.port); in sabi_command()
407 mutex_lock(&samsung->sabi_mutex); in sabi_command()
419 outb(readb(samsung->sabi + config->header_offsets.en_mem), port); in sabi_command()
422 writew(config->main_function, samsung->sabi_iface + SABI_IFACE_MAIN); in sabi_command()
423 writew(command, samsung->sabi_iface + SABI_IFACE_SUB); in sabi_command()
424 writeb(0, samsung->sabi_iface + SABI_IFACE_COMPLETE); in sabi_command()
426 writel(in->d0, samsung->sabi_iface + SABI_IFACE_DATA); in sabi_command()
427 writel(in->d1, samsung->sabi_iface + SABI_IFACE_DATA + 4); in sabi_command()
428 writew(in->d2, samsung->sabi_iface + SABI_IFACE_DATA + 8); in sabi_command()
429 writeb(in->d3, samsung->sabi_iface + SABI_IFACE_DATA + 10); in sabi_command()
431 outb(readb(samsung->sabi + config->header_offsets.iface_func), port); in sabi_command()
434 outb(readb(samsung->sabi + config->header_offsets.re_mem), port); in sabi_command()
437 complete = readb(samsung->sabi_iface + SABI_IFACE_COMPLETE); in sabi_command()
438 iface_data = readb(samsung->sabi_iface + SABI_IFACE_DATA); in sabi_command()
455 out->d0 = readl(samsung->sabi_iface + SABI_IFACE_DATA); in sabi_command()
456 out->d1 = readl(samsung->sabi_iface + SABI_IFACE_DATA + 4); in sabi_command()
457 out->d2 = readw(samsung->sabi_iface + SABI_IFACE_DATA + 2); in sabi_command()
458 out->d3 = readb(samsung->sabi_iface + SABI_IFACE_DATA + 1); in sabi_command()
467 mutex_unlock(&samsung->sabi_mutex); in sabi_command()
472 static int sabi_set_commandb(struct samsung_laptop *samsung, in sabi_set_commandb() argument
478 return sabi_command(samsung, command, &in, NULL); in sabi_set_commandb()
481 static int read_brightness(struct samsung_laptop *samsung) in read_brightness() argument
483 const struct sabi_config *config = samsung->config; in read_brightness()
484 const struct sabi_commands *commands = &samsung->config->commands; in read_brightness()
489 retval = sabi_command(samsung, commands->get_brightness, in read_brightness()
503 static void set_brightness(struct samsung_laptop *samsung, u8 user_brightness) in set_brightness() argument
505 const struct sabi_config *config = samsung->config; in set_brightness()
506 const struct sabi_commands *commands = &samsung->config->commands; in set_brightness()
509 if (samsung->has_stepping_quirk && user_level != 0) { in set_brightness()
514 if (user_brightness == read_brightness(samsung)) in set_brightness()
517 sabi_set_commandb(samsung, commands->set_brightness, 0); in set_brightness()
520 sabi_set_commandb(samsung, commands->set_brightness, user_level); in set_brightness()
525 struct samsung_laptop *samsung = bl_get_data(bd); in get_brightness() local
527 return read_brightness(samsung); in get_brightness()
530 static void check_for_stepping_quirk(struct samsung_laptop *samsung) in check_for_stepping_quirk() argument
534 int orig_level = read_brightness(samsung); in check_for_stepping_quirk()
544 set_brightness(samsung, 1); in check_for_stepping_quirk()
546 initial_level = read_brightness(samsung); in check_for_stepping_quirk()
553 samsung->has_stepping_quirk = false; in check_for_stepping_quirk()
554 set_brightness(samsung, check_level); in check_for_stepping_quirk()
556 if (read_brightness(samsung) != check_level) { in check_for_stepping_quirk()
557 samsung->has_stepping_quirk = true; in check_for_stepping_quirk()
561 set_brightness(samsung, orig_level); in check_for_stepping_quirk()
566 struct samsung_laptop *samsung = bl_get_data(bd); in update_status() local
567 const struct sabi_commands *commands = &samsung->config->commands; in update_status()
569 set_brightness(samsung, bd->props.brightness); in update_status()
572 sabi_set_commandb(samsung, commands->set_backlight, 1); in update_status()
574 sabi_set_commandb(samsung, commands->set_backlight, 0); in update_status()
587 struct samsung_laptop *samsung = srfkill->samsung; in seclinux_rfkill_set() local
588 const struct sabi_commands *commands = &samsung->config->commands; in seclinux_rfkill_set()
590 return sabi_set_commandb(samsung, commands->set_wireless_button, in seclinux_rfkill_set()
598 static int swsmi_wireless_status(struct samsung_laptop *samsung, in swsmi_wireless_status() argument
601 const struct sabi_commands *commands = &samsung->config->commands; in swsmi_wireless_status()
603 return sabi_command(samsung, commands->get_wireless_status, in swsmi_wireless_status()
610 struct samsung_laptop *samsung = srfkill->samsung; in swsmi_rfkill_set() local
611 const struct sabi_commands *commands = &samsung->config->commands; in swsmi_rfkill_set()
615 ret = swsmi_wireless_status(samsung, &data); in swsmi_rfkill_set()
629 return sabi_command(samsung, commands->set_wireless_status, in swsmi_rfkill_set()
636 struct samsung_laptop *samsung = srfkill->samsung; in swsmi_rfkill_query() local
640 ret = swsmi_wireless_status(samsung, &data); in swsmi_rfkill_query()
662 struct samsung_laptop *samsung = dev_get_drvdata(dev); in get_performance_level() local
663 const struct sabi_config *config = samsung->config; in get_performance_level()
670 retval = sabi_command(samsung, commands->get_performance_level, in get_performance_level()
687 struct samsung_laptop *samsung = dev_get_drvdata(dev); in set_performance_level() local
688 const struct sabi_config *config = samsung->config; in set_performance_level()
699 sabi_set_commandb(samsung, in set_performance_level()
715 static int read_battery_life_extender(struct samsung_laptop *samsung) in read_battery_life_extender() argument
717 const struct sabi_commands *commands = &samsung->config->commands; in read_battery_life_extender()
726 retval = sabi_command(samsung, commands->get_battery_life_extender, in read_battery_life_extender()
738 static int write_battery_life_extender(struct samsung_laptop *samsung, in write_battery_life_extender() argument
741 const struct sabi_commands *commands = &samsung->config->commands; in write_battery_life_extender()
746 return sabi_command(samsung, commands->set_battery_life_extender, in write_battery_life_extender()
754 struct samsung_laptop *samsung = dev_get_drvdata(dev); in get_battery_life_extender() local
757 ret = read_battery_life_extender(samsung); in get_battery_life_extender()
768 struct samsung_laptop *samsung = dev_get_drvdata(dev); in set_battery_life_extender() local
774 ret = write_battery_life_extender(samsung, !!value); in set_battery_life_extender()
784 static int read_usb_charge(struct samsung_laptop *samsung) in read_usb_charge() argument
786 const struct sabi_commands *commands = &samsung->config->commands; in read_usb_charge()
795 retval = sabi_command(samsung, commands->get_usb_charge, in read_usb_charge()
807 static int write_usb_charge(struct samsung_laptop *samsung, in write_usb_charge() argument
810 const struct sabi_commands *commands = &samsung->config->commands; in write_usb_charge()
815 return sabi_command(samsung, commands->set_usb_charge, in write_usb_charge()
823 struct samsung_laptop *samsung = dev_get_drvdata(dev); in get_usb_charge() local
826 ret = read_usb_charge(samsung); in get_usb_charge()
837 struct samsung_laptop *samsung = dev_get_drvdata(dev); in set_usb_charge() local
843 ret = write_usb_charge(samsung, !!value); in set_usb_charge()
853 static int read_lid_handling(struct samsung_laptop *samsung) in read_lid_handling() argument
855 const struct sabi_commands *commands = &samsung->config->commands; in read_lid_handling()
863 retval = sabi_command(samsung, commands->get_lid_handling, in read_lid_handling()
872 static int write_lid_handling(struct samsung_laptop *samsung, in write_lid_handling() argument
875 const struct sabi_commands *commands = &samsung->config->commands; in write_lid_handling()
880 return sabi_command(samsung, commands->set_lid_handling, in write_lid_handling()
888 struct samsung_laptop *samsung = dev_get_drvdata(dev); in get_lid_handling() local
891 ret = read_lid_handling(samsung); in get_lid_handling()
902 struct samsung_laptop *samsung = dev_get_drvdata(dev); in set_lid_handling() local
908 ret = write_lid_handling(samsung, !!value); in set_lid_handling()
945 static void samsung_rfkill_exit(struct samsung_laptop *samsung) in samsung_rfkill_exit() argument
947 if (samsung->wlan.rfkill) { in samsung_rfkill_exit()
948 rfkill_unregister(samsung->wlan.rfkill); in samsung_rfkill_exit()
949 rfkill_destroy(samsung->wlan.rfkill); in samsung_rfkill_exit()
950 samsung->wlan.rfkill = NULL; in samsung_rfkill_exit()
952 if (samsung->bluetooth.rfkill) { in samsung_rfkill_exit()
953 rfkill_unregister(samsung->bluetooth.rfkill); in samsung_rfkill_exit()
954 rfkill_destroy(samsung->bluetooth.rfkill); in samsung_rfkill_exit()
955 samsung->bluetooth.rfkill = NULL; in samsung_rfkill_exit()
959 static int samsung_new_rfkill(struct samsung_laptop *samsung, in samsung_new_rfkill() argument
969 arfkill->samsung = samsung; in samsung_new_rfkill()
971 *rfkill = rfkill_alloc(name, &samsung->platform_device->dev, in samsung_new_rfkill()
989 static int __init samsung_rfkill_init_seclinux(struct samsung_laptop *samsung) in samsung_rfkill_init_seclinux() argument
991 return samsung_new_rfkill(samsung, &samsung->wlan, "samsung-wlan", in samsung_rfkill_init_seclinux()
995 static int __init samsung_rfkill_init_swsmi(struct samsung_laptop *samsung) in samsung_rfkill_init_swsmi() argument
1000 ret = swsmi_wireless_status(samsung, &data); in samsung_rfkill_init_swsmi()
1005 ret = samsung_rfkill_init_seclinux(samsung); in samsung_rfkill_init_swsmi()
1012 ret = samsung_new_rfkill(samsung, &samsung->wlan, in samsung_rfkill_init_swsmi()
1013 "samsung-wlan", in samsung_rfkill_init_swsmi()
1021 ret = samsung_new_rfkill(samsung, &samsung->bluetooth, in samsung_rfkill_init_swsmi()
1022 "samsung-bluetooth", in samsung_rfkill_init_swsmi()
1031 samsung_rfkill_exit(samsung); in samsung_rfkill_init_swsmi()
1036 static int __init samsung_rfkill_init(struct samsung_laptop *samsung) in samsung_rfkill_init() argument
1038 if (samsung->config->sabi_version == 2) in samsung_rfkill_init()
1039 return samsung_rfkill_init_seclinux(samsung); in samsung_rfkill_init()
1040 if (samsung->config->sabi_version == 3) in samsung_rfkill_init()
1041 return samsung_rfkill_init_swsmi(samsung); in samsung_rfkill_init()
1045 static void samsung_lid_handling_exit(struct samsung_laptop *samsung) in samsung_lid_handling_exit() argument
1047 if (samsung->quirks->lid_handling) in samsung_lid_handling_exit()
1048 write_lid_handling(samsung, 0); in samsung_lid_handling_exit()
1051 static int __init samsung_lid_handling_init(struct samsung_laptop *samsung) in samsung_lid_handling_init() argument
1055 if (samsung->quirks->lid_handling) in samsung_lid_handling_init()
1056 retval = write_lid_handling(samsung, 1); in samsung_lid_handling_init()
1061 static int kbd_backlight_enable(struct samsung_laptop *samsung) in kbd_backlight_enable() argument
1063 const struct sabi_commands *commands = &samsung->config->commands; in kbd_backlight_enable()
1072 retval = sabi_command(samsung, commands->kbd_backlight, in kbd_backlight_enable()
1083 static int kbd_backlight_read(struct samsung_laptop *samsung) in kbd_backlight_read() argument
1085 const struct sabi_commands *commands = &samsung->config->commands; in kbd_backlight_read()
1091 retval = sabi_command(samsung, commands->kbd_backlight, in kbd_backlight_read()
1100 static int kbd_backlight_write(struct samsung_laptop *samsung, int brightness) in kbd_backlight_write() argument
1102 const struct sabi_commands *commands = &samsung->config->commands; in kbd_backlight_write()
1107 return sabi_command(samsung, commands->kbd_backlight, in kbd_backlight_write()
1113 struct samsung_laptop *samsung; in kbd_led_update() local
1115 samsung = container_of(work, struct samsung_laptop, kbd_led_work); in kbd_led_update()
1116 kbd_backlight_write(samsung, samsung->kbd_led_wk); in kbd_led_update()
1122 struct samsung_laptop *samsung; in kbd_led_set() local
1124 samsung = container_of(led_cdev, struct samsung_laptop, kbd_led); in kbd_led_set()
1126 if (value > samsung->kbd_led.max_brightness) in kbd_led_set()
1127 value = samsung->kbd_led.max_brightness; in kbd_led_set()
1131 samsung->kbd_led_wk = value; in kbd_led_set()
1132 queue_work(samsung->led_workqueue, &samsung->kbd_led_work); in kbd_led_set()
1137 struct samsung_laptop *samsung; in kbd_led_get() local
1139 samsung = container_of(led_cdev, struct samsung_laptop, kbd_led); in kbd_led_get()
1140 return kbd_backlight_read(samsung); in kbd_led_get()
1143 static void samsung_leds_exit(struct samsung_laptop *samsung) in samsung_leds_exit() argument
1145 if (!IS_ERR_OR_NULL(samsung->kbd_led.dev)) in samsung_leds_exit()
1146 led_classdev_unregister(&samsung->kbd_led); in samsung_leds_exit()
1147 if (samsung->led_workqueue) in samsung_leds_exit()
1148 destroy_workqueue(samsung->led_workqueue); in samsung_leds_exit()
1151 static int __init samsung_leds_init(struct samsung_laptop *samsung) in samsung_leds_init() argument
1155 samsung->led_workqueue = create_singlethread_workqueue("led_workqueue"); in samsung_leds_init()
1156 if (!samsung->led_workqueue) in samsung_leds_init()
1159 if (kbd_backlight_enable(samsung) >= 0) { in samsung_leds_init()
1160 INIT_WORK(&samsung->kbd_led_work, kbd_led_update); in samsung_leds_init()
1162 samsung->kbd_led.name = "samsung::kbd_backlight"; in samsung_leds_init()
1163 samsung->kbd_led.brightness_set = kbd_led_set; in samsung_leds_init()
1164 samsung->kbd_led.brightness_get = kbd_led_get; in samsung_leds_init()
1165 samsung->kbd_led.max_brightness = 8; in samsung_leds_init()
1166 if (samsung->quirks->four_kbd_backlight_levels) in samsung_leds_init()
1167 samsung->kbd_led.max_brightness = 4; in samsung_leds_init()
1169 ret = led_classdev_register(&samsung->platform_device->dev, in samsung_leds_init()
1170 &samsung->kbd_led); in samsung_leds_init()
1174 samsung_leds_exit(samsung); in samsung_leds_init()
1179 static void samsung_backlight_exit(struct samsung_laptop *samsung) in samsung_backlight_exit() argument
1181 if (samsung->backlight_device) { in samsung_backlight_exit()
1182 backlight_device_unregister(samsung->backlight_device); in samsung_backlight_exit()
1183 samsung->backlight_device = NULL; in samsung_backlight_exit()
1187 static int __init samsung_backlight_init(struct samsung_laptop *samsung) in samsung_backlight_init() argument
1192 if (!samsung->handle_backlight) in samsung_backlight_init()
1197 props.max_brightness = samsung->config->max_brightness - in samsung_backlight_init()
1198 samsung->config->min_brightness; in samsung_backlight_init()
1200 bd = backlight_device_register("samsung", in samsung_backlight_init()
1201 &samsung->platform_device->dev, in samsung_backlight_init()
1202 samsung, &backlight_ops, in samsung_backlight_init()
1207 samsung->backlight_device = bd; in samsung_backlight_init()
1208 samsung->backlight_device->props.brightness = read_brightness(samsung); in samsung_backlight_init()
1209 samsung->backlight_device->props.power = FB_BLANK_UNBLANK; in samsung_backlight_init()
1210 backlight_update_status(samsung->backlight_device); in samsung_backlight_init()
1219 struct samsung_laptop *samsung = dev_get_drvdata(dev); in samsung_sysfs_is_visible() local
1223 ok = !!samsung->config->performance_levels[0].name; in samsung_sysfs_is_visible()
1225 ok = !!(read_battery_life_extender(samsung) >= 0); in samsung_sysfs_is_visible()
1227 ok = !!(read_usb_charge(samsung) >= 0); in samsung_sysfs_is_visible()
1229 ok = !!(read_lid_handling(samsung) >= 0); in samsung_sysfs_is_visible()
1239 static void samsung_sysfs_exit(struct samsung_laptop *samsung) in samsung_sysfs_exit() argument
1241 struct platform_device *device = samsung->platform_device; in samsung_sysfs_exit()
1246 static int __init samsung_sysfs_init(struct samsung_laptop *samsung) in samsung_sysfs_init() argument
1248 struct platform_device *device = samsung->platform_device; in samsung_sysfs_init()
1256 struct samsung_laptop *samsung = m->private; in samsung_laptop_call_show() local
1257 struct sabi_data *sdata = &samsung->debug.data; in samsung_laptop_call_show()
1261 samsung->debug.command, in samsung_laptop_call_show()
1264 ret = sabi_command(samsung, samsung->debug.command, sdata, sdata); in samsung_laptop_call_show()
1268 samsung->debug.command); in samsung_laptop_call_show()
1278 static void samsung_debugfs_exit(struct samsung_laptop *samsung) in samsung_debugfs_exit() argument
1280 debugfs_remove_recursive(samsung->debug.root); in samsung_debugfs_exit()
1283 static int samsung_debugfs_init(struct samsung_laptop *samsung) in samsung_debugfs_init() argument
1287 samsung->debug.root = debugfs_create_dir("samsung-laptop", NULL); in samsung_debugfs_init()
1288 if (!samsung->debug.root) { in samsung_debugfs_init()
1293 samsung->debug.f0000_wrapper.data = samsung->f0000_segment; in samsung_debugfs_init()
1294 samsung->debug.f0000_wrapper.size = 0xffff; in samsung_debugfs_init()
1296 samsung->debug.data_wrapper.data = &samsung->debug.data; in samsung_debugfs_init()
1297 samsung->debug.data_wrapper.size = sizeof(samsung->debug.data); in samsung_debugfs_init()
1299 samsung->debug.sdiag_wrapper.data = samsung->sdiag; in samsung_debugfs_init()
1300 samsung->debug.sdiag_wrapper.size = strlen(samsung->sdiag); in samsung_debugfs_init()
1303 samsung->debug.root, &samsung->debug.command); in samsung_debugfs_init()
1307 dent = debugfs_create_u32("d0", S_IRUGO | S_IWUSR, samsung->debug.root, in samsung_debugfs_init()
1308 &samsung->debug.data.d0); in samsung_debugfs_init()
1312 dent = debugfs_create_u32("d1", S_IRUGO | S_IWUSR, samsung->debug.root, in samsung_debugfs_init()
1313 &samsung->debug.data.d1); in samsung_debugfs_init()
1317 dent = debugfs_create_u16("d2", S_IRUGO | S_IWUSR, samsung->debug.root, in samsung_debugfs_init()
1318 &samsung->debug.data.d2); in samsung_debugfs_init()
1322 dent = debugfs_create_u8("d3", S_IRUGO | S_IWUSR, samsung->debug.root, in samsung_debugfs_init()
1323 &samsung->debug.data.d3); in samsung_debugfs_init()
1328 samsung->debug.root, in samsung_debugfs_init()
1329 &samsung->debug.data_wrapper); in samsung_debugfs_init()
1334 samsung->debug.root, in samsung_debugfs_init()
1335 &samsung->debug.f0000_wrapper); in samsung_debugfs_init()
1340 samsung->debug.root, samsung, in samsung_debugfs_init()
1346 samsung->debug.root, in samsung_debugfs_init()
1347 &samsung->debug.sdiag_wrapper); in samsung_debugfs_init()
1354 samsung_debugfs_exit(samsung); in samsung_debugfs_init()
1358 static void samsung_sabi_exit(struct samsung_laptop *samsung) in samsung_sabi_exit() argument
1360 const struct sabi_config *config = samsung->config; in samsung_sabi_exit()
1364 sabi_set_commandb(samsung, config->commands.set_linux, 0x80); in samsung_sabi_exit()
1366 if (samsung->sabi_iface) { in samsung_sabi_exit()
1367 iounmap(samsung->sabi_iface); in samsung_sabi_exit()
1368 samsung->sabi_iface = NULL; in samsung_sabi_exit()
1370 if (samsung->f0000_segment) { in samsung_sabi_exit()
1371 iounmap(samsung->f0000_segment); in samsung_sabi_exit()
1372 samsung->f0000_segment = NULL; in samsung_sabi_exit()
1375 samsung->config = NULL; in samsung_sabi_exit()
1378 static __init void samsung_sabi_infos(struct samsung_laptop *samsung, int loca, in samsung_sabi_infos() argument
1381 const struct sabi_config *config = samsung->config; in samsung_sabi_infos()
1388 readw(samsung->sabi + config->header_offsets.port)); in samsung_sabi_infos()
1390 readb(samsung->sabi + config->header_offsets.iface_func)); in samsung_sabi_infos()
1392 readb(samsung->sabi + config->header_offsets.en_mem)); in samsung_sabi_infos()
1394 readb(samsung->sabi + config->header_offsets.re_mem)); in samsung_sabi_infos()
1396 readw(samsung->sabi + config->header_offsets.data_offset)); in samsung_sabi_infos()
1398 readw(samsung->sabi + config->header_offsets.data_segment)); in samsung_sabi_infos()
1403 static void __init samsung_sabi_diag(struct samsung_laptop *samsung) in samsung_sabi_diag() argument
1405 int loca = find_signature(samsung->f0000_segment, "SDiaG@"); in samsung_sabi_diag()
1418 for (i = 0; loca < 0xffff && i < sizeof(samsung->sdiag) - 1; loca++) { in samsung_sabi_diag()
1419 char temp = readb(samsung->f0000_segment + loca); in samsung_sabi_diag()
1422 samsung->sdiag[i++] = temp; in samsung_sabi_diag()
1427 if (debug && samsung->sdiag[0]) in samsung_sabi_diag()
1428 pr_info("sdiag: %s", samsung->sdiag); in samsung_sabi_diag()
1431 static int __init samsung_sabi_init(struct samsung_laptop *samsung) in samsung_sabi_init() argument
1440 samsung->f0000_segment = ioremap_nocache(0xf0000, 0xffff); in samsung_sabi_init()
1441 if (!samsung->f0000_segment) { in samsung_sabi_init()
1448 samsung_sabi_diag(samsung); in samsung_sabi_init()
1452 samsung->config = &sabi_configs[i]; in samsung_sabi_init()
1453 loca = find_signature(samsung->f0000_segment, in samsung_sabi_init()
1454 samsung->config->test_string); in samsung_sabi_init()
1466 config = samsung->config; in samsung_sabi_init()
1471 samsung->sabi = (samsung->f0000_segment + loca); in samsung_sabi_init()
1474 ifaceP = (readw(samsung->sabi + config->header_offsets.data_segment) & 0x0ffff) << 4; in samsung_sabi_init()
1475 ifaceP += readw(samsung->sabi + config->header_offsets.data_offset) & 0x0ffff; in samsung_sabi_init()
1478 samsung_sabi_infos(samsung, loca, ifaceP); in samsung_sabi_init()
1480 samsung->sabi_iface = ioremap_nocache(ifaceP, 16); in samsung_sabi_init()
1481 if (!samsung->sabi_iface) { in samsung_sabi_init()
1489 int retval = sabi_set_commandb(samsung, in samsung_sabi_init()
1499 if (samsung->handle_backlight) in samsung_sabi_init()
1500 check_for_stepping_quirk(samsung); in samsung_sabi_init()
1503 samsung->config->test_string); in samsung_sabi_init()
1507 samsung_sabi_exit(samsung); in samsung_sabi_init()
1512 static void samsung_platform_exit(struct samsung_laptop *samsung) in samsung_platform_exit() argument
1514 if (samsung->platform_device) { in samsung_platform_exit()
1515 platform_device_unregister(samsung->platform_device); in samsung_platform_exit()
1516 samsung->platform_device = NULL; in samsung_platform_exit()
1523 struct samsung_laptop *samsung; in samsung_pm_notification() local
1525 samsung = container_of(nb, struct samsung_laptop, pm_nb); in samsung_pm_notification()
1527 samsung->quirks->enable_kbd_backlight) in samsung_pm_notification()
1528 kbd_backlight_enable(samsung); in samsung_pm_notification()
1530 if (val == PM_POST_HIBERNATION && samsung->quirks->lid_handling) in samsung_pm_notification()
1531 write_lid_handling(samsung, 1); in samsung_pm_notification()
1536 static int __init samsung_platform_init(struct samsung_laptop *samsung) in samsung_platform_init() argument
1540 pdev = platform_device_register_simple("samsung", -1, NULL, 0); in samsung_platform_init()
1544 samsung->platform_device = pdev; in samsung_platform_init()
1545 platform_set_drvdata(samsung->platform_device, samsung); in samsung_platform_init()
1561 "SAMSUNG ELECTRONICS CO., LTD."),
1568 "SAMSUNG ELECTRONICS CO., LTD."),
1575 "SAMSUNG ELECTRONICS CO., LTD."),
1582 "SAMSUNG ELECTRONICS CO., LTD."),
1590 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1600 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1610 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1620 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1630 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1640 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1650 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1660 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1670 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1679 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
1692 struct samsung_laptop *samsung; in samsung_init() local
1702 samsung = kzalloc(sizeof(*samsung), GFP_KERNEL); in samsung_init()
1703 if (!samsung) in samsung_init()
1706 mutex_init(&samsung->sabi_mutex); in samsung_init()
1707 samsung->handle_backlight = true; in samsung_init()
1708 samsung->quirks = quirks; in samsung_init()
1711 if (samsung->quirks->broken_acpi_video) in samsung_init()
1713 if (samsung->quirks->use_native_backlight) in samsung_init()
1717 samsung->handle_backlight = false; in samsung_init()
1720 ret = samsung_platform_init(samsung); in samsung_init()
1724 ret = samsung_sabi_init(samsung); in samsung_init()
1728 ret = samsung_sysfs_init(samsung); in samsung_init()
1732 ret = samsung_backlight_init(samsung); in samsung_init()
1736 ret = samsung_rfkill_init(samsung); in samsung_init()
1740 ret = samsung_leds_init(samsung); in samsung_init()
1744 ret = samsung_lid_handling_init(samsung); in samsung_init()
1748 ret = samsung_debugfs_init(samsung); in samsung_init()
1752 samsung->pm_nb.notifier_call = samsung_pm_notification; in samsung_init()
1753 register_pm_notifier(&samsung->pm_nb); in samsung_init()
1755 samsung_platform_device = samsung->platform_device; in samsung_init()
1759 samsung_lid_handling_exit(samsung); in samsung_init()
1761 samsung_leds_exit(samsung); in samsung_init()
1763 samsung_rfkill_exit(samsung); in samsung_init()
1765 samsung_backlight_exit(samsung); in samsung_init()
1767 samsung_sysfs_exit(samsung); in samsung_init()
1769 samsung_sabi_exit(samsung); in samsung_init()
1771 samsung_platform_exit(samsung); in samsung_init()
1773 kfree(samsung); in samsung_init()
1779 struct samsung_laptop *samsung; in samsung_exit() local
1781 samsung = platform_get_drvdata(samsung_platform_device); in samsung_exit()
1782 unregister_pm_notifier(&samsung->pm_nb); in samsung_exit()
1784 samsung_debugfs_exit(samsung); in samsung_exit()
1785 samsung_lid_handling_exit(samsung); in samsung_exit()
1786 samsung_leds_exit(samsung); in samsung_exit()
1787 samsung_rfkill_exit(samsung); in samsung_exit()
1788 samsung_backlight_exit(samsung); in samsung_exit()
1789 samsung_sysfs_exit(samsung); in samsung_exit()
1790 samsung_sabi_exit(samsung); in samsung_exit()
1791 samsung_platform_exit(samsung); in samsung_exit()
1793 kfree(samsung); in samsung_exit()
1801 MODULE_DESCRIPTION("Samsung Backlight driver");