mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 13:11:40 +00:00
ASoC: soc-component: use io_mutex correctly
component has io_mutex, but it had been used at snd_soc_component_update_bits_legacy() only which does read and write. static int snd_soc_component_update_bits_legacy(...) { ... => mutex_lock(&component->io_mutex); ... old = snd_soc_component_read(...); ... ret = snd_soc_component_write(...); ... => mutex_unlock(&component->io_mutex); ... } It is pointless if it is not used with both read and write functions. This patch uses io_mutex correctly with read/write. Here, xxx_no_lock() is local functions. static int snd_soc_component_read(...) { ... => mutex_lock(&component->io_mutex); val = soc_component_read_no_lock(...); => mutex_unlock(&component->io_mutex); ... } static int snd_soc_component_write(...) { ... => mutex_lock(&component->io_mutex); ret = soc_component_write_no_lock(...); => mutex_unlock(&component->io_mutex); ... } static int snd_soc_component_update_bits_legacy(...) { ... => mutex_lock(&component->io_mutex); ... old = soc_component_read_no_lock(...); ... ret = soc_component_write_no_lock(...); ... => mutex_unlock(&component->io_mutex); ... } Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87r1uf4mfa.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
cf6e26c71b
commit
e8712315c4
@ -403,15 +403,9 @@ EXPORT_SYMBOL_GPL(snd_soc_component_exit_regmap);
|
||||
|
||||
#endif
|
||||
|
||||
/**
|
||||
* snd_soc_component_read() - Read register value
|
||||
* @component: Component to read from
|
||||
* @reg: Register to read
|
||||
*
|
||||
* Return: read value
|
||||
*/
|
||||
unsigned int snd_soc_component_read(struct snd_soc_component *component,
|
||||
unsigned int reg)
|
||||
static unsigned int soc_component_read_no_lock(
|
||||
struct snd_soc_component *component,
|
||||
unsigned int reg)
|
||||
{
|
||||
int ret;
|
||||
unsigned int val = 0;
|
||||
@ -430,8 +424,41 @@ unsigned int snd_soc_component_read(struct snd_soc_component *component,
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
/**
|
||||
* snd_soc_component_read() - Read register value
|
||||
* @component: Component to read from
|
||||
* @reg: Register to read
|
||||
*
|
||||
* Return: read value
|
||||
*/
|
||||
unsigned int snd_soc_component_read(struct snd_soc_component *component,
|
||||
unsigned int reg)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
mutex_lock(&component->io_mutex);
|
||||
val = soc_component_read_no_lock(component, reg);
|
||||
mutex_unlock(&component->io_mutex);
|
||||
|
||||
return val;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_component_read);
|
||||
|
||||
static int soc_component_write_no_lock(
|
||||
struct snd_soc_component *component,
|
||||
unsigned int reg, unsigned int val)
|
||||
{
|
||||
int ret = -EIO;
|
||||
|
||||
if (component->regmap)
|
||||
ret = regmap_write(component->regmap, reg, val);
|
||||
else if (component->driver->write)
|
||||
ret = component->driver->write(component, reg, val);
|
||||
|
||||
return soc_component_ret(component, ret);
|
||||
}
|
||||
|
||||
/**
|
||||
* snd_soc_component_write() - Write register value
|
||||
* @component: Component to write to
|
||||
@ -443,14 +470,13 @@ EXPORT_SYMBOL_GPL(snd_soc_component_read);
|
||||
int snd_soc_component_write(struct snd_soc_component *component,
|
||||
unsigned int reg, unsigned int val)
|
||||
{
|
||||
int ret = -EIO;
|
||||
int ret;
|
||||
|
||||
if (component->regmap)
|
||||
ret = regmap_write(component->regmap, reg, val);
|
||||
else if (component->driver->write)
|
||||
ret = component->driver->write(component, reg, val);
|
||||
mutex_lock(&component->io_mutex);
|
||||
ret = soc_component_write_no_lock(component, reg, val);
|
||||
mutex_unlock(&component->io_mutex);
|
||||
|
||||
return soc_component_ret(component, ret);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(snd_soc_component_write);
|
||||
|
||||
@ -463,12 +489,12 @@ static int snd_soc_component_update_bits_legacy(
|
||||
|
||||
mutex_lock(&component->io_mutex);
|
||||
|
||||
old = snd_soc_component_read(component, reg);
|
||||
old = soc_component_read_no_lock(component, reg);
|
||||
|
||||
new = (old & ~mask) | (val & mask);
|
||||
*change = old != new;
|
||||
if (*change)
|
||||
ret = snd_soc_component_write(component, reg, new);
|
||||
ret = soc_component_write_no_lock(component, reg, new);
|
||||
|
||||
mutex_unlock(&component->io_mutex);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user