Lines Matching defs:samsung

290  * samsung-laptop/    - debugfs root directory
322 struct samsung_laptop *samsung;
384 static int sabi_command(struct samsung_laptop *samsung, u16 command,
388 const struct sabi_config *config = samsung->config;
390 u16 port = readw(samsung->sabi + config->header_offsets.port);
393 mutex_lock(&samsung->sabi_mutex);
405 outb(readb(samsung->sabi + config->header_offsets.en_mem), port);
408 writew(config->main_function, samsung->sabi_iface + SABI_IFACE_MAIN);
409 writew(command, samsung->sabi_iface + SABI_IFACE_SUB);
410 writeb(0, samsung->sabi_iface + SABI_IFACE_COMPLETE);
412 writel(in->d0, samsung->sabi_iface + SABI_IFACE_DATA);
413 writel(in->d1, samsung->sabi_iface + SABI_IFACE_DATA + 4);
414 writew(in->d2, samsung->sabi_iface + SABI_IFACE_DATA + 8);
415 writeb(in->d3, samsung->sabi_iface + SABI_IFACE_DATA + 10);
417 outb(readb(samsung->sabi + config->header_offsets.iface_func), port);
420 outb(readb(samsung->sabi + config->header_offsets.re_mem), port);
423 complete = readb(samsung->sabi_iface + SABI_IFACE_COMPLETE);
424 iface_data = readb(samsung->sabi_iface + SABI_IFACE_DATA);
441 out->d0 = readl(samsung->sabi_iface + SABI_IFACE_DATA);
442 out->d1 = readl(samsung->sabi_iface + SABI_IFACE_DATA + 4);
443 out->d2 = readw(samsung->sabi_iface + SABI_IFACE_DATA + 2);
444 out->d3 = readb(samsung->sabi_iface + SABI_IFACE_DATA + 1);
453 mutex_unlock(&samsung->sabi_mutex);
458 static int sabi_set_commandb(struct samsung_laptop *samsung,
464 return sabi_command(samsung, command, &in, NULL);
467 static int read_brightness(struct samsung_laptop *samsung)
469 const struct sabi_config *config = samsung->config;
470 const struct sabi_commands *commands = &samsung->config->commands;
475 retval = sabi_command(samsung, commands->get_brightness,
489 static void set_brightness(struct samsung_laptop *samsung, u8 user_brightness)
491 const struct sabi_config *config = samsung->config;
492 const struct sabi_commands *commands = &samsung->config->commands;
495 if (samsung->has_stepping_quirk && user_level != 0) {
500 if (user_brightness == read_brightness(samsung))
503 sabi_set_commandb(samsung, commands->set_brightness, 0);
506 sabi_set_commandb(samsung, commands->set_brightness, user_level);
511 struct samsung_laptop *samsung = bl_get_data(bd);
513 return read_brightness(samsung);
516 static void check_for_stepping_quirk(struct samsung_laptop *samsung)
520 int orig_level = read_brightness(samsung);
530 set_brightness(samsung, 1);
532 initial_level = read_brightness(samsung);
539 samsung->has_stepping_quirk = false;
540 set_brightness(samsung, check_level);
542 if (read_brightness(samsung) != check_level) {
543 samsung->has_stepping_quirk = true;
547 set_brightness(samsung, orig_level);
552 struct samsung_laptop *samsung = bl_get_data(bd);
553 const struct sabi_commands *commands = &samsung->config->commands;
555 set_brightness(samsung, bd->props.brightness);
558 sabi_set_commandb(samsung, commands->set_backlight, 1);
560 sabi_set_commandb(samsung, commands->set_backlight, 0);
573 struct samsung_laptop *samsung = srfkill->samsung;
574 const struct sabi_commands *commands = &samsung->config->commands;
576 return sabi_set_commandb(samsung, commands->set_wireless_button,
584 static int swsmi_wireless_status(struct samsung_laptop *samsung,
587 const struct sabi_commands *commands = &samsung->config->commands;
589 return sabi_command(samsung, commands->get_wireless_status,
596 struct samsung_laptop *samsung = srfkill->samsung;
597 const struct sabi_commands *commands = &samsung->config->commands;
601 ret = swsmi_wireless_status(samsung, &data);
615 return sabi_command(samsung, commands->set_wireless_status,
622 struct samsung_laptop *samsung = srfkill->samsung;
626 ret = swsmi_wireless_status(samsung, &data);
648 struct samsung_laptop *samsung = dev_get_drvdata(dev);
649 const struct sabi_config *config = samsung->config;
656 retval = sabi_command(samsung, commands->get_performance_level,
673 struct samsung_laptop *samsung = dev_get_drvdata(dev);
674 const struct sabi_config *config = samsung->config;
685 sabi_set_commandb(samsung,
701 static int read_battery_life_extender(struct samsung_laptop *samsung)
703 const struct sabi_commands *commands = &samsung->config->commands;
712 retval = sabi_command(samsung, commands->get_battery_life_extender,
724 static int write_battery_life_extender(struct samsung_laptop *samsung,
727 const struct sabi_commands *commands = &samsung->config->commands;
732 return sabi_command(samsung, commands->set_battery_life_extender,
740 struct samsung_laptop *samsung = dev_get_drvdata(dev);
743 ret = read_battery_life_extender(samsung);
754 struct samsung_laptop *samsung = dev_get_drvdata(dev);
760 ret = write_battery_life_extender(samsung, !!value);
770 static int read_usb_charge(struct samsung_laptop *samsung)
772 const struct sabi_commands *commands = &samsung->config->commands;
781 retval = sabi_command(samsung, commands->get_usb_charge,
793 static int write_usb_charge(struct samsung_laptop *samsung,
796 const struct sabi_commands *commands = &samsung->config->commands;
801 return sabi_command(samsung, commands->set_usb_charge,
809 struct samsung_laptop *samsung = dev_get_drvdata(dev);
812 ret = read_usb_charge(samsung);
823 struct samsung_laptop *samsung = dev_get_drvdata(dev);
829 ret = write_usb_charge(samsung, !!value);
839 static int read_lid_handling(struct samsung_laptop *samsung)
841 const struct sabi_commands *commands = &samsung->config->commands;
849 retval = sabi_command(samsung, commands->get_lid_handling,
858 static int write_lid_handling(struct samsung_laptop *samsung,
861 const struct sabi_commands *commands = &samsung->config->commands;
866 return sabi_command(samsung, commands->set_lid_handling,
874 struct samsung_laptop *samsung = dev_get_drvdata(dev);
877 ret = read_lid_handling(samsung);
888 struct samsung_laptop *samsung = dev_get_drvdata(dev);
894 ret = write_lid_handling(samsung, !!value);
931 static void samsung_rfkill_exit(struct samsung_laptop *samsung)
933 if (samsung->wlan.rfkill) {
934 rfkill_unregister(samsung->wlan.rfkill);
935 rfkill_destroy(samsung->wlan.rfkill);
936 samsung->wlan.rfkill = NULL;
938 if (samsung->bluetooth.rfkill) {
939 rfkill_unregister(samsung->bluetooth.rfkill);
940 rfkill_destroy(samsung->bluetooth.rfkill);
941 samsung->bluetooth.rfkill = NULL;
945 static int samsung_new_rfkill(struct samsung_laptop *samsung,
955 arfkill->samsung = samsung;
957 *rfkill = rfkill_alloc(name, &samsung->platform_device->dev,
975 static int __init samsung_rfkill_init_seclinux(struct samsung_laptop *samsung)
977 return samsung_new_rfkill(samsung, &samsung->wlan, "samsung-wlan",
981 static int __init samsung_rfkill_init_swsmi(struct samsung_laptop *samsung)
986 ret = swsmi_wireless_status(samsung, &data);
991 ret = samsung_rfkill_init_seclinux(samsung);
998 ret = samsung_new_rfkill(samsung, &samsung->wlan,
999 "samsung-wlan",
1007 ret = samsung_new_rfkill(samsung, &samsung->bluetooth,
1008 "samsung-bluetooth",
1017 samsung_rfkill_exit(samsung);
1022 static int __init samsung_rfkill_init(struct samsung_laptop *samsung)
1024 if (samsung->config->sabi_version == 2)
1025 return samsung_rfkill_init_seclinux(samsung);
1026 if (samsung->config->sabi_version == 3)
1027 return samsung_rfkill_init_swsmi(samsung);
1031 static void samsung_lid_handling_exit(struct samsung_laptop *samsung)
1033 if (samsung->quirks->lid_handling)
1034 write_lid_handling(samsung, 0);
1037 static int __init samsung_lid_handling_init(struct samsung_laptop *samsung)
1041 if (samsung->quirks->lid_handling)
1042 retval = write_lid_handling(samsung, 1);
1047 static int kbd_backlight_enable(struct samsung_laptop *samsung)
1049 const struct sabi_commands *commands = &samsung->config->commands;
1058 retval = sabi_command(samsung, commands->kbd_backlight,
1069 static int kbd_backlight_read(struct samsung_laptop *samsung)
1071 const struct sabi_commands *commands = &samsung->config->commands;
1077 retval = sabi_command(samsung, commands->kbd_backlight,
1086 static int kbd_backlight_write(struct samsung_laptop *samsung, int brightness)
1088 const struct sabi_commands *commands = &samsung->config->commands;
1093 return sabi_command(samsung, commands->kbd_backlight,
1099 struct samsung_laptop *samsung;
1101 samsung = container_of(work, struct samsung_laptop, kbd_led_work);
1102 kbd_backlight_write(samsung, samsung->kbd_led_wk);
1108 struct samsung_laptop *samsung;
1110 samsung = container_of(led_cdev, struct samsung_laptop, kbd_led);
1112 if (value > samsung->kbd_led.max_brightness)
1113 value = samsung->kbd_led.max_brightness;
1115 samsung->kbd_led_wk = value;
1116 queue_work(samsung->led_workqueue, &samsung->kbd_led_work);
1121 struct samsung_laptop *samsung;
1123 samsung = container_of(led_cdev, struct samsung_laptop, kbd_led);
1124 return kbd_backlight_read(samsung);
1127 static void samsung_leds_exit(struct samsung_laptop *samsung)
1129 led_classdev_unregister(&samsung->kbd_led);
1130 if (samsung->led_workqueue)
1131 destroy_workqueue(samsung->led_workqueue);
1134 static int __init samsung_leds_init(struct samsung_laptop *samsung)
1138 samsung->led_workqueue = create_singlethread_workqueue("led_workqueue");
1139 if (!samsung->led_workqueue)
1142 if (kbd_backlight_enable(samsung) >= 0) {
1143 INIT_WORK(&samsung->kbd_led_work, kbd_led_update);
1145 samsung->kbd_led.name = "samsung::kbd_backlight";
1146 samsung->kbd_led.brightness_set = kbd_led_set;
1147 samsung->kbd_led.brightness_get = kbd_led_get;
1148 samsung->kbd_led.max_brightness = 8;
1149 if (samsung->quirks->four_kbd_backlight_levels)
1150 samsung->kbd_led.max_brightness = 4;
1152 ret = led_classdev_register(&samsung->platform_device->dev,
1153 &samsung->kbd_led);
1157 samsung_leds_exit(samsung);
1162 static void samsung_backlight_exit(struct samsung_laptop *samsung)
1164 if (samsung->backlight_device) {
1165 backlight_device_unregister(samsung->backlight_device);
1166 samsung->backlight_device = NULL;
1170 static int __init samsung_backlight_init(struct samsung_laptop *samsung)
1175 if (!samsung->handle_backlight)
1180 props.max_brightness = samsung->config->max_brightness -
1181 samsung->config->min_brightness;
1183 bd = backlight_device_register("samsung",
1184 &samsung->platform_device->dev,
1185 samsung, &backlight_ops,
1190 samsung->backlight_device = bd;
1191 samsung->backlight_device->props.brightness = read_brightness(samsung);
1192 samsung->backlight_device->props.power = FB_BLANK_UNBLANK;
1193 backlight_update_status(samsung->backlight_device);
1202 struct samsung_laptop *samsung = dev_get_drvdata(dev);
1206 ok = !!samsung->config->performance_levels[0].name;
1208 ok = !!(read_battery_life_extender(samsung) >= 0);
1210 ok = !!(read_usb_charge(samsung) >= 0);
1212 ok = !!(read_lid_handling(samsung) >= 0);
1222 static void samsung_sysfs_exit(struct samsung_laptop *samsung)
1224 struct platform_device *device = samsung->platform_device;
1229 static int __init samsung_sysfs_init(struct samsung_laptop *samsung)
1231 struct platform_device *device = samsung->platform_device;
1239 struct samsung_laptop *samsung = m->private;
1240 struct sabi_data *sdata = &samsung->debug.data;
1244 samsung->debug.command,
1247 ret = sabi_command(samsung, samsung->debug.command, sdata, sdata);
1251 samsung->debug.command);
1261 static void samsung_debugfs_exit(struct samsung_laptop *samsung)
1263 debugfs_remove_recursive(samsung->debug.root);
1266 static void samsung_debugfs_init(struct samsung_laptop *samsung)
1270 root = debugfs_create_dir("samsung-laptop", NULL);
1271 samsung->debug.root = root;
1273 samsung->debug.f0000_wrapper.data = samsung->f0000_segment;
1274 samsung->debug.f0000_wrapper.size = 0xffff;
1276 samsung->debug.data_wrapper.data = &samsung->debug.data;
1277 samsung->debug.data_wrapper.size = sizeof(samsung->debug.data);
1279 samsung->debug.sdiag_wrapper.data = samsung->sdiag;
1280 samsung->debug.sdiag_wrapper.size = strlen(samsung->sdiag);
1282 debugfs_create_u16("command", 0644, root, &samsung->debug.command);
1283 debugfs_create_u32("d0", 0644, root, &samsung->debug.data.d0);
1284 debugfs_create_u32("d1", 0644, root, &samsung->debug.data.d1);
1285 debugfs_create_u16("d2", 0644, root, &samsung->debug.data.d2);
1286 debugfs_create_u8("d3", 0644, root, &samsung->debug.data.d3);
1287 debugfs_create_blob("data", 0444, root, &samsung->debug.data_wrapper);
1289 &samsung->debug.f0000_wrapper);
1290 debugfs_create_file("call", 0444, root, samsung,
1292 debugfs_create_blob("sdiag", 0444, root, &samsung->debug.sdiag_wrapper);
1295 static void samsung_sabi_exit(struct samsung_laptop *samsung)
1297 const struct sabi_config *config = samsung->config;
1301 sabi_set_commandb(samsung, config->commands.set_linux, 0x80);
1303 if (samsung->sabi_iface) {
1304 iounmap(samsung->sabi_iface);
1305 samsung->sabi_iface = NULL;
1307 if (samsung->f0000_segment) {
1308 iounmap(samsung->f0000_segment);
1309 samsung->f0000_segment = NULL;
1312 samsung->config = NULL;
1315 static __init void samsung_sabi_infos(struct samsung_laptop *samsung, int loca,
1318 const struct sabi_config *config = samsung->config;
1325 readw(samsung->sabi + config->header_offsets.port));
1327 readb(samsung->sabi + config->header_offsets.iface_func));
1329 readb(samsung->sabi + config->header_offsets.en_mem));
1331 readb(samsung->sabi + config->header_offsets.re_mem));
1333 readw(samsung->sabi + config->header_offsets.data_offset));
1335 readw(samsung->sabi + config->header_offsets.data_segment));
1340 static void __init samsung_sabi_diag(struct samsung_laptop *samsung)
1342 int loca = find_signature(samsung->f0000_segment, "SDiaG@");
1355 for (i = 0; loca < 0xffff && i < sizeof(samsung->sdiag) - 1; loca++) {
1356 char temp = readb(samsung->f0000_segment + loca);
1359 samsung->sdiag[i++] = temp;
1364 if (debug && samsung->sdiag[0])
1365 pr_info("sdiag: %s", samsung->sdiag);
1368 static int __init samsung_sabi_init(struct samsung_laptop *samsung)
1377 samsung->f0000_segment = ioremap(0xf0000, 0xffff);
1378 if (!samsung->f0000_segment) {
1385 samsung_sabi_diag(samsung);
1389 samsung->config = &sabi_configs[i];
1390 loca = find_signature(samsung->f0000_segment,
1391 samsung->config->test_string);
1403 config = samsung->config;
1408 samsung->sabi = (samsung->f0000_segment + loca);
1411 ifaceP = (readw(samsung->sabi + config->header_offsets.data_segment) & 0x0ffff) << 4;
1412 ifaceP += readw(samsung->sabi + config->header_offsets.data_offset) & 0x0ffff;
1415 samsung_sabi_infos(samsung, loca, ifaceP);
1417 samsung->sabi_iface = ioremap(ifaceP, 16);
1418 if (!samsung->sabi_iface) {
1426 int retval = sabi_set_commandb(samsung,
1436 if (samsung->handle_backlight)
1437 check_for_stepping_quirk(samsung);
1440 samsung->config->test_string);
1444 samsung_sabi_exit(samsung);
1449 static void samsung_platform_exit(struct samsung_laptop *samsung)
1451 if (samsung->platform_device) {
1452 platform_device_unregister(samsung->platform_device);
1453 samsung->platform_device = NULL;
1460 struct samsung_laptop *samsung;
1462 samsung = container_of(nb, struct samsung_laptop, pm_nb);
1464 samsung->quirks->enable_kbd_backlight)
1465 kbd_backlight_enable(samsung);
1467 if (val == PM_POST_HIBERNATION && samsung->quirks->lid_handling)
1468 write_lid_handling(samsung, 1);
1473 static int __init samsung_platform_init(struct samsung_laptop *samsung)
1477 pdev = platform_device_register_simple("samsung", PLATFORM_DEVID_NONE, NULL, 0);
1481 samsung->platform_device = pdev;
1482 platform_set_drvdata(samsung->platform_device, samsung);
1559 struct samsung_laptop *samsung;
1569 samsung = kzalloc(sizeof(*samsung), GFP_KERNEL);
1570 if (!samsung)
1573 mutex_init(&samsung->sabi_mutex);
1574 samsung->handle_backlight = true;
1575 samsung->quirks = quirks;
1578 samsung->handle_backlight = false;
1580 ret = samsung_platform_init(samsung);
1584 ret = samsung_sabi_init(samsung);
1588 ret = samsung_sysfs_init(samsung);
1592 ret = samsung_backlight_init(samsung);
1596 ret = samsung_rfkill_init(samsung);
1600 ret = samsung_leds_init(samsung);
1604 ret = samsung_lid_handling_init(samsung);
1608 samsung_debugfs_init(samsung);
1610 samsung->pm_nb.notifier_call = samsung_pm_notification;
1611 register_pm_notifier(&samsung->pm_nb);
1613 samsung_platform_device = samsung->platform_device;
1617 samsung_leds_exit(samsung);
1619 samsung_rfkill_exit(samsung);
1621 samsung_backlight_exit(samsung);
1623 samsung_sysfs_exit(samsung);
1625 samsung_sabi_exit(samsung);
1627 samsung_platform_exit(samsung);
1629 kfree(samsung);
1635 struct samsung_laptop *samsung;
1637 samsung = platform_get_drvdata(samsung_platform_device);
1638 unregister_pm_notifier(&samsung->pm_nb);
1640 samsung_debugfs_exit(samsung);
1641 samsung_lid_handling_exit(samsung);
1642 samsung_leds_exit(samsung);
1643 samsung_rfkill_exit(samsung);
1644 samsung_backlight_exit(samsung);
1645 samsung_sysfs_exit(samsung);
1646 samsung_sabi_exit(samsung);
1647 samsung_platform_exit(samsung);
1649 kfree(samsung);