ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年8月11日 星期四

./include/linux/ipu.h:148:#define IPU_CHAN_ID(ch) (ch >> 24) 對應 data sheet register field, channel field 是第 24 bit 開始。 然後是 channel name 定義: MEM_ROT_ENC_MEM = _MAKE_CHAN(1, 45, NO_DMA, NO_DMA, 48), MEM_ROT_VF_MEM = _MAKE_CHAN(2, 46, NO_DMA, NO_DMA, 49), MEM_ROT_PP_MEM = _MAKE_CHAN(3, 47, NO_DMA, NO_DMA, 50), MEM_PRP_ENC_MEM = _MAKE_CHAN(4, 12, 14, 17, 20), MEM_PRP_VF_MEM = _MAKE_CHAN(5, 12, 14, 17, 21), MEM_PP_MEM = _MAKE_CHAN(6, 11, 15, 18, 22), MEM_DC_SYNC = _MAKE_CHAN(7, 28, NO_DMA, NO_DMA, NO_DMA), MEM_DC_ASYNC = _MAKE_CHAN(8, 41, NO_DMA, NO_DMA, NO_DMA), MEM_BG_SYNC = _MAKE_CHAN(9, 23, NO_DMA, 51, NO_DMA), MEM_FG_SYNC = _MAKE_CHAN(10, 27, NO_DMA, 31, NO_DMA), MEM_BG_ASYNC0 = _MAKE_CHAN(11, 24, NO_DMA, 52, NO_DMA), MEM_FG_ASYNC0 = _MAKE_CHAN(12, 29, NO_DMA, 33, NO_DMA), MEM_BG_ASYNC1 = _MAKE_ALT_CHAN(MEM_BG_ASYNC0), MEM_FG_ASYNC1 = _MAKE_ALT_CHAN(MEM_FG_ASYNC0), DIRECT_ASYNC0 = _MAKE_CHAN(13, NO_DMA, NO_DMA, NO_DMA, NO_DMA), DIRECT_ASYNC1 = _MAKE_CHAN(14, NO_DMA, NO_DMA, NO_DMA, NO_DMA), CSI_MEM0 = _MAKE_CHAN(15, NO_DMA, NO_DMA, NO_DMA, 0), CSI_MEM1 = _MAKE_CHAN(16, NO_DMA, NO_DMA, NO_DMA, 1), CSI_MEM2 = _MAKE_CHAN(17, NO_DMA, NO_DMA, NO_DMA, 2), CSI_MEM3 = _MAKE_CHAN(18, NO_DMA, NO_DMA, NO_DMA, 3), CSI_MEM = CSI_MEM0, CSI_PRP_ENC_MEM = _MAKE_CHAN(19, NO_DMA, NO_DMA, NO_DMA, 20), CSI_PRP_VF_MEM = _MAKE_CHAN(20, NO_DMA, NO_DMA, NO_DMA, 21), MEM_VDI_PRP_VF_MEM_P = _MAKE_CHAN(21, 8, 14, 17, 21), MEM_VDI_PRP_VF_MEM = _MAKE_CHAN(22, 9, 14, 17, 21), MEM_VDI_PRP_VF_MEM_N = _MAKE_CHAN(23, 10, 14, 17, 21), MEM_PP_ADC = CHAN_NONE, ADC_SYS2 = CHAN_NONE, 還有 _MAKE_CHAN 是: #define _MAKE_CHAN(num, v_in, g_in, a_in, out) \ ((num << 24) | (v_in << 18) | (g_in << 12) | (a_in << 6) | out) 所以第一個 field 就是 channel nummber.
現在發現 enable tvin 時,會 init channe:
15, 10, 22, 21, 23, 
其中 22,21,23 在 suspend 時好像沒有 uninit..

在 ipu_suspend 的地方加上 : //ipu_disable_channel(MEM_VDI_PRP_VF_MEM_P, true); //ipu_uninit_channel (MEM_VDI_PRP_VF_MEM_P); ipu_disable_channel(MEM_VDI_PRP_VF_MEM, true); ipu_uninit_channel (MEM_VDI_PRP_VF_MEM); //ipu_disable_channel(MEM_VDI_PRP_VF_MEM_N,true);
發現 MEM_VDI_PRP_VF_MEM 才是重點。

MEM_VDI_PRP_VF_MEM/_P/_N 這三個 channel 是在 mxc_v4l2_streamon 時,init_VDI_channel 的時候 init。
因為是 interlaced ,所以會額外 init _P/_N 這兩個 channel。

在 mxc_v4l2out_streamoff 時,會把這三個 channel disable。

沒有留言:

標籤

網誌存檔