@@ -153,7 +153,9 @@ struct media_entity *media_get_default_entity(struct media_device *media,
return media->def.v4l;
case MEDIA_ENT_T_DEVNODE_FB:
return media->def.fb;
- case MEDIA_ENT_T_DEVNODE_ALSA:
+ case MEDIA_ENT_T_DEVNODE_ALSA_CAPTURE:
+ case MEDIA_ENT_T_DEVNODE_ALSA_PLAYBACK:
+ case MEDIA_ENT_T_DEVNODE_ALSA_MIXER:
return media->def.alsa;
case MEDIA_ENT_T_DEVNODE_DVB_FE:
case MEDIA_ENT_T_DEVNODE_DVB_DEMUX:
@@ -481,7 +483,6 @@ static int media_get_devname_sysfs(struct media_entity *entity)
if (p == NULL)
return -EINVAL;
- sprintf(devname, "/dev/%s", p + 1);
if (strstr(p + 1, "dvb")) {
char *s = p + 1;
@@ -493,6 +494,8 @@ static int media_get_devname_sysfs(struct media_entity *entity)
return -EINVAL;
*p = '/';
sprintf(devname, "/dev/dvb/adapter%s", s);
+ } else if (strstr(p + 1, "pcm") || strstr(p + 1, "control")) {
+ sprintf(devname, "/dev/snd/%s", p + 1);
} else {
sprintf(devname, "/dev/%s", p + 1);
}
@@ -562,7 +565,9 @@ static int media_enum_entities(struct media_device *media)
case MEDIA_ENT_T_DEVNODE_FB:
media->def.fb = entity;
break;
- case MEDIA_ENT_T_DEVNODE_ALSA:
+ case MEDIA_ENT_T_DEVNODE_ALSA_CAPTURE:
+ case MEDIA_ENT_T_DEVNODE_ALSA_PLAYBACK:
+ case MEDIA_ENT_T_DEVNODE_ALSA_MIXER:
media->def.alsa = entity;
break;
case MEDIA_ENT_T_DEVNODE_DVB_FE:
@@ -577,8 +582,7 @@ static int media_enum_entities(struct media_device *media)
/* Find the corresponding device name. */
if (media_entity_type(entity) != MEDIA_ENT_T_DEVNODE &&
- media_entity_type(entity) != MEDIA_ENT_T_V4L2_SUBDEV &&
- entity->info.type == MEDIA_ENT_T_DEVNODE_ALSA)
+ media_entity_type(entity) != MEDIA_ENT_T_V4L2_SUBDEV)
continue;
/* Try to get the device name via udev */
@@ -774,7 +778,9 @@ int media_device_add_entity(struct media_device *media,
defent = &media->def.fb;
entity->info.fb = desc->fb;
break;
- case MEDIA_ENT_T_DEVNODE_ALSA:
+ case MEDIA_ENT_T_DEVNODE_ALSA_CAPTURE:
+ case MEDIA_ENT_T_DEVNODE_ALSA_PLAYBACK:
+ case MEDIA_ENT_T_DEVNODE_ALSA_MIXER:
defent = &media->def.alsa;
entity->info.alsa = desc->alsa;
break;
@@ -290,6 +290,9 @@ static const char *media_entity_subtype_to_string(unsigned type)
"DVB DVR",
"DVB CA",
"DVB NET",
+ "ALSA CAPTURE",
+ "ALSA PLAYBACK",
+ "ALSA MIXER",
};
static const char *subdev_types[] = {
"Unknown",
@@ -305,7 +305,9 @@ struct media_entity *media_get_entity(struct media_device *media, unsigned int i
*
* MEDIA_ENT_T_DEVNODE_V4L
* MEDIA_ENT_T_DEVNODE_FB
- * MEDIA_ENT_T_DEVNODE_ALSA
+ * MEDIA_ENT_T_DEVNODE_ALSA_CAPTURE
+ * MEDIA_ENT_T_DEVNODE_ALSA_PLAYBACK
+ * MEDIA_ENT_T_DEVNODE_ALSA_MIXER
* MEDIA_ENT_T_DEVNODE_DVB_FE
* MEDIA_ENT_T_DEVNODE_DVB_DEMUX
* MEDIA_ENT_T_DEVNODE_DVB_DVR
Add support to recognize ALSA media nodes and generate media graph that includes ALSA pcm and mixer devices. This patch depends on kernel Media Controller changes to support ALSA. Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com> --- utils/media-ctl/libmediactl.c | 18 ++++++++++++------ utils/media-ctl/media-ctl.c | 3 +++ utils/media-ctl/mediactl.h | 4 +++- 3 files changed, 18 insertions(+), 7 deletions(-)