Lines Matching defs:galaxybook

33 #define DRIVER_NAME "samsung-galaxybook"
84 struct samsung_galaxybook *galaxybook;
89 int (*get_value)(struct samsung_galaxybook *galaxybook, bool *value);
90 int (*set_value)(struct samsung_galaxybook *galaxybook, const bool value);
220 static int galaxybook_acpi_method(struct samsung_galaxybook *galaxybook, acpi_string method,
236 status = acpi_evaluate_object_typed(galaxybook->acpi->handle, method, &input, &output,
240 dev_err(&galaxybook->acpi->dev, "failed to execute method %s; got %s\n",
248 dev_err(&galaxybook->acpi->dev,
255 dev_err(&galaxybook->acpi->dev,
262 dev_err(&galaxybook->acpi->dev,
277 static int galaxybook_enable_acpi_feature(struct samsung_galaxybook *galaxybook, const u16 sasb)
287 err = galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
303 static int kbd_backlight_acpi_get(struct samsung_galaxybook *galaxybook,
313 err = galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
323 static int kbd_backlight_acpi_set(struct samsung_galaxybook *galaxybook,
334 return galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
340 struct samsung_galaxybook *galaxybook =
345 err = kbd_backlight_acpi_get(galaxybook, &brightness);
355 struct samsung_galaxybook *galaxybook =
358 return kbd_backlight_acpi_set(galaxybook, brightness);
361 static int galaxybook_kbd_backlight_init(struct samsung_galaxybook *galaxybook)
367 err = devm_mutex_init(&galaxybook->platform->dev, &galaxybook->kbd_backlight_lock);
371 err = galaxybook_enable_acpi_feature(galaxybook, GB_SASB_KBD_BACKLIGHT);
373 dev_dbg(&galaxybook->platform->dev,
378 err = kbd_backlight_acpi_get(galaxybook, &brightness);
380 dev_dbg(&galaxybook->platform->dev,
389 galaxybook->kbd_backlight.brightness_get = kbd_backlight_show;
390 galaxybook->kbd_backlight.brightness_set_blocking = kbd_backlight_store;
391 galaxybook->kbd_backlight.flags = LED_BRIGHT_HW_CHANGED;
392 galaxybook->kbd_backlight.max_brightness = GB_KBD_BACKLIGHT_MAX_BRIGHTNESS;
394 return devm_led_classdev_register_ext(&galaxybook->platform->dev,
395 &galaxybook->kbd_backlight, &init_data);
402 static int charge_control_end_threshold_acpi_get(struct samsung_galaxybook *galaxybook, u8 *value)
413 err = galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
423 static int charge_control_end_threshold_acpi_set(struct samsung_galaxybook *galaxybook, u8 value)
434 return galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
444 struct samsung_galaxybook *galaxybook = ext_data;
450 err = charge_control_end_threshold_acpi_get(galaxybook, (u8 *)&val->intval);
470 struct samsung_galaxybook *galaxybook = ext_data;
488 return charge_control_end_threshold_acpi_set(galaxybook, value);
517 struct samsung_galaxybook *galaxybook =
521 &battery->dev, galaxybook);
530 static int galaxybook_battery_threshold_init(struct samsung_galaxybook *galaxybook)
535 err = charge_control_end_threshold_acpi_get(galaxybook, &value);
537 dev_dbg(&galaxybook->platform->dev,
542 galaxybook->battery_hook.add_battery = galaxybook_battery_add;
543 galaxybook->battery_hook.remove_battery = galaxybook_battery_remove;
544 galaxybook->battery_hook.name = "Samsung Galaxy Book Battery Extension";
546 return devm_battery_hook_register(&galaxybook->platform->dev, &galaxybook->battery_hook);
553 static int performance_mode_acpi_get(struct samsung_galaxybook *galaxybook, u8 *performance_mode)
564 err = galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_PERFORMANCE_MODE,
574 static int performance_mode_acpi_set(struct samsung_galaxybook *galaxybook,
586 return galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_PERFORMANCE_MODE,
590 static int get_performance_mode_profile(struct samsung_galaxybook *galaxybook,
614 dev_warn(&galaxybook->platform->dev,
625 struct samsung_galaxybook *galaxybook = dev_get_drvdata(dev);
629 err = performance_mode_acpi_get(galaxybook, &performance_mode);
633 return get_performance_mode_profile(galaxybook, performance_mode, profile);
639 struct samsung_galaxybook *galaxybook = dev_get_drvdata(dev);
641 return performance_mode_acpi_set(galaxybook,
642 galaxybook->profile_performance_modes[profile]);
647 struct samsung_galaxybook *galaxybook = drvdata;
648 u8 *perfmodes = galaxybook->profile_performance_modes;
660 err = galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_PERFORMANCE_MODE,
663 dev_dbg(&galaxybook->platform->dev,
682 err = get_performance_mode_profile(galaxybook, buf.iobs[i], &profile);
684 dev_dbg(&galaxybook->platform->dev,
704 dev_dbg(&galaxybook->platform->dev,
711 return performance_mode_acpi_set(galaxybook, perfmodes[PLATFORM_PROFILE_BALANCED]);
722 static int galaxybook_platform_profile_init(struct samsung_galaxybook *galaxybook)
728 err = performance_mode_acpi_get(galaxybook, &performance_mode);
730 dev_dbg(&galaxybook->platform->dev,
735 platform_profile_dev = devm_platform_profile_register(&galaxybook->platform->dev,
736 DRIVER_NAME, galaxybook,
748 static int power_on_lid_open_acpi_get(struct samsung_galaxybook *galaxybook, bool *value)
759 err = galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
769 static int power_on_lid_open_acpi_set(struct samsung_galaxybook *galaxybook, const bool value)
773 lockdep_assert_held(&galaxybook->fw_attr_lock);
782 return galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
788 static int usb_charging_acpi_get(struct samsung_galaxybook *galaxybook, bool *value)
797 err = galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
807 static int usb_charging_acpi_set(struct samsung_galaxybook *galaxybook, const bool value)
811 lockdep_assert_held(&galaxybook->fw_attr_lock);
817 return galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
823 static int block_recording_acpi_get(struct samsung_galaxybook *galaxybook, bool *value)
832 err = galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
842 static int block_recording_acpi_set(struct samsung_galaxybook *galaxybook, const bool value)
847 lockdep_assert_held(&galaxybook->fw_attr_lock);
854 err = galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
859 input_report_switch(galaxybook->camera_lens_cover_switch,
861 input_sync(galaxybook->camera_lens_cover_switch);
866 static int galaxybook_block_recording_init(struct samsung_galaxybook *galaxybook)
871 err = galaxybook_enable_acpi_feature(galaxybook, GB_SASB_BLOCK_RECORDING);
873 dev_dbg(&galaxybook->platform->dev,
878 guard(mutex)(&galaxybook->fw_attr_lock);
880 err = block_recording_acpi_get(galaxybook, &value);
882 dev_dbg(&galaxybook->platform->dev,
887 galaxybook->camera_lens_cover_switch =
888 devm_input_allocate_device(&galaxybook->platform->dev);
889 if (!galaxybook->camera_lens_cover_switch)
892 galaxybook->camera_lens_cover_switch->name = "Samsung Galaxy Book Camera Lens Cover";
893 galaxybook->camera_lens_cover_switch->phys = DRIVER_NAME "/input0";
894 galaxybook->camera_lens_cover_switch->id.bustype = BUS_HOST;
896 input_set_capability(galaxybook->camera_lens_cover_switch, EV_SW, SW_CAMERA_LENS_COVER);
898 err = input_register_device(galaxybook->camera_lens_cover_switch);
902 input_report_switch(galaxybook->camera_lens_cover_switch,
904 input_sync(galaxybook->camera_lens_cover_switch);
956 err = fw_attr->get_value(fw_attr->galaxybook, &value);
968 struct samsung_galaxybook *galaxybook = fw_attr->galaxybook;
979 guard(mutex)(&galaxybook->fw_attr_lock);
981 err = fw_attr->set_value(galaxybook, value);
990 static int galaxybook_fw_attr_init(struct samsung_galaxybook *galaxybook,
992 int (*get_value)(struct samsung_galaxybook *galaxybook,
994 int (*set_value)(struct samsung_galaxybook *galaxybook,
1000 fw_attr = devm_kzalloc(&galaxybook->platform->dev, sizeof(*fw_attr), GFP_KERNEL);
1004 attrs = devm_kcalloc(&galaxybook->platform->dev, NUM_FW_ATTR_ENUM_ATTRS + 1,
1029 fw_attr->galaxybook = galaxybook;
1036 return sysfs_create_group(&galaxybook->fw_attrs_kset->kobj, &fw_attr->attr_group);
1053 static int galaxybook_fw_attrs_init(struct samsung_galaxybook *galaxybook)
1058 err = devm_mutex_init(&galaxybook->platform->dev, &galaxybook->fw_attr_lock);
1062 galaxybook->fw_attrs_dev = device_create(&firmware_attributes_class, NULL, MKDEV(0, 0),
1064 if (IS_ERR(galaxybook->fw_attrs_dev))
1065 return PTR_ERR(galaxybook->fw_attrs_dev);
1067 err = devm_add_action_or_reset(&galaxybook->platform->dev,
1069 galaxybook->fw_attrs_dev);
1073 galaxybook->fw_attrs_kset = kset_create_and_add("attributes", NULL,
1074 &galaxybook->fw_attrs_dev->kobj);
1075 if (!galaxybook->fw_attrs_kset)
1077 err = devm_add_action_or_reset(&galaxybook->platform->dev,
1078 galaxybook_kset_unregister, galaxybook->fw_attrs_kset);
1082 err = power_on_lid_open_acpi_get(galaxybook, &value);
1084 err = galaxybook_fw_attr_init(galaxybook,
1092 err = usb_charging_acpi_get(galaxybook, &value);
1094 err = galaxybook_fw_attr_init(galaxybook,
1102 err = galaxybook_block_recording_init(galaxybook);
1108 galaxybook->has_block_recording = true;
1110 return galaxybook_fw_attr_init(galaxybook,
1122 struct samsung_galaxybook *galaxybook =
1123 from_work(galaxybook, work, kbd_backlight_hotkey_work);
1127 guard(mutex)(&galaxybook->kbd_backlight_lock);
1129 brightness = galaxybook->kbd_backlight.brightness;
1130 if (brightness < galaxybook->kbd_backlight.max_brightness)
1135 err = led_set_brightness_sync(&galaxybook->kbd_backlight, brightness);
1137 dev_err(&galaxybook->platform->dev,
1142 led_classdev_notify_brightness_hw_changed(&galaxybook->kbd_backlight, brightness);
1147 struct samsung_galaxybook *galaxybook =
1148 from_work(galaxybook, work, block_recording_hotkey_work);
1152 guard(mutex)(&galaxybook->fw_attr_lock);
1154 err = block_recording_acpi_get(galaxybook, &value);
1156 dev_err(&galaxybook->platform->dev,
1161 err = block_recording_acpi_set(galaxybook, !value);
1163 dev_err(&galaxybook->platform->dev,
1170 struct samsung_galaxybook *galaxybook = context;
1185 if (galaxybook->has_kbd_backlight)
1186 schedule_work(&galaxybook->kbd_backlight_hotkey_work);
1192 if (galaxybook->has_block_recording)
1193 schedule_work(&galaxybook->block_recording_hotkey_work);
1216 struct samsung_galaxybook *galaxybook = data;
1219 cancel_work_sync(&galaxybook->kbd_backlight_hotkey_work);
1220 cancel_work_sync(&galaxybook->block_recording_hotkey_work);
1223 static int galaxybook_i8042_filter_install(struct samsung_galaxybook *galaxybook)
1227 if (!galaxybook->has_kbd_backlight && !galaxybook->has_block_recording)
1230 INIT_WORK(&galaxybook->kbd_backlight_hotkey_work,
1232 INIT_WORK(&galaxybook->block_recording_hotkey_work,
1235 err = i8042_install_filter(galaxybook_i8042_filter, galaxybook);
1239 return devm_add_action_or_reset(&galaxybook->platform->dev,
1240 galaxybook_i8042_filter_remove, galaxybook);
1249 struct samsung_galaxybook *galaxybook = data;
1257 if (galaxybook->has_performance_mode)
1261 dev_warn(&galaxybook->platform->dev,
1265 acpi_bus_generate_netlink_event(DRIVER_NAME, dev_name(&galaxybook->platform->dev),
1269 static int galaxybook_enable_acpi_notify(struct samsung_galaxybook *galaxybook)
1274 err = galaxybook_enable_acpi_feature(galaxybook, GB_SASB_NOTIFICATIONS);
1283 return galaxybook_acpi_method(galaxybook, GB_ACPI_METHOD_SETTINGS,
1289 struct samsung_galaxybook *galaxybook = data;
1291 acpi_remove_notify_handler(galaxybook->acpi->handle, ACPI_ALL_NOTIFY,
1297 struct samsung_galaxybook *galaxybook = data;
1299 acpi_execute_simple_method(galaxybook->acpi->handle,
1303 static int galaxybook_acpi_init(struct samsung_galaxybook *galaxybook)
1308 status = acpi_execute_simple_method(galaxybook->acpi->handle, GB_ACPI_METHOD_ENABLE,
1312 err = devm_add_action_or_reset(&galaxybook->platform->dev,
1313 galaxybook_acpi_disable, galaxybook);
1317 status = acpi_install_notify_handler(galaxybook->acpi->handle, ACPI_ALL_NOTIFY,
1318 galaxybook_acpi_notify, galaxybook);
1321 err = devm_add_action_or_reset(&galaxybook->platform->dev,
1322 galaxybook_acpi_remove_notify_handler, galaxybook);
1326 err = galaxybook_enable_acpi_notify(galaxybook);
1328 dev_dbg(&galaxybook->platform->dev, "failed to enable ACPI notifications; "
1331 err = galaxybook_enable_acpi_feature(galaxybook, GB_SASB_POWER_MANAGEMENT);
1333 dev_dbg(&galaxybook->platform->dev,
1347 struct samsung_galaxybook *galaxybook;
1353 galaxybook = devm_kzalloc(&pdev->dev, sizeof(*galaxybook), GFP_KERNEL);
1354 if (!galaxybook)
1357 galaxybook->platform = pdev;
1358 galaxybook->acpi = adev;
1368 err = galaxybook_acpi_init(galaxybook);
1370 return dev_err_probe(&galaxybook->platform->dev, err,
1373 err = galaxybook_platform_profile_init(galaxybook);
1375 galaxybook->has_performance_mode = true;
1377 return dev_err_probe(&galaxybook->platform->dev, err,
1380 err = galaxybook_battery_threshold_init(galaxybook);
1382 return dev_err_probe(&galaxybook->platform->dev, err,
1385 err = galaxybook_kbd_backlight_init(galaxybook);
1387 galaxybook->has_kbd_backlight = true;
1389 return dev_err_probe(&galaxybook->platform->dev, err,
1392 err = galaxybook_fw_attrs_init(galaxybook);
1394 return dev_err_probe(&galaxybook->platform->dev, err,
1397 err = galaxybook_i8042_filter_install(galaxybook);
1399 return dev_err_probe(&galaxybook->platform->dev, err,