Lines Matching full:info
20 .info = SNDRV_PCM_INFO_INTERLEAVED |
36 struct rpmsg_info *info) in imx_rpmsg_pcm_send_message() argument
38 struct rpmsg_device *rpdev = info->rpdev; in imx_rpmsg_pcm_send_message()
41 mutex_lock(&info->msg_lock); in imx_rpmsg_pcm_send_message()
43 dev_err(info->dev, "rpmsg channel not ready\n"); in imx_rpmsg_pcm_send_message()
44 mutex_unlock(&info->msg_lock); in imx_rpmsg_pcm_send_message()
51 reinit_completion(&info->cmd_complete); in imx_rpmsg_pcm_send_message()
57 mutex_unlock(&info->msg_lock); in imx_rpmsg_pcm_send_message()
63 mutex_unlock(&info->msg_lock); in imx_rpmsg_pcm_send_message()
68 ret = wait_for_completion_timeout(&info->cmd_complete, in imx_rpmsg_pcm_send_message()
73 mutex_unlock(&info->msg_lock); in imx_rpmsg_pcm_send_message()
77 memcpy(&msg->r_msg, &info->r_msg, sizeof(struct rpmsg_r_msg)); in imx_rpmsg_pcm_send_message()
78 memcpy(&info->msg[msg->r_msg.header.cmd].r_msg, in imx_rpmsg_pcm_send_message()
90 info->msg[TX_POINTER].r_msg.param.buffer_offset = 0; in imx_rpmsg_pcm_send_message()
93 info->msg[RX_POINTER].r_msg.param.buffer_offset = 0; in imx_rpmsg_pcm_send_message()
100 info->r_msg.param.resp); in imx_rpmsg_pcm_send_message()
102 mutex_unlock(&info->msg_lock); in imx_rpmsg_pcm_send_message()
109 struct rpmsg_info *info) in imx_rpmsg_insert_workqueue() argument
118 spin_lock_irqsave(&info->wq_lock, flags); in imx_rpmsg_insert_workqueue()
119 if (info->work_write_index != info->work_read_index) { in imx_rpmsg_insert_workqueue()
120 int index = info->work_write_index; in imx_rpmsg_insert_workqueue()
122 memcpy(&info->work_list[index].msg, msg, in imx_rpmsg_insert_workqueue()
125 queue_work(info->rpmsg_wq, &info->work_list[index].work); in imx_rpmsg_insert_workqueue()
126 info->work_write_index++; in imx_rpmsg_insert_workqueue()
127 info->work_write_index %= WORK_MAX_NUM; in imx_rpmsg_insert_workqueue()
129 info->msg_drop_count[substream->stream]++; in imx_rpmsg_insert_workqueue()
132 spin_unlock_irqrestore(&info->wq_lock, flags); in imx_rpmsg_insert_workqueue()
141 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_pcm_hw_params() local
146 msg = &info->msg[TX_HW_PARAM]; in imx_rpmsg_pcm_hw_params()
149 msg = &info->msg[RX_HW_PARAM]; in imx_rpmsg_pcm_hw_params()
185 info->send_message(msg, info); in imx_rpmsg_pcm_hw_params()
193 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_pcm_pointer() local
199 msg = &info->msg[TX_PERIOD_DONE + MSG_TYPE_A_NUM]; in imx_rpmsg_pcm_pointer()
201 msg = &info->msg[RX_PERIOD_DONE + MSG_TYPE_A_NUM]; in imx_rpmsg_pcm_pointer()
214 struct rpmsg_info *info = stream_timer->info; in imx_rpmsg_timer_callback() local
218 msg = &info->msg[TX_PERIOD_DONE + MSG_TYPE_A_NUM]; in imx_rpmsg_timer_callback()
221 msg = &info->msg[RX_PERIOD_DONE + MSG_TYPE_A_NUM]; in imx_rpmsg_timer_callback()
225 imx_rpmsg_insert_workqueue(substream, msg, info); in imx_rpmsg_timer_callback()
231 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_pcm_open() local
237 msg = &info->msg[TX_OPEN]; in imx_rpmsg_pcm_open()
242 info->msg[cmd].s_msg.param.buffer_tail = 0; in imx_rpmsg_pcm_open()
243 info->msg[cmd].r_msg.param.buffer_tail = 0; in imx_rpmsg_pcm_open()
244 info->msg[TX_POINTER].r_msg.param.buffer_offset = 0; in imx_rpmsg_pcm_open()
247 msg = &info->msg[RX_OPEN]; in imx_rpmsg_pcm_open()
252 info->msg[cmd].s_msg.param.buffer_tail = 0; in imx_rpmsg_pcm_open()
253 info->msg[cmd].r_msg.param.buffer_tail = 0; in imx_rpmsg_pcm_open()
254 info->msg[RX_POINTER].r_msg.param.buffer_offset = 0; in imx_rpmsg_pcm_open()
257 info->send_message(msg, info); in imx_rpmsg_pcm_open()
269 info->msg_drop_count[substream->stream] = 0; in imx_rpmsg_pcm_open()
272 info->stream_timer[substream->stream].info = info; in imx_rpmsg_pcm_open()
273 info->stream_timer[substream->stream].substream = substream; in imx_rpmsg_pcm_open()
274 timer_setup(&info->stream_timer[substream->stream].timer, in imx_rpmsg_pcm_open()
283 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_pcm_close() local
288 flush_workqueue(info->rpmsg_wq); in imx_rpmsg_pcm_close()
291 msg = &info->msg[TX_CLOSE]; in imx_rpmsg_pcm_close()
294 msg = &info->msg[RX_CLOSE]; in imx_rpmsg_pcm_close()
298 info->send_message(msg, info); in imx_rpmsg_pcm_close()
300 del_timer(&info->stream_timer[substream->stream].timer); in imx_rpmsg_pcm_close()
304 if (info->msg_drop_count[substream->stream]) in imx_rpmsg_pcm_close()
306 info->msg_drop_count[substream->stream]); in imx_rpmsg_pcm_close()
349 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_prepare_and_submit() local
353 msg = &info->msg[TX_BUFFER]; in imx_rpmsg_prepare_and_submit()
356 msg = &info->msg[RX_BUFFER]; in imx_rpmsg_prepare_and_submit()
366 info->num_period[substream->stream] = msg->s_msg.param.buffer_size / in imx_rpmsg_prepare_and_submit()
369 info->callback[substream->stream] = imx_rpmsg_pcm_dma_complete; in imx_rpmsg_prepare_and_submit()
370 info->callback_param[substream->stream] = substream; in imx_rpmsg_prepare_and_submit()
372 return imx_rpmsg_insert_workqueue(substream, msg, info); in imx_rpmsg_prepare_and_submit()
378 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_async_issue_pending() local
382 msg = &info->msg[TX_START]; in imx_rpmsg_async_issue_pending()
385 msg = &info->msg[RX_START]; in imx_rpmsg_async_issue_pending()
389 return imx_rpmsg_insert_workqueue(substream, msg, info); in imx_rpmsg_async_issue_pending()
395 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_restart() local
399 msg = &info->msg[TX_RESTART]; in imx_rpmsg_restart()
402 msg = &info->msg[RX_RESTART]; in imx_rpmsg_restart()
406 return imx_rpmsg_insert_workqueue(substream, msg, info); in imx_rpmsg_restart()
412 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_pause() local
416 msg = &info->msg[TX_PAUSE]; in imx_rpmsg_pause()
419 msg = &info->msg[RX_PAUSE]; in imx_rpmsg_pause()
423 return imx_rpmsg_insert_workqueue(substream, msg, info); in imx_rpmsg_pause()
429 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_terminate_all() local
434 msg = &info->msg[TX_TERMINATE]; in imx_rpmsg_terminate_all()
438 info->msg[cmd].s_msg.param.buffer_tail = 0; in imx_rpmsg_terminate_all()
439 info->msg[cmd].r_msg.param.buffer_tail = 0; in imx_rpmsg_terminate_all()
440 info->msg[TX_POINTER].r_msg.param.buffer_offset = 0; in imx_rpmsg_terminate_all()
442 msg = &info->msg[RX_TERMINATE]; in imx_rpmsg_terminate_all()
446 info->msg[cmd].s_msg.param.buffer_tail = 0; in imx_rpmsg_terminate_all()
447 info->msg[cmd].r_msg.param.buffer_tail = 0; in imx_rpmsg_terminate_all()
448 info->msg[RX_POINTER].r_msg.param.buffer_offset = 0; in imx_rpmsg_terminate_all()
451 del_timer(&info->stream_timer[substream->stream].timer); in imx_rpmsg_terminate_all()
453 return imx_rpmsg_insert_workqueue(substream, msg, info); in imx_rpmsg_terminate_all()
481 if (runtime->info & SNDRV_PCM_INFO_PAUSE) in imx_rpmsg_pcm_trigger()
517 struct rpmsg_info *info = dev_get_drvdata(component->dev); in imx_rpmsg_pcm_ack() local
530 msg = &info->msg[TX_PERIOD_DONE + MSG_TYPE_A_NUM]; in imx_rpmsg_pcm_ack()
533 msg = &info->msg[RX_PERIOD_DONE + MSG_TYPE_A_NUM]; in imx_rpmsg_pcm_ack()
552 spin_lock_irqsave(&info->lock[substream->stream], flags); in imx_rpmsg_pcm_ack()
553 memcpy(&info->notify[substream->stream], msg, in imx_rpmsg_pcm_ack()
555 info->notify_updated[substream->stream] = true; in imx_rpmsg_pcm_ack()
556 spin_unlock_irqrestore(&info->lock[substream->stream], flags); in imx_rpmsg_pcm_ack()
563 timer = &info->stream_timer[substream->stream].timer; in imx_rpmsg_pcm_ack()
577 imx_rpmsg_insert_workqueue(substream, msg, info); in imx_rpmsg_pcm_ack()
623 struct rpmsg_info *info; in imx_rpmsg_pcm_work() local
628 info = work_of_rpmsg->info; in imx_rpmsg_pcm_work()
636 spin_lock_irqsave(&info->lock[TX], flags); in imx_rpmsg_pcm_work()
637 if (info->notify_updated[TX]) { in imx_rpmsg_pcm_work()
638 memcpy(&msg, &info->notify[TX], sizeof(struct rpmsg_s_msg)); in imx_rpmsg_pcm_work()
639 info->notify_updated[TX] = false; in imx_rpmsg_pcm_work()
640 spin_unlock_irqrestore(&info->lock[TX], flags); in imx_rpmsg_pcm_work()
641 info->send_message(&msg, info); in imx_rpmsg_pcm_work()
643 spin_unlock_irqrestore(&info->lock[TX], flags); in imx_rpmsg_pcm_work()
646 spin_lock_irqsave(&info->lock[RX], flags); in imx_rpmsg_pcm_work()
647 if (info->notify_updated[RX]) { in imx_rpmsg_pcm_work()
648 memcpy(&msg, &info->notify[RX], sizeof(struct rpmsg_s_msg)); in imx_rpmsg_pcm_work()
649 info->notify_updated[RX] = false; in imx_rpmsg_pcm_work()
650 spin_unlock_irqrestore(&info->lock[RX], flags); in imx_rpmsg_pcm_work()
651 info->send_message(&msg, info); in imx_rpmsg_pcm_work()
653 spin_unlock_irqrestore(&info->lock[RX], flags); in imx_rpmsg_pcm_work()
663 info->send_message(&work_of_rpmsg->msg, info); in imx_rpmsg_pcm_work()
666 spin_lock_irqsave(&info->wq_lock, flags); in imx_rpmsg_pcm_work()
667 info->work_read_index++; in imx_rpmsg_pcm_work()
668 info->work_read_index %= WORK_MAX_NUM; in imx_rpmsg_pcm_work()
669 spin_unlock_irqrestore(&info->wq_lock, flags); in imx_rpmsg_pcm_work()
675 struct rpmsg_info *info; in imx_rpmsg_pcm_probe() local
678 info = devm_kzalloc(&pdev->dev, sizeof(*info), GFP_KERNEL); in imx_rpmsg_pcm_probe()
679 if (!info) in imx_rpmsg_pcm_probe()
682 platform_set_drvdata(pdev, info); in imx_rpmsg_pcm_probe()
684 info->rpdev = container_of(pdev->dev.parent, struct rpmsg_device, dev); in imx_rpmsg_pcm_probe()
685 info->dev = &pdev->dev; in imx_rpmsg_pcm_probe()
687 info->rpmsg_wq = alloc_ordered_workqueue("rpmsg_audio", in imx_rpmsg_pcm_probe()
691 if (!info->rpmsg_wq) { in imx_rpmsg_pcm_probe()
697 info->work_write_index = 1; in imx_rpmsg_pcm_probe()
698 info->send_message = imx_rpmsg_pcm_send_message; in imx_rpmsg_pcm_probe()
701 INIT_WORK(&info->work_list[i].work, imx_rpmsg_pcm_work); in imx_rpmsg_pcm_probe()
702 info->work_list[i].info = info; in imx_rpmsg_pcm_probe()
707 info->msg[i].s_msg.header.cate = IMX_RPMSG_AUDIO; in imx_rpmsg_pcm_probe()
708 info->msg[i].s_msg.header.major = IMX_RMPSG_MAJOR; in imx_rpmsg_pcm_probe()
709 info->msg[i].s_msg.header.minor = IMX_RMPSG_MINOR; in imx_rpmsg_pcm_probe()
710 info->msg[i].s_msg.header.type = MSG_TYPE_A; in imx_rpmsg_pcm_probe()
711 info->msg[i].s_msg.param.audioindex = 0; in imx_rpmsg_pcm_probe()
714 init_completion(&info->cmd_complete); in imx_rpmsg_pcm_probe()
715 mutex_init(&info->msg_lock); in imx_rpmsg_pcm_probe()
716 spin_lock_init(&info->lock[TX]); in imx_rpmsg_pcm_probe()
717 spin_lock_init(&info->lock[RX]); in imx_rpmsg_pcm_probe()
718 spin_lock_init(&info->wq_lock); in imx_rpmsg_pcm_probe()
738 if (info->rpmsg_wq) in imx_rpmsg_pcm_probe()
739 destroy_workqueue(info->rpmsg_wq); in imx_rpmsg_pcm_probe()
746 struct rpmsg_info *info = platform_get_drvdata(pdev); in imx_rpmsg_pcm_remove() local
748 if (info->rpmsg_wq) in imx_rpmsg_pcm_remove()
749 destroy_workqueue(info->rpmsg_wq); in imx_rpmsg_pcm_remove()
757 struct rpmsg_info *info = dev_get_drvdata(dev); in imx_rpmsg_pcm_runtime_resume() local
759 cpu_latency_qos_add_request(&info->pm_qos_req, 0); in imx_rpmsg_pcm_runtime_resume()
766 struct rpmsg_info *info = dev_get_drvdata(dev); in imx_rpmsg_pcm_runtime_suspend() local
768 cpu_latency_qos_remove_request(&info->pm_qos_req); in imx_rpmsg_pcm_runtime_suspend()
777 struct rpmsg_info *info = dev_get_drvdata(dev); in imx_rpmsg_pcm_suspend() local
781 rpmsg_tx = &info->msg[TX_SUSPEND]; in imx_rpmsg_pcm_suspend()
782 rpmsg_rx = &info->msg[RX_SUSPEND]; in imx_rpmsg_pcm_suspend()
785 info->send_message(rpmsg_tx, info); in imx_rpmsg_pcm_suspend()
788 info->send_message(rpmsg_rx, info); in imx_rpmsg_pcm_suspend()
795 struct rpmsg_info *info = dev_get_drvdata(dev); in imx_rpmsg_pcm_resume() local
799 rpmsg_tx = &info->msg[TX_RESUME]; in imx_rpmsg_pcm_resume()
800 rpmsg_rx = &info->msg[RX_RESUME]; in imx_rpmsg_pcm_resume()
803 info->send_message(rpmsg_tx, info); in imx_rpmsg_pcm_resume()
806 info->send_message(rpmsg_rx, info); in imx_rpmsg_pcm_resume()