Lines Matching defs:samsung

290  * samsung-laptop/    - debugfs root directory
322 struct samsung_laptop *samsung;
394 static int sabi_command(struct samsung_laptop *samsung, u16 command,
398 const struct sabi_config *config = samsung->config;
400 u16 port = readw(samsung->sabi + config->header_offsets.port);
403 mutex_lock(&samsung->sabi_mutex);
415 outb(readb(samsung->sabi + config->header_offsets.en_mem), port);
418 writew(config->main_function, samsung->sabi_iface + SABI_IFACE_MAIN);
419 writew(command, samsung->sabi_iface + SABI_IFACE_SUB);
420 writeb(0, samsung->sabi_iface + SABI_IFACE_COMPLETE);
422 writel(in->d0, samsung->sabi_iface + SABI_IFACE_DATA);
423 writel(in->d1, samsung->sabi_iface + SABI_IFACE_DATA + 4);
424 writew(in->d2, samsung->sabi_iface + SABI_IFACE_DATA + 8);
425 writeb(in->d3, samsung->sabi_iface + SABI_IFACE_DATA + 10);
427 outb(readb(samsung->sabi + config->header_offsets.iface_func), port);
430 outb(readb(samsung->sabi + config->header_offsets.re_mem), port);
433 complete = readb(samsung->sabi_iface + SABI_IFACE_COMPLETE);
434 iface_data = readb(samsung->sabi_iface + SABI_IFACE_DATA);
451 out->d0 = readl(samsung->sabi_iface + SABI_IFACE_DATA);
452 out->d1 = readl(samsung->sabi_iface + SABI_IFACE_DATA + 4);
453 out->d2 = readw(samsung->sabi_iface + SABI_IFACE_DATA + 2);
454 out->d3 = readb(samsung->sabi_iface + SABI_IFACE_DATA + 1);
463 mutex_unlock(&samsung->sabi_mutex);
468 static int sabi_set_commandb(struct samsung_laptop *samsung,
474 return sabi_command(samsung, command, &in, NULL);
477 static int read_brightness(struct samsung_laptop *samsung)
479 const struct sabi_config *config = samsung->config;
480 const struct sabi_commands *commands = &samsung->config->commands;
485 retval = sabi_command(samsung, commands->get_brightness,
499 static void set_brightness(struct samsung_laptop *samsung, u8 user_brightness)
501 const struct sabi_config *config = samsung->config;
502 const struct sabi_commands *commands = &samsung->config->commands;
505 if (samsung->has_stepping_quirk && user_level != 0) {
510 if (user_brightness == read_brightness(samsung))
513 sabi_set_commandb(samsung, commands->set_brightness, 0);
516 sabi_set_commandb(samsung, commands->set_brightness, user_level);
521 struct samsung_laptop *samsung = bl_get_data(bd);
523 return read_brightness(samsung);
526 static void check_for_stepping_quirk(struct samsung_laptop *samsung)
530 int orig_level = read_brightness(samsung);
540 set_brightness(samsung, 1);
542 initial_level = read_brightness(samsung);
549 samsung->has_stepping_quirk = false;
550 set_brightness(samsung, check_level);
552 if (read_brightness(samsung) != check_level) {
553 samsung->has_stepping_quirk = true;
557 set_brightness(samsung, orig_level);
562 struct samsung_laptop *samsung = bl_get_data(bd);
563 const struct sabi_commands *commands = &samsung->config->commands;
565 set_brightness(samsung, bd->props.brightness);
568 sabi_set_commandb(samsung, commands->set_backlight, 1);
570 sabi_set_commandb(samsung, commands->set_backlight, 0);
583 struct samsung_laptop *samsung = srfkill->samsung;
584 const struct sabi_commands *commands = &samsung->config->commands;
586 return sabi_set_commandb(samsung, commands->set_wireless_button,
594 static int swsmi_wireless_status(struct samsung_laptop *samsung,
597 const struct sabi_commands *commands = &samsung->config->commands;
599 return sabi_command(samsung, commands->get_wireless_status,
606 struct samsung_laptop *samsung = srfkill->samsung;
607 const struct sabi_commands *commands = &samsung->config->commands;
611 ret = swsmi_wireless_status(samsung, &data);
625 return sabi_command(samsung, commands->set_wireless_status,
632 struct samsung_laptop *samsung = srfkill->samsung;
636 ret = swsmi_wireless_status(samsung, &data);
658 struct samsung_laptop *samsung = dev_get_drvdata(dev);
659 const struct sabi_config *config = samsung->config;
666 retval = sabi_command(samsung, commands->get_performance_level,
683 struct samsung_laptop *samsung = dev_get_drvdata(dev);
684 const struct sabi_config *config = samsung->config;
695 sabi_set_commandb(samsung,
711 static int read_battery_life_extender(struct samsung_laptop *samsung)
713 const struct sabi_commands *commands = &samsung->config->commands;
722 retval = sabi_command(samsung, commands->get_battery_life_extender,
734 static int write_battery_life_extender(struct samsung_laptop *samsung,
737 const struct sabi_commands *commands = &samsung->config->commands;
742 return sabi_command(samsung, commands->set_battery_life_extender,
750 struct samsung_laptop *samsung = dev_get_drvdata(dev);
753 ret = read_battery_life_extender(samsung);
764 struct samsung_laptop *samsung = dev_get_drvdata(dev);
770 ret = write_battery_life_extender(samsung, !!value);
780 static int read_usb_charge(struct samsung_laptop *samsung)
782 const struct sabi_commands *commands = &samsung->config->commands;
791 retval = sabi_command(samsung, commands->get_usb_charge,
803 static int write_usb_charge(struct samsung_laptop *samsung,
806 const struct sabi_commands *commands = &samsung->config->commands;
811 return sabi_command(samsung, commands->set_usb_charge,
819 struct samsung_laptop *samsung = dev_get_drvdata(dev);
822 ret = read_usb_charge(samsung);
833 struct samsung_laptop *samsung = dev_get_drvdata(dev);
839 ret = write_usb_charge(samsung, !!value);
849 static int read_lid_handling(struct samsung_laptop *samsung)
851 const struct sabi_commands *commands = &samsung->config->commands;
859 retval = sabi_command(samsung, commands->get_lid_handling,
868 static int write_lid_handling(struct samsung_laptop *samsung,
871 const struct sabi_commands *commands = &samsung->config->commands;
876 return sabi_command(samsung, commands->set_lid_handling,
884 struct samsung_laptop *samsung = dev_get_drvdata(dev);
887 ret = read_lid_handling(samsung);
898 struct samsung_laptop *samsung = dev_get_drvdata(dev);
904 ret = write_lid_handling(samsung, !!value);
941 static void samsung_rfkill_exit(struct samsung_laptop *samsung)
943 if (samsung->wlan.rfkill) {
944 rfkill_unregister(samsung->wlan.rfkill);
945 rfkill_destroy(samsung->wlan.rfkill);
946 samsung->wlan.rfkill = NULL;
948 if (samsung->bluetooth.rfkill) {
949 rfkill_unregister(samsung->bluetooth.rfkill);
950 rfkill_destroy(samsung->bluetooth.rfkill);
951 samsung->bluetooth.rfkill = NULL;
955 static int samsung_new_rfkill(struct samsung_laptop *samsung,
965 arfkill->samsung = samsung;
967 *rfkill = rfkill_alloc(name, &samsung->platform_device->dev,
985 static int __init samsung_rfkill_init_seclinux(struct samsung_laptop *samsung)
987 return samsung_new_rfkill(samsung, &samsung->wlan, "samsung-wlan",
991 static int __init samsung_rfkill_init_swsmi(struct samsung_laptop *samsung)
996 ret = swsmi_wireless_status(samsung, &data);
1001 ret = samsung_rfkill_init_seclinux(samsung);
1008 ret = samsung_new_rfkill(samsung, &samsung->wlan,
1009 "samsung-wlan",
1017 ret = samsung_new_rfkill(samsung, &samsung->bluetooth,
1018 "samsung-bluetooth",
1027 samsung_rfkill_exit(samsung);
1032 static int __init samsung_rfkill_init(struct samsung_laptop *samsung)
1034 if (samsung->config->sabi_version == 2)
1035 return samsung_rfkill_init_seclinux(samsung);
1036 if (samsung->config->sabi_version == 3)
1037 return samsung_rfkill_init_swsmi(samsung);
1041 static void samsung_lid_handling_exit(struct samsung_laptop *samsung)
1043 if (samsung->quirks->lid_handling)
1044 write_lid_handling(samsung, 0);
1047 static int __init samsung_lid_handling_init(struct samsung_laptop *samsung)
1051 if (samsung->quirks->lid_handling)
1052 retval = write_lid_handling(samsung, 1);
1057 static int kbd_backlight_enable(struct samsung_laptop *samsung)
1059 const struct sabi_commands *commands = &samsung->config->commands;
1068 retval = sabi_command(samsung, commands->kbd_backlight,
1079 static int kbd_backlight_read(struct samsung_laptop *samsung)
1081 const struct sabi_commands *commands = &samsung->config->commands;
1087 retval = sabi_command(samsung, commands->kbd_backlight,
1096 static int kbd_backlight_write(struct samsung_laptop *samsung, int brightness)
1098 const struct sabi_commands *commands = &samsung->config->commands;
1103 return sabi_command(samsung, commands->kbd_backlight,
1109 struct samsung_laptop *samsung;
1111 samsung = container_of(work, struct samsung_laptop, kbd_led_work);
1112 kbd_backlight_write(samsung, samsung->kbd_led_wk);
1118 struct samsung_laptop *samsung;
1120 samsung = container_of(led_cdev, struct samsung_laptop, kbd_led);
1122 if (value > samsung->kbd_led.max_brightness)
1123 value = samsung->kbd_led.max_brightness;
1125 samsung->kbd_led_wk = value;
1126 queue_work(samsung->led_workqueue, &samsung->kbd_led_work);
1131 struct samsung_laptop *samsung;
1133 samsung = container_of(led_cdev, struct samsung_laptop, kbd_led);
1134 return kbd_backlight_read(samsung);
1137 static void samsung_leds_exit(struct samsung_laptop *samsung)
1139 led_classdev_unregister(&samsung->kbd_led);
1140 if (samsung->led_workqueue)
1141 destroy_workqueue(samsung->led_workqueue);
1144 static int __init samsung_leds_init(struct samsung_laptop *samsung)
1148 samsung->led_workqueue = create_singlethread_workqueue("led_workqueue");
1149 if (!samsung->led_workqueue)
1152 if (kbd_backlight_enable(samsung) >= 0) {
1153 INIT_WORK(&samsung->kbd_led_work, kbd_led_update);
1155 samsung->kbd_led.name = "samsung::kbd_backlight";
1156 samsung->kbd_led.brightness_set = kbd_led_set;
1157 samsung->kbd_led.brightness_get = kbd_led_get;
1158 samsung->kbd_led.max_brightness = 8;
1159 if (samsung->quirks->four_kbd_backlight_levels)
1160 samsung->kbd_led.max_brightness = 4;
1162 ret = led_classdev_register(&samsung->platform_device->dev,
1163 &samsung->kbd_led);
1167 samsung_leds_exit(samsung);
1172 static void samsung_backlight_exit(struct samsung_laptop *samsung)
1174 if (samsung->backlight_device) {
1175 backlight_device_unregister(samsung->backlight_device);
1176 samsung->backlight_device = NULL;
1180 static int __init samsung_backlight_init(struct samsung_laptop *samsung)
1185 if (!samsung->handle_backlight)
1190 props.max_brightness = samsung->config->max_brightness -
1191 samsung->config->min_brightness;
1193 bd = backlight_device_register("samsung",
1194 &samsung->platform_device->dev,
1195 samsung, &backlight_ops,
1200 samsung->backlight_device = bd;
1201 samsung->backlight_device->props.brightness = read_brightness(samsung);
1202 samsung->backlight_device->props.power = FB_BLANK_UNBLANK;
1203 backlight_update_status(samsung->backlight_device);
1212 struct samsung_laptop *samsung = dev_get_drvdata(dev);
1216 ok = !!samsung->config->performance_levels[0].name;
1218 ok = !!(read_battery_life_extender(samsung) >= 0);
1220 ok = !!(read_usb_charge(samsung) >= 0);
1222 ok = !!(read_lid_handling(samsung) >= 0);
1232 static void samsung_sysfs_exit(struct samsung_laptop *samsung)
1234 struct platform_device *device = samsung->platform_device;
1239 static int __init samsung_sysfs_init(struct samsung_laptop *samsung)
1241 struct platform_device *device = samsung->platform_device;
1249 struct samsung_laptop *samsung = m->private;
1250 struct sabi_data *sdata = &samsung->debug.data;
1254 samsung->debug.command,
1257 ret = sabi_command(samsung, samsung->debug.command, sdata, sdata);
1261 samsung->debug.command);
1271 static void samsung_debugfs_exit(struct samsung_laptop *samsung)
1273 debugfs_remove_recursive(samsung->debug.root);
1276 static void samsung_debugfs_init(struct samsung_laptop *samsung)
1280 root = debugfs_create_dir("samsung-laptop", NULL);
1281 samsung->debug.root = root;
1283 samsung->debug.f0000_wrapper.data = samsung->f0000_segment;
1284 samsung->debug.f0000_wrapper.size = 0xffff;
1286 samsung->debug.data_wrapper.data = &samsung->debug.data;
1287 samsung->debug.data_wrapper.size = sizeof(samsung->debug.data);
1289 samsung->debug.sdiag_wrapper.data = samsung->sdiag;
1290 samsung->debug.sdiag_wrapper.size = strlen(samsung->sdiag);
1293 &samsung->debug.command);
1295 &samsung->debug.data.d0);
1297 &samsung->debug.data.d1);
1299 &samsung->debug.data.d2);
1301 &samsung->debug.data.d3);
1303 &samsung->debug.data_wrapper);
1305 &samsung->debug.f0000_wrapper);
1306 debugfs_create_file("call", S_IFREG | S_IRUGO, root, samsung,
1309 &samsung->debug.sdiag_wrapper);
1312 static void samsung_sabi_exit(struct samsung_laptop *samsung)
1314 const struct sabi_config *config = samsung->config;
1318 sabi_set_commandb(samsung, config->commands.set_linux, 0x80);
1320 if (samsung->sabi_iface) {
1321 iounmap(samsung->sabi_iface);
1322 samsung->sabi_iface = NULL;
1324 if (samsung->f0000_segment) {
1325 iounmap(samsung->f0000_segment);
1326 samsung->f0000_segment = NULL;
1329 samsung->config = NULL;
1332 static __init void samsung_sabi_infos(struct samsung_laptop *samsung, int loca,
1335 const struct sabi_config *config = samsung->config;
1342 readw(samsung->sabi + config->header_offsets.port));
1344 readb(samsung->sabi + config->header_offsets.iface_func));
1346 readb(samsung->sabi + config->header_offsets.en_mem));
1348 readb(samsung->sabi + config->header_offsets.re_mem));
1350 readw(samsung->sabi + config->header_offsets.data_offset));
1352 readw(samsung->sabi + config->header_offsets.data_segment));
1357 static void __init samsung_sabi_diag(struct samsung_laptop *samsung)
1359 int loca = find_signature(samsung->f0000_segment, "SDiaG@");
1372 for (i = 0; loca < 0xffff && i < sizeof(samsung->sdiag) - 1; loca++) {
1373 char temp = readb(samsung->f0000_segment + loca);
1376 samsung->sdiag[i++] = temp;
1381 if (debug && samsung->sdiag[0])
1382 pr_info("sdiag: %s", samsung->sdiag);
1385 static int __init samsung_sabi_init(struct samsung_laptop *samsung)
1394 samsung->f0000_segment = ioremap(0xf0000, 0xffff);
1395 if (!samsung->f0000_segment) {
1402 samsung_sabi_diag(samsung);
1406 samsung->config = &sabi_configs[i];
1407 loca = find_signature(samsung->f0000_segment,
1408 samsung->config->test_string);
1420 config = samsung->config;
1425 samsung->sabi = (samsung->f0000_segment + loca);
1428 ifaceP = (readw(samsung->sabi + config->header_offsets.data_segment) & 0x0ffff) << 4;
1429 ifaceP += readw(samsung->sabi + config->header_offsets.data_offset) & 0x0ffff;
1432 samsung_sabi_infos(samsung, loca, ifaceP);
1434 samsung->sabi_iface = ioremap(ifaceP, 16);
1435 if (!samsung->sabi_iface) {
1443 int retval = sabi_set_commandb(samsung,
1453 if (samsung->handle_backlight)
1454 check_for_stepping_quirk(samsung);
1457 samsung->config->test_string);
1461 samsung_sabi_exit(samsung);
1466 static void samsung_platform_exit(struct samsung_laptop *samsung)
1468 if (samsung->platform_device) {
1469 platform_device_unregister(samsung->platform_device);
1470 samsung->platform_device = NULL;
1477 struct samsung_laptop *samsung;
1479 samsung = container_of(nb, struct samsung_laptop, pm_nb);
1481 samsung->quirks->enable_kbd_backlight)
1482 kbd_backlight_enable(samsung);
1484 if (val == PM_POST_HIBERNATION && samsung->quirks->lid_handling)
1485 write_lid_handling(samsung, 1);
1490 static int __init samsung_platform_init(struct samsung_laptop *samsung)
1494 pdev = platform_device_register_simple("samsung", -1, NULL, 0);
1498 samsung->platform_device = pdev;
1499 platform_set_drvdata(samsung->platform_device, samsung);
1646 struct samsung_laptop *samsung;
1656 samsung = kzalloc(sizeof(*samsung), GFP_KERNEL);
1657 if (!samsung)
1660 mutex_init(&samsung->sabi_mutex);
1661 samsung->handle_backlight = true;
1662 samsung->quirks = quirks;
1665 if (samsung->quirks->broken_acpi_video)
1667 if (samsung->quirks->use_native_backlight)
1671 samsung->handle_backlight = false;
1674 ret = samsung_platform_init(samsung);
1678 ret = samsung_sabi_init(samsung);
1682 ret = samsung_sysfs_init(samsung);
1686 ret = samsung_backlight_init(samsung);
1690 ret = samsung_rfkill_init(samsung);
1694 ret = samsung_leds_init(samsung);
1698 ret = samsung_lid_handling_init(samsung);
1702 samsung_debugfs_init(samsung);
1704 samsung->pm_nb.notifier_call = samsung_pm_notification;
1705 register_pm_notifier(&samsung->pm_nb);
1707 samsung_platform_device = samsung->platform_device;
1711 samsung_leds_exit(samsung);
1713 samsung_rfkill_exit(samsung);
1715 samsung_backlight_exit(samsung);
1717 samsung_sysfs_exit(samsung);
1719 samsung_sabi_exit(samsung);
1721 samsung_platform_exit(samsung);
1723 kfree(samsung);
1729 struct samsung_laptop *samsung;
1731 samsung = platform_get_drvdata(samsung_platform_device);
1732 unregister_pm_notifier(&samsung->pm_nb);
1734 samsung_debugfs_exit(samsung);
1735 samsung_lid_handling_exit(samsung);
1736 samsung_leds_exit(samsung);
1737 samsung_rfkill_exit(samsung);
1738 samsung_backlight_exit(samsung);
1739 samsung_sysfs_exit(samsung);
1740 samsung_sabi_exit(samsung);
1741 samsung_platform_exit(samsung);
1743 kfree(samsung);