cnss2: Add debugfs for dynamic feature
Add a debugfs for dynamic feature. User can enable/disable certain
features in WLAN FW by writing to this debugfs.
CRs-Fixed: 2468610
Change-Id: Iefaa905c52011edcf9619d5ddbe8e356dfce04ba
Signed-off-by: Yuanyuan Liu <yuanliu@codeaurora.org>
diff --git a/drivers/net/wireless/cnss2/debug.c b/drivers/net/wireless/cnss2/debug.c
index 3e8ff87..89dcc2a 100644
--- a/drivers/net/wireless/cnss2/debug.c
+++ b/drivers/net/wireless/cnss2/debug.c
@@ -650,6 +650,51 @@
.llseek = seq_lseek,
};
+static ssize_t cnss_dynamic_feature_write(struct file *fp,
+ const char __user *user_buf,
+ size_t count, loff_t *off)
+{
+ struct cnss_plat_data *plat_priv =
+ ((struct seq_file *)fp->private_data)->private;
+ int ret = 0;
+ u64 val;
+
+ ret = kstrtou64_from_user(user_buf, count, 0, &val);
+ if (ret)
+ return ret;
+
+ plat_priv->dynamic_feature = val;
+ ret = cnss_wlfw_dynamic_feature_mask_send_sync(plat_priv);
+ if (ret < 0)
+ return ret;
+
+ return count;
+}
+
+static int cnss_dynamic_feature_show(struct seq_file *s, void *data)
+{
+ struct cnss_plat_data *cnss_priv = s->private;
+
+ seq_printf(s, "dynamic_feature: 0x%llx\n", cnss_priv->dynamic_feature);
+
+ return 0;
+}
+
+static int cnss_dynamic_feature_open(struct inode *inode,
+ struct file *file)
+{
+ return single_open(file, cnss_dynamic_feature_show,
+ inode->i_private);
+}
+
+static const struct file_operations cnss_dynamic_feature_fops = {
+ .read = seq_read,
+ .write = cnss_dynamic_feature_write,
+ .open = cnss_dynamic_feature_open,
+ .owner = THIS_MODULE,
+ .llseek = seq_lseek,
+};
+
#ifdef CONFIG_CNSS2_DEBUG
static int cnss_create_debug_only_node(struct cnss_plat_data *plat_priv)
{
@@ -665,6 +710,8 @@
&cnss_runtime_pm_debug_fops);
debugfs_create_file("control_params", 0600, root_dentry, plat_priv,
&cnss_control_params_debug_fops);
+ debugfs_create_file("dynamic_feature", 0600, root_dentry, plat_priv,
+ &cnss_dynamic_feature_fops);
return 0;
}