-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
usb: typec: ucsi: Add debugfs for ucsi commands
Add support for UCSI commands through the following debugfs: # /sys/kernel/debug/usb/ucsi/$UCSI_DEVICE/command # /sys/kernel/debug/usb/ucsi/$UCSI_DEVICE/response Eg: To execute UCSI GetCapabilities: # echo 0x6 > /sys/kernel/debug/usb/ucsi/<ucsi device>/command Then read the result, # cat /sys/kernel/debug/usb/ucsi/<ucsi device>/response 0x02000320000000020000ff0400000445 UCSI command will be written into the command file and the response for the command can be viewed under the response file. Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Saranya Gopal <saranya.gopal@intel.com> Co-developed-by: Rajaram Regupathy <rajaram.regupathy@intel.com> Signed-off-by: Rajaram Regupathy <rajaram.regupathy@intel.com> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> Link: https://lore.kernel.org/r/20230807105205.742819-1-saranya.gopal@intel.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
- Loading branch information
Saranya Gopal
authored and
Greg Kroah-Hartman
committed
Aug 8, 2023
1 parent
3b563b9
commit df0383f
Showing
5 changed files
with
141 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* UCSI debugfs interface | ||
* | ||
* Copyright (C) 2023 Intel Corporation | ||
* | ||
* Authors: Rajaram Regupathy <rajaram.regupathy@intel.com> | ||
* Gopal Saranya <saranya.gopal@intel.com> | ||
*/ | ||
#include <linux/debugfs.h> | ||
#include <linux/slab.h> | ||
#include <linux/string.h> | ||
#include <linux/types.h> | ||
#include <linux/usb.h> | ||
|
||
#include <asm/errno.h> | ||
|
||
#include "ucsi.h" | ||
|
||
static struct dentry *ucsi_debugfs_root; | ||
|
||
static int ucsi_cmd(void *data, u64 val) | ||
{ | ||
struct ucsi *ucsi = data; | ||
int ret; | ||
|
||
memset(&ucsi->debugfs->response, 0, sizeof(ucsi->debugfs->response)); | ||
ucsi->debugfs->status = 0; | ||
|
||
switch (UCSI_COMMAND(val)) { | ||
case UCSI_SET_UOM: | ||
case UCSI_SET_UOR: | ||
case UCSI_SET_PDR: | ||
case UCSI_CONNECTOR_RESET: | ||
ret = ucsi_send_command(ucsi, val, NULL, 0); | ||
break; | ||
case UCSI_GET_CAPABILITY: | ||
case UCSI_GET_CONNECTOR_CAPABILITY: | ||
case UCSI_GET_ALTERNATE_MODES: | ||
case UCSI_GET_CURRENT_CAM: | ||
case UCSI_GET_PDOS: | ||
case UCSI_GET_CABLE_PROPERTY: | ||
case UCSI_GET_CONNECTOR_STATUS: | ||
ret = ucsi_send_command(ucsi, val, | ||
&ucsi->debugfs->response, | ||
sizeof(ucsi->debugfs->response)); | ||
break; | ||
default: | ||
ret = -EOPNOTSUPP; | ||
} | ||
|
||
if (ret < 0) { | ||
ucsi->debugfs->status = ret; | ||
return ret; | ||
} | ||
|
||
return 0; | ||
} | ||
DEFINE_DEBUGFS_ATTRIBUTE(ucsi_cmd_fops, NULL, ucsi_cmd, "0x%llx\n"); | ||
|
||
static int ucsi_resp_show(struct seq_file *s, void *not_used) | ||
{ | ||
struct ucsi *ucsi = s->private; | ||
|
||
if (ucsi->debugfs->status) | ||
return ucsi->debugfs->status; | ||
|
||
seq_printf(s, "0x%016llx%016llx\n", ucsi->debugfs->response.high, | ||
ucsi->debugfs->response.low); | ||
return 0; | ||
} | ||
DEFINE_SHOW_ATTRIBUTE(ucsi_resp); | ||
|
||
void ucsi_debugfs_register(struct ucsi *ucsi) | ||
{ | ||
ucsi->debugfs = kzalloc(sizeof(*ucsi->debugfs), GFP_KERNEL); | ||
if (!ucsi->debugfs) | ||
return; | ||
|
||
ucsi->debugfs->dentry = debugfs_create_dir(dev_name(ucsi->dev), ucsi_debugfs_root); | ||
debugfs_create_file("command", 0200, ucsi->debugfs->dentry, ucsi, &ucsi_cmd_fops); | ||
debugfs_create_file("response", 0400, ucsi->debugfs->dentry, ucsi, &ucsi_resp_fops); | ||
} | ||
|
||
void ucsi_debugfs_unregister(struct ucsi *ucsi) | ||
{ | ||
debugfs_remove_recursive(ucsi->debugfs->dentry); | ||
kfree(ucsi->debugfs); | ||
} | ||
|
||
void ucsi_debugfs_init(void) | ||
{ | ||
ucsi_debugfs_root = debugfs_create_dir("ucsi", usb_debug_root); | ||
} | ||
|
||
void ucsi_debugfs_exit(void) | ||
{ | ||
debugfs_remove(ucsi_debugfs_root); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters