Lines Matching full:info
20 .info = SNDRV_PCM_INFO_INTERLEAVED |
37 struct rpmsg_info *info)
39 struct rpmsg_device *rpdev = info->rpdev;
42 mutex_lock(&info->msg_lock);
44 dev_err(info->dev, "rpmsg channel not ready\n");
45 mutex_unlock(&info->msg_lock);
52 reinit_completion(&info->cmd_complete);
58 mutex_unlock(&info->msg_lock);
64 mutex_unlock(&info->msg_lock);
69 ret = wait_for_completion_timeout(&info->cmd_complete,
74 mutex_unlock(&info->msg_lock);
78 memcpy(&msg->r_msg, &info->r_msg, sizeof(struct rpmsg_r_msg));
79 memcpy(&info->msg[msg->r_msg.header.cmd].r_msg,
91 info->msg[TX_POINTER].r_msg.param.buffer_offset = 0;
94 info->msg[RX_POINTER].r_msg.param.buffer_offset = 0;
101 info->r_msg.param.resp);
103 mutex_unlock(&info->msg_lock);
110 struct rpmsg_info *info)
119 spin_lock_irqsave(&info->wq_lock, flags);
120 if (info->work_write_index != info->work_read_index) {
121 int index = info->work_write_index;
123 memcpy(&info->work_list[index].msg, msg,
126 queue_work(info->rpmsg_wq, &info->work_list[index].work);
127 info->work_write_index++;
128 info->work_write_index %= WORK_MAX_NUM;
130 info->msg_drop_count[substream->stream]++;
133 spin_unlock_irqrestore(&info->wq_lock, flags);
142 struct rpmsg_info *info = dev_get_drvdata(component->dev);
146 msg = &info->msg[TX_HW_PARAM];
149 msg = &info->msg[RX_HW_PARAM];
185 info->send_message(msg, info);
193 struct rpmsg_info *info = dev_get_drvdata(component->dev);
199 msg = &info->msg[TX_PERIOD_DONE + MSG_TYPE_A_NUM];
201 msg = &info->msg[RX_PERIOD_DONE + MSG_TYPE_A_NUM];
214 struct rpmsg_info *info = stream_timer->info;
218 msg = &info->msg[TX_PERIOD_DONE + MSG_TYPE_A_NUM];
221 msg = &info->msg[RX_PERIOD_DONE + MSG_TYPE_A_NUM];
225 imx_rpmsg_insert_workqueue(substream, msg, info);
231 struct rpmsg_info *info = dev_get_drvdata(component->dev);
241 msg = &info->msg[TX_OPEN];
246 info->msg[cmd].s_msg.param.buffer_tail = 0;
247 info->msg[cmd].r_msg.param.buffer_tail = 0;
248 info->msg[TX_POINTER].r_msg.param.buffer_offset = 0;
251 msg = &info->msg[RX_OPEN];
256 info->msg[cmd].s_msg.param.buffer_tail = 0;
257 info->msg[cmd].r_msg.param.buffer_tail = 0;
258 info->msg[RX_POINTER].r_msg.param.buffer_offset = 0;
261 info->send_message(msg, info);
274 info->msg_drop_count[substream->stream] = 0;
277 info->stream_timer[substream->stream].info = info;
278 info->stream_timer[substream->stream].substream = substream;
279 timer_setup(&info->stream_timer[substream->stream].timer,
288 struct rpmsg_info *info = dev_get_drvdata(component->dev);
292 flush_workqueue(info->rpmsg_wq);
295 msg = &info->msg[TX_CLOSE];
298 msg = &info->msg[RX_CLOSE];
302 info->send_message(msg, info);
304 timer_delete(&info->stream_timer[substream->stream].timer);
308 if (info->msg_drop_count[substream->stream])
310 info->msg_drop_count[substream->stream]);
353 struct rpmsg_info *info = dev_get_drvdata(component->dev);
357 msg = &info->msg[TX_BUFFER];
360 msg = &info->msg[RX_BUFFER];
370 info->num_period[substream->stream] = msg->s_msg.param.buffer_size /
373 info->callback[substream->stream] = imx_rpmsg_pcm_dma_complete;
374 info->callback_param[substream->stream] = substream;
376 return imx_rpmsg_insert_workqueue(substream, msg, info);
382 struct rpmsg_info *info = dev_get_drvdata(component->dev);
386 msg = &info->msg[TX_START];
389 msg = &info->msg[RX_START];
393 return imx_rpmsg_insert_workqueue(substream, msg, info);
399 struct rpmsg_info *info = dev_get_drvdata(component->dev);
403 msg = &info->msg[TX_RESTART];
406 msg = &info->msg[RX_RESTART];
410 return imx_rpmsg_insert_workqueue(substream, msg, info);
416 struct rpmsg_info *info = dev_get_drvdata(component->dev);
420 msg = &info->msg[TX_PAUSE];
423 msg = &info->msg[RX_PAUSE];
427 return imx_rpmsg_insert_workqueue(substream, msg, info);
433 struct rpmsg_info *info = dev_get_drvdata(component->dev);
438 msg = &info->msg[TX_TERMINATE];
442 info->msg[cmd].s_msg.param.buffer_tail = 0;
443 info->msg[cmd].r_msg.param.buffer_tail = 0;
444 info->msg[TX_POINTER].r_msg.param.buffer_offset = 0;
446 msg = &info->msg[RX_TERMINATE];
450 info->msg[cmd].s_msg.param.buffer_tail = 0;
451 info->msg[cmd].r_msg.param.buffer_tail = 0;
452 info->msg[RX_POINTER].r_msg.param.buffer_offset = 0;
455 timer_delete(&info->stream_timer[substream->stream].timer);
457 return imx_rpmsg_insert_workqueue(substream, msg, info);
485 if (runtime->info & SNDRV_PCM_INFO_PAUSE)
521 struct rpmsg_info *info = dev_get_drvdata(component->dev);
534 msg = &info->msg[TX_PERIOD_DONE + MSG_TYPE_A_NUM];
537 msg = &info->msg[RX_PERIOD_DONE + MSG_TYPE_A_NUM];
556 spin_lock_irqsave(&info->lock[substream->stream], flags);
557 memcpy(&info->notify[substream->stream], msg,
559 info->notify_updated[substream->stream] = true;
560 spin_unlock_irqrestore(&info->lock[substream->stream], flags);
567 timer = &info->stream_timer[substream->stream].timer;
581 imx_rpmsg_insert_workqueue(substream, msg, info);
641 struct rpmsg_info *info;
646 info = work_of_rpmsg->info;
654 spin_lock_irqsave(&info->lock[TX], flags);
655 if (info->notify_updated[TX]) {
656 memcpy(&msg, &info->notify[TX], sizeof(struct rpmsg_s_msg));
657 info->notify_updated[TX] = false;
658 spin_unlock_irqrestore(&info->lock[TX], flags);
659 info->send_message(&msg, info);
661 spin_unlock_irqrestore(&info->lock[TX], flags);
664 spin_lock_irqsave(&info->lock[RX], flags);
665 if (info->notify_updated[RX]) {
666 memcpy(&msg, &info->notify[RX], sizeof(struct rpmsg_s_msg));
667 info->notify_updated[RX] = false;
668 spin_unlock_irqrestore(&info->lock[RX], flags);
669 info->send_message(&msg, info);
671 spin_unlock_irqrestore(&info->lock[RX], flags);
681 info->send_message(&work_of_rpmsg->msg, info);
684 spin_lock_irqsave(&info->wq_lock, flags);
685 info->work_read_index++;
686 info->work_read_index %= WORK_MAX_NUM;
687 spin_unlock_irqrestore(&info->wq_lock, flags);
693 struct rpmsg_info *info;
696 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL);
697 if (!info)
700 platform_set_drvdata(pdev, info);
702 info->rpdev = container_of(pdev->dev.parent, struct rpmsg_device, dev);
703 info->dev = &pdev->dev;
705 info->rpmsg_wq = alloc_ordered_workqueue(info->rpdev->id.name,
709 if (!info->rpmsg_wq) {
715 info->work_write_index = 1;
716 info->send_message = imx_rpmsg_pcm_send_message;
719 INIT_WORK(&info->work_list[i].work, imx_rpmsg_pcm_work);
720 info->work_list[i].info = info;
725 info->msg[i].s_msg.header.cate = IMX_RPMSG_AUDIO;
726 info->msg[i].s_msg.header.major = IMX_RMPSG_MAJOR;
727 info->msg[i].s_msg.header.minor = IMX_RMPSG_MINOR;
728 info->msg[i].s_msg.header.type = MSG_TYPE_A;
729 info->msg[i].s_msg.param.audioindex = 0;
732 init_completion(&info->cmd_complete);
733 mutex_init(&info->msg_lock);
734 spin_lock_init(&info->lock[TX]);
735 spin_lock_init(&info->lock[RX]);
736 spin_lock_init(&info->wq_lock);
757 if (info->rpmsg_wq)
758 destroy_workqueue(info->rpmsg_wq);
765 struct rpmsg_info *info = platform_get_drvdata(pdev);
767 if (info->rpmsg_wq)
768 destroy_workqueue(info->rpmsg_wq);
773 struct rpmsg_info *info = dev_get_drvdata(dev);
775 cpu_latency_qos_add_request(&info->pm_qos_req, 0);
782 struct rpmsg_info *info = dev_get_drvdata(dev);
784 cpu_latency_qos_remove_request(&info->pm_qos_req);
791 struct rpmsg_info *info = dev_get_drvdata(dev);
795 rpmsg_tx = &info->msg[TX_SUSPEND];
796 rpmsg_rx = &info->msg[RX_SUSPEND];
799 info->send_message(rpmsg_tx, info);
802 info->send_message(rpmsg_rx, info);
809 struct rpmsg_info *info = dev_get_drvdata(dev);
813 rpmsg_tx = &info->msg[TX_RESUME];
814 rpmsg_rx = &info->msg[RX_RESUME];
817 info->send_message(rpmsg_tx, info);
820 info->send_message(rpmsg_rx, info);