ASoC: soc-core: Ensure codec_reg has fixed length fields
PATCH 1/1 ASoC: soc-core: Ensure codec_reg has fixed length fields
Make the format of the codec_reg file more easily parsable. Remove the header field which gives the codec name. These changes are important when it comes to extend the debugfs codec_reg file to dump more than PAGE_SIZE bytes to make it easier to calculate offsets within the file.
We still need to handle the case when the snd_soc_read() call fails and <no data: %d> is outputted.
--- sound/soc/soc-core.c | 27 ++++++++++++++++++++++++--- 1 files changed, 24 insertions(+), 3 deletions(-)
sound/soc/soc-core.c +24 -3
@@ -69,10 +69,32 @@ static int pmdown_time = 5000;module_param (pmdown_time, int,0 );MODULE_PARM_DESC (pmdown_time,"DAPM stream powerdown time (msecs)" ); +/* returns the minimum number of bytes needed to represent +* a particular given value */ +static int min_bytes_needed (unsigned long val) +{ +int c =0 ; +int i; + +for (i = (sizeof val *8 ) -1 ; i >=0 ; --i, ++c) +if (val & (1UL << i)) +break ; + c = (sizeof val *8 ) - c; +if (!c || (c %8 )) + c = (c +8 ) /8 ; +else + c /=8 ; +return c; +} +/* codec register dump */ static ssize_t soc_codec_reg_show (struct snd_soc_codec *codec,char *buf) {int ret, i, step =1 , count =0 ; +int wordsize, regsize; + + wordsize = codec->driver->reg_word_size *2 ; + regsize =min_bytes_needed (codec->driver->reg_cache_size) *2 ;if (!codec->driver->reg_cache_size)return 0 ;
@@ -80,12 +102,11 @@ static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf)if (codec->driver->reg_cache_step) step = codec->driver->reg_cache_step; - count +=sprintf (buf,"%s registers\n" , codec->name);for (i =0 ; i < codec->driver->reg_cache_size; i += step) {if (codec->readable_register && !codec->readable_register (codec, i))continue ; - count +=sprintf (buf + count,"%2x: " , i); + count +=sprintf (buf + count,"%.*x: " , regsize, i);if (count >=PAGE_SIZE -1 )break ;
@@ -101,7 +122,7 @@ static ssize_t soc_codec_reg_show(struct snd_soc_codec *codec, char *buf)if (ret >=0 ) count +=snprintf (buf + count,PAGE_SIZE - count, -"%4x" , ret); +"%.*x" , wordsize, ret);else count += snprintf(buf + count, PAGE_SIZE - count,
Signature · 1 line
1.7.3.5
Quoted 10 lines · Dimitris Papastamos
Make the format of the
codec_regfile more easily parsable. Remove the header field which gives the codec name. These changes are important when it comes to extend the debugfscodec_regfile to dump more thanPAGE_SIZEbytes to make it easier to calculate offsets within the file.We still need to handle the case when the
snd_soc_read()call fails and <no data: %d> is outputted.Signed-off-by Dimitris Papastamos <[email protected]>
Signature · 3 lines
Freelance Developer, SlimLogic Ltd ASoC and Voltage Regulator Maintainer. http://www.slimlogic.co.uk
Mark Brown
AppliedQuoted 5 lines · Dimitris Papastamos
Make the format of the
codec_regfile more easily parsable. Remove the header field which gives the codec name. These changes are important when it comes to extend the debugfscodec_regfile to dump more thanPAGE_SIZEbytes to make it easier to calculate offsets within the file.
Applied, thanks.