Lines Matching refs:lch

67 static void omap_clear_dma(int lch);
68 static int omap_dma_set_prio_lch(int lch, unsigned char read_prio,
136 static inline void disable_lnk(int lch);
137 static void omap_disable_channel_irq(int lch);
138 static inline void omap_enable_channel_irq(int lch);
172 void omap_set_dma_priority(int lch, int dst_port, int priority) in omap_set_dma_priority() argument
204 void omap_set_dma_priority(int lch, int dst_port, int priority) in omap_set_dma_priority() argument
208 ccr = p->dma_read(CCR, lch); in omap_set_dma_priority()
213 p->dma_write(ccr, CCR, lch); in omap_set_dma_priority()
218 void omap_set_dma_transfer_params(int lch, int data_type, int elem_count, in omap_set_dma_transfer_params() argument
224 l = p->dma_read(CSDP, lch); in omap_set_dma_transfer_params()
227 p->dma_write(l, CSDP, lch); in omap_set_dma_transfer_params()
232 ccr = p->dma_read(CCR, lch); in omap_set_dma_transfer_params()
236 p->dma_write(ccr, CCR, lch); in omap_set_dma_transfer_params()
238 ccr = p->dma_read(CCR2, lch); in omap_set_dma_transfer_params()
242 p->dma_write(ccr, CCR2, lch); in omap_set_dma_transfer_params()
248 val = p->dma_read(CCR, lch); in omap_set_dma_transfer_params()
273 p->dma_write(val, CCR, lch); in omap_set_dma_transfer_params()
276 p->dma_write(elem_count, CEN, lch); in omap_set_dma_transfer_params()
277 p->dma_write(frame_count, CFN, lch); in omap_set_dma_transfer_params()
281 void omap_set_dma_write_mode(int lch, enum omap_dma_write_mode mode) in omap_set_dma_write_mode() argument
286 csdp = p->dma_read(CSDP, lch); in omap_set_dma_write_mode()
289 p->dma_write(csdp, CSDP, lch); in omap_set_dma_write_mode()
294 void omap_set_dma_channel_mode(int lch, enum omap_dma_channel_mode mode) in omap_set_dma_channel_mode() argument
299 l = p->dma_read(LCH_CTRL, lch); in omap_set_dma_channel_mode()
302 p->dma_write(l, LCH_CTRL, lch); in omap_set_dma_channel_mode()
308 void omap_set_dma_src_params(int lch, int src_port, int src_amode, in omap_set_dma_src_params() argument
317 w = p->dma_read(CSDP, lch); in omap_set_dma_src_params()
320 p->dma_write(w, CSDP, lch); in omap_set_dma_src_params()
323 l = p->dma_read(CCR, lch); in omap_set_dma_src_params()
326 p->dma_write(l, CCR, lch); in omap_set_dma_src_params()
328 p->dma_write(src_start, CSSA, lch); in omap_set_dma_src_params()
330 p->dma_write(src_ei, CSEI, lch); in omap_set_dma_src_params()
331 p->dma_write(src_fi, CSFI, lch); in omap_set_dma_src_params()
335 void omap_set_dma_params(int lch, struct omap_dma_channel_params *params) in omap_set_dma_params() argument
337 omap_set_dma_transfer_params(lch, params->data_type, in omap_set_dma_params()
341 omap_set_dma_src_params(lch, params->src_port, in omap_set_dma_params()
345 omap_set_dma_dest_params(lch, params->dst_port, in omap_set_dma_params()
349 omap_dma_set_prio_lch(lch, params->read_prio, in omap_set_dma_params()
354 void omap_set_dma_src_data_pack(int lch, int enable) in omap_set_dma_src_data_pack() argument
358 l = p->dma_read(CSDP, lch); in omap_set_dma_src_data_pack()
362 p->dma_write(l, CSDP, lch); in omap_set_dma_src_data_pack()
366 void omap_set_dma_src_burst_mode(int lch, enum omap_dma_burst_mode burst_mode) in omap_set_dma_src_burst_mode() argument
371 l = p->dma_read(CSDP, lch); in omap_set_dma_src_burst_mode()
407 p->dma_write(l, CSDP, lch); in omap_set_dma_src_burst_mode()
412 void omap_set_dma_dest_params(int lch, int dest_port, int dest_amode, in omap_set_dma_dest_params() argument
419 l = p->dma_read(CSDP, lch); in omap_set_dma_dest_params()
422 p->dma_write(l, CSDP, lch); in omap_set_dma_dest_params()
425 l = p->dma_read(CCR, lch); in omap_set_dma_dest_params()
428 p->dma_write(l, CCR, lch); in omap_set_dma_dest_params()
430 p->dma_write(dest_start, CDSA, lch); in omap_set_dma_dest_params()
432 p->dma_write(dst_ei, CDEI, lch); in omap_set_dma_dest_params()
433 p->dma_write(dst_fi, CDFI, lch); in omap_set_dma_dest_params()
437 void omap_set_dma_dest_data_pack(int lch, int enable) in omap_set_dma_dest_data_pack() argument
441 l = p->dma_read(CSDP, lch); in omap_set_dma_dest_data_pack()
445 p->dma_write(l, CSDP, lch); in omap_set_dma_dest_data_pack()
449 void omap_set_dma_dest_burst_mode(int lch, enum omap_dma_burst_mode burst_mode) in omap_set_dma_dest_burst_mode() argument
454 l = p->dma_read(CSDP, lch); in omap_set_dma_dest_burst_mode()
487 p->dma_write(l, CSDP, lch); in omap_set_dma_dest_burst_mode()
491 static inline void omap_enable_channel_irq(int lch) in omap_enable_channel_irq() argument
495 p->dma_read(CSR, lch); in omap_enable_channel_irq()
497 p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); in omap_enable_channel_irq()
500 p->dma_write(dma_chan[lch].enabled_irqs, CICR, lch); in omap_enable_channel_irq()
503 static inline void omap_disable_channel_irq(int lch) in omap_disable_channel_irq() argument
506 p->dma_write(0, CICR, lch); in omap_disable_channel_irq()
509 p->dma_read(CSR, lch); in omap_disable_channel_irq()
511 p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); in omap_disable_channel_irq()
514 void omap_enable_dma_irq(int lch, u16 bits) in omap_enable_dma_irq() argument
516 dma_chan[lch].enabled_irqs |= bits; in omap_enable_dma_irq()
520 void omap_disable_dma_irq(int lch, u16 bits) in omap_disable_dma_irq() argument
522 dma_chan[lch].enabled_irqs &= ~bits; in omap_disable_dma_irq()
526 static inline void enable_lnk(int lch) in enable_lnk() argument
530 l = p->dma_read(CLNK_CTRL, lch); in enable_lnk()
536 if (dma_chan[lch].next_lch != -1) in enable_lnk()
537 l = dma_chan[lch].next_lch | (1 << 15); in enable_lnk()
541 if (dma_chan[lch].next_linked_ch != -1) in enable_lnk()
542 l = dma_chan[lch].next_linked_ch | (1 << 15); in enable_lnk()
545 p->dma_write(l, CLNK_CTRL, lch); in enable_lnk()
548 static inline void disable_lnk(int lch) in disable_lnk() argument
552 l = p->dma_read(CLNK_CTRL, lch); in disable_lnk()
555 omap_disable_channel_irq(lch); in disable_lnk()
567 p->dma_write(l, CLNK_CTRL, lch); in disable_lnk()
568 dma_chan[lch].flags &= ~OMAP_DMA_ACTIVE; in disable_lnk()
571 static inline void omap2_enable_irq_lch(int lch) in omap2_enable_irq_lch() argument
581 p->dma_write(1 << lch, IRQSTATUS_L0, lch); in omap2_enable_irq_lch()
583 val = p->dma_read(IRQENABLE_L0, lch); in omap2_enable_irq_lch()
584 val |= 1 << lch; in omap2_enable_irq_lch()
585 p->dma_write(val, IRQENABLE_L0, lch); in omap2_enable_irq_lch()
589 static inline void omap2_disable_irq_lch(int lch) in omap2_disable_irq_lch() argument
599 val = p->dma_read(IRQENABLE_L0, lch); in omap2_disable_irq_lch()
600 val &= ~(1 << lch); in omap2_disable_irq_lch()
601 p->dma_write(val, IRQENABLE_L0, lch); in omap2_disable_irq_lch()
603 p->dma_write(1 << lch, IRQSTATUS_L0, lch); in omap2_disable_irq_lch()
608 void (*callback)(int lch, u16 ch_status, void *data), in omap_request_dma() argument
686 void omap_free_dma(int lch) in omap_free_dma() argument
690 if (dma_chan[lch].dev_id == -1) { in omap_free_dma()
692 lch); in omap_free_dma()
698 omap2_disable_irq_lch(lch); in omap_free_dma()
701 omap_disable_channel_irq(lch); in omap_free_dma()
704 p->dma_write(0, CCR, lch); in omap_free_dma()
708 omap_clear_dma(lch); in omap_free_dma()
711 dma_chan[lch].dev_id = -1; in omap_free_dma()
712 dma_chan[lch].next_lch = -1; in omap_free_dma()
713 dma_chan[lch].callback = NULL; in omap_free_dma()
761 omap_dma_set_prio_lch(int lch, unsigned char read_prio, in omap_dma_set_prio_lch() argument
766 if (unlikely((lch < 0 || lch >= dma_lch_count))) { in omap_dma_set_prio_lch()
770 l = p->dma_read(CCR, lch); in omap_dma_set_prio_lch()
777 p->dma_write(l, CCR, lch); in omap_dma_set_prio_lch()
787 static void omap_clear_dma(int lch) in omap_clear_dma() argument
792 p->clear_dma(lch); in omap_clear_dma()
796 void omap_start_dma(int lch) in omap_start_dma() argument
805 p->dma_write(0, CPC, lch); in omap_start_dma()
807 p->dma_write(0, CDAC, lch); in omap_start_dma()
809 if (!omap_dma_in_1510_mode() && dma_chan[lch].next_lch != -1) { in omap_start_dma()
814 enable_lnk(lch); in omap_start_dma()
817 dma_chan_link_map[lch] = 1; in omap_start_dma()
819 cur_lch = dma_chan[lch].next_lch; in omap_start_dma()
835 p->dma_write(lch, CLNK_CTRL, lch); in omap_start_dma()
837 omap_enable_channel_irq(lch); in omap_start_dma()
839 l = p->dma_read(CCR, lch); in omap_start_dma()
852 p->dma_write(l, CCR, lch); in omap_start_dma()
854 dma_chan[lch].flags |= OMAP_DMA_ACTIVE; in omap_start_dma()
858 void omap_stop_dma(int lch) in omap_stop_dma() argument
863 omap_disable_channel_irq(lch); in omap_stop_dma()
865 l = p->dma_read(CCR, lch); in omap_stop_dma()
872 l = p->dma_read(OCP_SYSCONFIG, lch); in omap_stop_dma()
878 l = p->dma_read(CCR, lch); in omap_stop_dma()
880 p->dma_write(l, CCR, lch); in omap_stop_dma()
883 l = p->dma_read(CCR, lch); in omap_stop_dma()
888 l = p->dma_read(CCR, lch); in omap_stop_dma()
891 pr_err("DMA drain did not complete on lch %d\n", lch); in omap_stop_dma()
893 p->dma_write(sys_cf, OCP_SYSCONFIG, lch); in omap_stop_dma()
896 p->dma_write(l, CCR, lch); in omap_stop_dma()
906 if (!omap_dma_in_1510_mode() && dma_chan[lch].next_lch != -1) { in omap_stop_dma()
907 int next_lch, cur_lch = lch; in omap_stop_dma()
925 dma_chan[lch].flags &= ~OMAP_DMA_ACTIVE; in omap_stop_dma()
933 int omap_set_dma_callback(int lch, in omap_set_dma_callback() argument
934 void (*callback)(int lch, u16 ch_status, void *data), in omap_set_dma_callback() argument
939 if (lch < 0) in omap_set_dma_callback()
943 if (dma_chan[lch].dev_id == -1) { in omap_set_dma_callback()
948 dma_chan[lch].callback = callback; in omap_set_dma_callback()
949 dma_chan[lch].data = data; in omap_set_dma_callback()
964 dma_addr_t omap_get_dma_src_pos(int lch) in omap_get_dma_src_pos() argument
969 offset = p->dma_read(CPC, lch); in omap_get_dma_src_pos()
971 offset = p->dma_read(CSAC, lch); in omap_get_dma_src_pos()
974 offset = p->dma_read(CSAC, lch); in omap_get_dma_src_pos()
982 if (likely(p->dma_read(CDAC, lch))) in omap_get_dma_src_pos()
983 offset = p->dma_read(CSAC, lch); in omap_get_dma_src_pos()
985 offset = p->dma_read(CSSA, lch); in omap_get_dma_src_pos()
989 offset |= (p->dma_read(CSSA, lch) & 0xFFFF0000); in omap_get_dma_src_pos()
1003 dma_addr_t omap_get_dma_dst_pos(int lch) in omap_get_dma_dst_pos() argument
1008 offset = p->dma_read(CPC, lch); in omap_get_dma_dst_pos()
1010 offset = p->dma_read(CDAC, lch); in omap_get_dma_dst_pos()
1017 offset = p->dma_read(CDAC, lch); in omap_get_dma_dst_pos()
1024 offset = p->dma_read(CDSA, lch); in omap_get_dma_dst_pos()
1028 offset |= (p->dma_read(CDSA, lch) & 0xFFFF0000); in omap_get_dma_dst_pos()
1034 int omap_get_dma_active_status(int lch) in omap_get_dma_active_status() argument
1036 return (p->dma_read(CCR, lch) & OMAP_DMA_CCR_EN) != 0; in omap_get_dma_active_status()
1042 int lch; in omap_dma_running() local
1048 for (lch = 0; lch < dma_chan_count; lch++) in omap_dma_running()
1049 if (p->dma_read(CCR, lch) & OMAP_DMA_CCR_EN) in omap_dma_running()