Lines Matching refs:dev
47 static int cx25821_sram_channel_setup_upstream_audio(struct cx25821_dev *dev, in cx25821_sram_channel_setup_upstream_audio() argument
102 static __le32 *cx25821_risc_field_upstream_audio(struct cx25821_dev *dev, in cx25821_risc_field_upstream_audio() argument
110 dev->channels[dev->_audio_upstream_channel].sram_channels; in cx25821_risc_field_upstream_audio()
136 static int cx25821_risc_buffer_upstream_audio(struct cx25821_dev *dev, in cx25821_risc_buffer_upstream_audio() argument
149 rp = dev->_risc_virt_addr; in cx25821_risc_buffer_upstream_audio()
168 dev->_risc_phys_start_addr + in cx25821_risc_buffer_upstream_audio()
172 dev->_risc_phys_start_addr + in cx25821_risc_buffer_upstream_audio()
177 rp = cx25821_risc_field_upstream_audio(dev, rp, in cx25821_risc_buffer_upstream_audio()
178 dev->_audiodata_buf_phys_addr + databuf_offset, in cx25821_risc_buffer_upstream_audio()
193 rp = dev->_risc_virt_addr + RISC_SYNC_INSTRUCTION_SIZE / 4 + in cx25821_risc_buffer_upstream_audio()
200 static void cx25821_free_memory_audio(struct cx25821_dev *dev) in cx25821_free_memory_audio() argument
202 if (dev->_risc_virt_addr) { in cx25821_free_memory_audio()
203 pci_free_consistent(dev->pci, dev->_audiorisc_size, in cx25821_free_memory_audio()
204 dev->_risc_virt_addr, dev->_risc_phys_addr); in cx25821_free_memory_audio()
205 dev->_risc_virt_addr = NULL; in cx25821_free_memory_audio()
208 if (dev->_audiodata_buf_virt_addr) { in cx25821_free_memory_audio()
209 pci_free_consistent(dev->pci, dev->_audiodata_buf_size, in cx25821_free_memory_audio()
210 dev->_audiodata_buf_virt_addr, in cx25821_free_memory_audio()
211 dev->_audiodata_buf_phys_addr); in cx25821_free_memory_audio()
212 dev->_audiodata_buf_virt_addr = NULL; in cx25821_free_memory_audio()
216 void cx25821_stop_upstream_audio(struct cx25821_dev *dev) in cx25821_stop_upstream_audio() argument
219 dev->channels[AUDIO_UPSTREAM_SRAM_CHANNEL_B].sram_channels; in cx25821_stop_upstream_audio()
222 if (!dev->_audio_is_running) { in cx25821_stop_upstream_audio()
236 if (dev->_audiodata_buf_virt_addr) in cx25821_stop_upstream_audio()
237 memset(dev->_audiodata_buf_virt_addr, 0, in cx25821_stop_upstream_audio()
238 dev->_audiodata_buf_size); in cx25821_stop_upstream_audio()
240 dev->_audio_is_running = 0; in cx25821_stop_upstream_audio()
241 dev->_is_first_audio_frame = 0; in cx25821_stop_upstream_audio()
242 dev->_audioframe_count = 0; in cx25821_stop_upstream_audio()
243 dev->_audiofile_status = END_OF_FILE; in cx25821_stop_upstream_audio()
245 kfree(dev->_irq_audio_queues); in cx25821_stop_upstream_audio()
246 dev->_irq_audio_queues = NULL; in cx25821_stop_upstream_audio()
248 kfree(dev->_audiofilename); in cx25821_stop_upstream_audio()
251 void cx25821_free_mem_upstream_audio(struct cx25821_dev *dev) in cx25821_free_mem_upstream_audio() argument
253 if (dev->_audio_is_running) in cx25821_free_mem_upstream_audio()
254 cx25821_stop_upstream_audio(dev); in cx25821_free_mem_upstream_audio()
256 cx25821_free_memory_audio(dev); in cx25821_free_mem_upstream_audio()
259 static int cx25821_get_audio_data(struct cx25821_dev *dev, in cx25821_get_audio_data() argument
263 int frame_index_temp = dev->_audioframe_index; in cx25821_get_audio_data()
268 loff_t file_offset = dev->_audioframe_count * frame_size; in cx25821_get_audio_data()
271 if (dev->_audiofile_status == END_OF_FILE) in cx25821_get_audio_data()
274 file = filp_open(dev->_audiofilename, O_RDONLY | O_LARGEFILE, 0); in cx25821_get_audio_data()
277 __func__, dev->_audiofilename, -PTR_ERR(file)); in cx25821_get_audio_data()
281 if (dev->_audiodata_buf_virt_addr) in cx25821_get_audio_data()
282 p = (char *)dev->_audiodata_buf_virt_addr + frame_offset; in cx25821_get_audio_data()
284 for (i = 0; i < dev->_audio_lines_count; i++) { in cx25821_get_audio_data()
289 dev->_audiofile_status = END_OF_FILE; in cx25821_get_audio_data()
293 dev->_audiofile_status = IN_PROGRESS; in cx25821_get_audio_data()
300 dev->_audioframe_count++; in cx25821_get_audio_data()
308 struct cx25821_dev *dev = container_of(work, struct cx25821_dev, in cx25821_audioups_handler() local
311 if (!dev) { in cx25821_audioups_handler()
317 cx25821_get_audio_data(dev, dev->channels[dev->_audio_upstream_channel]. in cx25821_audioups_handler()
321 static int cx25821_openfile_audio(struct cx25821_dev *dev, in cx25821_openfile_audio() argument
324 char *p = (void *)dev->_audiodata_buf_virt_addr; in cx25821_openfile_audio()
329 file = filp_open(dev->_audiofilename, O_RDONLY | O_LARGEFILE, 0); in cx25821_openfile_audio()
332 __func__, dev->_audiofilename, PTR_ERR(file)); in cx25821_openfile_audio()
337 for (i = 0; i < dev->_audio_lines_count; i++) { in cx25821_openfile_audio()
345 dev->_audiofile_status = END_OF_FILE; in cx25821_openfile_audio()
355 dev->_audioframe_count++; in cx25821_openfile_audio()
357 dev->_audiofile_status = IN_PROGRESS; in cx25821_openfile_audio()
362 static int cx25821_audio_upstream_buffer_prepare(struct cx25821_dev *dev, in cx25821_audio_upstream_buffer_prepare() argument
370 cx25821_free_memory_audio(dev); in cx25821_audio_upstream_buffer_prepare()
372 dev->_risc_virt_addr = pci_alloc_consistent(dev->pci, in cx25821_audio_upstream_buffer_prepare()
373 dev->audio_upstream_riscbuf_size, &dma_addr); in cx25821_audio_upstream_buffer_prepare()
374 dev->_risc_virt_start_addr = dev->_risc_virt_addr; in cx25821_audio_upstream_buffer_prepare()
375 dev->_risc_phys_start_addr = dma_addr; in cx25821_audio_upstream_buffer_prepare()
376 dev->_risc_phys_addr = dma_addr; in cx25821_audio_upstream_buffer_prepare()
377 dev->_audiorisc_size = dev->audio_upstream_riscbuf_size; in cx25821_audio_upstream_buffer_prepare()
379 if (!dev->_risc_virt_addr) { in cx25821_audio_upstream_buffer_prepare()
385 memset(dev->_risc_virt_addr, 0, dev->_audiorisc_size); in cx25821_audio_upstream_buffer_prepare()
388 dev->_audiodata_buf_virt_addr = pci_alloc_consistent(dev->pci, in cx25821_audio_upstream_buffer_prepare()
389 dev->audio_upstream_databuf_size, &data_dma_addr); in cx25821_audio_upstream_buffer_prepare()
390 dev->_audiodata_buf_phys_addr = data_dma_addr; in cx25821_audio_upstream_buffer_prepare()
391 dev->_audiodata_buf_size = dev->audio_upstream_databuf_size; in cx25821_audio_upstream_buffer_prepare()
393 if (!dev->_audiodata_buf_virt_addr) { in cx25821_audio_upstream_buffer_prepare()
399 memset(dev->_audiodata_buf_virt_addr, 0, dev->_audiodata_buf_size); in cx25821_audio_upstream_buffer_prepare()
401 ret = cx25821_openfile_audio(dev, sram_ch); in cx25821_audio_upstream_buffer_prepare()
406 ret = cx25821_risc_buffer_upstream_audio(dev, dev->pci, bpl, in cx25821_audio_upstream_buffer_prepare()
407 dev->_audio_lines_count); in cx25821_audio_upstream_buffer_prepare()
420 static int cx25821_audio_upstream_irq(struct cx25821_dev *dev, int chan_num, in cx25821_audio_upstream_irq() argument
425 const struct sram_channel *channel = dev->channels[chan_num].sram_channels; in cx25821_audio_upstream_irq()
438 spin_lock(&dev->slock); in cx25821_audio_upstream_irq()
440 while (prog_cnt != dev->_last_index_irq) { in cx25821_audio_upstream_irq()
442 if (dev->_last_index_irq < (NUMBER_OF_PROGRAMS - 1)) in cx25821_audio_upstream_irq()
443 dev->_last_index_irq++; in cx25821_audio_upstream_irq()
445 dev->_last_index_irq = 0; in cx25821_audio_upstream_irq()
447 dev->_audioframe_index = dev->_last_index_irq; in cx25821_audio_upstream_irq()
449 queue_work(dev->_irq_audio_queues, in cx25821_audio_upstream_irq()
450 &dev->_audio_work_entry); in cx25821_audio_upstream_irq()
453 if (dev->_is_first_audio_frame) { in cx25821_audio_upstream_irq()
454 dev->_is_first_audio_frame = 0; in cx25821_audio_upstream_irq()
456 if (dev->_risc_virt_start_addr != NULL) { in cx25821_audio_upstream_irq()
458 dev->_risc_phys_start_addr + in cx25821_audio_upstream_irq()
462 rp = cx25821_risc_field_upstream_audio(dev, in cx25821_audio_upstream_irq()
463 dev->_risc_virt_start_addr + 1, in cx25821_audio_upstream_irq()
464 dev->_audiodata_buf_phys_addr, in cx25821_audio_upstream_irq()
481 spin_unlock(&dev->slock); in cx25821_audio_upstream_irq()
500 if (dev->_audiofile_status == END_OF_FILE) { in cx25821_audio_upstream_irq()
502 dev->_audioframe_count); in cx25821_audio_upstream_irq()
514 struct cx25821_dev *dev = dev_id; in cx25821_upstream_irq_audio() local
519 if (!dev) in cx25821_upstream_irq_audio()
522 sram_ch = dev->channels[dev->_audio_upstream_channel].sram_channels; in cx25821_upstream_irq_audio()
528 handled = cx25821_audio_upstream_irq(dev, in cx25821_upstream_irq_audio()
529 dev->_audio_upstream_channel, audio_status); in cx25821_upstream_irq_audio()
533 cx25821_stop_upstream_audio(dev); in cx25821_upstream_irq_audio()
540 static void cx25821_wait_fifo_enable(struct cx25821_dev *dev, in cx25821_wait_fifo_enable() argument
564 static int cx25821_start_audio_dma_upstream(struct cx25821_dev *dev, in cx25821_start_audio_dma_upstream() argument
572 cx_write(sram_ch->cmds_start + 0, dev->_risc_phys_addr); in cx25821_start_audio_dma_upstream()
602 err = request_irq(dev->pci->irq, cx25821_upstream_irq_audio, in cx25821_start_audio_dma_upstream()
603 IRQF_SHARED, dev->name, dev); in cx25821_start_audio_dma_upstream()
605 pr_err("%s: can't get upstream IRQ %d\n", dev->name, in cx25821_start_audio_dma_upstream()
606 dev->pci->irq); in cx25821_start_audio_dma_upstream()
614 dev->_audio_is_running = 1; in cx25821_start_audio_dma_upstream()
615 dev->_is_first_audio_frame = 1; in cx25821_start_audio_dma_upstream()
618 cx25821_wait_fifo_enable(dev, sram_ch); in cx25821_start_audio_dma_upstream()
623 cx25821_dev_unregister(dev); in cx25821_start_audio_dma_upstream()
627 int cx25821_audio_upstream_init(struct cx25821_dev *dev, int channel_select) in cx25821_audio_upstream_init() argument
632 if (dev->_audio_is_running) { in cx25821_audio_upstream_init()
637 dev->_audio_upstream_channel = channel_select; in cx25821_audio_upstream_init()
638 sram_ch = dev->channels[channel_select].sram_channels; in cx25821_audio_upstream_init()
641 INIT_WORK(&dev->_audio_work_entry, cx25821_audioups_handler); in cx25821_audio_upstream_init()
642 dev->_irq_audio_queues = in cx25821_audio_upstream_init()
645 if (!dev->_irq_audio_queues) { in cx25821_audio_upstream_init()
651 dev->_last_index_irq = 0; in cx25821_audio_upstream_init()
652 dev->_audio_is_running = 0; in cx25821_audio_upstream_init()
653 dev->_audioframe_count = 0; in cx25821_audio_upstream_init()
654 dev->_audiofile_status = RESET_STATUS; in cx25821_audio_upstream_init()
655 dev->_audio_lines_count = LINES_PER_AUDIO_BUFFER; in cx25821_audio_upstream_init()
658 if ((dev->input_audiofilename) && in cx25821_audio_upstream_init()
659 (strcmp(dev->input_audiofilename, "") != 0)) in cx25821_audio_upstream_init()
660 dev->_audiofilename = kstrdup(dev->input_audiofilename, in cx25821_audio_upstream_init()
663 dev->_audiofilename = kstrdup(_defaultAudioName, in cx25821_audio_upstream_init()
666 if (!dev->_audiofilename) { in cx25821_audio_upstream_init()
671 cx25821_sram_channel_setup_upstream_audio(dev, sram_ch, in cx25821_audio_upstream_init()
674 dev->audio_upstream_riscbuf_size = in cx25821_audio_upstream_init()
677 dev->audio_upstream_databuf_size = AUDIO_DATA_BUF_SZ * NUM_AUDIO_PROGS; in cx25821_audio_upstream_init()
680 err = cx25821_audio_upstream_buffer_prepare(dev, sram_ch, in cx25821_audio_upstream_init()
684 dev->name); in cx25821_audio_upstream_init()
688 cx25821_start_audio_dma_upstream(dev, sram_ch); in cx25821_audio_upstream_init()
693 cx25821_dev_unregister(dev); in cx25821_audio_upstream_init()