| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- .. SPDX-License-Identifier: GPL-2.0-or-later
- ==========================
- Samsung Galaxy Book Driver
- ==========================
- Joshua Grisham <josh@joshuagrisham.com>
- This is a Linux x86 platform driver for Samsung Galaxy Book series notebook
- devices which utilizes Samsung's ``SCAI`` ACPI device in order to control
- extra features and receive various notifications.
- Supported devices
- =================
- Any device with one of the supported ACPI device IDs should be supported. This
- covers most of the "Samsung Galaxy Book" series notebooks that are currently
- available as of this writing, and could include other Samsung notebook devices
- as well.
- Status
- ======
- The following features are currently supported:
- - :ref:`Keyboard backlight <keyboard-backlight>` control
- - :ref:`Performance mode <performance-mode>` control implemented using the
- platform profile interface
- - :ref:`Battery charge control end threshold
- <battery-charge-control-end-threshold>` (stop charging battery at given
- percentage value) implemented as a battery hook
- - :ref:`Firmware Attributes <firmware-attributes>` to allow control of various
- device settings
- - :ref:`Handling of Fn hotkeys <keyboard-hotkey-actions>` for various actions
- - :ref:`Handling of ACPI notifications and hotkeys
- <acpi-notifications-and-hotkey-actions>`
- Because different models of these devices can vary in their features, there is
- logic built within the driver which attempts to test each implemented feature
- for a valid response before enabling its support (registering additional devices
- or extensions, adding sysfs attributes, etc). Therefore, it can be important to
- note that not all features may be supported for your particular device.
- The following features might be possible to implement but will require
- additional investigation and are therefore not supported at this time:
- - "Dolby Atmos" mode for the speakers
- - "Outdoor Mode" for increasing screen brightness on models with ``SAM0427``
- - "Silent Mode" on models with ``SAM0427``
- .. _keyboard-backlight:
- Keyboard backlight
- ==================
- A new LED class named ``samsung-galaxybook::kbd_backlight`` is created which
- will then expose the device using the standard sysfs-based LED interface at
- ``/sys/class/leds/samsung-galaxybook::kbd_backlight``. Brightness can be
- controlled by writing the desired value to the ``brightness`` sysfs attribute or
- with any other desired userspace utility.
- .. note::
- Most of these devices have an ambient light sensor which also turns
- off the keyboard backlight under well-lit conditions. This behavior does not
- seem possible to control at this time, but can be good to be aware of.
- .. _performance-mode:
- Performance mode
- ================
- This driver implements the
- Documentation/userspace-api/sysfs-platform_profile.rst interface for working
- with the "performance mode" function of the Samsung ACPI device.
- Mapping of each Samsung "performance mode" to its respective platform profile is
- performed dynamically by the driver, as not all models support all of the same
- performance modes. Your device might have one or more of the following mappings:
- - "Silent" maps to ``low-power``
- - "Quiet" maps to ``quiet``
- - "Optimized" maps to ``balanced``
- - "High performance" maps to ``performance``
- The result of the mapping can be printed in the kernel log when the module is
- loaded. Supported profiles can also be retrieved from
- ``/sys/firmware/acpi/platform_profile_choices``, while
- ``/sys/firmware/acpi/platform_profile`` can be used to read or write the
- currently selected profile.
- The ``balanced`` platform profile will be set during module load if no profile
- has been previously set.
- .. _battery-charge-control-end-threshold:
- Battery charge control end threshold
- ====================================
- This platform driver will add the ability to set the battery's charge control
- end threshold, but does not have the ability to set a start threshold.
- This feature is typically called "Battery Saver" by the various Samsung
- applications in Windows, but in Linux we have implemented the standardized
- "charge control threshold" sysfs interface on the battery device to allow for
- controlling this functionality from the userspace.
- The sysfs attribute
- ``/sys/class/power_supply/BAT1/charge_control_end_threshold`` can be used to
- read or set the desired charge end threshold.
- If you wish to maintain interoperability with the Samsung Settings application
- in Windows, then you should set the value to 100 to represent "off", or enable
- the feature using only one of the following values: 50, 60, 70, 80, or 90.
- Otherwise, the driver will accept any value between 1 and 100 as the percentage
- that you wish the battery to stop charging at.
- .. note::
- Some devices have been observed as automatically "turning off" the charge
- control end threshold if an input value of less than 30 is given.
- .. _firmware-attributes:
- Firmware Attributes
- ===================
- The following enumeration-typed firmware attributes are set up by this driver
- and should be accessible under
- ``/sys/class/firmware-attributes/samsung-galaxybook/attributes/`` if your device
- supports them:
- - ``power_on_lid_open`` (device should power on when the lid is opened)
- - ``usb_charging`` (USB ports can deliver power to connected devices even when
- the device is powered off or in a low sleep state)
- - ``block_recording`` (blocks access to camera and microphone)
- All of these attributes are simple boolean-like enumeration values which use 0
- to represent "off" and 1 to represent "on". Use the ``current_value`` attribute
- to get or change the setting on the device.
- Note that when ``block_recording`` is updated, the input device "Samsung Galaxy
- Book Lens Cover" will receive a ``SW_CAMERA_LENS_COVER`` switch event which
- reflects the current state.
- .. _keyboard-hotkey-actions:
- Keyboard hotkey actions (i8042 filter)
- ======================================
- The i8042 filter will swallow the keyboard events for the Fn+F9 hotkey (Multi-
- level keyboard backlight toggle) and Fn+F10 hotkey (Block recording toggle)
- and instead execute their actions within the driver itself.
- Fn+F9 will cycle through the brightness levels of the keyboard backlight. A
- notification will be sent using ``led_classdev_notify_brightness_hw_changed``
- so that the userspace can be aware of the change. This mimics the behavior of
- other existing devices where the brightness level is cycled internally by the
- embedded controller and then reported via a notification.
- Fn+F10 will toggle the value of the "block recording" setting, which blocks
- or allows usage of the built-in camera and microphone (and generates the same
- Lens Cover switch event mentioned above).
- .. _acpi-notifications-and-hotkey-actions:
- ACPI notifications and hotkey actions
- =====================================
- ACPI notifications will generate ACPI netlink events under the device class
- ``samsung-galaxybook`` and bus ID matching the Samsung ACPI device ID found on
- your device. The events can be received using userspace tools such as
- ``acpi_listen`` and ``acpid``.
- The Fn+F11 Performance mode hotkey will be handled by the driver; each keypress
- will cycle to the next available platform profile.
|