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.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86
Pull x86 platform driver updates from Ilpo Järvinen: - asus-wmi: Support for screenpad and solve brightness key press duplication - int3472: Eliminate the last use of deprecated GPIO functions - mlxbf-pmc: New HW support - msi-ec: Support new EC configurations - thinkpad_acpi: Support reading aux MAC address during passthrough - wmi: Fixes & improvements - x86-android-tablets: Detection fix and avoid use of GPIO private APIs - Debug & metrics interface improvements - Miscellaneous cleanups / fixes / improvements * tag 'platform-drivers-x86-v6.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86: (80 commits) platform/x86: inspur-platform-profile: Add platform profile support platform/x86: thinkpad_acpi: Add battery quirk for Thinkpad X120e platform/x86: wmi: Decouple WMI device removal from wmi_block_list platform/x86: wmi: Fix opening of char device platform/x86: wmi: Fix probe failure when failing to register WMI devices platform/x86: wmi: Fix refcounting of WMI devices in legacy functions platform/x86: wmi: Decouple probe deferring from wmi_block_list platform/x86/amd/hsmp: Fix iomem handling platform/x86: asus-wmi: Do not report brightness up/down keys when also reported by acpi_video platform/x86: thinkpad_acpi: replace deprecated strncpy with memcpy tools/power/x86/intel-speed-select: v1.18 release tools/power/x86/intel-speed-select: Use cgroup isolate for CPU 0 tools/power/x86/intel-speed-select: Increase max CPUs in one request tools/power/x86/intel-speed-select: Display error for core-power support tools/power/x86/intel-speed-select: No TRL for non compute domains tools/power/x86/intel-speed-select: turbo-mode enable disable swapped tools/power/x86/intel-speed-select: Update help for TRL tools/power/x86/intel-speed-select: Sanitize integer arguments platform/x86: acer-wmi: Remove void function return platform/x86/amd/pmc: Add dump_custom_stb module parameter ...
This commit is contained in:
@@ -383,6 +383,36 @@ Description:
|
||||
Note that any changes to this attribute requires a reboot
|
||||
for changes to take effect.
|
||||
|
||||
What: /sys/class/firmware-attributes/*/attributes/save_settings
|
||||
Date: August 2023
|
||||
KernelVersion: 6.6
|
||||
Contact: Mark Pearson <mpearson-lenovo@squebb.ca>
|
||||
Description:
|
||||
On Lenovo platforms there is a limitation in the number of times an attribute can be
|
||||
saved. This is an architectural limitation and it limits the number of attributes
|
||||
that can be modified to 48.
|
||||
A solution for this is instead of the attribute being saved after every modification,
|
||||
to allow a user to bulk set the attributes, and then trigger a final save. This allows
|
||||
unlimited attributes.
|
||||
|
||||
Read the attribute to check what save mode is enabled (single or bulk).
|
||||
E.g:
|
||||
# cat /sys/class/firmware-attributes/thinklmi/attributes/save_settings
|
||||
single
|
||||
|
||||
Write the attribute with 'bulk' to enable bulk save mode.
|
||||
Write the attribute with 'single' to enable saving, after every attribute set.
|
||||
The default setting is single mode.
|
||||
E.g:
|
||||
# echo bulk > /sys/class/firmware-attributes/thinklmi/attributes/save_settings
|
||||
|
||||
When in bulk mode write 'save' to trigger a save of all currently modified attributes.
|
||||
Note, once a save has been triggered, in bulk mode, attributes can no longer be set and
|
||||
will return a permissions error. This is to prevent users hitting the 48+ save limitation
|
||||
(which requires entering the BIOS to clear the error condition)
|
||||
E.g:
|
||||
# echo save > /sys/class/firmware-attributes/thinklmi/attributes/save_settings
|
||||
|
||||
What: /sys/class/firmware-attributes/*/attributes/debug_cmd
|
||||
Date: July 2021
|
||||
KernelVersion: 5.14
|
||||
|
||||
@@ -53,6 +53,7 @@ detailed description):
|
||||
- Lap mode sensor
|
||||
- Setting keyboard language
|
||||
- WWAN Antenna type
|
||||
- Auxmac
|
||||
|
||||
A compatibility table by model and feature is maintained on the web
|
||||
site, http://ibm-acpi.sf.net/. I appreciate any success or failure
|
||||
@@ -1511,6 +1512,25 @@ Currently 2 antenna types are supported as mentioned below:
|
||||
The property is read-only. If the platform doesn't have support the sysfs
|
||||
class is not created.
|
||||
|
||||
Auxmac
|
||||
------
|
||||
|
||||
sysfs: auxmac
|
||||
|
||||
Some newer Thinkpads have a feature called MAC Address Pass-through. This
|
||||
feature is implemented by the system firmware to provide a system unique MAC,
|
||||
that can override a dock or USB ethernet dongle MAC, when connected to a
|
||||
network. This property enables user-space to easily determine the MAC address
|
||||
if the feature is enabled.
|
||||
|
||||
The values of this auxiliary MAC are:
|
||||
|
||||
cat /sys/devices/platform/thinkpad_acpi/auxmac
|
||||
|
||||
If the feature is disabled, the value will be 'disabled'.
|
||||
|
||||
This property is read-only.
|
||||
|
||||
Adaptive keyboard
|
||||
-----------------
|
||||
|
||||
|
||||
@@ -41,6 +41,24 @@ In-kernel integration:
|
||||
* Locking across callers is taken care by the driver.
|
||||
|
||||
|
||||
HSMP sysfs interface
|
||||
====================
|
||||
|
||||
1. Metrics table binary sysfs
|
||||
|
||||
AMD MI300A MCM provides GET_METRICS_TABLE message to retrieve
|
||||
most of the system management information from SMU in one go.
|
||||
|
||||
The metrics table is made available as hexadecimal sysfs binary file
|
||||
under per socket sysfs directory created at
|
||||
/sys/devices/platform/amd_hsmp/socket%d/metrics_bin
|
||||
|
||||
Note: lseek() is not supported as entire metrics table is read.
|
||||
|
||||
Metrics table definitions will be documented as part of Public PPR.
|
||||
The same is defined in the amd_hsmp.h header.
|
||||
|
||||
|
||||
An example
|
||||
==========
|
||||
|
||||
|
||||
@@ -222,6 +222,7 @@
|
||||
#define MSR_INTEGRITY_CAPS_ARRAY_BIST BIT(MSR_INTEGRITY_CAPS_ARRAY_BIST_BIT)
|
||||
#define MSR_INTEGRITY_CAPS_PERIODIC_BIST_BIT 4
|
||||
#define MSR_INTEGRITY_CAPS_PERIODIC_BIST BIT(MSR_INTEGRITY_CAPS_PERIODIC_BIST_BIT)
|
||||
#define MSR_INTEGRITY_CAPS_SAF_GEN_MASK GENMASK_ULL(10, 9)
|
||||
|
||||
#define MSR_LBR_NHM_FROM 0x00000680
|
||||
#define MSR_LBR_NHM_TO 0x000006c0
|
||||
|
||||
@@ -47,6 +47,9 @@ enum hsmp_message_ids {
|
||||
HSMP_SET_PCI_RATE, /* 20h Control link rate on PCIe devices */
|
||||
HSMP_SET_POWER_MODE, /* 21h Select power efficiency profile policy */
|
||||
HSMP_SET_PSTATE_MAX_MIN, /* 22h Set the max and min DF P-State */
|
||||
HSMP_GET_METRIC_TABLE_VER, /* 23h Get metrics table version */
|
||||
HSMP_GET_METRIC_TABLE, /* 24h Get metrics table */
|
||||
HSMP_GET_METRIC_TABLE_DRAM_ADDR,/* 25h Get metrics table dram address */
|
||||
HSMP_MSG_ID_MAX,
|
||||
};
|
||||
|
||||
@@ -64,6 +67,14 @@ enum hsmp_msg_type {
|
||||
HSMP_GET = 1,
|
||||
};
|
||||
|
||||
enum hsmp_proto_versions {
|
||||
HSMP_PROTO_VER2 = 2,
|
||||
HSMP_PROTO_VER3,
|
||||
HSMP_PROTO_VER4,
|
||||
HSMP_PROTO_VER5,
|
||||
HSMP_PROTO_VER6
|
||||
};
|
||||
|
||||
struct hsmp_msg_desc {
|
||||
int num_args;
|
||||
int response_sz;
|
||||
@@ -295,6 +306,104 @@ static const struct hsmp_msg_desc hsmp_msg_desc_table[] = {
|
||||
* input: args[0] = min df pstate[15:8] + max df pstate[7:0]
|
||||
*/
|
||||
{1, 0, HSMP_SET},
|
||||
|
||||
/*
|
||||
* HSMP_GET_METRIC_TABLE_VER, num_args = 0, response_sz = 1
|
||||
* output: args[0] = metrics table version
|
||||
*/
|
||||
{0, 1, HSMP_GET},
|
||||
|
||||
/*
|
||||
* HSMP_GET_METRIC_TABLE, num_args = 0, response_sz = 0
|
||||
*/
|
||||
{0, 0, HSMP_GET},
|
||||
|
||||
/*
|
||||
* HSMP_GET_METRIC_TABLE_DRAM_ADDR, num_args = 0, response_sz = 2
|
||||
* output: args[0] = lower 32 bits of the address
|
||||
* output: args[1] = upper 32 bits of the address
|
||||
*/
|
||||
{0, 2, HSMP_GET},
|
||||
};
|
||||
|
||||
/* Metrics table (supported only with proto version 6) */
|
||||
struct hsmp_metric_table {
|
||||
__u32 accumulation_counter;
|
||||
|
||||
/* TEMPERATURE */
|
||||
__u32 max_socket_temperature;
|
||||
__u32 max_vr_temperature;
|
||||
__u32 max_hbm_temperature;
|
||||
__u64 max_socket_temperature_acc;
|
||||
__u64 max_vr_temperature_acc;
|
||||
__u64 max_hbm_temperature_acc;
|
||||
|
||||
/* POWER */
|
||||
__u32 socket_power_limit;
|
||||
__u32 max_socket_power_limit;
|
||||
__u32 socket_power;
|
||||
|
||||
/* ENERGY */
|
||||
__u64 timestamp;
|
||||
__u64 socket_energy_acc;
|
||||
__u64 ccd_energy_acc;
|
||||
__u64 xcd_energy_acc;
|
||||
__u64 aid_energy_acc;
|
||||
__u64 hbm_energy_acc;
|
||||
|
||||
/* FREQUENCY */
|
||||
__u32 cclk_frequency_limit;
|
||||
__u32 gfxclk_frequency_limit;
|
||||
__u32 fclk_frequency;
|
||||
__u32 uclk_frequency;
|
||||
__u32 socclk_frequency[4];
|
||||
__u32 vclk_frequency[4];
|
||||
__u32 dclk_frequency[4];
|
||||
__u32 lclk_frequency[4];
|
||||
__u64 gfxclk_frequency_acc[8];
|
||||
__u64 cclk_frequency_acc[96];
|
||||
|
||||
/* FREQUENCY RANGE */
|
||||
__u32 max_cclk_frequency;
|
||||
__u32 min_cclk_frequency;
|
||||
__u32 max_gfxclk_frequency;
|
||||
__u32 min_gfxclk_frequency;
|
||||
__u32 fclk_frequency_table[4];
|
||||
__u32 uclk_frequency_table[4];
|
||||
__u32 socclk_frequency_table[4];
|
||||
__u32 vclk_frequency_table[4];
|
||||
__u32 dclk_frequency_table[4];
|
||||
__u32 lclk_frequency_table[4];
|
||||
__u32 max_lclk_dpm_range;
|
||||
__u32 min_lclk_dpm_range;
|
||||
|
||||
/* XGMI */
|
||||
__u32 xgmi_width;
|
||||
__u32 xgmi_bitrate;
|
||||
__u64 xgmi_read_bandwidth_acc[8];
|
||||
__u64 xgmi_write_bandwidth_acc[8];
|
||||
|
||||
/* ACTIVITY */
|
||||
__u32 socket_c0_residency;
|
||||
__u32 socket_gfx_busy;
|
||||
__u32 dram_bandwidth_utilization;
|
||||
__u64 socket_c0_residency_acc;
|
||||
__u64 socket_gfx_busy_acc;
|
||||
__u64 dram_bandwidth_acc;
|
||||
__u32 max_dram_bandwidth;
|
||||
__u64 dram_bandwidth_utilization_acc;
|
||||
__u64 pcie_bandwidth_acc[4];
|
||||
|
||||
/* THROTTLERS */
|
||||
__u32 prochot_residency_acc;
|
||||
__u32 ppt_residency_acc;
|
||||
__u32 socket_thm_residency_acc;
|
||||
__u32 vr_thm_residency_acc;
|
||||
__u32 hbm_thm_residency_acc;
|
||||
__u32 spare;
|
||||
|
||||
/* New items at the end to maintain driver compatibility */
|
||||
__u32 gfxclk_frequency[8];
|
||||
};
|
||||
|
||||
/* Reset to default packing */
|
||||
|
||||
@@ -1028,17 +1028,15 @@ static int mlxbf_bootctl_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int mlxbf_bootctl_remove(struct platform_device *pdev)
|
||||
static void mlxbf_bootctl_remove(struct platform_device *pdev)
|
||||
{
|
||||
sysfs_remove_bin_file(&pdev->dev.kobj,
|
||||
&mlxbf_bootctl_bootfifo_sysfs_attr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver mlxbf_bootctl_driver = {
|
||||
.probe = mlxbf_bootctl_probe,
|
||||
.remove = mlxbf_bootctl_remove,
|
||||
.remove_new = mlxbf_bootctl_remove,
|
||||
.driver = {
|
||||
.name = "mlxbf-bootctl",
|
||||
.dev_groups = mlxbf_bootctl_groups,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1364,13 +1364,11 @@ fail:
|
||||
}
|
||||
|
||||
/* Device remove function. */
|
||||
static int mlxbf_tmfifo_remove(struct platform_device *pdev)
|
||||
static void mlxbf_tmfifo_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct mlxbf_tmfifo *fifo = platform_get_drvdata(pdev);
|
||||
|
||||
mlxbf_tmfifo_cleanup(fifo);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct acpi_device_id mlxbf_tmfifo_acpi_match[] = {
|
||||
@@ -1381,7 +1379,7 @@ MODULE_DEVICE_TABLE(acpi, mlxbf_tmfifo_acpi_match);
|
||||
|
||||
static struct platform_driver mlxbf_tmfifo_driver = {
|
||||
.probe = mlxbf_tmfifo_probe,
|
||||
.remove = mlxbf_tmfifo_remove,
|
||||
.remove_new = mlxbf_tmfifo_remove,
|
||||
.driver = {
|
||||
.name = "bf-tmfifo",
|
||||
.acpi_match_table = mlxbf_tmfifo_acpi_match,
|
||||
|
||||
@@ -786,15 +786,13 @@ static int mlxreg_hotplug_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlxreg_hotplug_remove(struct platform_device *pdev)
|
||||
static void mlxreg_hotplug_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct mlxreg_hotplug_priv_data *priv = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
/* Clean interrupts setup. */
|
||||
mlxreg_hotplug_unset_irq(priv);
|
||||
devm_free_irq(&pdev->dev, priv->irq, priv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver mlxreg_hotplug_driver = {
|
||||
@@ -802,7 +800,7 @@ static struct platform_driver mlxreg_hotplug_driver = {
|
||||
.name = "mlxreg-hotplug",
|
||||
},
|
||||
.probe = mlxreg_hotplug_probe,
|
||||
.remove = mlxreg_hotplug_remove,
|
||||
.remove_new = mlxreg_hotplug_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(mlxreg_hotplug_driver);
|
||||
|
||||
@@ -263,13 +263,11 @@ static int mlxreg_io_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mlxreg_io_remove(struct platform_device *pdev)
|
||||
static void mlxreg_io_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct mlxreg_io_priv_data *priv = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
mutex_destroy(&priv->io_lock);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver mlxreg_io_driver = {
|
||||
@@ -277,7 +275,7 @@ static struct platform_driver mlxreg_io_driver = {
|
||||
.name = "mlxreg-io",
|
||||
},
|
||||
.probe = mlxreg_io_probe,
|
||||
.remove = mlxreg_io_remove,
|
||||
.remove_new = mlxreg_io_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(mlxreg_io_driver);
|
||||
|
||||
@@ -907,7 +907,7 @@ i2c_get_adapter_fail:
|
||||
return err;
|
||||
}
|
||||
|
||||
static int mlxreg_lc_remove(struct platform_device *pdev)
|
||||
static void mlxreg_lc_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct mlxreg_core_data *data = dev_get_platdata(&pdev->dev);
|
||||
struct mlxreg_lc *mlxreg_lc = platform_get_drvdata(pdev);
|
||||
@@ -921,7 +921,7 @@ static int mlxreg_lc_remove(struct platform_device *pdev)
|
||||
* is nothing to remove.
|
||||
*/
|
||||
if (!data->notifier || !data->notifier->handle)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
/* Clear event notification callback and handle. */
|
||||
data->notifier->user_handler = NULL;
|
||||
@@ -940,13 +940,11 @@ static int mlxreg_lc_remove(struct platform_device *pdev)
|
||||
i2c_put_adapter(data->hpdev.adapter);
|
||||
data->hpdev.adapter = NULL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver mlxreg_lc_driver = {
|
||||
.probe = mlxreg_lc_probe,
|
||||
.remove = mlxreg_lc_remove,
|
||||
.remove_new = mlxreg_lc_remove,
|
||||
.driver = {
|
||||
.name = "mlxreg-lc",
|
||||
},
|
||||
|
||||
@@ -1217,7 +1217,7 @@ static int nvsw_sn2201_probe(struct platform_device *pdev)
|
||||
return nvsw_sn2201_config_pre_init(nvsw_sn2201);
|
||||
}
|
||||
|
||||
static int nvsw_sn2201_remove(struct platform_device *pdev)
|
||||
static void nvsw_sn2201_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct nvsw_sn2201 *nvsw_sn2201 = platform_get_drvdata(pdev);
|
||||
|
||||
@@ -1239,8 +1239,6 @@ static int nvsw_sn2201_remove(struct platform_device *pdev)
|
||||
/* Unregister I2C controller. */
|
||||
if (nvsw_sn2201->pdev_i2c)
|
||||
platform_device_unregister(nvsw_sn2201->pdev_i2c);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct acpi_device_id nvsw_sn2201_acpi_ids[] = {
|
||||
@@ -1252,7 +1250,7 @@ MODULE_DEVICE_TABLE(acpi, nvsw_sn2201_acpi_ids);
|
||||
|
||||
static struct platform_driver nvsw_sn2201_driver = {
|
||||
.probe = nvsw_sn2201_probe,
|
||||
.remove = nvsw_sn2201_remove,
|
||||
.remove_new = nvsw_sn2201_remove,
|
||||
.driver = {
|
||||
.name = "nvsw-sn2201",
|
||||
.acpi_match_table = nvsw_sn2201_acpi_ids,
|
||||
|
||||
@@ -226,14 +226,13 @@ static int __init s3_wmi_probe(struct platform_device *pdev)
|
||||
return error;
|
||||
}
|
||||
|
||||
static int s3_wmi_remove(struct platform_device *device)
|
||||
static void s3_wmi_remove(struct platform_device *device)
|
||||
{
|
||||
/* remove the hotplug context from the acpi device */
|
||||
s3_wmi.touchscreen_adev->hp = NULL;
|
||||
|
||||
/* reinstall the actual PNPC0C0D LID default handle */
|
||||
acpi_bus_scan(s3_wmi.pnp0c0d_adev->handle);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __maybe_unused s3_wmi_resume(struct device *dev)
|
||||
@@ -248,7 +247,7 @@ static struct platform_driver s3_wmi_driver = {
|
||||
.name = "surface3-wmi",
|
||||
.pm = &s3_wmi_pm,
|
||||
},
|
||||
.remove = s3_wmi_remove,
|
||||
.remove_new = s3_wmi_remove,
|
||||
};
|
||||
|
||||
static int __init s3_wmi_init(void)
|
||||
|
||||
@@ -854,7 +854,7 @@ err_enable_events:
|
||||
return status;
|
||||
}
|
||||
|
||||
static int san_remove(struct platform_device *pdev)
|
||||
static void san_remove(struct platform_device *pdev)
|
||||
{
|
||||
acpi_handle san = ACPI_HANDLE(&pdev->dev);
|
||||
|
||||
@@ -868,8 +868,6 @@ static int san_remove(struct platform_device *pdev)
|
||||
* all delayed works they may have spawned are run to completion.
|
||||
*/
|
||||
flush_workqueue(san_wq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct acpi_device_id san_match[] = {
|
||||
@@ -880,7 +878,7 @@ MODULE_DEVICE_TABLE(acpi, san_match);
|
||||
|
||||
static struct platform_driver surface_acpi_notify = {
|
||||
.probe = san_probe,
|
||||
.remove = san_remove,
|
||||
.remove_new = san_remove,
|
||||
.driver = {
|
||||
.name = "surface_acpi_notify",
|
||||
.acpi_match_table = san_match,
|
||||
|
||||
@@ -714,7 +714,7 @@ static int ssam_dbg_device_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ssam_dbg_device_remove(struct platform_device *pdev)
|
||||
static void ssam_dbg_device_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct ssam_cdev *cdev = platform_get_drvdata(pdev);
|
||||
struct ssam_cdev_client *client;
|
||||
@@ -757,14 +757,13 @@ static int ssam_dbg_device_remove(struct platform_device *pdev)
|
||||
misc_deregister(&cdev->mdev);
|
||||
|
||||
ssam_cdev_put(cdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_device *ssam_cdev_device;
|
||||
|
||||
static struct platform_driver ssam_cdev_driver = {
|
||||
.probe = ssam_dbg_device_probe,
|
||||
.remove = ssam_dbg_device_remove,
|
||||
.remove_new = ssam_dbg_device_remove,
|
||||
.driver = {
|
||||
.name = SSAM_CDEV_DEVICE_NAME,
|
||||
.probe_type = PROBE_PREFER_ASYNCHRONOUS,
|
||||
|
||||
@@ -418,19 +418,18 @@ static int ssam_platform_hub_probe(struct platform_device *pdev)
|
||||
return status;
|
||||
}
|
||||
|
||||
static int ssam_platform_hub_remove(struct platform_device *pdev)
|
||||
static void ssam_platform_hub_remove(struct platform_device *pdev)
|
||||
{
|
||||
const struct software_node **nodes = platform_get_drvdata(pdev);
|
||||
|
||||
ssam_remove_clients(&pdev->dev);
|
||||
set_secondary_fwnode(&pdev->dev, NULL);
|
||||
software_node_unregister_node_group(nodes);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver ssam_platform_hub_driver = {
|
||||
.probe = ssam_platform_hub_probe,
|
||||
.remove = ssam_platform_hub_remove,
|
||||
.remove_new = ssam_platform_hub_remove,
|
||||
.driver = {
|
||||
.name = "surface_aggregator_platform_hub",
|
||||
.acpi_match_table = ssam_platform_hub_match,
|
||||
|
||||
@@ -1168,10 +1168,9 @@ static int surface_dtx_platform_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int surface_dtx_platform_remove(struct platform_device *pdev)
|
||||
static void surface_dtx_platform_remove(struct platform_device *pdev)
|
||||
{
|
||||
sdtx_device_destroy(platform_get_drvdata(pdev));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct acpi_device_id surface_dtx_acpi_match[] = {
|
||||
@@ -1182,7 +1181,7 @@ MODULE_DEVICE_TABLE(acpi, surface_dtx_acpi_match);
|
||||
|
||||
static struct platform_driver surface_dtx_platform_driver = {
|
||||
.probe = surface_dtx_platform_probe,
|
||||
.remove = surface_dtx_platform_remove,
|
||||
.remove_new = surface_dtx_platform_remove,
|
||||
.driver = {
|
||||
.name = "surface_dtx_pltf",
|
||||
.acpi_match_table = surface_dtx_acpi_match,
|
||||
|
||||
@@ -267,20 +267,18 @@ static int surface_gpe_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int surface_gpe_remove(struct platform_device *pdev)
|
||||
static void surface_gpe_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct surface_lid_device *lid = dev_get_drvdata(&pdev->dev);
|
||||
|
||||
/* restore default behavior without this module */
|
||||
surface_lid_enable_wakeup(&pdev->dev, false);
|
||||
acpi_disable_gpe(NULL, lid->gpe_number);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver surface_gpe_driver = {
|
||||
.probe = surface_gpe_probe,
|
||||
.remove = surface_gpe_remove,
|
||||
.remove_new = surface_gpe_remove,
|
||||
.driver = {
|
||||
.name = "surface_gpe",
|
||||
.pm = &surface_gpe_pm,
|
||||
|
||||
@@ -183,7 +183,7 @@ static int shps_setup_irq(struct platform_device *pdev, enum shps_irq_type type)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int surface_hotplug_remove(struct platform_device *pdev)
|
||||
static void surface_hotplug_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct shps_device *sdev = platform_get_drvdata(pdev);
|
||||
int i;
|
||||
@@ -195,8 +195,6 @@ static int surface_hotplug_remove(struct platform_device *pdev)
|
||||
|
||||
mutex_destroy(&sdev->lock[i]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int surface_hotplug_probe(struct platform_device *pdev)
|
||||
@@ -261,7 +259,7 @@ MODULE_DEVICE_TABLE(acpi, surface_hotplug_acpi_match);
|
||||
|
||||
static struct platform_driver surface_hotplug_driver = {
|
||||
.probe = surface_hotplug_probe,
|
||||
.remove = surface_hotplug_remove,
|
||||
.remove_new = surface_hotplug_remove,
|
||||
.driver = {
|
||||
.name = "surface_hotplug",
|
||||
.acpi_match_table = surface_hotplug_acpi_match,
|
||||
|
||||
@@ -988,6 +988,17 @@ config TOUCHSCREEN_DMI
|
||||
the OS-image for the device. This option supplies the missing info.
|
||||
Enable this for x86 tablets with Silead or Chipone touchscreens.
|
||||
|
||||
config INSPUR_PLATFORM_PROFILE
|
||||
tristate "Inspur WMI platform profile driver"
|
||||
depends on ACPI_WMI
|
||||
select ACPI_PLATFORM_PROFILE
|
||||
help
|
||||
This will allow users to determine and control the platform modes
|
||||
between low-power, balanced and performance modes.
|
||||
|
||||
To compile this driver as a module, choose M here: the module
|
||||
will be called inspur-platform-profile.
|
||||
|
||||
source "drivers/platform/x86/x86-android-tablets/Kconfig"
|
||||
|
||||
config FW_ATTR_CLASS
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user