summaryrefslogtreecommitdiffstats
path: root/audio/pcm_bluetooth.c
diff options
context:
space:
mode:
Diffstat (limited to 'audio/pcm_bluetooth.c')
-rw-r--r--audio/pcm_bluetooth.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/audio/pcm_bluetooth.c b/audio/pcm_bluetooth.c
index b99f4ccd..5a3b2317 100644
--- a/audio/pcm_bluetooth.c
+++ b/audio/pcm_bluetooth.c
@@ -893,7 +893,8 @@ static int bluetooth_a2dp_init(struct bluetooth_data *data,
return 0;
}
-static int bluetooth_cfg_init(struct ipc_packet *pkt, snd_config_t *conf)
+static int bluetooth_cfg_init(struct ipc_packet *pkt, snd_pcm_stream_t stream,
+ snd_config_t *conf)
{
struct ipc_data_cfg *cfg = (void *) pkt->data;
struct ipc_codec_sbc *sbc = (void *) cfg->data;
@@ -901,6 +902,15 @@ static int bluetooth_cfg_init(struct ipc_packet *pkt, snd_config_t *conf)
const char *addr, *pref;
const char *mode, *allocation, *rate, *subbands, *blocks, *bitpool;
+ switch (stream) {
+ case SND_PCM_STREAM_PLAYBACK:
+ cfg->fd_opt = CFG_FD_OPT_WRITE;
+ break;
+ case SND_PCM_STREAM_CAPTURE:
+ cfg->fd_opt = CFG_FD_OPT_READ;
+ break;
+ }
+
snd_config_for_each(i, next, conf) {
snd_config_t *n = snd_config_iterator_entry(i);
const char *id;
@@ -1023,7 +1033,8 @@ static int bluetooth_cfg_init(struct ipc_packet *pkt, snd_config_t *conf)
return 0;
}
-static int bluetooth_cfg(struct bluetooth_data *data, snd_config_t *conf)
+static int bluetooth_cfg(struct bluetooth_data *data, snd_pcm_stream_t stream,
+ snd_config_t *conf)
{
int ret, total;
char buf[IPC_MTU];
@@ -1035,7 +1046,7 @@ static int bluetooth_cfg(struct bluetooth_data *data, snd_config_t *conf)
memset(buf, 0, sizeof(buf));
- ret = bluetooth_cfg_init(pkt, conf);
+ ret = bluetooth_cfg_init(pkt, stream, conf);
if (ret < 0)
return -ret;
@@ -1119,7 +1130,8 @@ done:
return 0;
}
-static int bluetooth_init(struct bluetooth_data *data, snd_config_t *conf)
+static int bluetooth_init(struct bluetooth_data *data, snd_pcm_stream_t stream,
+ snd_config_t *conf)
{
int sk, err;
struct sockaddr_un addr = {
@@ -1160,7 +1172,7 @@ static int bluetooth_init(struct bluetooth_data *data, snd_config_t *conf)
if (fcntl(data->pipefd[1], F_SETFL, O_NONBLOCK) < 0)
return -errno;
- return bluetooth_cfg(data, conf);
+ return bluetooth_cfg(data, stream, conf);
}
SND_PCM_PLUGIN_DEFINE_FUNC(bluetooth)
@@ -1177,7 +1189,7 @@ SND_PCM_PLUGIN_DEFINE_FUNC(bluetooth)
goto error;
}
- err = bluetooth_init(data, conf);
+ err = bluetooth_init(data, stream, conf);
if (err < 0)
goto error;