mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-12 05:48:40 +00:00
platform-drivers-x86 for v4.13-2
Add new platform matches for silead_dmi and ideapad-laptop. Several
constify patches for attribute_group structures. Fixes for peaq-wmi and
intel_telemetry*.
*Note: 74a1eb565c
platform/x86: intel_telemetry_debugfs: fix oops when load/unload module
is a duplicate cherry-picked from the 4.12 RC cycle
(platform-drivers-x86-v4.12-2).
silead_dmi:
- Add entry for Ployer Momo7w tablet touchscreen
- Add touchscreen info for I.T.Works TW891 2-in-1
toshiba_acpi:
- constify attribute_group structures.
asus-wmi:
- constify attribute_group structures.
panasonic-laptop:
- constify attribute_group structures.
alienware-wmi:
- constify attribute_group structures.
samsung-laptop:
- constify attribute_group structures.
compal-laptop:
- constify attribute_group structures.
fujitsu-laptop:
- constify attribute_group structures.
- add NULL check on devm_kzalloc() return value
peaq-wmi:
- Fix peaq_ignore_events_counter handling off by 1
ideapad-laptop:
- Fix indentation in DMI table
- Add several models to no_hw_rfkill
- Add IdeaPad V510-15IKB to no_hw_rfkill
intel_telemetry:
- Add debugfs entry for S0ix residency
intel_telemetry_debugfs:
- fix some error codes in init
- fix oops when load/unload module
-----BEGIN PGP SIGNATURE-----
iQEcBAABAgAGBQJZZ8I5AAoJEKbMaAwKp364YSgH/2snOmcYjFeI7oTHm021peAd
n23HcTF623dmfQ2LTddPqhtzOAQH9ZZycEd4oW4MASWlntzPZFoxfKiclunvoyKm
XuycYDOjAl7DnDnoZ8SD7E2QoNAnmmK9riJIudzyHTKCWdxMpWe0mDcR12Rb5uD8
kOQ+ctI61zWfDWfZj+Fo7HvQ5HsfmLdS4Itjl38H1QyjzIdp0eNA5pZQP0deQ/0w
vjhmLVT7KEqfRJ09RNIA1eIikyC1uiePUGe13nGEc3P9CpQ/yAVeYvP7za4W7tsF
jL9s/6uVHnB69WrtWm8Y4l8h4mHymkBV3BxA/fZwaoNTAILH1O5pDHk8T71Po1E=
=iVsK
-----END PGP SIGNATURE-----
Merge tag 'platform-drivers-x86-v4.13-2' of git://git.infradead.org/linux-platform-drivers-x86
Pull more x86 platform driver updates from Darren Hart:
"Add new platform matches for silead_dmi and ideapad-laptop. Several
constify patches for attribute_group structures. Fixes for peaq-wmi
and intel_telemetry.
silead_dmi:
- Add entry for Ployer Momo7w tablet touchscreen
- Add touchscreen info for I.T.Works TW891 2-in-1
toshiba_acpi:
- constify attribute_group structures.
asus-wmi:
- constify attribute_group structures.
panasonic-laptop:
- constify attribute_group structures.
alienware-wmi:
- constify attribute_group structures.
samsung-laptop:
- constify attribute_group structures.
compal-laptop:
- constify attribute_group structures.
fujitsu-laptop:
- constify attribute_group structures.
- add NULL check on devm_kzalloc() return value
peaq-wmi:
- Fix peaq_ignore_events_counter handling off by 1
ideapad-laptop:
- Fix indentation in DMI table
- Add several models to no_hw_rfkill
- Add IdeaPad V510-15IKB to no_hw_rfkill
intel_telemetry:
- Add debugfs entry for S0ix residency
intel_telemetry_debugfs:
- fix some error codes in init
- fix oops when load/unload module"
* tag 'platform-drivers-x86-v4.13-2' of git://git.infradead.org/linux-platform-drivers-x86:
platform/x86: silead_dmi: Add entry for Ployer Momo7w tablet touchscreen
platform/x86: toshiba_acpi: constify attribute_group structures.
platform/x86: asus-wmi: constify attribute_group structures.
platform/x86: panasonic-laptop: constify attribute_group structures.
platform/x86: alienware-wmi: constify attribute_group structures.
platform/x86: samsung-laptop: constify attribute_group structures.
platform/x86: compal-laptop: constify attribute_group structures.
platform/x86: fujitsu-laptop: constify attribute_group structures.
platform/x86: peaq-wmi: Fix peaq_ignore_events_counter handling off by 1
platform/x86: fujitsu-laptop: add NULL check on devm_kzalloc() return value
platform/x86: silead_dmi: Add touchscreen info for I.T.Works TW891 2-in-1
platform/x86: ideapad-laptop: Fix indentation in DMI table
platform/x86: ideapad-laptop: Add several models to no_hw_rfkill
platform/x86: ideapad-laptop: Add IdeaPad V510-15IKB to no_hw_rfkill
platform/x86: intel_telemetry: Add debugfs entry for S0ix residency
platform/x86: intel_telemetry_debugfs: fix some error codes in init
platform/x86: intel_telemetry_debugfs: fix oops when load/unload module
This commit is contained in:
commit
6735a1971a
11 changed files with 165 additions and 19 deletions
|
@ -604,7 +604,7 @@ static struct attribute *hdmi_attrs[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group hdmi_attribute_group = {
|
||||
static const struct attribute_group hdmi_attribute_group = {
|
||||
.name = "hdmi",
|
||||
.attrs = hdmi_attrs,
|
||||
};
|
||||
|
@ -660,7 +660,7 @@ static struct attribute *amplifier_attrs[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group amplifier_attribute_group = {
|
||||
static const struct attribute_group amplifier_attribute_group = {
|
||||
.name = "amplifier",
|
||||
.attrs = amplifier_attrs,
|
||||
};
|
||||
|
@ -741,7 +741,7 @@ static struct attribute *deepsleep_attrs[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group deepsleep_attribute_group = {
|
||||
static const struct attribute_group deepsleep_attribute_group = {
|
||||
.name = "deepsleep",
|
||||
.attrs = deepsleep_attrs,
|
||||
};
|
||||
|
|
|
@ -1433,7 +1433,7 @@ static umode_t asus_hwmon_sysfs_is_visible(struct kobject *kobj,
|
|||
return ok ? attr->mode : 0;
|
||||
}
|
||||
|
||||
static struct attribute_group hwmon_attribute_group = {
|
||||
static const struct attribute_group hwmon_attribute_group = {
|
||||
.is_visible = asus_hwmon_sysfs_is_visible,
|
||||
.attrs = hwmon_attributes
|
||||
};
|
||||
|
@ -1821,7 +1821,7 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
|
|||
return ok ? attr->mode : 0;
|
||||
}
|
||||
|
||||
static struct attribute_group platform_attribute_group = {
|
||||
static const struct attribute_group platform_attribute_group = {
|
||||
.is_visible = asus_sysfs_is_visible,
|
||||
.attrs = platform_attributes
|
||||
};
|
||||
|
|
|
@ -718,7 +718,7 @@ static struct attribute *compal_platform_attrs[] = {
|
|||
&dev_attr_wake_up_mouse.attr,
|
||||
NULL
|
||||
};
|
||||
static struct attribute_group compal_platform_attr_group = {
|
||||
static const struct attribute_group compal_platform_attr_group = {
|
||||
.attrs = compal_platform_attrs
|
||||
};
|
||||
|
||||
|
|
|
@ -317,7 +317,7 @@ static struct attribute *fujitsu_pf_attributes[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
static struct attribute_group fujitsu_pf_attribute_group = {
|
||||
static const struct attribute_group fujitsu_pf_attribute_group = {
|
||||
.attrs = fujitsu_pf_attributes
|
||||
};
|
||||
|
||||
|
@ -695,6 +695,9 @@ static int acpi_fujitsu_laptop_leds_register(struct acpi_device *device)
|
|||
if (call_fext_func(device,
|
||||
FUNC_LEDS, 0x0, 0x0, 0x0) & LOGOLAMP_POWERON) {
|
||||
led = devm_kzalloc(&device->dev, sizeof(*led), GFP_KERNEL);
|
||||
if (!led)
|
||||
return -ENOMEM;
|
||||
|
||||
led->name = "fujitsu::logolamp";
|
||||
led->brightness_set_blocking = logolamp_set;
|
||||
led->brightness_get = logolamp_get;
|
||||
|
@ -707,6 +710,9 @@ static int acpi_fujitsu_laptop_leds_register(struct acpi_device *device)
|
|||
FUNC_LEDS, 0x0, 0x0, 0x0) & KEYBOARD_LAMPS) &&
|
||||
(call_fext_func(device, FUNC_BUTTONS, 0x0, 0x0, 0x0) == 0x0)) {
|
||||
led = devm_kzalloc(&device->dev, sizeof(*led), GFP_KERNEL);
|
||||
if (!led)
|
||||
return -ENOMEM;
|
||||
|
||||
led->name = "fujitsu::kblamps";
|
||||
led->brightness_set_blocking = kblamps_set;
|
||||
led->brightness_get = kblamps_get;
|
||||
|
@ -723,6 +729,9 @@ static int acpi_fujitsu_laptop_leds_register(struct acpi_device *device)
|
|||
*/
|
||||
if (call_fext_func(device, FUNC_BUTTONS, 0x0, 0x0, 0x0) & BIT(24)) {
|
||||
led = devm_kzalloc(&device->dev, sizeof(*led), GFP_KERNEL);
|
||||
if (!led)
|
||||
return -ENOMEM;
|
||||
|
||||
led->name = "fujitsu::radio_led";
|
||||
led->brightness_set_blocking = radio_led_set;
|
||||
led->brightness_get = radio_led_get;
|
||||
|
@ -741,6 +750,9 @@ static int acpi_fujitsu_laptop_leds_register(struct acpi_device *device)
|
|||
(call_fext_func(device,
|
||||
FUNC_LEDS, 0x2, ECO_LED, 0x0) != UNSUPPORTED_CMD)) {
|
||||
led = devm_kzalloc(&device->dev, sizeof(*led), GFP_KERNEL);
|
||||
if (!led)
|
||||
return -ENOMEM;
|
||||
|
||||
led->name = "fujitsu::eco_led";
|
||||
led->brightness_set_blocking = eco_led_set;
|
||||
led->brightness_get = eco_led_get;
|
||||
|
|
|
@ -908,18 +908,95 @@ static const struct dmi_system_id no_hw_rfkill_list[] = {
|
|||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo G50-30"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo V310-14IKB",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V310-14IKB"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo V310-14ISK",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V310-14ISK"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo V310-15IKB",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V310-15IKB"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo V310-15ISK",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V310-15ISK"),
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V310-15ISK"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo V510-15IKB",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo V510-15IKB"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo ideapad 300-15IBR",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 300-15IBR"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo ideapad 300-15IKB",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 300-15IKB"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo ideapad 300S-11IBR",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 300S-11BR"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo ideapad 310-15ABR",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 310-15ABR"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo ideapad 310-15IAP",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 310-15IAP"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo ideapad 310-15IKB",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 310-15IKB"),
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 310-15IKB"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo ideapad 310-15ISK",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad 310-15ISK"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Lenovo ideapad Y700-14ISK",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "Lenovo ideapad Y700-14ISK"),
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
|
@ -710,6 +710,24 @@ static const struct file_operations telem_socstate_ops = {
|
|||
.release = single_release,
|
||||
};
|
||||
|
||||
static int telem_s0ix_res_get(void *data, u64 *val)
|
||||
{
|
||||
u64 s0ix_total_res;
|
||||
int ret;
|
||||
|
||||
ret = intel_pmc_s0ix_counter_read(&s0ix_total_res);
|
||||
if (ret) {
|
||||
pr_err("Failed to read S0ix residency");
|
||||
return ret;
|
||||
}
|
||||
|
||||
*val = s0ix_total_res;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_DEBUGFS_ATTRIBUTE(telem_s0ix_fops, telem_s0ix_res_get, NULL, "%llu\n");
|
||||
|
||||
static int telem_pss_trc_verb_show(struct seq_file *s, void *unused)
|
||||
{
|
||||
u32 verbosity;
|
||||
|
@ -938,7 +956,7 @@ static struct notifier_block pm_notifier = {
|
|||
static int __init telemetry_debugfs_init(void)
|
||||
{
|
||||
const struct x86_cpu_id *id;
|
||||
int err = -ENOMEM;
|
||||
int err;
|
||||
struct dentry *f;
|
||||
|
||||
/* Only APL supported for now */
|
||||
|
@ -958,11 +976,10 @@ static int __init telemetry_debugfs_init(void)
|
|||
|
||||
register_pm_notifier(&pm_notifier);
|
||||
|
||||
err = -ENOMEM;
|
||||
debugfs_conf->telemetry_dbg_dir = debugfs_create_dir("telemetry", NULL);
|
||||
if (!debugfs_conf->telemetry_dbg_dir) {
|
||||
err = -ENOMEM;
|
||||
if (!debugfs_conf->telemetry_dbg_dir)
|
||||
goto out_pm;
|
||||
}
|
||||
|
||||
f = debugfs_create_file("pss_info", S_IFREG | S_IRUGO,
|
||||
debugfs_conf->telemetry_dbg_dir, NULL,
|
||||
|
@ -988,6 +1005,14 @@ static int __init telemetry_debugfs_init(void)
|
|||
goto out;
|
||||
}
|
||||
|
||||
f = debugfs_create_file("s0ix_residency_usec", S_IFREG | S_IRUGO,
|
||||
debugfs_conf->telemetry_dbg_dir,
|
||||
NULL, &telem_s0ix_fops);
|
||||
if (!f) {
|
||||
pr_err("s0ix_residency_usec debugfs register failed\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
f = debugfs_create_file("pss_trace_verbosity", S_IFREG | S_IRUGO,
|
||||
debugfs_conf->telemetry_dbg_dir, NULL,
|
||||
&telem_pss_trc_verb_ops);
|
||||
|
|
|
@ -437,7 +437,7 @@ static struct attribute *pcc_sysfs_entries[] = {
|
|||
NULL,
|
||||
};
|
||||
|
||||
static struct attribute_group pcc_attr_group = {
|
||||
static const struct attribute_group pcc_attr_group = {
|
||||
.name = NULL, /* put in device directory */
|
||||
.attrs = pcc_sysfs_entries,
|
||||
};
|
||||
|
|
|
@ -51,7 +51,7 @@ static void peaq_wmi_poll(struct input_polled_dev *dev)
|
|||
return;
|
||||
}
|
||||
|
||||
if (peaq_ignore_events_counter && --peaq_ignore_events_counter > 0)
|
||||
if (peaq_ignore_events_counter && --peaq_ignore_events_counter >= 0)
|
||||
return;
|
||||
|
||||
if (obj.integer.value) {
|
||||
|
|
|
@ -1232,7 +1232,7 @@ static umode_t samsung_sysfs_is_visible(struct kobject *kobj,
|
|||
return ok ? attr->mode : 0;
|
||||
}
|
||||
|
||||
static struct attribute_group platform_attribute_group = {
|
||||
static const struct attribute_group platform_attribute_group = {
|
||||
.is_visible = samsung_sysfs_is_visible,
|
||||
.attrs = platform_attributes
|
||||
};
|
||||
|
|
|
@ -122,6 +122,20 @@ static const struct silead_ts_dmi_data pov_mobii_wintab_p800w_data = {
|
|||
.properties = pov_mobii_wintab_p800w_props,
|
||||
};
|
||||
|
||||
static const struct property_entry itworks_tw891_props[] = {
|
||||
PROPERTY_ENTRY_U32("touchscreen-size-x", 1600),
|
||||
PROPERTY_ENTRY_U32("touchscreen-size-y", 890),
|
||||
PROPERTY_ENTRY_BOOL("touchscreen-inverted-y"),
|
||||
PROPERTY_ENTRY_BOOL("touchscreen-swapped-x-y"),
|
||||
PROPERTY_ENTRY_STRING("firmware-name", "gsl3670-itworks-tw891.fw"),
|
||||
{ }
|
||||
};
|
||||
|
||||
static const struct silead_ts_dmi_data itworks_tw891_data = {
|
||||
.acpi_name = "MSSL1680:00",
|
||||
.properties = itworks_tw891_props,
|
||||
};
|
||||
|
||||
static const struct dmi_system_id silead_ts_dmi_table[] = {
|
||||
{
|
||||
/* CUBE iwork8 Air */
|
||||
|
@ -159,6 +173,16 @@ static const struct dmi_system_id silead_ts_dmi_table[] = {
|
|||
DMI_MATCH(DMI_BIOS_VERSION, "TREK.G.WI71C.JGBMRBA04"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Ployer Momo7w (same hardware as the Trekstor ST70416-6) */
|
||||
.driver_data = (void *)&surftab_wintron70_st70416_6_data,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Shenzhen PLOYER"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "MOMO7W"),
|
||||
/* Exact match, different versions need different fw */
|
||||
DMI_MATCH(DMI_BIOS_VERSION, "MOMO.G.WI71C.MABMRBA02"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* GP-electronic T701 */
|
||||
.driver_data = (void *)&gp_electronic_t701_data,
|
||||
|
@ -187,6 +211,14 @@ static const struct dmi_system_id silead_ts_dmi_table[] = {
|
|||
DMI_MATCH(DMI_BIOS_DATE, "08/22/2014"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* I.T.Works TW891 */
|
||||
.driver_data = (void *)&itworks_tw891_data,
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "TW891"),
|
||||
},
|
||||
},
|
||||
{ },
|
||||
};
|
||||
|
||||
|
|
|
@ -2419,7 +2419,7 @@ static umode_t toshiba_sysfs_is_visible(struct kobject *kobj,
|
|||
return exists ? attr->mode : 0;
|
||||
}
|
||||
|
||||
static struct attribute_group toshiba_attr_group = {
|
||||
static const struct attribute_group toshiba_attr_group = {
|
||||
.is_visible = toshiba_sysfs_is_visible,
|
||||
.attrs = toshiba_attributes,
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue