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 =
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 =
unsigned int count, void *src)
{
int ret = -1;
+
LOG_DBG(" .. IN\n");
if (alsa_stream->my_wq) {
struct bcm2835_audio_work *work =
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);
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);
} 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;
}