At Thu, 31 Jul 2008 21:41:48 -0400, Jon Smirl wrote: > > Mark, I see this patch is already in your tree. I have rewritten it a > little differently to ensure that too many results can't be returned. > This is in my system and tested. I had a bug too so I know the > limiting it to pagesize code works. Mark's patch was already applied. Could you re-generated your change based on that? thanks, Takashi > > Signed-off-by: Jon Smirl <jonsmirl@xxxxxxxxx> > --- > > include/sound/soc.h | 1 + > sound/soc/soc-core.c | 19 +++++++++++++------ > 2 files changed, 14 insertions(+), 6 deletions(-) > > diff --git a/include/sound/soc.h b/include/sound/soc.h > index 1890d87..b95c0c2 100644 > --- a/include/sound/soc.h > +++ b/include/sound/soc.h > @@ -410,6 +410,7 @@ struct snd_soc_codec { > void *control_data; /* codec control (i2c/3wire) data */ > unsigned int (*read)(struct snd_soc_codec *, unsigned int); > int (*write)(struct snd_soc_codec *, unsigned int, unsigned int); > + int (*display_register)(struct snd_soc_codec *, char *, unsigned > int, unsigned int); > hw_write_t hw_write; > hw_read_t hw_read; > void *reg_cache; > diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c > index 83f1190..55f7559 100644 > --- a/sound/soc/soc-core.c > +++ b/sound/soc/soc-core.c > @@ -961,7 +961,7 @@ static ssize_t codec_reg_show(struct device *dev, > { > struct snd_soc_device *devdata = dev_get_drvdata(dev); > struct snd_soc_codec *codec = devdata->codec; > - int i, step = 1, count = 0; > + int i, step = 1, count; > > if (!codec->reg_cache_size) > return 0; > @@ -969,11 +969,18 @@ static ssize_t codec_reg_show(struct device *dev, > if (codec->reg_cache_step) > step = codec->reg_cache_step; > > - count += sprintf(buf, "%s registers\n", codec->name); > - for (i = 0; i < codec->reg_cache_size; i += step) > - count += sprintf(buf + count, "%2x: %4x\n", i, > - codec->read(codec, i)); > - > + count = sprintf(buf, "%s registers\n", codec->name); > + for (i = 0; i < codec->reg_cache_size; i += step) { > + if (codec->display_register) > + count += codec->display_register(codec, > + buf + count, PAGE_SIZE - count, i); > + else { > + count += snprintf(buf + count, PAGE_SIZE - count, "%2x: ", i); > + count += snprintf(buf + count, PAGE_SIZE - count, "%4x", > + codec->read(codec, i)); > + count += snprintf(buf + count, PAGE_SIZE - count, "\n"); > + } > + } > return count; > } > static DEVICE_ATTR(codec_reg, 0444, codec_reg_show, NULL); > > > -- > Jon Smirl > jonsmirl@xxxxxxxxx > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel