This updates the compress core code to create an 'info' file under procfs
for each compressed node, like the PCM core does for PCM nodes.
Based off Takashi's for-next
Richard Fitzgerald (2):
ALSA: compress: Add procfs info file for compressed nodes
ALSA: compress: Pass id string to snd_compress_new
include/sound/compress_driver.h | 7 +++-
sound/core/compress_offload.c | 86 ++++++++++++++++++++++++++++++++++++++++-
sound/soc/soc-compress.c | 8 +++-
3 files changed, 97 insertions(+), 4 deletions(-)
--
1.9.1
This patch implements a procfs info file for compr nodes when
SND_VERBOSE_PROCFS is enabled. This is equivalent to what the PCM
core already does for pcm nodes.
Signed-off-by: Richard Fitzgerald <[email protected]>
---
include/sound/compress_driver.h | 5 +++
sound/core/compress_offload.c | 73 ++++++++++++++++++++++++++++++++++++++++-
2 files changed, 77 insertions(+), 1 deletion(-)
diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h
index fa1d055..85c4237 100644
--- a/include/sound/compress_driver.h
+++ b/include/sound/compress_driver.h
@@ -152,6 +152,11 @@ struct snd_compr {
unsigned int direction;
struct mutex lock;
int device;
+#ifdef CONFIG_SND_VERBOSE_PROCFS
+ char id[64];
+ struct snd_info_entry *proc_root;
+ struct snd_info_entry *proc_info_entry;
+#endif
};
/* compress device register APIs */
diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
index b123c42..1258e9d 100644
--- a/sound/core/compress_offload.c
+++ b/sound/core/compress_offload.c
@@ -40,6 +40,7 @@
#include <linux/module.h>
#include <sound/core.h>
#include <sound/initval.h>
+#include <sound/info.h>
#include <sound/compress_params.h>
#include <sound/compress_offload.h>
#include <sound/compress_driver.h>
@@ -891,11 +892,76 @@ static int snd_compress_dev_disconnect(struct snd_device *device)
return 0;
}
+#ifdef CONFIG_SND_VERBOSE_PROCFS
+static void snd_compress_proc_info_read(struct snd_info_entry *entry,
+ struct snd_info_buffer *buffer)
+{
+ struct snd_compr *compr = (struct snd_compr *)entry->private_data;
+
+ snd_iprintf(buffer, "card: %d\n", compr->card->number);
+ snd_iprintf(buffer, "device: %d\n", compr->device);
+ snd_iprintf(buffer, "stream: %s\n",
+ compr->direction == SND_COMPRESS_PLAYBACK
+ ? "PLAYBACK" : "CAPTURE");
+ snd_iprintf(buffer, "id: %s\n", compr->id);
+}
+
+static int snd_compress_proc_init(struct snd_compr *compr)
+{
+ struct snd_info_entry *entry;
+ char name[16];
+
+ sprintf(name, "compr%i", compr->device);
+ entry = snd_info_create_card_entry(compr->card, name,
+ compr->card->proc_root);
+ if (!entry)
+ return -ENOMEM;
+ entry->mode = S_IFDIR | S_IRUGO | S_IXUGO;
+ if (snd_info_register(entry) < 0) {
+ snd_info_free_entry(entry);
+ return -ENOMEM;
+ }
+ compr->proc_root = entry;
+
+ entry = snd_info_create_card_entry(compr->card, "info",
+ compr->proc_root);
+ if (entry) {
+ snd_info_set_text_ops(entry, compr,
+ snd_compress_proc_info_read);
+ if (snd_info_register(entry) < 0) {
+ snd_info_free_entry(entry);
+ entry = NULL;
+ }
+ }
+ compr->proc_info_entry = entry;
+
+ return 0;
+}
+
+static void snd_compress_proc_done(struct snd_compr *compr)
+{
+ snd_info_free_entry(compr->proc_info_entry);
+ compr->proc_info_entry = NULL;
+ snd_info_free_entry(compr->proc_root);
+ compr->proc_root = NULL;
+}
+#else
+static inline int snd_compress_proc_init(struct snd_compr *compr)
+{
+ return 0;
+}
+
+static inline void snd_compress_proc_done(struct snd_compr *compr)
+{
+}
+#endif
+
static int snd_compress_dev_free(struct snd_device *device)
{
struct snd_compr *compr;
compr = device->device_data;
+ snd_compress_proc_done(compr);
put_device(&compr->dev);
return 0;
}
@@ -915,6 +981,7 @@ int snd_compress_new(struct snd_card *card, int device,
.dev_register = snd_compress_dev_register,
.dev_disconnect = snd_compress_dev_disconnect,
};
+ int ret;
compr->card = card;
compr->device = device;
@@ -923,7 +990,11 @@ int snd_compress_new(struct snd_card *card, int device,
snd_device_initialize(&compr->dev, card);
dev_set_name(&compr->dev, "comprC%iD%i", card->number, device);
- return snd_device_new(card, SNDRV_DEV_COMPRESS, compr, &ops);
+ ret = snd_device_new(card, SNDRV_DEV_COMPRESS, compr, &ops);
+ if (ret == 0)
+ snd_compress_proc_init(compr);
+
+ return ret;
}
EXPORT_SYMBOL_GPL(snd_compress_new);
--
1.9.1
Make snd_compress_new take an id string (like snd_pcm_new).
This string can be included in the procfs info.
This patch also updates soc_new_compress() to create an ID
based on the stream and dai name, as done for PCM streams.
Signed-off-by: Richard Fitzgerald <[email protected]>
---
include/sound/compress_driver.h | 2 +-
sound/core/compress_offload.c | 13 ++++++++++++-
sound/soc/soc-compress.c | 8 +++++++-
3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h
index 85c4237..c0abcdc 100644
--- a/include/sound/compress_driver.h
+++ b/include/sound/compress_driver.h
@@ -163,7 +163,7 @@ struct snd_compr {
int snd_compress_register(struct snd_compr *device);
int snd_compress_deregister(struct snd_compr *device);
int snd_compress_new(struct snd_card *card, int device,
- int type, struct snd_compr *compr);
+ int type, const char *id, struct snd_compr *compr);
/* dsp driver callback apis
* For playback: driver should call snd_compress_fragment_elapsed() to let the
diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
index 1258e9d..2c52510 100644
--- a/sound/core/compress_offload.c
+++ b/sound/core/compress_offload.c
@@ -945,6 +945,11 @@ static void snd_compress_proc_done(struct snd_compr *compr)
snd_info_free_entry(compr->proc_root);
compr->proc_root = NULL;
}
+
+static inline void snd_compress_set_id(struct snd_compr *compr, const char *id)
+{
+ strlcpy(compr->id, id, sizeof(compr->id));
+}
#else
static inline int snd_compress_proc_init(struct snd_compr *compr)
{
@@ -954,6 +959,10 @@ static inline int snd_compress_proc_init(struct snd_compr *compr)
static inline void snd_compress_proc_done(struct snd_compr *compr)
{
}
+
+static inline void snd_compress_set_id(struct snd_compr *compr, const char *id)
+{
+}
#endif
static int snd_compress_dev_free(struct snd_device *device)
@@ -974,7 +983,7 @@ static int snd_compress_dev_free(struct snd_device *device)
* @compr: compress device pointer
*/
int snd_compress_new(struct snd_card *card, int device,
- int dirn, struct snd_compr *compr)
+ int dirn, const char *id, struct snd_compr *compr)
{
static struct snd_device_ops ops = {
.dev_free = snd_compress_dev_free,
@@ -987,6 +996,8 @@ int snd_compress_new(struct snd_card *card, int device,
compr->device = device;
compr->direction = dirn;
+ snd_compress_set_id(compr, id);
+
snd_device_initialize(&compr->dev, card);
dev_set_name(&compr->dev, "comprC%iD%i", card->number, device);
diff --git a/sound/soc/soc-compress.c b/sound/soc/soc-compress.c
index 12a9820..fffbe6f 100644
--- a/sound/soc/soc-compress.c
+++ b/sound/soc/soc-compress.c
@@ -689,7 +689,13 @@ int snd_soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
compr->ops->copy = soc_compr_copy;
mutex_init(&compr->lock);
- ret = snd_compress_new(rtd->card->snd_card, num, direction, compr);
+
+ snprintf(new_name, sizeof(new_name), "%s %s-%d",
+ rtd->dai_link->stream_name,
+ rtd->codec_dai->name, num);
+
+ ret = snd_compress_new(rtd->card->snd_card, num, direction,
+ new_name, compr);
if (ret < 0) {
pr_err("compress asoc: can't create compress for codec %s\n",
codec->component.name);
--
1.9.1
On Wed, Nov 25, 2015 at 01:00:22PM +0000, Richard Fitzgerald wrote:
> This updates the compress core code to create an 'info' file under procfs
> for each compressed node, like the PCM core does for PCM nodes.
>
> Based off Takashi's for-next
Looks good to me..
Acked-by: Vinod Koul <[email protected]>
--
~Vinod
On Wed, 25 Nov 2015 14:00:22 +0100,
Richard Fitzgerald wrote:
>
> This updates the compress core code to create an 'info' file under procfs
> for each compressed node, like the PCM core does for PCM nodes.
>
> Based off Takashi's for-next
>
> Richard Fitzgerald (2):
> ALSA: compress: Add procfs info file for compressed nodes
> ALSA: compress: Pass id string to snd_compress_new
I applied both patches now to topic/compress-id branch (and merged
back to for-next branch, too).
Mark, pull topic/compress-id branch to your tree if necessary.
thanks,
Takashi
>
> include/sound/compress_driver.h | 7 +++-
> sound/core/compress_offload.c | 86 ++++++++++++++++++++++++++++++++++++++++-
> sound/soc/soc-compress.c | 8 +++-
> 3 files changed, 97 insertions(+), 4 deletions(-)
>
> --
> 1.9.1
>
>