[alsa-devel] Is this bug ? dev_set/get_drvdata() of rtd
Hi ALSA SoC
I'm now checking ALSA SoC framework, and I noticed strange operation. Is this bug ?
I think device data of "rtd->dev" is set as "rtd" on soc_post_component_init() by using dev_set_drvdata(), and many soc-core functions are based on it (= they are using dev_get_drvdata())
But, soc.h has snd_soc_pcm_set_drvdata(). device data of rtd->dev will be overwrite by this function ? But is this OK ? or bug ? It seems below drivers are using this sound/soc/intel/haswell/sst-haswell-pcm.c sound/soc/qcom/lpass-platform.c
linux/sound/soc/soc-core.c static int soc_post_component_init(xxx) { ... dev_set_drvdata(rtd->dev, rtd); ... }
static ssize_t codec_reg_show(xxx) { struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); ... }
static ssize_t pmdown_time_show(xxx) { struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); ... }
static ssize_t pmdown_time_set(xxx) { struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); ... }
static umode_t soc_dev_attr_is_visible(xxx) { struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); ... }
linux/include/sound/soc.h static inline void snd_soc_pcm_set_drvdata(struct snd_soc_pcm_runtime *rtd, void *data) { dev_set_drvdata(rtd->dev, data); }
Best regards --- Kuninori Morimoto
On Wed, Jul 27, 2016 at 03:25:41AM +0000, Kuninori Morimoto wrote:
I think device data of "rtd->dev" is set as "rtd" on soc_post_component_init() by using dev_set_drvdata(), and many soc-core functions are based on it (= they are using dev_get_drvdata())
But, soc.h has snd_soc_pcm_set_drvdata(). device data of rtd->dev will be overwrite by this function ? But is this OK ? or bug ?
Looks like a bug, I suspect there's some confusion caused by old code expecting there to be a soc-card device there and getting confused.
static ssize_t codec_reg_show(xxx) { struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); ... }
We can probably kill this file now, everything is on regmap now.
static ssize_t pmdown_time_show(xxx) { struct snd_soc_pcm_runtime *rtd = dev_get_drvdata(dev); ... }
These ones will need a bit more looking at, they probably want to be on the card using the card device I think.
participants (2)
-
Kuninori Morimoto
-
Mark Brown