177
177
rp = cx25821_risc_field_upstream_audio(dev, rp,
179
_audiodata_buf_phys_addr
180
+ databuf_offset, bpl,
178
dev->_audiodata_buf_phys_addr + databuf_offset,
183
181
if (USE_RISC_NOOP_AUDIO) {
184
182
for (i = 0; i < NUM_NO_OPS; i++)
194
192
/* Recalculate virtual address based on frame index */
195
193
rp = dev->_risc_virt_addr + RISC_SYNC_INSTRUCTION_SIZE / 4 +
196
(AUDIO_RISC_DMA_BUF_SIZE * (frame + 1) / 4);
194
(AUDIO_RISC_DMA_BUF_SIZE * (frame + 1) / 4);
218
216
void cx25821_stop_upstream_audio(struct cx25821_dev *dev)
220
218
struct sram_channel *sram_ch =
221
dev->channels[AUDIO_UPSTREAM_SRAM_CHANNEL_B].sram_channels;
219
dev->channels[AUDIO_UPSTREAM_SRAM_CHANNEL_B].sram_channels;
224
222
if (!dev->_audio_is_running) {
287
285
if (!(myfile->f_op)) {
288
286
pr_err("%s(): File has no file operations registered!\n",
290
288
filp_close(myfile, NULL);
294
292
if (!myfile->f_op->read) {
295
293
pr_err("%s(): File has no READ operations registered!\n",
297
295
filp_close(myfile, NULL);
305
303
for (i = 0; i < dev->_audio_lines_count; i++) {
306
304
pos = file_offset;
309
vfs_read(myfile, mybuf, line_size, &pos);
306
vfs_read_retval = vfs_read(myfile, mybuf, line_size,
311
309
if (vfs_read_retval > 0 && vfs_read_retval == line_size
312
310
&& dev->_audiodata_buf_virt_addr != NULL) {
313
311
memcpy((void *)(dev->_audiodata_buf_virt_addr +
314
312
frame_offset / 4), mybuf,
318
316
file_offset += vfs_read_retval;
329
327
dev->_audioframe_count++;
331
dev->_audiofile_status =
332
(vfs_read_retval == line_size) ? IN_PROGRESS : END_OF_FILE;
329
dev->_audiofile_status = (vfs_read_retval == line_size) ?
330
IN_PROGRESS : END_OF_FILE;
335
333
filp_close(myfile, NULL);
341
339
static void cx25821_audioups_handler(struct work_struct *work)
343
struct cx25821_dev *dev =
344
container_of(work, struct cx25821_dev, _audio_work_entry);
341
struct cx25821_dev *dev = container_of(work, struct cx25821_dev,
347
345
pr_err("ERROR %s(): since container_of(work_struct) FAILED!\n",
370
368
if (IS_ERR(myfile)) {
371
369
const int open_errno = -PTR_ERR(myfile);
372
370
pr_err("%s(): ERROR opening file(%s) with errno = %d!\n",
373
__func__, dev->_audiofilename, open_errno);
371
__func__, dev->_audiofilename, open_errno);
374
372
return PTR_ERR(myfile);
376
374
if (!(myfile->f_op)) {
377
375
pr_err("%s(): File has no file operations registered!\n",
379
377
filp_close(myfile, NULL);
383
381
if (!myfile->f_op->read) {
384
382
pr_err("%s(): File has no READ operations registered!\n",
386
384
filp_close(myfile, NULL);
395
393
for (i = 0; i < dev->_audio_lines_count; i++) {
399
vfs_read(myfile, mybuf, line_size, &pos);
396
vfs_read_retval = vfs_read(myfile, mybuf,
401
if (vfs_read_retval > 0
402
&& vfs_read_retval == line_size
403
&& dev->_audiodata_buf_virt_addr != NULL) {
399
if (vfs_read_retval > 0 &&
400
vfs_read_retval == line_size &&
401
dev->_audiodata_buf_virt_addr != NULL) {
404
402
memcpy((void *)(dev->
405
403
_audiodata_buf_virt_addr
406
404
+ offset / 4), mybuf,
445
443
cx25821_free_memory_audio(dev);
447
dev->_risc_virt_addr =
448
pci_alloc_consistent(dev->pci, dev->audio_upstream_riscbuf_size,
445
dev->_risc_virt_addr = pci_alloc_consistent(dev->pci,
446
dev->audio_upstream_riscbuf_size, &dma_addr);
450
447
dev->_risc_virt_start_addr = dev->_risc_virt_addr;
451
448
dev->_risc_phys_start_addr = dma_addr;
452
449
dev->_risc_phys_addr = dma_addr;
455
452
if (!dev->_risc_virt_addr) {
456
453
printk(KERN_DEBUG
457
pr_fmt("ERROR: pci_alloc_consistent() FAILED to allocate memory for RISC program! Returning\n"));
454
pr_fmt("ERROR: pci_alloc_consistent() FAILED to allocate memory for RISC program! Returning\n"));
460
457
/* Clear out memory at address */
461
458
memset(dev->_risc_virt_addr, 0, dev->_audiorisc_size);
463
460
/* For Audio Data buffer allocation */
464
dev->_audiodata_buf_virt_addr =
465
pci_alloc_consistent(dev->pci, dev->audio_upstream_databuf_size,
461
dev->_audiodata_buf_virt_addr = pci_alloc_consistent(dev->pci,
462
dev->audio_upstream_databuf_size, &data_dma_addr);
467
463
dev->_audiodata_buf_phys_addr = data_dma_addr;
468
464
dev->_audiodata_buf_size = dev->audio_upstream_databuf_size;
470
466
if (!dev->_audiodata_buf_virt_addr) {
471
467
printk(KERN_DEBUG
472
pr_fmt("ERROR: pci_alloc_consistent() FAILED to allocate memory for data buffer! Returning\n"));
468
pr_fmt("ERROR: pci_alloc_consistent() FAILED to allocate memory for data buffer! Returning\n"));
475
471
/* Clear out memory at address */
482
478
/* Creating RISC programs */
484
cx25821_risc_buffer_upstream_audio(dev, dev->pci, bpl,
485
dev->_audio_lines_count);
479
ret = cx25821_risc_buffer_upstream_audio(dev, dev->pci, bpl,
480
dev->_audio_lines_count);
487
482
printk(KERN_DEBUG
488
pr_fmt("ERROR creating audio upstream RISC programs!\n"));
483
pr_fmt("ERROR creating audio upstream RISC programs!\n"));
534
529
if (dev->_risc_virt_start_addr != NULL) {
535
530
risc_phys_jump_addr =
536
dev->_risc_phys_start_addr +
537
RISC_SYNC_INSTRUCTION_SIZE +
538
AUDIO_RISC_DMA_BUF_SIZE;
531
dev->_risc_phys_start_addr +
532
RISC_SYNC_INSTRUCTION_SIZE +
533
AUDIO_RISC_DMA_BUF_SIZE;
540
535
rp = cx25821_risc_field_upstream_audio(dev,
541
536
dev->_risc_virt_start_addr + 1,
590
585
static irqreturn_t cx25821_upstream_irq_audio(int irq, void *dev_id)
592
587
struct cx25821_dev *dev = dev_id;
593
u32 msk_stat, audio_status;
595
590
struct sram_channel *sram_ch;
662
656
/* Set the input mode to 16-bit */
663
657
tmp = cx_read(sram_ch->aud_cfg);
665
FLD_AUD_SRC_ENABLE | FLD_AUD_DST_PK_MODE | FLD_AUD_CLK_ENABLE |
666
FLD_AUD_MASTER_MODE | FLD_AUD_CLK_SELECT_PLL_D | FLD_AUD_SONY_MODE;
658
tmp |= FLD_AUD_SRC_ENABLE | FLD_AUD_DST_PK_MODE | FLD_AUD_CLK_ENABLE |
659
FLD_AUD_MASTER_MODE | FLD_AUD_CLK_SELECT_PLL_D |
667
661
cx_write(sram_ch->aud_cfg, tmp);
669
663
/* Read and write back the interrupt status register to clear it */
678
672
tmp = cx_read(sram_ch->int_msk);
679
673
cx_write(sram_ch->int_msk, tmp |= _intr_msk);
682
request_irq(dev->pci->irq, cx25821_upstream_irq_audio,
675
err = request_irq(dev->pci->irq, cx25821_upstream_irq_audio,
683
676
IRQF_SHARED, dev->name, dev);
685
pr_err("%s: can't get upstream IRQ %d\n",
686
dev->name, dev->pci->irq);
678
pr_err("%s: can't get upstream IRQ %d\n", dev->name,
740
733
if (dev->input_audiofilename) {
741
734
str_length = strlen(dev->input_audiofilename);
742
dev->_audiofilename = kmalloc(str_length + 1, GFP_KERNEL);
735
dev->_audiofilename = kmemdup(dev->input_audiofilename,
736
str_length + 1, GFP_KERNEL);
744
738
if (!dev->_audiofilename)
747
memcpy(dev->_audiofilename, dev->input_audiofilename,
750
741
/* Default if filename is empty string */
751
742
if (strcmp(dev->input_audiofilename, "") == 0)
752
743
dev->_audiofilename = "/root/audioGOOD.wav";
754
745
str_length = strlen(_defaultAudioName);
755
dev->_audiofilename = kmalloc(str_length + 1, GFP_KERNEL);
746
dev->_audiofilename = kmemdup(_defaultAudioName,
747
str_length + 1, GFP_KERNEL);
757
749
if (!dev->_audiofilename)
760
memcpy(dev->_audiofilename, _defaultAudioName, str_length + 1);
763
753
retval = cx25821_sram_channel_setup_upstream_audio(dev, sram_ch,
766
756
dev->audio_upstream_riscbuf_size =
767
AUDIO_RISC_DMA_BUF_SIZE * NUM_AUDIO_PROGS +
768
RISC_SYNC_INSTRUCTION_SIZE;
757
AUDIO_RISC_DMA_BUF_SIZE * NUM_AUDIO_PROGS +
758
RISC_SYNC_INSTRUCTION_SIZE;
769
759
dev->audio_upstream_databuf_size = AUDIO_DATA_BUF_SZ * NUM_AUDIO_PROGS;
771
761
/* Allocating buffers and prepare RISC program */