pagelist = dma_alloc_coherent(instance->state->dev, pagelist_size, &dma_addr,
                                      GFP_KERNEL);
 
-       vchiq_log_trace(vchiq_arm_log_level, "%s - %pK", __func__, pagelist);
+       vchiq_log_trace(instance->state->dev, VCHIQ_ARM,
+                       "%s - %pK", __func__, pagelist);
 
        if (!pagelist)
                return NULL;
        struct page **pages = pagelistinfo->pages;
        unsigned int num_pages = pagelistinfo->num_pages;
 
-       vchiq_log_trace(vchiq_arm_log_level, "%s - %pK, %d",
-                       __func__, pagelistinfo->pagelist, actual);
+       vchiq_log_trace(instance->state->dev, VCHIQ_ARM,
+                       "%s - %pK, %d", __func__, pagelistinfo->pagelist, actual);
 
        /*
         * NOTE: dma_unmap_sg must be called before the
        ret = 0;
 
 failed:
-       vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, ret);
+       vchiq_log_trace(state->dev, VCHIQ_CORE,
+                       "%s(%p): returning %d", __func__, instance, ret);
 
        return ret;
 }
 
        mutex_unlock(&state->mutex);
 
-       vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, status);
+       vchiq_log_trace(state->dev, VCHIQ_CORE,
+                       "%s(%p): returning %d", __func__, instance, status);
 
        free_bulk_waiter(instance);
        kfree(instance);
        struct vchiq_state *state = instance->state;
 
        if (mutex_lock_killable(&state->mutex)) {
-               vchiq_log_trace(vchiq_core_log_level, "%s: call to mutex_lock failed", __func__);
+               vchiq_log_trace(state->dev, VCHIQ_CORE,
+                               "%s: call to mutex_lock failed", __func__);
                status = -EAGAIN;
                goto failed;
        }
        mutex_unlock(&state->mutex);
 
 failed:
-       vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, status);
+       vchiq_log_trace(state->dev, VCHIQ_CORE,
+                       "%s(%p): returning %d", __func__, instance, status);
 
        return status;
 }
                status = -EINVAL;
        }
 
-       vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, status);
+       vchiq_log_trace(state->dev, VCHIQ_CORE,
+                       "%s(%p): returning %d", __func__, instance, status);
 
        return status;
 }
        }
 
 failed:
-       vchiq_log_trace(vchiq_core_log_level, "%s(%p): returning %d", __func__, instance, status);
+       vchiq_log_trace(state->dev, VCHIQ_CORE,
+                       "%s(%p): returning %d", __func__, instance, status);
 
        return status;
 }
        while ((insert - instance->completion_remove) >= MAX_COMPLETIONS) {
                /* Out of space - wait for the client */
                DEBUG_TRACE(SERVICE_CALLBACK_LINE);
-               vchiq_log_trace(vchiq_arm_log_level, "%s - completion queue full", __func__);
+               vchiq_log_trace(instance->state->dev, VCHIQ_CORE,
+                               "%s - completion queue full", __func__);
                DEBUG_COUNT(COMPLETION_QUEUE_FULL_COUNT);
                if (wait_for_completion_interruptible(&instance->remove_event)) {
                        vchiq_log_debug(instance->state->dev, VCHIQ_ARM,
        vchiq_service_get(service);
        rcu_read_unlock();
 
-       vchiq_log_trace(vchiq_arm_log_level,
+       vchiq_log_trace(service->state->dev, VCHIQ_ARM,
                        "%s - service %lx(%d,%p), reason %d, header %lx, instance %lx, bulk_userdata %lx",
                        __func__, (unsigned long)user_service, service->localport,
                        user_service->userdata, reason, (unsigned long)header,
                        spin_unlock(&msg_queue_spinlock);
                        DEBUG_TRACE(SERVICE_CALLBACK_LINE);
                        DEBUG_COUNT(MSG_QUEUE_FULL_COUNT);
-                       vchiq_log_trace(vchiq_arm_log_level, "%s - msg queue full", __func__);
+                       vchiq_log_trace(service->state->dev, VCHIQ_ARM,
+                                       "%s - msg queue full", __func__);
                        /*
                         * If there is no MESSAGE_AVAILABLE in the completion
                         * queue, add one
        local_uc = ++arm_state->videocore_use_count;
        ++(*entity_uc);
 
-       vchiq_log_trace(vchiq_susp_log_level, "%s %s count %d, state count %d", __func__, entity,
-                       *entity_uc, local_uc);
+       vchiq_log_trace(state->dev, VCHIQ_SUSPEND, "%s %s count %d, state count %d",
+                       __func__, entity, *entity_uc, local_uc);
 
        write_unlock_bh(&arm_state->susp_res_lock);
 
        }
 
 out:
-       vchiq_log_trace(vchiq_susp_log_level, "%s exit %d", __func__, ret);
+       vchiq_log_trace(state->dev, VCHIQ_SUSPEND, "%s exit %d", __func__, ret);
        return ret;
 }
 
        --arm_state->videocore_use_count;
        --(*entity_uc);
 
-       vchiq_log_trace(vchiq_susp_log_level, "%s %s count %d, state count %d", __func__, entity,
-                       *entity_uc, arm_state->videocore_use_count);
+       vchiq_log_trace(state->dev, VCHIQ_SUSPEND, "%s %s count %d, state count %d",
+                       __func__, entity, *entity_uc, arm_state->videocore_use_count);
 
 unlock:
        write_unlock_bh(&arm_state->susp_res_lock);
 
 out:
-       vchiq_log_trace(vchiq_susp_log_level, "%s exit %d", __func__, ret);
+       vchiq_log_trace(state->dev, VCHIQ_SUSPEND, "%s exit %d", __func__, ret);
        return ret;
 }
 
 
 {
        int status;
 
-       vchiq_log_trace(vchiq_core_log_level, "%d: callback:%d (%s, %pK, %pK)",
+       vchiq_log_trace(service->state->dev, VCHIQ_CORE, "%d: callback:%d (%s, %pK, %pK)",
                        service->state->id, service->localport, reason_names[reason],
                        header, bulk_userdata);
        status = service->base.callback(service->instance, reason, header, service->handle,
                         * it has dropped below its quota
                         */
                        complete("a->quota_event);
-                       vchiq_log_trace(vchiq_core_log_level, "%d: pfq:%d %x@%pK - slot_use->%d",
+                       vchiq_log_trace(state->dev, VCHIQ_CORE, "%d: pfq:%d %x@%pK - slot_use->%d",
                                        state->id, port, header->size, header, count - 1);
                } else {
                        vchiq_log_error(state->dev, VCHIQ_CORE,
                 */
                rmb();
 
-               vchiq_log_trace(vchiq_core_log_level, "%d: pfq %d=%pK %x %x",
+               vchiq_log_trace(state->dev, VCHIQ_CORE, "%d: pfq %d=%pK %x %x",
                                state->id, slot_index, data, local->slot_queue_recycle,
                                slot_queue_available);
 
                       ((tx_end_index != quota->previous_tx_index) &&
                        (quota->slot_use_count == quota->slot_quota))) {
                        spin_unlock("a_spinlock);
-                       vchiq_log_trace(vchiq_core_log_level,
+                       vchiq_log_trace(state->dev, VCHIQ_CORE,
                                        "%d: qm:%d %s,%zx - quota stall (msg %d, slot %d)",
                                        state->id, service->localport, msg_type_str(type), size,
                                        quota->message_use_count, quota->slot_use_count);
                spin_unlock("a_spinlock);
 
                if (slot_use_count)
-                       vchiq_log_trace(vchiq_core_log_level,
+                       vchiq_log_trace(state->dev, VCHIQ_CORE,
                                        "%d: qm:%d %s,%zx - slot_use->%d (hdr %p)", state->id,
                                        service->localport, msg_type_str(VCHIQ_MSG_TYPE(msgid)),
                                        size, slot_use_count, header);
                        ? service->base.fourcc
                        : VCHIQ_MAKE_FOURCC('?', '?', '?', '?');
 
-               vchiq_log_trace(vchiq_sync_log_level,
+               vchiq_log_trace(state->dev, VCHIQ_SYNC,
                                "Sent Sync Msg %s(%u) to %c%c%c%c s:%u d:%d len:%d",
                                msg_type_str(VCHIQ_MSG_TYPE(msgid)), VCHIQ_MSG_TYPE(msgid),
                                VCHIQ_FOURCC_AS_4CHARS(svc_fourcc), VCHIQ_MSG_SRCPORT(msgid),
 {
        int status = 0;
 
-       vchiq_log_trace(vchiq_core_log_level, "%d: nb:%d %cx - p=%x rn=%x r=%x", service->state->id,
-                       service->localport, (queue == &service->bulk_tx) ? 't' : 'r',
+       vchiq_log_trace(service->state->dev, VCHIQ_CORE,
+                       "%d: nb:%d %cx - p=%x rn=%x r=%x",
+                       service->state->id, service->localport,
+                       (queue == &service->bulk_tx) ? 't' : 'r',
                        queue->process, queue->remote_notify, queue->remove);
 
        queue->remote_notify = queue->process;
 {
        int is_tx = (queue == &service->bulk_tx);
 
-       vchiq_log_trace(vchiq_core_log_level, "%d: aob:%d %cx - li=%x ri=%x p=%x",
-                       service->state->id, service->localport, is_tx ? 't' : 'r',
-                       queue->local_insert, queue->remote_insert, queue->process);
+       vchiq_log_trace(service->state->dev, VCHIQ_CORE,
+                       "%d: aob:%d %cx - li=%x ri=%x p=%x",
+                       service->state->id, service->localport,
+                       is_tx ? 't' : 'r', queue->local_insert,
+                       queue->remote_insert, queue->process);
 
        WARN_ON((int)(queue->local_insert - queue->process) < 0);
        WARN_ON((int)(queue->remote_insert - queue->process) < 0);
                                        state->id, msg_type_str(type), header, remoteport,
                                        localport, bulk->actual, &bulk->data);
 
-                       vchiq_log_trace(vchiq_core_log_level, "%d: prs:%d %cx li=%x ri=%x p=%x",
+                       vchiq_log_trace(state->dev, VCHIQ_CORE, "%d: prs:%d %cx li=%x ri=%x p=%x",
                                        state->id, localport,
                                        (type == VCHIQ_MSG_BULK_RX_DONE) ? 'r' : 't',
                                        queue->local_insert, queue->remote_insert, queue->process);
                }
                break;
        case VCHIQ_MSG_PADDING:
-               vchiq_log_trace(vchiq_core_log_level, "%d: prs PADDING@%pK,%x",
+               vchiq_log_trace(state->dev, VCHIQ_CORE, "%d: prs PADDING@%pK,%x",
                                state->id, header, size);
                break;
        case VCHIQ_MSG_PAUSE:
                /* If initiated, signal the application thread */
-               vchiq_log_trace(vchiq_core_log_level, "%d: prs PAUSE@%pK,%x",
+               vchiq_log_trace(state->dev, VCHIQ_CORE, "%d: prs PAUSE@%pK,%x",
                                state->id, header, size);
                if (state->conn_state == VCHIQ_CONNSTATE_PAUSED) {
                        vchiq_log_error(state->dev, VCHIQ_CORE,
                vchiq_set_conn_state(state, VCHIQ_CONNSTATE_PAUSED);
                break;
        case VCHIQ_MSG_RESUME:
-               vchiq_log_trace(vchiq_core_log_level, "%d: prs RESUME@%pK,%x",
+               vchiq_log_trace(state->dev, VCHIQ_CORE, "%d: prs RESUME@%pK,%x",
                                state->id, header, size);
                /* Release the slot mutex */
                mutex_unlock(&state->slot_mutex);
                        svc_fourcc = service
                                ? service->base.fourcc
                                : VCHIQ_MAKE_FOURCC('?', '?', '?', '?');
-                       vchiq_log_trace(vchiq_sync_log_level,
+                       vchiq_log_trace(state->dev, VCHIQ_SYNC,
                                        "Rcvd Msg %s from %c%c%c%c s:%d d:%d len:%d",
                                        msg_type_str(type), VCHIQ_FOURCC_AS_4CHARS(svc_fourcc),
                                        remoteport, localport, size);
                        break;
 
                case VCHIQ_MSG_DATA:
-                       vchiq_log_trace(vchiq_sync_log_level, "%d: sf DATA@%pK,%x (%d->%d)",
+                       vchiq_log_trace(state->dev, VCHIQ_SYNC, "%d: sf DATA@%pK,%x (%d->%d)",
                                        state->id, header, size, remoteport, localport);
 
                        if ((service->remoteport == remoteport) &&
        mutex_unlock(&state->slot_mutex);
        mutex_unlock(&service->bulk_mutex);
 
-       vchiq_log_trace(vchiq_core_log_level, "%d: bt:%d %cx li=%x ri=%x p=%x",
+       vchiq_log_trace(state->dev, VCHIQ_CORE, "%d: bt:%d %cx li=%x ri=%x p=%x",
                        state->id, service->localport, dir_char, queue->local_insert,
                        queue->remote_insert, queue->process);
 
                *s++ = '\0';
 
                if (label && (*label != '\0'))
-                       vchiq_log_trace(VCHIQ_LOG_TRACE, "%s: %08x: %s", label, addr, line_buf);
+                       vchiq_log_trace(dev, VCHIQ_CORE, "%s: %08x: %s", label, addr, line_buf);
                else
-                       vchiq_log_trace(VCHIQ_LOG_TRACE, "%08x: %s", addr, line_buf);
+                       vchiq_log_trace(dev, VCHIQ_CORE, "%s: %08x: %s", label, addr, line_buf);
 
                addr += 16;
                mem += 16;