Lines Matching refs:output

151 		if (dev->port[i].output)  in ddb_set_dma_tables()
152 ddb_set_dma_table(dev->port[i].output); in ddb_set_dma_tables()
185 if (port->output->dma->running) { in ddb_unredirect()
189 oredi = port->output->redi; in ddb_unredirect()
197 iredo->port->output->redi = oredi; in ddb_unredirect()
210 port->output->redi = NULL; in ddb_unredirect()
231 if (!port->output) in ddb_redirect()
244 if (port->output->dma->running || input->dma->running) { in ddb_redirect()
257 input->redo = port->output; in ddb_redirect()
258 port->output->redi = input; in ddb_redirect()
260 ddb_redirect_dma(input->port->dev, input->dma, port->output->dma); in ddb_redirect()
351 if (port->output->dma) in ddb_buffers_alloc()
352 if (dma_alloc(dev->pdev, port->output->dma, 1) in ddb_buffers_alloc()
376 if (port->output && port->output->dma) in ddb_buffers_free()
377 dma_free(dev->pdev, port->output->dma, 1); in ddb_buffers_free()
381 static void calc_con(struct ddb_output *output, u32 *con, u32 *con2, u32 flags) in calc_con() argument
383 struct ddb *dev = output->port->dev; in calc_con()
384 u32 bitrate = output->port->obr, max_bitrate = 72000; in calc_con()
388 if (output->port->gap != 0xffffffff) { in calc_con()
390 gap = output->port->gap; in calc_con()
393 if (dev->link[0].info->type == DDB_OCTOPUS_CI && output->port->nr > 1) { in calc_con()
448 static void ddb_output_start(struct ddb_output *output) in ddb_output_start() argument
450 struct ddb *dev = output->port->dev; in ddb_output_start()
453 spin_lock_irq(&output->dma->lock); in ddb_output_start()
454 output->dma->cbuf = 0; in ddb_output_start()
455 output->dma->coff = 0; in ddb_output_start()
456 output->dma->stat = 0; in ddb_output_start()
457 ddbwritel(dev, 0, DMA_BUFFER_CONTROL(output->dma)); in ddb_output_start()
459 if (output->port->input[0]->port->class == DDB_PORT_LOOP) in ddb_output_start()
462 calc_con(output, &con, &con2, 0); in ddb_output_start()
464 ddbwritel(dev, 0, TS_CONTROL(output)); in ddb_output_start()
465 ddbwritel(dev, 2, TS_CONTROL(output)); in ddb_output_start()
466 ddbwritel(dev, 0, TS_CONTROL(output)); in ddb_output_start()
467 ddbwritel(dev, con, TS_CONTROL(output)); in ddb_output_start()
468 ddbwritel(dev, con2, TS_CONTROL2(output)); in ddb_output_start()
470 ddbwritel(dev, output->dma->bufval, in ddb_output_start()
471 DMA_BUFFER_SIZE(output->dma)); in ddb_output_start()
472 ddbwritel(dev, 0, DMA_BUFFER_ACK(output->dma)); in ddb_output_start()
474 ddbwritel(dev, 7, DMA_BUFFER_CONTROL(output->dma)); in ddb_output_start()
476 ddbwritel(dev, con | 1, TS_CONTROL(output)); in ddb_output_start()
478 output->dma->running = 1; in ddb_output_start()
479 spin_unlock_irq(&output->dma->lock); in ddb_output_start()
482 static void ddb_output_stop(struct ddb_output *output) in ddb_output_stop() argument
484 struct ddb *dev = output->port->dev; in ddb_output_stop()
486 spin_lock_irq(&output->dma->lock); in ddb_output_stop()
488 ddbwritel(dev, 0, TS_CONTROL(output)); in ddb_output_stop()
490 ddbwritel(dev, 0, DMA_BUFFER_CONTROL(output->dma)); in ddb_output_stop()
491 output->dma->running = 0; in ddb_output_stop()
492 spin_unlock_irq(&output->dma->lock); in ddb_output_stop()
570 static u32 ddb_output_free(struct ddb_output *output) in ddb_output_free() argument
572 u32 idx, off, stat = output->dma->stat; in ddb_output_free()
578 if (output->dma->cbuf != idx) { in ddb_output_free()
579 if ((((output->dma->cbuf + 1) % output->dma->num) == idx) && in ddb_output_free()
580 (output->dma->size - output->dma->coff <= (2 * 188))) in ddb_output_free()
584 diff = off - output->dma->coff; in ddb_output_free()
590 static ssize_t ddb_output_write(struct ddb_output *output, in ddb_output_write() argument
593 struct ddb *dev = output->port->dev; in ddb_output_write()
594 u32 idx, off, stat = output->dma->stat; in ddb_output_write()
601 len = output->dma->size - output->dma->coff; in ddb_output_write()
602 if ((((output->dma->cbuf + 1) % output->dma->num) == idx) && in ddb_output_write()
608 if (output->dma->cbuf == idx) { in ddb_output_write()
609 if (off > output->dma->coff) { in ddb_output_write()
610 len = off - output->dma->coff; in ddb_output_write()
619 if (copy_from_user(output->dma->vbuf[output->dma->cbuf] + in ddb_output_write()
620 output->dma->coff, in ddb_output_write()
626 output->dma->pbuf[output->dma->cbuf], in ddb_output_write()
627 output->dma->size, DMA_TO_DEVICE); in ddb_output_write()
630 output->dma->coff += len; in ddb_output_write()
631 if (output->dma->coff == output->dma->size) { in ddb_output_write()
632 output->dma->coff = 0; in ddb_output_write()
633 output->dma->cbuf = ((output->dma->cbuf + 1) % in ddb_output_write()
634 output->dma->num); in ddb_output_write()
637 (output->dma->cbuf << 11) | in ddb_output_write()
638 (output->dma->coff >> 7), in ddb_output_write()
639 DMA_BUFFER_ACK(output->dma)); in ddb_output_write()
710 struct ddb_output *output = dvbdev->priv; in ts_write() local
711 struct ddb *dev = output->port->dev; in ts_write()
718 if (ddb_output_free(output) < 188) { in ts_write()
722 output->dma->wq, in ts_write()
723 ddb_output_free(output) >= 188) < 0) in ts_write()
726 stat = ddb_output_write(output, buf, left); in ts_write()
739 struct ddb_output *output = dvbdev->priv; in ts_read() local
740 struct ddb_input *input = output->port->input[0]; in ts_read()
741 struct ddb *dev = output->port->dev; in ts_read()
768 struct ddb_output *output = dvbdev->priv; in ts_poll() local
769 struct ddb_input *input = output->port->input[0]; in ts_poll()
774 poll_wait(file, &output->dma->wq, wait); in ts_poll()
777 if (ddb_output_free(output) >= 188) in ts_poll()
785 struct ddb_output *output = NULL; in ts_release() local
789 output = dvbdev->priv; in ts_release()
790 input = output->port->input[0]; in ts_release()
798 if (!output) in ts_release()
800 ddb_output_stop(output); in ts_release()
809 struct ddb_output *output = NULL; in ts_open() local
813 output = dvbdev->priv; in ts_open()
814 input = output->port->input[0]; in ts_open()
823 if (!output) in ts_open()
835 ddb_output_start(output); in ts_open()
2034 &dvbdev_ci, (void *)port->output, in ddb_port_attach()
2110 struct ddb_output *output) in input_write_output() argument
2112 ddbwritel(output->port->dev, in input_write_output()
2113 input->dma->stat, DMA_BUFFER_ACK(output->dma)); in input_write_output()
2114 output->dma->cbuf = (input->dma->stat >> 11) & 0x1f; in input_write_output()
2115 output->dma->coff = (input->dma->stat & 0x7ff) << 7; in input_write_output()
2118 static void output_ack_input(struct ddb_output *output, in output_ack_input() argument
2122 output->dma->stat, DMA_BUFFER_ACK(input->dma)); in output_ack_input()
2198 struct ddb_output *output = (struct ddb_output *)dma->io; in output_work() local
2199 struct ddb *dev = output->port->dev; in output_work()
2207 if (output->redi) in output_work()
2208 output_ack_input(output, output->redi); in output_work()
2216 struct ddb_output *output = (struct ddb_output *)data; in output_handler() local
2217 struct ddb_dma *dma = output->dma; in output_handler()
2305 struct ddb_output *output = &dev->output[nr]; in ddb_output_init() local
2308 port->output = output; in ddb_output_init()
2309 output->nr = nr; in ddb_output_init()
2310 output->port = port; in ddb_output_init()
2311 rm = io_regmap(output, 1); in ddb_output_init()
2312 output->regs = DDB_LINK_TAG(port->lnr) | in ddb_output_init()
2313 (rm->output->base + rm->output->size * nr); in ddb_output_init()
2316 port->lnr, nr, output->regs); in ddb_output_init()
2319 const struct ddb_regmap *rm0 = io_regmap(output, 0); in ddb_output_init()
2322 ddb_irq_set(dev, 0, nr + base, &output_handler, output); in ddb_output_init()
2323 ddb_dma_init(output, nr, 1); in ddb_output_init()
2458 if (port->output && port->output->dma) in ddb_ports_release()
2459 cancel_work_sync(&port->output->dma->work); in ddb_ports_release()