platform/x86: thinkpad_acpi: Add debugfs entry to display HWDD raw

The Lenovo diagnostics and support team have requested a mechanism
to get the raw data from the HWDD commands to support customer debug
situations.

Add a debugfs entry to display the HWDD raw data.

Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Link: https://patch.msgid.link/20260429015210.1863316-1-mpearson-lenovo@squebb.ca
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
This commit is contained in:
Mark Pearson 2026-04-28 21:51:59 -04:00 committed by Ilpo Järvinen
parent 8ef6b01cee
commit 165e81354e
No known key found for this signature in database
GPG Key ID: 59AC4F6153E5CE31

View File

@ -38,6 +38,7 @@
#include <linux/backlight.h>
#include <linux/bitfield.h>
#include <linux/bitops.h>
#include <linux/debugfs.h>
#include <linux/delay.h>
#include <linux/dmi.h>
#include <linux/freezer.h>
@ -11216,6 +11217,26 @@ static ssize_t hwdd_status_show(struct device *dev,
return sysfs_emit(buf, "0\n");
}
/* sysfs type-c damage detection raw data - accessed via debugfs*/
static int hwdd_raw_show(struct seq_file *m, void *v)
{
unsigned int damage_status;
int err;
if (!ucdd_supported)
return -ENODEV;
/* Get USB TYPE-C damage status */
err = hwdd_command(HWDD_GET_DMG_USBC, &damage_status);
if (err)
return err;
seq_printf(m, "HWDD: 0x%x\n", damage_status);
return 0;
}
DEFINE_SHOW_ATTRIBUTE(hwdd_raw);
static DEVICE_ATTR_RO(hwdd_status);
static DEVICE_ATTR_RO(hwdd_detail);
@ -11503,6 +11524,20 @@ static const char * __init str_supported(int is_supported)
}
#endif /* CONFIG_THINKPAD_ACPI_DEBUG */
static struct dentry *tpacpi_dbg;
static void tpacpi_debugfs_init(void)
{
tpacpi_dbg = debugfs_create_dir("tpacpi", NULL);
/* HWDD raw data */
debugfs_create_file("hwdd-raw", 0444, tpacpi_dbg, NULL, &hwdd_raw_fops);
}
static void tpacpi_debugfs_remove(void)
{
debugfs_remove_recursive(tpacpi_dbg);
}
static void ibm_exit(struct ibm_struct *ibm)
{
dbg_printk(TPACPI_DBG_EXIT, "removing %s\n", ibm->name);
@ -12067,6 +12102,8 @@ static void thinkpad_acpi_module_exit(void)
remove_proc_entry(TPACPI_PROC_DIR, acpi_root_dir);
if (tpacpi_wq)
destroy_workqueue(tpacpi_wq);
if (tpacpi_dbg)
tpacpi_debugfs_remove();
kfree(thinkpad_id.bios_version_str);
kfree(thinkpad_id.ec_version_str);
@ -12197,6 +12234,8 @@ static int __init thinkpad_acpi_module_init(void)
return -ENODEV;
}
tpacpi_debugfs_init();
dmi_id = dmi_first_match(fwbug_list);
if (dmi_id)
tp_features.quirks = dmi_id->driver_data;