mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'platform-drivers-x86-v6.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86
Pull x86 platform drivers from Ilpo Järvinen:
- alienware: Add more precise labels to fans
- amd/hsmp: Improve misleading probe errors (make the legacy driver
aware when HSMP is supported through the ACPI driver)
- amd/pmc: Add Lenovo Yoga 6 13ALCL6 to pmc quirk list
- drm/xe: Correct (D)VSEC information to support PMT crashlog feature
- fujitsu: Clamp charge threshold instead of returning an error
- ideapad: Expore change types
- intel/pmt:
- Add PMT Discovery driver
- Add API to retrieve telemetry regions by feature
- Fix crashlog NULL access
- Support Battlemage GPU (BMG) crashlog
- intel/vsec:
- Add Discovery feature
- Add feature dependency support using device links
- lenovo:
- Move lenovo drivers under drivers/platform/x86/lenovo/
- Add WMI drivers for Lenovo Gaming series
- Improve DMI handling
- oxpec:
- Add support for OneXPlayer X1 Mini Pro (Strix Point variant)
- Fix EC registers for G1 AMD
- samsung-laptop: Expose change types
- wmi: Fix WMI device naming issue (same GUID corner cases)
- x86-android-tables: Add ovc-capacity-table to generic battery nodes
- Miscellaneous cleanups / refactoring / improvements
* tag 'platform-drivers-x86-v6.17-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86: (63 commits)
platform/x86: oxpec: Add support for OneXPlayer X1 Mini Pro (Strix Point)
platform/x86: oxpec: Fix turbo register for G1 AMD
platform/x86/intel/pmt: support BMG crashlog
platform/x86/intel/pmt: use a version struct
platform/x86/intel/pmt: refactor base parameter
platform/x86/intel/pmt: add register access helpers
platform/x86/intel/pmt: decouple sysfs and namespace
platform/x86/intel/pmt: correct types
platform/x86/intel/pmt: re-order trigger logic
platform/x86/intel/pmt: use guard(mutex)
platform/x86/intel/pmt: mutex clean up
platform/x86/intel/pmt: white space cleanup
drm/xe: Correct BMG VSEC header sizing
drm/xe: Correct the rev value for the DVSEC entries
platform/x86/intel/pmt: fix a crashlog NULL pointer access
platform/x86: samsung-laptop: Expose charge_types
platform/x86/amd: pmc: Add Lenovo Yoga 6 13ALC6 to pmc quirk list
platform/x86: dell-uart-backlight: Use blacklight power constant
platform/x86/intel/pmt: fix build dependency for kunit test
platform/x86: lenovo: gamezone needs "other mode"
...
This commit is contained in:
commit
9669b2499e
74 files changed
+5192
-1065
No files matched your search
@@ -0,0 +1,10 @@
|
||||
What: /sys/devices/platform/samsung/battery_life_extender
|
||||
Date: December 1, 2011
|
||||
KernelVersion: 3.3
|
||||
Contact: Corentin Chary <corentin.chary@gmail.com>
|
||||
Description: Max battery charge level can be modified, battery cycle
|
||||
life can be extended by reducing the max battery charge
|
||||
level.
|
||||
|
||||
- 0 means normal battery mode (100% charge)
|
||||
- 1 means battery life extender mode (80% charge)
|
||||
@@ -0,0 +1,8 @@
|
||||
What: /sys/bus/platform/devices/VPC2004:*/conservation_mode
|
||||
Date: Aug 2017
|
||||
KernelVersion: 4.14
|
||||
Contact: platform-driver-x86@vger.kernel.org
|
||||
Description:
|
||||
Controls whether the conservation mode is enabled or not.
|
||||
This feature limits the maximum battery charge percentage to
|
||||
around 50-60% in order to prolong the lifetime of the battery.
|
||||
@@ -0,0 +1,134 @@
|
||||
What: /sys/class/intel_pmt/features-<PCI BDF>/
|
||||
Date: 2025-04-24
|
||||
KernelVersion: 6.16
|
||||
Contact: david.e.box@linux.intel.com
|
||||
Description:
|
||||
The `features-<PCI BDF>/` directory represents the "features"
|
||||
capability exposed by Intel PMT (Platform Monitoring Technology)
|
||||
for the given PCI device.
|
||||
|
||||
Each directory corresponds to a PMT feature and contains
|
||||
attributes describing the available telemetry, monitoring, or
|
||||
control functionalities.
|
||||
|
||||
Directory Structure:
|
||||
|
||||
/sys/class/intel_pmt/features-<PCI BDF>/
|
||||
├── accelerator_telemetry/ # Per-accelerator telemetry data
|
||||
├── crash_log/ # Contains system crash telemetry logs
|
||||
├── per_core_environment_telemetry/ # Environmental telemetry per core
|
||||
├── per_core_performance_telemetry/ # Performance telemetry per core
|
||||
├── per_rmid_energy_telemetry/ # Energy telemetry for RMIDs
|
||||
├── per_rmid_perf_telemetry/ # Performance telemetry for RMIDs
|
||||
├── tpmi_control/ # TPMI-related controls and telemetry
|
||||
├── tracing/ # PMT tracing features
|
||||
└── uncore_telemetry/ # Uncore telemetry data
|
||||
|
||||
Common Files (Present in all feature directories):
|
||||
|
||||
caps
|
||||
- Read-only
|
||||
- Lists available capabilities for this feature.
|
||||
|
||||
guids
|
||||
- Read-only
|
||||
- Lists GUIDs associated with this feature.
|
||||
|
||||
Additional Attributes (Conditional Presence):
|
||||
|
||||
max_command_size
|
||||
- Read-only
|
||||
- Present if the feature supports out-of-band MCTP access.
|
||||
- Maximum supported MCTP command size for out-of-band PMT access (bytes).
|
||||
|
||||
max_stream_size
|
||||
- Read-only
|
||||
- Present if the feature supports out-of-band MCTP access.
|
||||
- Maximum supported MCTP stream size (bytes).
|
||||
|
||||
min_watcher_period_ms
|
||||
- Read-only
|
||||
- Present if the feature supports the watcher API.
|
||||
The watcher API provides a writable control interface that allows user
|
||||
configuration of monitoring behavior, such as setting the sampling or
|
||||
reporting interval.
|
||||
- Minimum supported time period for the watcher interface (milliseconds).
|
||||
|
||||
num_rmids
|
||||
- Read-only
|
||||
- Present if the feature supports RMID (Resource Monitoring ID) telemetry.
|
||||
RMIDs are identifiers used by hardware to track and report resource usage,
|
||||
such as memory bandwidth or energy consumption, on a per-logical-entity
|
||||
basis (e.g., per core, thread, or process group).
|
||||
- Maximum number of RMIDs tracked simultaneously.
|
||||
|
||||
Example:
|
||||
For a device with PCI BDF `0000:00:03.1`, the directory tree could look like:
|
||||
|
||||
/sys/class/intel_pmt/features-0000:00:03.1/
|
||||
├── accelerator_telemetry/
|
||||
│ ├── caps
|
||||
│ ├── guids
|
||||
│ ├── max_command_size
|
||||
│ ├── max_stream_size
|
||||
│ ├── min_watcher_period_ms
|
||||
├── crash_log/
|
||||
│ ├── caps
|
||||
│ ├── guids
|
||||
│ ├── max_command_size
|
||||
│ ├── max_stream_size
|
||||
├── per_core_environment_telemetry/
|
||||
│ ├── caps
|
||||
│ ├── guids
|
||||
│ ├── max_command_size
|
||||
│ ├── max_stream_size
|
||||
│ ├── min_watcher_period_ms
|
||||
├── per_rmid_energy_telemetry/
|
||||
│ ├── caps
|
||||
│ ├── guids
|
||||
│ ├── max_command_size
|
||||
│ ├── max_stream_size
|
||||
│ ├── min_watcher_period_ms
|
||||
│ ├── num_rmids
|
||||
├── tpmi_control/
|
||||
│ ├── caps
|
||||
│ ├── guids
|
||||
├── tracing/
|
||||
│ ├── caps
|
||||
│ ├── guids
|
||||
├── uncore_telemetry/
|
||||
│ ├── caps
|
||||
│ ├── guids
|
||||
│ ├── max_command_size
|
||||
│ ├── max_stream_size
|
||||
│ ├── min_watcher_period_ms
|
||||
|
||||
Notes:
|
||||
- Some attributes are only present if the corresponding feature supports
|
||||
the capability (e.g., `max_command_size` for MCTP-capable features).
|
||||
- Features supporting RMIDs include `num_rmids`.
|
||||
- Features supporting the watcher API include `min_watcher_period_ms`.
|
||||
- The `caps` file provides additional information about the functionality
|
||||
of the feature.
|
||||
|
||||
Example 'caps' content for the 'tracing' feature:
|
||||
|
||||
/sys/class/intel_pmt/features-0000:00:03.1/
|
||||
├── tracing/
|
||||
│ ├── caps
|
||||
|
||||
telemetry Available: No
|
||||
watcher Available: Yes
|
||||
crashlog Available: No
|
||||
streaming Available: No
|
||||
threashold Available: No
|
||||
window Available: No
|
||||
config Available: Yes
|
||||
tracing Available: No
|
||||
inband Available: Yes
|
||||
oob Available: Yes
|
||||
secure_chan Available: No
|
||||
pmt_sp Available: Yes
|
||||
pmt_sp_policy Available: Yes
|
||||
mailbox Available: Yes
|
||||
bios_lock Available: Yes
|
||||
@@ -20,17 +20,6 @@ Description: Some Samsung laptops have different "performance levels"
|
||||
and it's still unknown if this value even changes
|
||||
anything, other than making the user feel a bit better.
|
||||
|
||||
What: /sys/devices/platform/samsung/battery_life_extender
|
||||
Date: December 1, 2011
|
||||
KernelVersion: 3.3
|
||||
Contact: Corentin Chary <corentin.chary@gmail.com>
|
||||
Description: Max battery charge level can be modified, battery cycle
|
||||
life can be extended by reducing the max battery charge
|
||||
level.
|
||||
|
||||
- 0 means normal battery mode (100% charge)
|
||||
- 1 means battery life extender mode (80% charge)
|
||||
|
||||
What: /sys/devices/platform/samsung/usb_charge
|
||||
Date: December 1, 2011
|
||||
KernelVersion: 3.3
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
What: /sys/bus/wmi/devices/6932965F-1671-4CEB-B988-D3AB0A901919/dell_privacy_supported_type
|
||||
What: /sys/bus/wmi/devices/6932965F-1671-4CEB-B988-D3AB0A901919[-X]/dell_privacy_supported_type
|
||||
Date: Apr 2021
|
||||
KernelVersion: 5.13
|
||||
Contact: "<perry.yuan@dell.com>"
|
||||
@@ -29,12 +29,12 @@ Description:
|
||||
|
||||
For example to check which privacy devices are supported::
|
||||
|
||||
# cat /sys/bus/wmi/drivers/dell-privacy/6932965F-1671-4CEB-B988-D3AB0A901919/dell_privacy_supported_type
|
||||
# cat /sys/bus/wmi/drivers/dell-privacy/6932965F-1671-4CEB-B988-D3AB0A901919*/dell_privacy_supported_type
|
||||
[Microphone Mute] [supported]
|
||||
[Camera Shutter] [supported]
|
||||
[ePrivacy Screen] [unsupported]
|
||||
|
||||
What: /sys/bus/wmi/devices/6932965F-1671-4CEB-B988-D3AB0A901919/dell_privacy_current_state
|
||||
What: /sys/bus/wmi/devices/6932965F-1671-4CEB-B988-D3AB0A901919[-X]/dell_privacy_current_state
|
||||
Date: Apr 2021
|
||||
KernelVersion: 5.13
|
||||
Contact: "<perry.yuan@dell.com>"
|
||||
@@ -66,6 +66,6 @@ Description:
|
||||
|
||||
For example to check all supported current privacy device states::
|
||||
|
||||
# cat /sys/bus/wmi/drivers/dell-privacy/6932965F-1671-4CEB-B988-D3AB0A901919/dell_privacy_current_state
|
||||
# cat /sys/bus/wmi/drivers/dell-privacy/6932965F-1671-4CEB-B988-D3AB0A901919*/dell_privacy_current_state
|
||||
[Microphone] [unmuted]
|
||||
[Camera Shutter] [unmuted]
|
||||
@@ -27,15 +27,6 @@ Description:
|
||||
* 1 -> Switched On
|
||||
* 0 -> Switched Off
|
||||
|
||||
What: /sys/bus/platform/devices/VPC2004:*/conservation_mode
|
||||
Date: Aug 2017
|
||||
KernelVersion: 4.14
|
||||
Contact: platform-driver-x86@vger.kernel.org
|
||||
Description:
|
||||
Controls whether the conservation mode is enabled or not.
|
||||
This feature limits the maximum battery charge percentage to
|
||||
around 50-60% in order to prolong the lifetime of the battery.
|
||||
|
||||
What: /sys/bus/platform/devices/VPC2004:*/fn_lock
|
||||
Date: May 2018
|
||||
KernelVersion: 4.18
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
What: /sys/bus/wmi/devices/44FADEB1-B204-40F2-8581-394BBDC1B651/firmware_update_request
|
||||
What: /sys/bus/wmi/devices/44FADEB1-B204-40F2-8581-394BBDC1B651[-X]/firmware_update_request
|
||||
Date: April 2020
|
||||
KernelVersion: 5.7
|
||||
Contact: "Jithu Joseph" <jithu.joseph@intel.com>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
What: /sys/devices/platform/<platform>/force_power
|
||||
What: /sys/bus/wmi/devices/86CCFD48-205E-4A77-9C48-2021CBEDE341[-X]/force_power
|
||||
Date: September 2017
|
||||
KernelVersion: 4.15
|
||||
Contact: "Mario Limonciello" <mario.limonciello@outlook.com>
|
||||
|
||||
@@ -358,12 +358,7 @@ Forcing power
|
||||
Many OEMs include a method that can be used to force the power of a
|
||||
Thunderbolt controller to an "On" state even if nothing is connected.
|
||||
If supported by your machine this will be exposed by the WMI bus with
|
||||
a sysfs attribute called "force_power".
|
||||
|
||||
For example the intel-wmi-thunderbolt driver exposes this attribute in:
|
||||
/sys/bus/wmi/devices/86CCFD48-205E-4A77-9C48-2021CBEDE341/force_power
|
||||
|
||||
To force the power to on, write 1 to this attribute file.
|
||||
To disable force power, write 0 to this attribute file.
|
||||
a sysfs attribute called "force_power", see
|
||||
Documentation/ABI/testing/sysfs-platform-intel-wmi-thunderbolt for details.
|
||||
|
||||
Note: it's currently not possible to query the force power state of a platform.
|
||||
@@ -0,0 +1,203 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
==========================================================
|
||||
Lenovo WMI Interface Gamezone Driver (lenovo-wmi-gamezone)
|
||||
==========================================================
|
||||
|
||||
Introduction
|
||||
============
|
||||
The Lenovo WMI gamezone interface is broken up into multiple GUIDs,
|
||||
The primary "Gamezone" GUID provides advanced features such as fan
|
||||
profiles and overclocking. It is paired with multiple event GUIDs
|
||||
and data block GUIDs that provide context for the various methods.
|
||||
|
||||
Gamezone Data
|
||||
-------------
|
||||
|
||||
WMI GUID ``887B54E3-DDDC-4B2C-8B88-68A26A8835D0``
|
||||
|
||||
The Gamezone Data WMI interface provides platform-profile and fan curve
|
||||
settings for devices that fall under the "Gaming Series" of Lenovo devices.
|
||||
It uses a notifier chain to inform other Lenovo WMI interface drivers of the
|
||||
current platform profile when it changes.
|
||||
|
||||
The following platform profiles are supported:
|
||||
- low-power
|
||||
- balanced
|
||||
- balanced-performance
|
||||
- performance
|
||||
- custom
|
||||
|
||||
Balanced-Performance
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
Some newer Lenovo "Gaming Series" laptops have an "Extreme Mode" profile
|
||||
enabled in their BIOS. For these devices, the performance platform profile
|
||||
corresponds to the BIOS Extreme Mode, while the balanced-performance
|
||||
platform profile corresponds to the BIOS Performance mode. For legacy
|
||||
devices, the performance platform profile will correspond with the BIOS
|
||||
Performance mode.
|
||||
|
||||
For some newer devices the "Extreme Mode" profile is incomplete in the BIOS
|
||||
and setting it will cause undefined behavior. A BIOS bug quirk table is
|
||||
provided to ensure these devices cannot set "Extreme Mode" from the driver.
|
||||
|
||||
Custom Profile
|
||||
~~~~~~~~~~~~~~
|
||||
The custom profile represents a hardware mode on Lenovo devices that enables
|
||||
user modifications to Package Power Tracking (PPT) and fan curve settings.
|
||||
When an attribute exposed by the Other Mode WMI interface is to be modified,
|
||||
the Gamezone driver must first be switched to the "custom" profile manually,
|
||||
or the setting will have no effect. If another profile is set from the list
|
||||
of supported profiles, the BIOS will override any user PPT settings when
|
||||
switching to that profile.
|
||||
|
||||
Gamezone Thermal Mode Event
|
||||
---------------------------
|
||||
|
||||
WMI GUID ``D320289E-8FEA-41E0-86F9-911D83151B5F``
|
||||
|
||||
The Gamezone Thermal Mode Event interface notifies the system when the platform
|
||||
profile has changed, either through the hardware event (Fn+Q for laptops or
|
||||
Legion + Y for Go Series), or through the Gamezone WMI interface. This event is
|
||||
implemented in the Lenovo WMI Events driver (lenovo-wmi-events).
|
||||
|
||||
|
||||
WMI interface description
|
||||
=========================
|
||||
|
||||
The WMI interface description can be decoded from the embedded binary MOF (bmof)
|
||||
data using the `bmfdec <https://github.com/pali/bmfdec>`_ utility:
|
||||
|
||||
::
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO_GAMEZONE_DATA class"), guid("{887B54E3-DDDC-4B2C-8B88-68A26A8835D0}")]
|
||||
class LENOVO_GAMEZONE_DATA {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiMethodId(4), Implemented, Description("Is SupportGpu OverClock")] void IsSupportGpuOC([out, Description("Is SupportGpu OverClock")] uint32 Data);
|
||||
[WmiMethodId(11), Implemented, Description("Get AslCode Version")] void GetVersion ([out, Description("AslCode version")] UINT32 Data);
|
||||
[WmiMethodId(12), Implemented, Description("Fan cooling capability")] void IsSupportFanCooling([out, Description("Fan cooling capability")] UINT32 Data);
|
||||
[WmiMethodId(13), Implemented, Description("Set Fan cooling on/off")] void SetFanCooling ([in, Description("Set Fan cooling on/off")] UINT32 Data);
|
||||
[WmiMethodId(14), Implemented, Description("cpu oc capability")] void IsSupportCpuOC ([out, Description("cpu oc capability")] UINT32 Data);
|
||||
[WmiMethodId(15), Implemented, Description("bios has overclock capability")] void IsBIOSSupportOC ([out, Description("bios has overclock capability")] UINT32 Data);
|
||||
[WmiMethodId(16), Implemented, Description("enable or disable overclock in bios")] void SetBIOSOC ([in, Description("enable or disable overclock in bios")] UINT32 Data);
|
||||
[WmiMethodId(18), Implemented, Description("Get CPU temperature")] void GetCPUTemp ([out, Description("Get CPU temperature")] UINT32 Data);
|
||||
[WmiMethodId(19), Implemented, Description("Get GPU temperature")] void GetGPUTemp ([out, Description("Get GPU temperature")] UINT32 Data);
|
||||
[WmiMethodId(20), Implemented, Description("Get Fan cooling on/off status")] void GetFanCoolingStatus ([out, Description("Get Fan cooling on/off status")] UINT32 Data);
|
||||
[WmiMethodId(21), Implemented, Description("EC support disable windows key capability")] void IsSupportDisableWinKey ([out, Description("EC support disable windows key capability")] UINT32 Data);
|
||||
[WmiMethodId(22), Implemented, Description("Set windows key disable/enable")] void SetWinKeyStatus ([in, Description("Set windows key disable/enable")] UINT32 Data);
|
||||
[WmiMethodId(23), Implemented, Description("Get windows key disable/enable status")] void GetWinKeyStatus ([out, Description("Get windows key disable/enable status")] UINT32 Data);
|
||||
[WmiMethodId(24), Implemented, Description("EC support disable touchpad capability")] void IsSupportDisableTP ([out, Description("EC support disable touchpad capability")] UINT32 Data);
|
||||
[WmiMethodId(25), Implemented, Description("Set touchpad disable/enable")] void SetTPStatus ([in, Description("Set touchpad disable/enable")] UINT32 Data);
|
||||
[WmiMethodId(26), Implemented, Description("Get touchpad disable/enable status")] void GetTPStatus ([out, Description("Get touchpad disable/enable status")] UINT32 Data);
|
||||
[WmiMethodId(30), Implemented, Description("Get Keyboard feature list")] void GetKeyboardfeaturelist ([out, Description("Get Keyboard feature list")] UINT32 Data);
|
||||
[WmiMethodId(31), Implemented, Description("Get Memory OC Information")] void GetMemoryOCInfo ([out, Description("Get Memory OC Information")] UINT32 Data);
|
||||
[WmiMethodId(32), Implemented, Description("Water Cooling feature capability")] void IsSupportWaterCooling ([out, Description("Water Cooling feature capability")] UINT32 Data);
|
||||
[WmiMethodId(33), Implemented, Description("Set Water Cooling status")] void SetWaterCoolingStatus ([in, Description("Set Water Cooling status")] UINT32 Data);
|
||||
[WmiMethodId(34), Implemented, Description("Get Water Cooling status")] void GetWaterCoolingStatus ([out, Description("Get Water Cooling status")] UINT32 Data);
|
||||
[WmiMethodId(35), Implemented, Description("Lighting feature capability")] void IsSupportLightingFeature ([out, Description("Lighting feature capability")] UINT32 Data);
|
||||
[WmiMethodId(36), Implemented, Description("Set keyboard light off or on to max")] void SetKeyboardLight ([in, Description("keyboard light off or on switch")] UINT32 Data);
|
||||
[WmiMethodId(37), Implemented, Description("Get keyboard light on/off status")] void GetKeyboardLight ([out, Description("Get keyboard light on/off status")] UINT32 Data);
|
||||
[WmiMethodId(38), Implemented, Description("Get Macrokey scan code")] void GetMacrokeyScancode ([in, Description("Macrokey index")] UINT32 idx, [out, Description("Scan code")] UINT32 scancode);
|
||||
[WmiMethodId(39), Implemented, Description("Get Macrokey count")] void GetMacrokeyCount ([out, Description("Macrokey count")] UINT32 Data);
|
||||
[WmiMethodId(40), Implemented, Description("Support G-Sync feature")] void IsSupportGSync ([out, Description("Support G-Sync feature")] UINT32 Data);
|
||||
[WmiMethodId(41), Implemented, Description("Get G-Sync Status")] void GetGSyncStatus ([out, Description("Get G-Sync Status")] UINT32 Data);
|
||||
[WmiMethodId(42), Implemented, Description("Set G-Sync Status")] void SetGSyncStatus ([in, Description("Set G-Sync Status")] UINT32 Data);
|
||||
[WmiMethodId(43), Implemented, Description("Support Smart Fan feature")] void IsSupportSmartFan ([out, Description("Support Smart Fan feature")] UINT32 Data);
|
||||
[WmiMethodId(44), Implemented, Description("Set Smart Fan Mode")] void SetSmartFanMode ([in, Description("Set Smart Fan Mode")] UINT32 Data);
|
||||
[WmiMethodId(45), Implemented, Description("Get Smart Fan Mode")] void GetSmartFanMode ([out, Description("Get Smart Fan Mode")] UINT32 Data);
|
||||
[WmiMethodId(46), Implemented, Description("Get Smart Fan Setting Mode")] void GetSmartFanSetting ([out, Description("Get Smart Setting Mode")] UINT32 Data);
|
||||
[WmiMethodId(47), Implemented, Description("Get Power Charge Mode")] void GetPowerChargeMode ([out, Description("Get Power Charge Mode")] UINT32 Data);
|
||||
[WmiMethodId(48), Implemented, Description("Get Gaming Product Info")] void GetProductInfo ([out, Description("Get Gaming Product Info")] UINT32 Data);
|
||||
[WmiMethodId(49), Implemented, Description("Over Drive feature capability")] void IsSupportOD ([out, Description("Over Drive feature capability")] UINT32 Data);
|
||||
[WmiMethodId(50), Implemented, Description("Get Over Drive status")] void GetODStatus ([out, Description("Get Over Drive status")] UINT32 Data);
|
||||
[WmiMethodId(51), Implemented, Description("Set Over Drive status")] void SetODStatus ([in, Description("Set Over Drive status")] UINT32 Data);
|
||||
[WmiMethodId(52), Implemented, Description("Set Light Control Owner")] void SetLightControlOwner ([in, Description("Set Light Control Owner")] UINT32 Data);
|
||||
[WmiMethodId(53), Implemented, Description("Set DDS Control Owner")] void SetDDSControlOwner ([in, Description("Set DDS Control Owner")] UINT32 Data);
|
||||
[WmiMethodId(54), Implemented, Description("Get the flag of restore OC value")] void IsRestoreOCValue ([in, Description("Clean this flag")] UINT32 idx, [out, Description("Restore oc value flag")] UINT32 Data);
|
||||
[WmiMethodId(55), Implemented, Description("Get Real Thremal Mode")] void GetThermalMode ([out, Description("Real Thremal Mode")] UINT32 Data);
|
||||
[WmiMethodId(56), Implemented, Description("Get the OC switch status in BIOS")] void GetBIOSOCMode ([out, Description("OC Mode")] UINT32 Data);
|
||||
[WmiMethodId(59), Implemented, Description("Get hardware info support version")] void GetHardwareInfoSupportVersion ([out, Description("version")] UINT32 Data);
|
||||
[WmiMethodId(60), Implemented, Description("Get Cpu core 0 max frequency")] void GetCpuFrequency ([out, Description("frequency")] UINT32 Data);
|
||||
[WmiMethodId(62), Implemented, Description("Check the Adapter type fit for OC")] void IsACFitForOC ([out, Description("AC check result")] UINT32 Data);
|
||||
[WmiMethodId(63), Implemented, Description("Is support IGPU mode")] void IsSupportIGPUMode ([out, Description("IGPU modes")] UINT32 Data);
|
||||
[WmiMethodId(64), Implemented, Description("Get IGPU Mode Status")] void GetIGPUModeStatus([out, Description("IGPU Mode Status")] UINT32 Data);
|
||||
[WmiMethodId(65), Implemented, Description("Set IGPU Mode")] void SetIGPUModeStatus([in, Description("IGPU Mode")] UINT32 mode, [out, Description("return code")] UINT32 Data);
|
||||
[WmiMethodId(66), Implemented, Description("Notify DGPU Status")] void NotifyDGPUStatus([in, Description("DGPU status")] UINT32 status, [out, Description("return code")] UINT32 Data);
|
||||
[WmiMethodId(67), Implemented, Description("Is changed Y log")] void IsChangedYLog([out, Description("Is changed Y Log")] UINT32 Data);
|
||||
[WmiMethodId(68), Implemented, Description("Get DGPU Hardwawre ID")] void GetDGPUHWId([out, Description("Get DGPU Hardware ID")] string Data);
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("Definition of CPU OC parameter list"), guid("{B7F3CA0A-ACDC-42D2-9217-77C6C628FBD2}")]
|
||||
class LENOVO_GAMEZONE_CPU_OC_DATA {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description("OC tune id.")] uint32 Tuneid;
|
||||
[WmiDataId(2), read, Description("Default value.")] uint32 DefaultValue;
|
||||
[WmiDataId(3), read, Description("OC Value.")] uint32 OCValue;
|
||||
[WmiDataId(4), read, Description("Min Value.")] uint32 MinValue;
|
||||
[WmiDataId(5), read, Description("Max Value.")] uint32 MaxValue;
|
||||
[WmiDataId(6), read, Description("Scale Value.")] uint32 ScaleValue;
|
||||
[WmiDataId(7), read, Description("OC Order id.")] uint32 OCOrderid;
|
||||
[WmiDataId(8), read, Description("NON-OC Order id.")] uint32 NOCOrderid;
|
||||
[WmiDataId(9), read, Description("Delay time in ms.")] uint32 Interval;
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("Definition of GPU OC parameter list"), guid("{887B54E2-DDDC-4B2C-8B88-68A26A8835D0}")]
|
||||
class LENOVO_GAMEZONE_GPU_OC_DATA {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description("P-State ID.")] uint32 PStateID;
|
||||
[WmiDataId(2), read, Description("CLOCK ID.")] uint32 ClockID;
|
||||
[WmiDataId(3), read, Description("Default value.")] uint32 defaultvalue;
|
||||
[WmiDataId(4), read, Description("OC Offset freqency.")] uint32 OCOffsetFreq;
|
||||
[WmiDataId(5), read, Description("OC Min offset value.")] uint32 OCMinOffset;
|
||||
[WmiDataId(6), read, Description("OC Max offset value.")] uint32 OCMaxOffset;
|
||||
[WmiDataId(7), read, Description("OC Offset Scale.")] uint32 OCOffsetScale;
|
||||
[WmiDataId(8), read, Description("OC Order id.")] uint32 OCOrderid;
|
||||
[WmiDataId(9), read, Description("NON-OC Order id.")] uint32 NOCOrderid;
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("Fancooling finish event"), guid("{BC72A435-E8C1-4275-B3E2-D8B8074ABA59}")]
|
||||
class LENOVO_GAMEZONE_FAN_COOLING_EVENT: WMIEvent {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description("Fancooling clean finish event")] uint32 EventId;
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("Smart Fan mode change event"), guid("{D320289E-8FEA-41E0-86F9-611D83151B5F}")]
|
||||
class LENOVO_GAMEZONE_SMART_FAN_MODE_EVENT: WMIEvent {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description("Smart Fan Mode change event")] uint32 mode;
|
||||
[WmiDataId(2), read, Description("version of FN+Q")] uint32 version;
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("Smart Fan setting mode change event"), guid("{D320289E-8FEA-41E1-86F9-611D83151B5F}")]
|
||||
class LENOVO_GAMEZONE_SMART_FAN_SETTING_EVENT: WMIEvent {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description("Smart Fan Setting mode change event")] uint32 mode;
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("POWER CHARGE MODE Change EVENT"), guid("{D320289E-8FEA-41E0-86F9-711D83151B5F}")]
|
||||
class LENOVO_GAMEZONE_POWER_CHARGE_MODE_EVENT: WMIEvent {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description("POWER CHARGE MODE Change EVENT")] uint32 mode;
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("Thermal Mode Real Mode change event"), guid("{D320289E-8FEA-41E0-86F9-911D83151B5F}")]
|
||||
class LENOVO_GAMEZONE_THERMAL_MODE_EVENT: WMIEvent {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description("Thermal Mode Real Mode")] uint32 mode;
|
||||
};
|
||||
@@ -0,0 +1,108 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
===========================================================
|
||||
Lenovo WMI Interface Other Mode Driver (lenovo-wmi-other)
|
||||
===========================================================
|
||||
|
||||
Introduction
|
||||
============
|
||||
Lenovo WMI Other Mode interface is broken up into multiple GUIDs,
|
||||
The primary Other Mode interface provides advanced power tuning features
|
||||
such as Package Power Tracking (PPT). It is paired with multiple data block
|
||||
GUIDs that provide context for the various methods.
|
||||
|
||||
|
||||
Other Mode
|
||||
----------
|
||||
|
||||
WMI GUID ``DC2A8805-3A8C-41BA-A6F7-092E0089CD3B``
|
||||
|
||||
The Other Mode WMI interface uses the firmware_attributes class to expose
|
||||
various WMI attributes provided by the interface in the sysfs. This enables
|
||||
CPU and GPU power limit tuning as well as various other attributes for
|
||||
devices that fall under the "Gaming Series" of Lenovo devices. Each
|
||||
attribute exposed by the Other Mode interface has corresponding
|
||||
capability data blocks which allow the driver to probe details about the
|
||||
attribute. Each attribute has multiple pages, one for each of the platform
|
||||
profiles managed by the Gamezone interface. Attributes are exposed in sysfs
|
||||
under the following path:
|
||||
|
||||
::
|
||||
|
||||
/sys/class/firmware-attributes/lenovo-wmi-other/attributes/<attribute>/
|
||||
|
||||
LENOVO_CAPABILITY_DATA_01
|
||||
-------------------------
|
||||
|
||||
WMI GUID ``7A8F5407-CB67-4D6E-B547-39B3BE018154``
|
||||
|
||||
The LENOVO_CAPABILITY_DATA_01 interface provides information on various
|
||||
power limits of integrated CPU and GPU components.
|
||||
|
||||
Each attribute has the following properties:
|
||||
- current_value
|
||||
- default_value
|
||||
- display_name
|
||||
- max_value
|
||||
- min_value
|
||||
- scalar_increment
|
||||
- type
|
||||
|
||||
The following attributes are implemented:
|
||||
- ppt_pl1_spl: Platform Profile Tracking Sustained Power Limit
|
||||
- ppt_pl2_sppt: Platform Profile Tracking Slow Package Power Tracking
|
||||
- ppt_pl3_fppt: Platform Profile Tracking Fast Package Power Tracking
|
||||
|
||||
|
||||
WMI interface description
|
||||
=========================
|
||||
|
||||
The WMI interface description can be decoded from the embedded binary MOF (bmof)
|
||||
data using the `bmfdec <https://github.com/pali/bmfdec>`_ utility:
|
||||
|
||||
::
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO_OTHER_METHOD class"), guid("{dc2a8805-3a8c-41ba-a6f7-092e0089cd3b}")]
|
||||
class LENOVO_OTHER_METHOD {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiMethodId(17), Implemented, Description("Get Feature Value ")] void GetFeatureValue([in] uint32 IDs, [out] uint32 value);
|
||||
[WmiMethodId(18), Implemented, Description("Set Feature Value ")] void SetFeatureValue([in] uint32 IDs, [in] uint32 value);
|
||||
[WmiMethodId(19), Implemented, Description("Get Data By Command ")] void GetDataByCommand([in] uint32 IDs, [in] uint32 Command, [out] uint32 DataSize, [out, WmiSizeIs("DataSize")] uint32 Data[]);
|
||||
[WmiMethodId(99), Implemented, Description("Get Data By Package for TAC")] void GetDataByPackage([in, Max(40)] uint8 Input[], [out] uint32 DataSize, [out, WmiSizeIs("DataSize")] uint8 Data[]);
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO CAPABILITY DATA 00"), guid("{362a3afe-3d96-4665-8530-96dad5bb300e}")]
|
||||
class LENOVO_CAPABILITY_DATA_00 {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description(" IDs.")] uint32 IDs;
|
||||
[WmiDataId(2), read, Description("Capability.")] uint32 Capability;
|
||||
[WmiDataId(3), read, Description("Capability Default Value.")] uint32 DefaultValue;
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO CAPABILITY DATA 01"), guid("{7a8f5407-cb67-4d6e-b547-39b3be018154}")]
|
||||
class LENOVO_CAPABILITY_DATA_01 {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description(" IDs.")] uint32 IDs;
|
||||
[WmiDataId(2), read, Description("Capability.")] uint32 Capability;
|
||||
[WmiDataId(3), read, Description("Default Value.")] uint32 DefaultValue;
|
||||
[WmiDataId(4), read, Description("Step.")] uint32 Step;
|
||||
[WmiDataId(5), read, Description("Minimum Value.")] uint32 MinValue;
|
||||
[WmiDataId(6), read, Description("Maximum Value.")] uint32 MaxValue;
|
||||
};
|
||||
|
||||
[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO CAPABILITY DATA 02"), guid("{bbf1f790-6c2f-422b-bc8c-4e7369c7f6ab}")]
|
||||
class LENOVO_CAPABILITY_DATA_02 {
|
||||
[key, read] string InstanceName;
|
||||
[read] boolean Active;
|
||||
|
||||
[WmiDataId(1), read, Description(" IDs.")] uint32 IDs;
|
||||
[WmiDataId(2), read, Description("Capability.")] uint32 Capability;
|
||||
[WmiDataId(3), read, Description("Data Size.")] uint32 DataSize;
|
||||
[WmiDataId(4), read, Description("Default Value"), WmiSizeIs("DataSize")] uint8 DefaultValue[];
|
||||
};
|
||||
+16
-5
@@ -11634,7 +11634,7 @@ M: Ike Panhc <ikepanhc@gmail.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
W: http://launchpad.net/ideapad-laptop
|
||||
F: drivers/platform/x86/ideapad-laptop.c
|
||||
F: drivers/platform/x86/lenovo/ideapad-laptop.c
|
||||
|
||||
IDEAPAD LAPTOP SLIDEBAR DRIVER
|
||||
M: Andrey Moiseev <o2g.org.ru@gmail.com>
|
||||
@@ -12407,6 +12407,8 @@ F: include/linux/mfd/intel_soc_pmic*
|
||||
INTEL PMT DRIVERS
|
||||
M: David E. Box <david.e.box@linux.intel.com>
|
||||
S: Supported
|
||||
F: Documentation/ABI/testing/sysfs-class-intel_pmt
|
||||
F: Documentation/ABI/testing/sysfs-class-intel_pmt-features
|
||||
F: drivers/platform/x86/intel/pmt/
|
||||
|
||||
INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT
|
||||
@@ -13697,11 +13699,20 @@ S: Maintained
|
||||
W: http://legousb.sourceforge.net/
|
||||
F: drivers/usb/misc/legousbtower.c
|
||||
|
||||
LENOVO drivers
|
||||
M: Mark Pearson <mpearson-lenovo@squebb.ca>
|
||||
M: Derek J. Clark <derekjohn.clark@gmail.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/wmi/devices/lenovo-wmi-gamezone.rst
|
||||
F: Documentation/wmi/devices/lenovo-wmi-other.rst
|
||||
F: drivers/platform/x86/lenovo/*
|
||||
|
||||
LENOVO WMI HOTKEY UTILITIES DRIVER
|
||||
M: Jackie Dong <xy-jackie@139.com>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/lenovo-wmi-hotkey-utilities.c
|
||||
F: drivers/platform/x86/lenovo/wmi-hotkey-utilities.c
|
||||
|
||||
LETSKETCH HID TABLET DRIVER
|
||||
M: Hans de Goede <hansg@kernel.org>
|
||||
@@ -24729,14 +24740,14 @@ S: Maintained
|
||||
W: http://ibm-acpi.sourceforge.net
|
||||
W: http://thinkwiki.org/wiki/Ibm-acpi
|
||||
T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
|
||||
F: drivers/platform/x86/thinkpad_acpi.c
|
||||
F: drivers/platform/x86/lenovo/thinkpad_acpi.c
|
||||
|
||||
THINKPAD LMI DRIVER
|
||||
M: Mark Pearson <markpearson@lenovo.com>
|
||||
M: Mark Pearson <mpearson-lenovo@squebb.ca>
|
||||
L: platform-driver-x86@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/ABI/testing/sysfs-class-firmware-attributes
|
||||
F: drivers/platform/x86/think-lmi.?
|
||||
F: drivers/platform/x86/lenovo/think-lmi.?
|
||||
|
||||
THP7312 ISP DRIVER
|
||||
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
|
||||
@@ -59,18 +59,6 @@ struct telemetry_plt_config {
|
||||
};
|
||||
|
||||
struct telemetry_core_ops {
|
||||
int (*get_sampling_period)(u8 *pss_min_period, u8 *pss_max_period,
|
||||
u8 *ioss_min_period, u8 *ioss_max_period);
|
||||
|
||||
int (*get_eventconfig)(struct telemetry_evtconfig *pss_evtconfig,
|
||||
struct telemetry_evtconfig *ioss_evtconfig,
|
||||
int pss_len, int ioss_len);
|
||||
|
||||
int (*update_events)(struct telemetry_evtconfig pss_evtconfig,
|
||||
struct telemetry_evtconfig ioss_evtconfig);
|
||||
|
||||
int (*set_sampling_period)(u8 pss_period, u8 ioss_period);
|
||||
|
||||
int (*get_trace_verbosity)(enum telemetry_unit telem_unit,
|
||||
u32 *verbosity);
|
||||
|
||||
@@ -84,11 +72,6 @@ struct telemetry_core_ops {
|
||||
int (*read_eventlog)(enum telemetry_unit telem_unit,
|
||||
struct telemetry_evtlog *evtlog,
|
||||
int len, int log_all_evts);
|
||||
|
||||
int (*add_events)(u8 num_pss_evts, u8 num_ioss_evts,
|
||||
u32 *pss_evtmap, u32 *ioss_evtmap);
|
||||
|
||||
int (*reset_events)(void);
|
||||
};
|
||||
|
||||
int telemetry_set_pltdata(const struct telemetry_core_ops *ops,
|
||||
@@ -101,35 +84,15 @@ struct telemetry_plt_config *telemetry_get_pltdata(void);
|
||||
int telemetry_get_evtname(enum telemetry_unit telem_unit,
|
||||
const char **name, int len);
|
||||
|
||||
int telemetry_update_events(struct telemetry_evtconfig pss_evtconfig,
|
||||
struct telemetry_evtconfig ioss_evtconfig);
|
||||
|
||||
int telemetry_add_events(u8 num_pss_evts, u8 num_ioss_evts,
|
||||
u32 *pss_evtmap, u32 *ioss_evtmap);
|
||||
|
||||
int telemetry_reset_events(void);
|
||||
|
||||
int telemetry_get_eventconfig(struct telemetry_evtconfig *pss_config,
|
||||
struct telemetry_evtconfig *ioss_config,
|
||||
int pss_len, int ioss_len);
|
||||
|
||||
int telemetry_read_events(enum telemetry_unit telem_unit,
|
||||
struct telemetry_evtlog *evtlog, int len);
|
||||
|
||||
int telemetry_raw_read_events(enum telemetry_unit telem_unit,
|
||||
struct telemetry_evtlog *evtlog, int len);
|
||||
|
||||
int telemetry_read_eventlog(enum telemetry_unit telem_unit,
|
||||
struct telemetry_evtlog *evtlog, int len);
|
||||
|
||||
int telemetry_raw_read_eventlog(enum telemetry_unit telem_unit,
|
||||
struct telemetry_evtlog *evtlog, int len);
|
||||
|
||||
int telemetry_get_sampling_period(u8 *pss_min_period, u8 *pss_max_period,
|
||||
u8 *ioss_min_period, u8 *ioss_max_period);
|
||||
|
||||
int telemetry_set_sampling_period(u8 pss_period, u8 ioss_period);
|
||||
|
||||
int telemetry_set_trace_verbosity(enum telemetry_unit telem_unit,
|
||||
u32 verbosity);
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#define BMG_DEVICE_ID 0xE2F8
|
||||
|
||||
static struct intel_vsec_header bmg_telemetry = {
|
||||
.rev = 1,
|
||||
.length = 0x10,
|
||||
.id = VSEC_ID_TELEMETRY,
|
||||
.num_entries = 2,
|
||||
@@ -32,28 +33,19 @@ static struct intel_vsec_header bmg_telemetry = {
|
||||
.offset = BMG_DISCOVERY_OFFSET,
|
||||
};
|
||||
|
||||
static struct intel_vsec_header bmg_punit_crashlog = {
|
||||
static struct intel_vsec_header bmg_crashlog = {
|
||||
.rev = 1,
|
||||
.length = 0x10,
|
||||
.id = VSEC_ID_CRASHLOG,
|
||||
.num_entries = 1,
|
||||
.entry_size = 4,
|
||||
.num_entries = 2,
|
||||
.entry_size = 6,
|
||||
.tbir = 0,
|
||||
.offset = BMG_DISCOVERY_OFFSET + 0x60,
|
||||
};
|
||||
|
||||
static struct intel_vsec_header bmg_oobmsm_crashlog = {
|
||||
.length = 0x10,
|
||||
.id = VSEC_ID_CRASHLOG,
|
||||
.num_entries = 1,
|
||||
.entry_size = 4,
|
||||
.tbir = 0,
|
||||
.offset = BMG_DISCOVERY_OFFSET + 0x78,
|
||||
};
|
||||
|
||||
static struct intel_vsec_header *bmg_capabilities[] = {
|
||||
&bmg_telemetry,
|
||||
&bmg_punit_crashlog,
|
||||
&bmg_oobmsm_crashlog,
|
||||
&bmg_crashlog,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
@@ -191,50 +191,16 @@ void yoga_c630_ec_unregister_notify(struct yoga_c630_ec *ec, struct notifier_blo
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(yoga_c630_ec_unregister_notify);
|
||||
|
||||
static void yoga_c630_aux_release(struct device *dev)
|
||||
{
|
||||
struct auxiliary_device *adev = to_auxiliary_dev(dev);
|
||||
|
||||
kfree(adev);
|
||||
}
|
||||
|
||||
static void yoga_c630_aux_remove(void *data)
|
||||
{
|
||||
struct auxiliary_device *adev = data;
|
||||
|
||||
auxiliary_device_delete(adev);
|
||||
auxiliary_device_uninit(adev);
|
||||
}
|
||||
|
||||
static int yoga_c630_aux_init(struct device *parent, const char *name,
|
||||
struct yoga_c630_ec *ec)
|
||||
{
|
||||
struct auxiliary_device *adev;
|
||||
int ret;
|
||||
|
||||
adev = kzalloc(sizeof(*adev), GFP_KERNEL);
|
||||
adev = devm_auxiliary_device_create(parent, name, ec);
|
||||
if (!adev)
|
||||
return -ENOMEM;
|
||||
return -ENODEV;
|
||||
|
||||
adev->name = name;
|
||||
adev->id = 0;
|
||||
adev->dev.parent = parent;
|
||||
adev->dev.release = yoga_c630_aux_release;
|
||||
adev->dev.platform_data = ec;
|
||||
|
||||
ret = auxiliary_device_init(adev);
|
||||
if (ret) {
|
||||
kfree(adev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = auxiliary_device_add(adev);
|
||||
if (ret) {
|
||||
auxiliary_device_uninit(adev);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return devm_add_action_or_reset(parent, yoga_c630_aux_remove, adev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int yoga_c630_ec_probe(struct i2c_client *client)
|
||||
|
||||
+11
-228
@@ -37,6 +37,15 @@ config ACPI_WMI
|
||||
It is safe to enable this driver even if your DSDT doesn't define
|
||||
any ACPI-WMI devices.
|
||||
|
||||
config ACPI_WMI_LEGACY_DEVICE_NAMES
|
||||
bool "Use legacy WMI device naming scheme"
|
||||
depends on ACPI_WMI
|
||||
help
|
||||
Say Y here to force the WMI driver core to use the old WMI device naming
|
||||
scheme when creating WMI devices. Doing so might be necessary for some
|
||||
userspace applications but will cause the registration of WMI devices with
|
||||
the same GUID to fail in some corner cases.
|
||||
|
||||
config WMI_BMOF
|
||||
tristate "WMI embedded Binary MOF driver"
|
||||
depends on ACPI_WMI
|
||||
@@ -120,32 +129,6 @@ config GIGABYTE_WMI
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
be called gigabyte-wmi.
|
||||
|
||||
config YOGABOOK
|
||||
tristate "Lenovo Yoga Book tablet key driver"
|
||||
depends on ACPI_WMI
|
||||
depends on INPUT
|
||||
depends on I2C
|
||||
select LEDS_CLASS
|
||||
select NEW_LEDS
|
||||
help
|
||||
Say Y here if you want to support the 'Pen' key and keyboard backlight
|
||||
control on the Lenovo Yoga Book tablets.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
be called lenovo-yogabook.
|
||||
|
||||
config YT2_1380
|
||||
tristate "Lenovo Yoga Tablet 2 1380 fast charge driver"
|
||||
depends on SERIAL_DEV_BUS
|
||||
depends on EXTCON
|
||||
depends on ACPI
|
||||
help
|
||||
Say Y here to enable support for the custom fast charging protocol
|
||||
found on the Lenovo Yoga Tablet 2 1380F / 1380L models.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
be called lenovo-yogabook.
|
||||
|
||||
config ACERHDF
|
||||
tristate "Acer Aspire One temperature and fan driver"
|
||||
depends on ACPI_EC && THERMAL
|
||||
@@ -459,43 +442,6 @@ config IBM_RTL
|
||||
state = 0 (BIOS SMIs on)
|
||||
state = 1 (BIOS SMIs off)
|
||||
|
||||
config IDEAPAD_LAPTOP
|
||||
tristate "Lenovo IdeaPad Laptop Extras"
|
||||
depends on ACPI
|
||||
depends on RFKILL && INPUT
|
||||
depends on SERIO_I8042
|
||||
depends on BACKLIGHT_CLASS_DEVICE
|
||||
depends on ACPI_VIDEO || ACPI_VIDEO = n
|
||||
depends on ACPI_WMI || ACPI_WMI = n
|
||||
select ACPI_PLATFORM_PROFILE
|
||||
select INPUT_SPARSEKMAP
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
help
|
||||
This is a driver for Lenovo IdeaPad netbooks contains drivers for
|
||||
rfkill switch, hotkey, fan control and backlight control.
|
||||
|
||||
config LENOVO_WMI_HOTKEY_UTILITIES
|
||||
tristate "Lenovo Hotkey Utility WMI extras driver"
|
||||
depends on ACPI_WMI
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
imply IDEAPAD_LAPTOP
|
||||
help
|
||||
This driver provides WMI support for Lenovo customized hotkeys function,
|
||||
such as LED control for audio/mic mute event for Ideapad, YOGA, XiaoXin,
|
||||
Gaming, ThinkBook and so on.
|
||||
|
||||
config LENOVO_YMC
|
||||
tristate "Lenovo Yoga Tablet Mode Control"
|
||||
depends on ACPI_WMI
|
||||
depends on INPUT
|
||||
depends on IDEAPAD_LAPTOP
|
||||
select INPUT_SPARSEKMAP
|
||||
help
|
||||
This driver maps the Tablet Mode Control switch to SW_TABLET_MODE input
|
||||
events for Lenovo Yoga notebooks.
|
||||
|
||||
config SENSORS_HDAPS
|
||||
tristate "Thinkpad Hard Drive Active Protection System (hdaps)"
|
||||
depends on INPUT
|
||||
@@ -514,160 +460,8 @@ config SENSORS_HDAPS
|
||||
Say Y here if you have an applicable laptop and want to experience
|
||||
the awesome power of hdaps.
|
||||
|
||||
config THINKPAD_ACPI
|
||||
tristate "ThinkPad ACPI Laptop Extras"
|
||||
depends on ACPI_EC
|
||||
depends on ACPI_BATTERY
|
||||
depends on INPUT
|
||||
depends on RFKILL || RFKILL = n
|
||||
depends on ACPI_VIDEO || ACPI_VIDEO = n
|
||||
depends on BACKLIGHT_CLASS_DEVICE
|
||||
depends on I2C
|
||||
depends on DRM
|
||||
select ACPI_PLATFORM_PROFILE
|
||||
select DRM_PRIVACY_SCREEN
|
||||
select HWMON
|
||||
select NVRAM
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
select INPUT_SPARSEKMAP
|
||||
help
|
||||
This is a driver for the IBM and Lenovo ThinkPad laptops. It adds
|
||||
support for Fn-Fx key combinations, Bluetooth control, video
|
||||
output switching, ThinkLight control, UltraBay eject and more.
|
||||
For more information about this driver see
|
||||
<file:Documentation/admin-guide/laptops/thinkpad-acpi.rst> and
|
||||
<http://ibm-acpi.sf.net/> .
|
||||
|
||||
This driver was formerly known as ibm-acpi.
|
||||
|
||||
Extra functionality will be available if the rfkill (CONFIG_RFKILL)
|
||||
and/or ALSA (CONFIG_SND) subsystems are available in the kernel.
|
||||
Note that if you want ThinkPad-ACPI to be built-in instead of
|
||||
modular, ALSA and rfkill will also have to be built-in.
|
||||
|
||||
If you have an IBM or Lenovo ThinkPad laptop, say Y or M here.
|
||||
|
||||
config THINKPAD_ACPI_ALSA_SUPPORT
|
||||
bool "Console audio control ALSA interface"
|
||||
depends on THINKPAD_ACPI
|
||||
depends on SND
|
||||
depends on SND = y || THINKPAD_ACPI = SND
|
||||
default y
|
||||
help
|
||||
Enables monitoring of the built-in console audio output control
|
||||
(headphone and speakers), which is operated by the mute and (in
|
||||
some ThinkPad models) volume hotkeys.
|
||||
|
||||
If this option is enabled, ThinkPad-ACPI will export an ALSA card
|
||||
with a single read-only mixer control, which should be used for
|
||||
on-screen-display feedback purposes by the Desktop Environment.
|
||||
|
||||
Optionally, the driver will also allow software control (the
|
||||
ALSA mixer will be made read-write). Please refer to the driver
|
||||
documentation for details.
|
||||
|
||||
All IBM models have both volume and mute control. Newer Lenovo
|
||||
models only have mute control (the volume hotkeys are just normal
|
||||
keys and volume control is done through the main HDA mixer).
|
||||
|
||||
config THINKPAD_ACPI_DEBUGFACILITIES
|
||||
bool "Maintainer debug facilities"
|
||||
depends on THINKPAD_ACPI
|
||||
help
|
||||
Enables extra stuff in the thinkpad-acpi which is completely useless
|
||||
for normal use. Read the driver source to find out what it does.
|
||||
|
||||
Say N here, unless you were told by a kernel maintainer to do
|
||||
otherwise.
|
||||
|
||||
config THINKPAD_ACPI_DEBUG
|
||||
bool "Verbose debug mode"
|
||||
depends on THINKPAD_ACPI
|
||||
help
|
||||
Enables extra debugging information, at the expense of a slightly
|
||||
increase in driver size.
|
||||
|
||||
If you are not sure, say N here.
|
||||
|
||||
config THINKPAD_ACPI_UNSAFE_LEDS
|
||||
bool "Allow control of important LEDs (unsafe)"
|
||||
depends on THINKPAD_ACPI
|
||||
help
|
||||
Overriding LED state on ThinkPads can mask important
|
||||
firmware alerts (like critical battery condition), or misled
|
||||
the user into damaging the hardware (undocking or ejecting
|
||||
the bay while buses are still active), etc.
|
||||
|
||||
LED control on the ThinkPad is write-only (with very few
|
||||
exceptions on very ancient models), which makes it
|
||||
impossible to know beforehand if important information will
|
||||
be lost when one changes LED state.
|
||||
|
||||
Users that know what they are doing can enable this option
|
||||
and the driver will allow control of every LED, including
|
||||
the ones on the dock stations.
|
||||
|
||||
Never enable this option on a distribution kernel.
|
||||
|
||||
Say N here, unless you are building a kernel for your own
|
||||
use, and need to control the important firmware LEDs.
|
||||
|
||||
config THINKPAD_ACPI_VIDEO
|
||||
bool "Video output control support"
|
||||
depends on THINKPAD_ACPI
|
||||
default y
|
||||
help
|
||||
Allows the thinkpad_acpi driver to provide an interface to control
|
||||
the various video output ports.
|
||||
|
||||
This feature often won't work well, depending on ThinkPad model,
|
||||
display state, video output devices in use, whether there is a X
|
||||
server running, phase of the moon, and the current mood of
|
||||
Schroedinger's cat. If you can use X.org's RandR to control
|
||||
your ThinkPad's video output ports instead of this feature,
|
||||
don't think twice: do it and say N here to save memory and avoid
|
||||
bad interactions with X.org.
|
||||
|
||||
NOTE: access to this feature is limited to processes with the
|
||||
CAP_SYS_ADMIN capability, to avoid local DoS issues in platforms
|
||||
where it interacts badly with X.org.
|
||||
|
||||
If you are not sure, say Y here but do try to check if you could
|
||||
be using X.org RandR instead.
|
||||
|
||||
config THINKPAD_ACPI_HOTKEY_POLL
|
||||
bool "Support NVRAM polling for hot keys"
|
||||
depends on THINKPAD_ACPI
|
||||
default y
|
||||
help
|
||||
Some thinkpad models benefit from NVRAM polling to detect a few of
|
||||
the hot key press events. If you know your ThinkPad model does not
|
||||
need to do NVRAM polling to support any of the hot keys you use,
|
||||
unselecting this option will save about 1kB of memory.
|
||||
|
||||
ThinkPads T40 and newer, R52 and newer, and X31 and newer are
|
||||
unlikely to need NVRAM polling in their latest BIOS versions.
|
||||
|
||||
NVRAM polling can detect at most the following keys: ThinkPad/Access
|
||||
IBM, Zoom, Switch Display (fn+F7), ThinkLight, Volume up/down/mute,
|
||||
Brightness up/down, Display Expand (fn+F8), Hibernate (fn+F12).
|
||||
|
||||
If you are not sure, say Y here. The driver enables polling only if
|
||||
it is strictly necessary to do so.
|
||||
|
||||
config THINKPAD_LMI
|
||||
tristate "Lenovo WMI-based systems management driver"
|
||||
depends on ACPI_WMI
|
||||
select FW_ATTR_CLASS
|
||||
help
|
||||
This driver allows changing BIOS settings on Lenovo machines whose
|
||||
BIOS support the WMI interface.
|
||||
|
||||
To compile this driver as a module, choose M here: the module will
|
||||
be called think-lmi.
|
||||
|
||||
source "drivers/platform/x86/intel/Kconfig"
|
||||
source "drivers/platform/x86/lenovo/Kconfig"
|
||||
|
||||
config ACPI_QUICKSTART
|
||||
tristate "ACPI Quickstart button driver"
|
||||
@@ -825,6 +619,7 @@ config SAMSUNG_LAPTOP
|
||||
tristate "Samsung Laptop driver"
|
||||
depends on RFKILL || RFKILL = n
|
||||
depends on ACPI_VIDEO || ACPI_VIDEO = n
|
||||
depends on ACPI_BATTERY
|
||||
depends on BACKLIGHT_CLASS_DEVICE
|
||||
select LEDS_CLASS
|
||||
select NEW_LEDS
|
||||
@@ -1078,18 +873,6 @@ config INSPUR_PLATFORM_PROFILE
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called inspur-platform-profile.
|
||||
|
||||
config LENOVO_WMI_CAMERA
|
||||
tristate "Lenovo WMI Camera Button driver"
|
||||
depends on ACPI_WMI
|
||||
depends on INPUT
|
||||
help
|
||||
This driver provides support for Lenovo camera button. The Camera
|
||||
button is a GPIO device. This driver receives ACPI notifications when
|
||||
the camera button is switched on/off.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called lenovo-wmi-camera.
|
||||
|
||||
config DASHARO_ACPI
|
||||
tristate "Dasharo ACPI Platform Driver"
|
||||
depends on ACPI
|
||||
|
||||
@@ -60,17 +60,12 @@ obj-$(CONFIG_UV_SYSFS) += uv_sysfs.o
|
||||
|
||||
obj-$(CONFIG_FW_ATTR_CLASS) += firmware_attributes_class.o
|
||||
|
||||
# IBM Thinkpad and Lenovo
|
||||
# IBM Thinkpad (before 2005)
|
||||
obj-$(CONFIG_IBM_RTL) += ibm_rtl.o
|
||||
obj-$(CONFIG_IDEAPAD_LAPTOP) += ideapad-laptop.o
|
||||
obj-$(CONFIG_LENOVO_WMI_HOTKEY_UTILITIES) += lenovo-wmi-hotkey-utilities.o
|
||||
obj-$(CONFIG_LENOVO_YMC) += lenovo-ymc.o
|
||||
obj-$(CONFIG_SENSORS_HDAPS) += hdaps.o
|
||||
obj-$(CONFIG_THINKPAD_ACPI) += thinkpad_acpi.o
|
||||
obj-$(CONFIG_THINKPAD_LMI) += think-lmi.o
|
||||
obj-$(CONFIG_YOGABOOK) += lenovo-yogabook.o
|
||||
obj-$(CONFIG_YT2_1380) += lenovo-yoga-tab2-pro-1380-fastcharger.o
|
||||
obj-$(CONFIG_LENOVO_WMI_CAMERA) += lenovo-wmi-camera.o
|
||||
|
||||
# Lenovo
|
||||
obj-y += lenovo/
|
||||
|
||||
# Intel
|
||||
obj-y += intel/
|
||||
|
||||
@@ -587,8 +587,10 @@ static int hsmp_acpi_probe(struct platform_device *pdev)
|
||||
|
||||
if (!hsmp_pdev->is_probed) {
|
||||
hsmp_pdev->num_sockets = amd_num_nodes();
|
||||
if (hsmp_pdev->num_sockets == 0 || hsmp_pdev->num_sockets > MAX_AMD_NUM_NODES)
|
||||
if (hsmp_pdev->num_sockets == 0 || hsmp_pdev->num_sockets > MAX_AMD_NUM_NODES) {
|
||||
dev_err(&pdev->dev, "Wrong number of sockets\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
hsmp_pdev->sock = devm_kcalloc(&pdev->dev, hsmp_pdev->num_sockets,
|
||||
sizeof(*hsmp_pdev->sock),
|
||||
@@ -605,9 +607,12 @@ static int hsmp_acpi_probe(struct platform_device *pdev)
|
||||
|
||||
if (!hsmp_pdev->is_probed) {
|
||||
ret = hsmp_misc_register(&pdev->dev);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to register misc device\n");
|
||||
return ret;
|
||||
}
|
||||
hsmp_pdev->is_probed = true;
|
||||
dev_dbg(&pdev->dev, "AMD HSMP ACPI is probed successfully\n");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <linux/compiler_types.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/kconfig.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/semaphore.h>
|
||||
@@ -64,7 +65,7 @@ int hsmp_misc_register(struct device *dev);
|
||||
int hsmp_get_tbl_dram_base(u16 sock_ind);
|
||||
ssize_t hsmp_metric_tbl_read(struct hsmp_socket *sock, char *buf, size_t size);
|
||||
struct hsmp_plat_device *get_hsmp_pdev(void);
|
||||
#if IS_REACHABLE(CONFIG_HWMON)
|
||||
#if IS_ENABLED(CONFIG_HWMON)
|
||||
int hsmp_create_sensor(struct device *dev, u16 sock_ind);
|
||||
#else
|
||||
static inline int hsmp_create_sensor(struct device *dev, u16 sock_ind) { return 0; }
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/build_bug.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/dev_printk.h>
|
||||
#include <linux/kconfig.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/platform_device.h>
|
||||
@@ -215,7 +217,14 @@ static int hsmp_pltdrv_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
return hsmp_misc_register(&pdev->dev);
|
||||
ret = hsmp_misc_register(&pdev->dev);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "Failed to register misc device\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
dev_dbg(&pdev->dev, "AMD HSMP is probed successfully\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void hsmp_pltdrv_remove(struct platform_device *pdev)
|
||||
@@ -287,15 +296,20 @@ static int __init hsmp_plt_init(void)
|
||||
{
|
||||
int ret = -ENODEV;
|
||||
|
||||
if (acpi_dev_present(ACPI_HSMP_DEVICE_HID, NULL, -1)) {
|
||||
if (IS_ENABLED(CONFIG_AMD_HSMP_ACPI))
|
||||
pr_debug("HSMP is supported through ACPI on this platform, please use hsmp_acpi.ko\n");
|
||||
else
|
||||
pr_info("HSMP is supported through ACPI on this platform, please enable AMD_HSMP_ACPI config\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
if (!legacy_hsmp_support()) {
|
||||
pr_info("HSMP is not supported on Family:%x model:%x\n",
|
||||
pr_info("HSMP interface is either disabled or not supported on family:%x model:%x\n",
|
||||
boot_cpu_data.x86, boot_cpu_data.x86_model);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (acpi_dev_present(ACPI_HSMP_DEVICE_HID, NULL, -1))
|
||||
return -ENODEV;
|
||||
|
||||
hsmp_pdev = get_hsmp_pdev();
|
||||
if (!hsmp_pdev)
|
||||
return -ENOMEM;
|
||||
@@ -305,8 +319,10 @@ static int __init hsmp_plt_init(void)
|
||||
* if we have N SMN/DF interfaces that ideally means N sockets
|
||||
*/
|
||||
hsmp_pdev->num_sockets = amd_num_nodes();
|
||||
if (hsmp_pdev->num_sockets == 0 || hsmp_pdev->num_sockets > MAX_AMD_NUM_NODES)
|
||||
if (hsmp_pdev->num_sockets == 0 || hsmp_pdev->num_sockets > MAX_AMD_NUM_NODES) {
|
||||
pr_err("Wrong number of sockets\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = platform_driver_register(&amd_hsmp_driver);
|
||||
if (ret)
|
||||
|
||||
Loaded 20 of 74 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user