Lines Matching refs:lch
71 static void omap_clear_dma(int lch);
72 static int omap_dma_set_prio_lch(int lch, unsigned char read_prio,
140 static inline void disable_lnk(int lch);
141 static void omap_disable_channel_irq(int lch);
142 static inline void omap_enable_channel_irq(int lch);
176 void omap_set_dma_priority(int lch, int dst_port, int priority) in omap_set_dma_priority() argument
208 void omap_set_dma_priority(int lch, int dst_port, int priority) in omap_set_dma_priority() argument
212 ccr = p->dma_read(CCR, lch); in omap_set_dma_priority()
217 p->dma_write(ccr, CCR, lch); in omap_set_dma_priority()
222 void omap_set_dma_transfer_params(int lch, int data_type, int elem_count, in omap_set_dma_transfer_params() argument
228 l = p->dma_read(CSDP, lch); in omap_set_dma_transfer_params()
231 p->dma_write(l, CSDP, lch); in omap_set_dma_transfer_params()
236 ccr = p->dma_read(CCR, lch); in omap_set_dma_transfer_params()
240 p->dma_write(ccr, CCR, lch); in omap_set_dma_transfer_params()
242 ccr = p->dma_read(CCR2, lch); in omap_set_dma_transfer_params()
246 p->dma_write(ccr, CCR2, lch); in omap_set_dma_transfer_params()
252 val = p->dma_read(CCR, lch); in omap_set_dma_transfer_params()
277 p->dma_write(val, CCR, lch); in omap_set_dma_transfer_params()
280 p->dma_write(elem_count, CEN, lch); in omap_set_dma_transfer_params()
281 p->dma_write(frame_count, CFN, lch); in omap_set_dma_transfer_params()
285 void omap_set_dma_write_mode(int lch, enum omap_dma_write_mode mode) in omap_set_dma_write_mode() argument
290 csdp = p->dma_read(CSDP, lch); in omap_set_dma_write_mode()
293 p->dma_write(csdp, CSDP, lch); in omap_set_dma_write_mode()
298 void omap_set_dma_channel_mode(int lch, enum omap_dma_channel_mode mode) in omap_set_dma_channel_mode() argument
303 l = p->dma_read(LCH_CTRL, lch); in omap_set_dma_channel_mode()
306 p->dma_write(l, LCH_CTRL, lch); in omap_set_dma_channel_mode()
312 void omap_set_dma_src_params(int lch, int src_port, int src_amode, in omap_set_dma_src_params() argument
321 w = p->dma_read(CSDP, lch); in omap_set_dma_src_params()
324 p->dma_write(w, CSDP, lch); in omap_set_dma_src_params()
327 l = p->dma_read(CCR, lch); in omap_set_dma_src_params()
330 p->dma_write(l, CCR, lch); in omap_set_dma_src_params()
332 p->dma_write(src_start, CSSA, lch); in omap_set_dma_src_params()
334 p->dma_write(src_ei, CSEI, lch); in omap_set_dma_src_params()
335 p->dma_write(src_fi, CSFI, lch); in omap_set_dma_src_params()
339 void omap_set_dma_params(int lch, struct omap_dma_channel_params *params) in omap_set_dma_params() argument
341 omap_set_dma_transfer_params(lch, params->data_type, in omap_set_dma_params()
345 omap_set_dma_src_params(lch, params->src_port, in omap_set_dma_params()
349 omap_set_dma_dest_params(lch, params->dst_port, in omap_set_dma_params()
353 omap_dma_set_prio_lch(lch, params->read_prio, in omap_set_dma_params()
358 void omap_set_dma_src_data_pack(int lch, int enable) in omap_set_dma_src_data_pack() argument
362 l = p->dma_read(CSDP, lch); in omap_set_dma_src_data_pack()
366 p->dma_write(l, CSDP, lch); in omap_set_dma_src_data_pack()
370 void omap_set_dma_src_burst_mode(int lch, enum omap_dma_burst_mode burst_mode) in omap_set_dma_src_burst_mode() argument
375 l = p->dma_read(CSDP, lch); in omap_set_dma_src_burst_mode()
411 p->dma_write(l, CSDP, lch); in omap_set_dma_src_burst_mode()
416 void omap_set_dma_dest_params(int lch, int dest_port, int dest_amode, in omap_set_dma_dest_params() argument
423 l = p->dma_read(CSDP, lch); in omap_set_dma_dest_params()
426 p->dma_write(l, CSDP, lch); in omap_set_dma_dest_params()
429 l = p->dma_read(CCR, lch); in omap_set_dma_dest_params()
432 p->dma_write(l, CCR, lch); in omap_set_dma_dest_params()
434 p->dma_write(dest_start, CDSA, lch); in omap_set_dma_dest_params()
436 p->dma_write(dst_ei, CDEI, lch); in omap_set_dma_dest_params()
437 p->dma_write(dst_fi, CDFI, lch); in omap_set_dma_dest_params()
441 void omap_set_dma_dest_data_pack(int lch, int enable) in omap_set_dma_dest_data_pack() argument
445 l = p->dma_read(CSDP, lch); in omap_set_dma_dest_data_pack()
449 p->dma_write(l, CSDP, lch); in omap_set_dma_dest_data_pack()
453 void omap_set_dma_dest_burst_mode(int lch, enum omap_dma_burst_mode burst_mode) in omap_set_dma_dest_burst_mode() argument
458 l = p->dma_read(CSDP, lch); in omap_set_dma_dest_burst_mode()
491 p->dma_write(l, CSDP, lch); in omap_set_dma_dest_burst_mode()
495 static inline void omap_enable_channel_irq(int lch) in omap_enable_channel_irq() argument
499 p->dma_read(CSR, lch); in omap_enable_channel_irq()
501 p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); in omap_enable_channel_irq()
504 p->dma_write(dma_chan[lch].enabled_irqs, CICR, lch); in omap_enable_channel_irq()
507 static inline void omap_disable_channel_irq(int lch) in omap_disable_channel_irq() argument
510 p->dma_write(0, CICR, lch); in omap_disable_channel_irq()
513 p->dma_read(CSR, lch); in omap_disable_channel_irq()
515 p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); in omap_disable_channel_irq()
518 void omap_enable_dma_irq(int lch, u16 bits) in omap_enable_dma_irq() argument
520 dma_chan[lch].enabled_irqs |= bits; in omap_enable_dma_irq()
524 void omap_disable_dma_irq(int lch, u16 bits) in omap_disable_dma_irq() argument
526 dma_chan[lch].enabled_irqs &= ~bits; in omap_disable_dma_irq()
530 static inline void enable_lnk(int lch) in enable_lnk() argument
534 l = p->dma_read(CLNK_CTRL, lch); in enable_lnk()
540 if (dma_chan[lch].next_lch != -1) in enable_lnk()
541 l = dma_chan[lch].next_lch | (1 << 15); in enable_lnk()
545 if (dma_chan[lch].next_linked_ch != -1) in enable_lnk()
546 l = dma_chan[lch].next_linked_ch | (1 << 15); in enable_lnk()
549 p->dma_write(l, CLNK_CTRL, lch); in enable_lnk()
552 static inline void disable_lnk(int lch) in disable_lnk() argument
556 l = p->dma_read(CLNK_CTRL, lch); in disable_lnk()
559 omap_disable_channel_irq(lch); in disable_lnk()
571 p->dma_write(l, CLNK_CTRL, lch); in disable_lnk()
572 dma_chan[lch].flags &= ~OMAP_DMA_ACTIVE; in disable_lnk()
575 static inline void omap2_enable_irq_lch(int lch) in omap2_enable_irq_lch() argument
585 p->dma_write(1 << lch, IRQSTATUS_L0, lch); in omap2_enable_irq_lch()
587 val = p->dma_read(IRQENABLE_L0, lch); in omap2_enable_irq_lch()
588 val |= 1 << lch; in omap2_enable_irq_lch()
589 p->dma_write(val, IRQENABLE_L0, lch); in omap2_enable_irq_lch()
593 static inline void omap2_disable_irq_lch(int lch) in omap2_disable_irq_lch() argument
603 val = p->dma_read(IRQENABLE_L0, lch); in omap2_disable_irq_lch()
604 val &= ~(1 << lch); in omap2_disable_irq_lch()
605 p->dma_write(val, IRQENABLE_L0, lch); in omap2_disable_irq_lch()
607 p->dma_write(1 << lch, IRQSTATUS_L0, lch); in omap2_disable_irq_lch()
612 void (*callback)(int lch, u16 ch_status, void *data), in omap_request_dma() argument
690 void omap_free_dma(int lch) in omap_free_dma() argument
694 if (dma_chan[lch].dev_id == -1) { in omap_free_dma()
696 lch); in omap_free_dma()
702 omap2_disable_irq_lch(lch); in omap_free_dma()
705 omap_disable_channel_irq(lch); in omap_free_dma()
708 p->dma_write(0, CCR, lch); in omap_free_dma()
712 omap_clear_dma(lch); in omap_free_dma()
715 dma_chan[lch].dev_id = -1; in omap_free_dma()
716 dma_chan[lch].next_lch = -1; in omap_free_dma()
717 dma_chan[lch].callback = NULL; in omap_free_dma()
765 omap_dma_set_prio_lch(int lch, unsigned char read_prio, in omap_dma_set_prio_lch() argument
770 if (unlikely((lch < 0 || lch >= dma_lch_count))) { in omap_dma_set_prio_lch()
774 l = p->dma_read(CCR, lch); in omap_dma_set_prio_lch()
781 p->dma_write(l, CCR, lch); in omap_dma_set_prio_lch()
791 static void omap_clear_dma(int lch) in omap_clear_dma() argument
796 p->clear_dma(lch); in omap_clear_dma()
800 void omap_start_dma(int lch) in omap_start_dma() argument
809 p->dma_write(0, CPC, lch); in omap_start_dma()
811 p->dma_write(0, CDAC, lch); in omap_start_dma()
813 if (!omap_dma_in_1510_mode() && dma_chan[lch].next_lch != -1) { in omap_start_dma()
818 enable_lnk(lch); in omap_start_dma()
821 dma_chan_link_map[lch] = 1; in omap_start_dma()
823 cur_lch = dma_chan[lch].next_lch; in omap_start_dma()
839 p->dma_write(lch, CLNK_CTRL, lch); in omap_start_dma()
841 omap_enable_channel_irq(lch); in omap_start_dma()
843 l = p->dma_read(CCR, lch); in omap_start_dma()
856 p->dma_write(l, CCR, lch); in omap_start_dma()
858 dma_chan[lch].flags |= OMAP_DMA_ACTIVE; in omap_start_dma()
862 void omap_stop_dma(int lch) in omap_stop_dma() argument
867 omap_disable_channel_irq(lch); in omap_stop_dma()
869 l = p->dma_read(CCR, lch); in omap_stop_dma()
876 l = p->dma_read(OCP_SYSCONFIG, lch); in omap_stop_dma()
882 l = p->dma_read(CCR, lch); in omap_stop_dma()
884 p->dma_write(l, CCR, lch); in omap_stop_dma()
887 l = p->dma_read(CCR, lch); in omap_stop_dma()
892 l = p->dma_read(CCR, lch); in omap_stop_dma()
895 pr_err("DMA drain did not complete on lch %d\n", lch); in omap_stop_dma()
897 p->dma_write(sys_cf, OCP_SYSCONFIG, lch); in omap_stop_dma()
900 p->dma_write(l, CCR, lch); in omap_stop_dma()
910 if (!omap_dma_in_1510_mode() && dma_chan[lch].next_lch != -1) { in omap_stop_dma()
911 int next_lch, cur_lch = lch; in omap_stop_dma()
929 dma_chan[lch].flags &= ~OMAP_DMA_ACTIVE; in omap_stop_dma()
937 int omap_set_dma_callback(int lch, in omap_set_dma_callback() argument
938 void (*callback)(int lch, u16 ch_status, void *data), in omap_set_dma_callback() argument
943 if (lch < 0) in omap_set_dma_callback()
947 if (dma_chan[lch].dev_id == -1) { in omap_set_dma_callback()
952 dma_chan[lch].callback = callback; in omap_set_dma_callback()
953 dma_chan[lch].data = data; in omap_set_dma_callback()
968 dma_addr_t omap_get_dma_src_pos(int lch) in omap_get_dma_src_pos() argument
973 offset = p->dma_read(CPC, lch); in omap_get_dma_src_pos()
975 offset = p->dma_read(CSAC, lch); in omap_get_dma_src_pos()
978 offset = p->dma_read(CSAC, lch); in omap_get_dma_src_pos()
986 if (likely(p->dma_read(CDAC, lch))) in omap_get_dma_src_pos()
987 offset = p->dma_read(CSAC, lch); in omap_get_dma_src_pos()
989 offset = p->dma_read(CSSA, lch); in omap_get_dma_src_pos()
993 offset |= (p->dma_read(CSSA, lch) & 0xFFFF0000); in omap_get_dma_src_pos()
1007 dma_addr_t omap_get_dma_dst_pos(int lch) in omap_get_dma_dst_pos() argument
1012 offset = p->dma_read(CPC, lch); in omap_get_dma_dst_pos()
1014 offset = p->dma_read(CDAC, lch); in omap_get_dma_dst_pos()
1021 offset = p->dma_read(CDAC, lch); in omap_get_dma_dst_pos()
1028 offset = p->dma_read(CDSA, lch); in omap_get_dma_dst_pos()
1032 offset |= (p->dma_read(CDSA, lch) & 0xFFFF0000); in omap_get_dma_dst_pos()
1038 int omap_get_dma_active_status(int lch) in omap_get_dma_active_status() argument
1040 return (p->dma_read(CCR, lch) & OMAP_DMA_CCR_EN) != 0; in omap_get_dma_active_status()
1046 int lch; in omap_dma_running() local
1052 for (lch = 0; lch < dma_chan_count; lch++) in omap_dma_running()
1053 if (p->dma_read(CCR, lch) & OMAP_DMA_CCR_EN) in omap_dma_running()