<table cellspacing='0' cellpadding='0' border='0' ><tr><td style='font: inherit;'>Pedro just send me this routine:<br>static int I2S_setup(){<br>int i;<br>// &nbsp;&nbsp;&nbsp; u32 val32;<br>// CDM<br>&nbsp;&nbsp;&nbsp; struct mpc52xx_cdm __iomem *cdm;<br>// <br>// &nbsp;&nbsp;&nbsp; /* GPIO Modification */<br>&nbsp;&nbsp;&nbsp; struct mpc52xx_gpio __iomem *gpio;<br><br>// &nbsp;&nbsp;&nbsp; /* END GPIO Modification */<br>// <br>&nbsp;&nbsp;&nbsp; cdm = ioremap(MPC52xx_PA(MPC52xx_CDM_OFFSET), MPC52xx_CDM_SIZE);<br>&nbsp;&nbsp;&nbsp; gpio = ioremap(MPC52xx_PA(MPC52xx_GPIO_OFFSET), MPC52xx_GPIO_SIZE);<br>// <br>&nbsp;&nbsp;&nbsp; switch(psc_num) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 1:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; initiator_tx = SDMA_INITIATOR_PSC1_TX;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; initiator_rx = SDMA_INITIATOR_PSC1_RX;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
 break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case 2:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; initiator_tx = SDMA_INITIATOR_PSC2_TX;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; initiator_rx = SDMA_INITIATOR_PSC2_RX;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; default:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; panic("snd-I2Smgt.o: invalid value for psc_num (%i)\n",psc_num);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; };<br><br>&nbsp;&nbsp;&nbsp; /* 528MHz/(0x1f+1)=16.5 MHz */<br>&nbsp;&nbsp;&nbsp; cdm-&gt;mclken_div_psc2 = 0x8001; // Mhz MCLK ( Khz * )<br>&nbsp;&nbsp;&nbsp; psc-&gt;command = (MPC52xx_PSC_TX_DISABLE | MPC52xx_PSC_RX_DISABLE);<br>&nbsp;&nbsp;&nbsp; /* PSC2 CODEC with Master Clock */<br>&nbsp;&nbsp;&nbsp; gpio-&gt;port_config |= 0x70;<br>&nbsp;&nbsp;&nbsp; /* PSC2 clock enable
 */<br>&nbsp;&nbsp;&nbsp; cdm-&gt;clk_enables |= 0x40;<br><br>&nbsp;&nbsp;&nbsp; // PSC reset<br>&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_RST_RX;<br>&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_RST_TX;<br>&nbsp;&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_SEL_MODE_REG_1;<br>&nbsp;&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_RST_ERR_STAT;<br><br><br>&nbsp;&nbsp;&nbsp; // PSC setup I2S<br>&nbsp;&nbsp;&nbsp; psc-&gt;mode = 0;<br>&nbsp;&nbsp;&nbsp; psc-&gt;rfalarm = RX_ALARM;<br>&nbsp;&nbsp;&nbsp;&nbsp; psc-&gt;tfalarm = TX_ALARM;<br>&nbsp;&nbsp;&nbsp; psc-&gt;rfcntl = RX_GRAN;<br>&nbsp;&nbsp;&nbsp;&nbsp; psc-&gt;tfcntl = TX_GRAN;<br>&nbsp;&nbsp;&nbsp; psc-&gt;mpc52xx_psc_imr = 0x0000;<br><br>&nbsp;&nbsp;&nbsp; psc-&gt;sicr = 0x0FE00000;<br>&nbsp;&nbsp;&nbsp; psc-&gt;ctur = 0x1f; //Frame length 0x17<br><br>&nbsp;&nbsp;&nbsp; psc-&gt;ccr = 0x3f5D; //LRCK&nbsp; KHz, BitCLK&nbsp; MHz&nbsp; 0x3f05!<br><br>// &nbsp;&nbsp;&nbsp; psc-&gt;sicr |=
 /* DELAY_TIME_SLOT |*/ MULTIWD_ENABLE | CLK_POL_RISING;<br>// &nbsp;&nbsp;&nbsp; <br>// &nbsp;&nbsp;&nbsp; psc-&gt;sicr |= GEN_CLK_INT;<br><br>&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_RST_RX;<br>&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_RST_TX;<br>&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_SEL_MODE_REG_1;<br>&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_RST_ERR_STAT;<br>// <br>// &nbsp;&nbsp;&nbsp; // setup the sdma tasks<br>&nbsp;&nbsp;&nbsp; tx_sdma = sdma_alloc(PERIODS_HW+1);<br>&nbsp;&nbsp;&nbsp; rx_sdma = sdma_alloc(PERIODS_HW+1);<br><br>&nbsp;&nbsp;&nbsp; if (!tx_sdma || !rx_sdma) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk("sdma_alloc failed\n");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return -ENOMEM;<br>&nbsp;&nbsp;&nbsp; }<br>//&nbsp;&nbsp;&nbsp; asimmini<br>// &nbsp;&nbsp;&nbsp; sdma_gen_bd_rx_init(rx_sdma, (phys_addr_t)&amp;(psc-&gt;rfdata), PERIODSIZE_HW, initiator_rx, 6);<br>&nbsp;&nbsp;&nbsp;
 sdma_gen_bd_rx_init(0, rx_sdma, (phys_addr_t)&amp;(psc-&gt;rfdata), initiator_rx, 6,PERIODSIZE_HW);<br>// &nbsp;&nbsp;&nbsp; sdma_gen_bd_tx_init(tx_sdma, (phys_addr_t)&amp;(psc-&gt;tfdata), PERIODSIZE_HW, initiator_tx, 6);<br>&nbsp;&nbsp;&nbsp; sdma_gen_bd_tx_init(0, tx_sdma, (phys_addr_t)&amp;(psc-&gt;tfdata), initiator_tx, 6);<br><br>&nbsp;&nbsp;&nbsp; printk("txtask is %d rxtask is %d\n", tx_sdma-&gt;tasknum, rx_sdma-&gt;tasknum);<br>// <br>&nbsp;&nbsp;&nbsp; // prepare the ring buffers&nbsp;&nbsp;&nbsp; ASIMMINI<br>&nbsp;&nbsp;&nbsp; //for(i=0;i<br>&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp;&nbsp; tasknum %d\n", sdma_irq(rx_sdma), MPC52xx_SDMA_IRQ_BASE + rx_sdma-&gt;tasknum);<br>&nbsp;&nbsp;&nbsp; if (request_irq(sdma_irq(rx_sdma), I2S_rx_irq, 0, "SPI rx dma", NULL)){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk(KERN_ERR "SPI: SDMA rx irq allocation failed\n");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return -EINVAL;<br>&nbsp;&nbsp;&nbsp; }
 <br>&nbsp;&nbsp;&nbsp; else <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk("SPI: SDA rx irq allocation succeded\n");<br>&nbsp;&nbsp;&nbsp; if (request_irq(sdma_irq(tx_sdma), I2S_tx_irq, 0, "SPI tx dma", NULL)){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk(KERN_ERR "SPI: SDMA tx irq allocation failed\n");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return -EINVAL;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printk("SPI: SDA tx irq allocation succeded\n");<br>&nbsp;&nbsp;&nbsp; <br>// <br>// &nbsp;&nbsp;&nbsp; // clear any pending interrupts<br>&nbsp;&nbsp;&nbsp; sdma_clear_irq(tx_sdma);<br>&nbsp;&nbsp;&nbsp; sdma_clear_irq(rx_sdma);<br>// <br>&nbsp;&nbsp;&nbsp; printk("Before activating the tasks\n");<br>// &nbsp;&nbsp;&nbsp; // activate the tasks<br>// &nbsp;&nbsp;&nbsp; sdma_enable(tx_sdma);<br>// &nbsp;&nbsp;&nbsp; sdma_enable(rx_sdma);<br>// <br>// &nbsp;&nbsp;&nbsp; printk("about to enable SPI
 psc\n");<br>&nbsp;&nbsp;&nbsp; udelay(100);<br>// <br>// &nbsp;&nbsp;&nbsp; // enable transmitter and receiver<br>&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_TX_ENABLE | MPC52xx_PSC_RX_ENABLE;<br>// //&nbsp;&nbsp;&nbsp; psc-&gt;command = MPC52xx_PSC_TX_ENABLE;<br>// <br>// <br>// // &nbsp;&nbsp;&nbsp; I2S_print(__FUNCTION__);<br>// <br>// // &nbsp;&nbsp;&nbsp; pcm1680_read();<br>// //&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pcm1680_configure(44100);<br>// // &nbsp;&nbsp;&nbsp; pcm1680_read();<br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><br>But i have some problems.<br><br>i don't have any of thiese functions:<br><br>sdma_alloc<br>rx_sdma<br>sdma_gen_bd_rx_init<br>sdma_gen_bd_tx_init<br>sdma_irq<br>sdma_clear_irq<br><br>and some define:<br>I2S_rx_irq<br>I2S_tx_irq<br><br><br></td></tr></table><br>




      <hr size=1>
Inviato da <a  
href="http://us.rd.yahoo.com/mailuk/taglines/isp/control/*http://us.rd.yahoo.com/evt=52437/*http://it.docs.yahoo.com/mail/overview/index.html" target=_blank>Yahoo! Mail</a>.
<br>
Il servizio di posta con lo spazio illimitato.