mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 15:12:13 +02:00
firmware: cs_dsp: Factor out common debugfs string read
cs_dsp_debugfs_wmfw_read() and cs_dsp_debugfs_bin_read() were identical except for which struct member they printed. Move all this duplicated code into a common function cs_dsp_debugfs_string_read(). The check for dsp->booted has been removed because this is redundant. The two strings are set when the DSP is booted and cleared when the DSP is powered-down. Access to the string char * must be protected by the pwr_lock mutex. The string is passed into cs_dsp_debugfs_string_read() as a pointer to the char * so that the mutex lock can also be factored out into cs_dsp_debugfs_string_read(). wmfw_file_name and bin_file_name members of struct cs_dsp have been changed to const char *. It makes for a better API to pass a const pointer into cs_dsp_debugfs_string_read(). Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Link: https://patch.msgid.link/20251120130640.1169780-2-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
be2b723d94
commit
78cfd833bc
|
|
@ -9,6 +9,7 @@
|
|||
* Cirrus Logic International Semiconductor Ltd.
|
||||
*/
|
||||
|
||||
#include <linux/cleanup.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/delay.h>
|
||||
|
|
@ -410,24 +411,30 @@ static void cs_dsp_debugfs_clear(struct cs_dsp *dsp)
|
|||
dsp->bin_file_name = NULL;
|
||||
}
|
||||
|
||||
static ssize_t cs_dsp_debugfs_string_read(struct cs_dsp *dsp,
|
||||
char __user *user_buf,
|
||||
size_t count, loff_t *ppos,
|
||||
const char **pstr)
|
||||
{
|
||||
const char *str;
|
||||
|
||||
scoped_guard(mutex, &dsp->pwr_lock) {
|
||||
str = *pstr;
|
||||
if (!str)
|
||||
return 0;
|
||||
|
||||
return simple_read_from_buffer(user_buf, count, ppos, str, strlen(str));
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t cs_dsp_debugfs_wmfw_read(struct file *file,
|
||||
char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct cs_dsp *dsp = file->private_data;
|
||||
ssize_t ret;
|
||||
|
||||
mutex_lock(&dsp->pwr_lock);
|
||||
|
||||
if (!dsp->wmfw_file_name || !dsp->booted)
|
||||
ret = 0;
|
||||
else
|
||||
ret = simple_read_from_buffer(user_buf, count, ppos,
|
||||
dsp->wmfw_file_name,
|
||||
strlen(dsp->wmfw_file_name));
|
||||
|
||||
mutex_unlock(&dsp->pwr_lock);
|
||||
return ret;
|
||||
return cs_dsp_debugfs_string_read(dsp, user_buf, count, ppos,
|
||||
&dsp->wmfw_file_name);
|
||||
}
|
||||
|
||||
static ssize_t cs_dsp_debugfs_bin_read(struct file *file,
|
||||
|
|
@ -435,19 +442,9 @@ static ssize_t cs_dsp_debugfs_bin_read(struct file *file,
|
|||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct cs_dsp *dsp = file->private_data;
|
||||
ssize_t ret;
|
||||
|
||||
mutex_lock(&dsp->pwr_lock);
|
||||
|
||||
if (!dsp->bin_file_name || !dsp->booted)
|
||||
ret = 0;
|
||||
else
|
||||
ret = simple_read_from_buffer(user_buf, count, ppos,
|
||||
dsp->bin_file_name,
|
||||
strlen(dsp->bin_file_name));
|
||||
|
||||
mutex_unlock(&dsp->pwr_lock);
|
||||
return ret;
|
||||
return cs_dsp_debugfs_string_read(dsp, user_buf, count, ppos,
|
||||
&dsp->bin_file_name);
|
||||
}
|
||||
|
||||
static const struct {
|
||||
|
|
|
|||
|
|
@ -188,8 +188,8 @@ struct cs_dsp {
|
|||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
struct dentry *debugfs_root;
|
||||
char *wmfw_file_name;
|
||||
char *bin_file_name;
|
||||
const char *wmfw_file_name;
|
||||
const char *bin_file_name;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user