short peer_version;
};
-bool force_bulk = false;
+static bool force_bulk;
/* ---- Private Variables ---------------------------------------------------- */
static int bcm2835_audio_write_worker(struct bcm2835_alsa_stream *alsa_stream,
unsigned int count, void *src);
-
// Routine to send a message across a service
static int
struct bcm2835_audio_work *w =
container_of(work, struct bcm2835_audio_work, my_work);
int ret = -9;
+
LOG_DBG(" .. IN %p:%d\n", w->alsa_stream, w->cmd);
switch (w->cmd) {
case BCM2835_AUDIO_START:
int bcm2835_audio_start(struct bcm2835_alsa_stream *alsa_stream)
{
int ret = -1;
+
LOG_DBG(" .. IN\n");
if (alsa_stream->my_wq) {
- struct bcm2835_audio_work *work =
- kmalloc(sizeof(struct bcm2835_audio_work *), GFP_ATOMIC);
+ struct bcm2835_audio_work *work;
+
+ work = kmalloc(sizeof(*work), GFP_ATOMIC);
/*--- Queue some work (item 1) ---*/
if (work) {
INIT_WORK(&work->my_work, my_wq_function);
int bcm2835_audio_stop(struct bcm2835_alsa_stream *alsa_stream)
{
int ret = -1;
+
LOG_DBG(" .. IN\n");
if (alsa_stream->my_wq) {
- struct bcm2835_audio_work *work =
- kmalloc(sizeof(struct bcm2835_audio_work *), GFP_ATOMIC);
+ struct bcm2835_audio_work *work;
+
+ work = kmalloc(sizeof(*work), GFP_ATOMIC);
/*--- Queue some work (item 1) ---*/
if (work) {
INIT_WORK(&work->my_work, my_wq_function);
unsigned int count, void *src)
{
int ret = -1;
+
LOG_DBG(" .. IN\n");
if (alsa_stream->my_wq) {
- struct bcm2835_audio_work *work =
- kmalloc(sizeof(struct bcm2835_audio_work *), GFP_ATOMIC);
+ struct bcm2835_audio_work *work;
+
+ work = kmalloc(sizeof(*work), GFP_ATOMIC);
/*--- Queue some work (item 1) ---*/
if (work) {
INIT_WORK(&work->my_work, my_wq_function);
return ret;
}
-void my_workqueue_init(struct bcm2835_alsa_stream *alsa_stream)
+static void my_workqueue_init(struct bcm2835_alsa_stream *alsa_stream)
{
alsa_stream->my_wq = alloc_workqueue("my_queue", WQ_HIGHPRI, 1);
return;
}
-void my_workqueue_quit(struct bcm2835_alsa_stream *alsa_stream)
+static void my_workqueue_quit(struct bcm2835_alsa_stream *alsa_stream)
{
if (alsa_stream->my_wq) {
flush_workqueue(alsa_stream->my_wq);
int status;
int msg_len;
struct vc_audio_msg m;
+
LOG_DBG(" .. IN instance=%p, handle=%p, alsa=%p, reason=%d, handle=%p\n",
instance, instance ? instance->vchi_handle[0] : NULL, instance ? instance->alsa_stream : NULL, reason, msg_handle);
complete(&instance->msg_avail_comp);
} else if (m.type == VC_AUDIO_MSG_TYPE_COMPLETE) {
struct bcm2835_alsa_stream *alsa_stream = instance->alsa_stream;
+
LOG_DBG(" .. instance=%p, m.type=VC_AUDIO_MSG_TYPE_COMPLETE, complete=%d\n",
instance, m.u.complete.count);
if (m.u.complete.cookie1 != BCM2835_AUDIO_WRITE_COOKIE1 ||
/* Close all VCHI service connections */
for (i = 0; i < instance->num_connections; i++) {
int status;
+
LOG_DBG(" .. %i:closing %p\n", i, instance->vchi_handle[i]);
vchi_service_use(instance->vchi_handle[i]);
struct bcm2835_audio_instance *instance =
(struct bcm2835_audio_instance *)alsa_stream->instance;
int ret;
+
LOG_DBG(" .. IN\n");
LOG_INFO("%s: start\n", __func__);
struct vc_audio_msg m;
int status;
int ret;
+
LOG_DBG(" .. IN\n");
my_workqueue_init(alsa_stream);
struct bcm2835_audio_instance *instance = alsa_stream->instance;
int status;
int ret;
+
LOG_DBG(" .. IN\n");
LOG_INFO(" Setting ALSA dest(%d), volume(%d)\n",
{
int i;
int ret = 0;
+
LOG_DBG(" .. IN\n");
LOG_DBG(" Setting ALSA dest(%d), volume(%d)\n", chip->dest, chip->volume);
} else if (bcm2835_audio_set_ctls_chan(chip->alsa_stream[i], chip) != 0) {
LOG_ERR("Couldn't set the controls for stream %d\n", i);
ret = -1;
- } else LOG_DBG(" Controls set for stream %d\n", i);
+ } else {
+ LOG_DBG(" Controls set for stream %d\n", i);
+ }
}
}
LOG_DBG(" .. OUT ret=%d\n", ret);
struct bcm2835_audio_instance *instance = alsa_stream->instance;
int status;
int ret;
+
LOG_DBG(" .. IN\n");
LOG_INFO(" Setting ALSA channels(%d), samplerate(%d), bits-per-sample(%d)\n",
struct bcm2835_audio_instance *instance = alsa_stream->instance;
int status;
int ret;
+
LOG_DBG(" .. IN\n");
if (mutex_lock_interruptible(&instance->vchi_mutex)) {
struct bcm2835_audio_instance *instance = alsa_stream->instance;
int status;
int ret;
+
LOG_DBG(" .. IN\n");
if (mutex_lock_interruptible(&instance->vchi_mutex)) {
struct bcm2835_audio_instance *instance = alsa_stream->instance;
int status;
int ret;
+
LOG_DBG(" .. IN\n");
my_workqueue_quit(alsa_stream);
return ret;
}
-int bcm2835_audio_write_worker(struct bcm2835_alsa_stream *alsa_stream,
- unsigned int count, void *src)
+static int bcm2835_audio_write_worker(struct bcm2835_alsa_stream *alsa_stream,
+ unsigned int count, void *src)
{
struct vc_audio_msg m;
struct bcm2835_audio_instance *instance = alsa_stream->instance;
} else {
while (count > 0) {
int bytes = min((int) m.u.write.max_packet, (int) count);
+
status = bcm2835_vchi_msg_queue(instance->vchi_handle[0],
src, bytes);
src = (char *)src + bytes;
unsigned int bcm2835_audio_retrieve_buffers(struct bcm2835_alsa_stream *alsa_stream)
{
unsigned int count = atomic_read(&alsa_stream->retrieved);
+
atomic_sub(count, &alsa_stream->retrieved);
return count;
}