<table cellspacing='0' cellpadding='0' border='0' ><tr><td style='font: inherit;'>Hi Pedro, i'm Angelo.<br><br>You just send me this mail:<br>start mail<br><br>As I told you, here is the configuration routine for the I2S module. <br>Please, notice that this module whas built to work on the old 2.6.16 <br>kernel and old dma driver:<br><br>static int I2S_setup(void) {<br> int i;<br>// u32 val32;<br> // CDM<br> struct mpc52xx_cdm __iomem *cdm;<br>// <br>// /* GPIO Modification */<br> struct mpc52xx_gpio __iomem *gpio;<br><br>// /* END GPIO Modification */<br>// <br> cdm = ioremap(MPC52xx_PA(MPC52xx_CDM_OFFSET), MPC52xx_CDM_SIZE);<br> gpio = ioremap(MPC52xx_PA(MPC52xx_GPIO_OFFSET), MPC52xx_GPIO_SIZE);<br>// <br> switch(psc_num) {<br> case
1:<br> initiator_tx = SDMA_INITIATOR_PSC1_TX;<br> initiator_rx = SDMA_INITIATOR_PSC1_RX;<br> break;<br> case 2:<br> initiator_tx = SDMA_INITIATOR_PSC2_TX;<br> initiator_rx = SDMA_INITIATOR_PSC2_RX;<br> break;<br> default:<br> panic("snd-I2Smgt.o: invalid value for psc_num<br>(%i)\n",psc_num);<br> break;<br> };<br><br> /* 528MHz/(0x1f+1)=16.5 MHz */<br> cdm->mclken_div_psc2 = 0x8001; //
Mhz MCLK ( Khz * )<br> psc->command = (MPC52xx_PSC_TX_DISABLE | MPC52xx_PSC_RX_DISABLE);<br> /* PSC2 CODEC with Master Clock */<br> gpio->port_config |= 0x70;<br> /* PSC2 clock enable */<br> cdm->clk_enables |= 0x40;<br><br> // PSC reset<br> psc->command = MPC52xx_PSC_RST_RX;<br> psc->command = MPC52xx_PSC_RST_TX;<br> psc->command = MPC52xx_PSC_SEL_MODE_REG_1;<br> psc->command = MPC52xx_PSC_RST_ERR_STAT;<br><br><br> // PSC setup I2S<br> psc->mode = 0;<br> psc->rfalarm = RX_ALARM;<br> psc->tfalarm = TX_ALARM;<br> psc->rfcntl = RX_GRAN;<br> psc->tfcntl = TX_GRAN;<br> psc->mpc52xx_psc_imr =
0x0000;<br><br> psc->sicr = 0x0FE00000;<br> psc->ctur = 0x1f; //Frame length 0x17<br><br> psc->ccr = 0x3f5D; //LRCK KHz, BitCLK MHz 0x3f05!<br><br>// psc->sicr |= /* DELAY_TIME_SLOT |*/ MULTIWD_ENABLE | CLK_POL_RISING;<br>// <br>// psc->sicr |= GEN_CLK_INT;<br><br> psc->command = MPC52xx_PSC_RST_RX;<br> psc->command = MPC52xx_PSC_RST_TX;<br> psc->command = MPC52xx_PSC_SEL_MODE_REG_1;<br> psc->command = MPC52xx_PSC_RST_ERR_STAT;<br>// <br>// // setup the sdma tasks<br> tx_sdma = sdma_alloc(PERIODS_HW+1);<br> rx_sdma = sdma_alloc(PERIODS_HW+1);<br><br> if (!tx_sdma || !rx_sdma) {<br> printk("sdma_alloc
failed\n");<br> return -ENOMEM;<br> }<br>// <br>// sdma_gen_bd_rx_init(rx_sdma, (phys_addr_t)&(psc->rfdata),<br>PERIODSIZE_HW, initiator_rx, 6);<br> sdma_gen_bd_rx_init(0, rx_sdma, (phys_addr_t)&(psc->rfdata),<br>initiator_rx, 6, PERIODSIZE_HW);<br>// sdma_gen_bd_tx_init(tx_sdma, (phys_addr_t)&(psc->tfdata),<br>PERIODSIZE_HW, initiator_tx, 6);<br> sdma_gen_bd_tx_init(0, tx_sdma, (phys_addr_t)&(psc->tfdata),<br>initiator_tx, 6);<br><br> printk("txtask is %d rxtask is %d\n", tx_sdma->tasknum,<br>rx_sdma->tasknum);<br>// <br> // prepare the ring buffers<br> for(i=0;itasknum %d\n", sdma_irq(rx_sdma), MPC52xx_SDMA_IRQ_BASE +<br>rx_sdma->tasknum);<br> if (request_irq(sdma_irq(rx_sdma), I2S_rx_irq, 0, "SPI rx dma",<br>NULL))
{<br> printk(KERN_ERR "SPI: SDMA rx irq allocation failed\n");<br> return -EINVAL;<br> } else printk("SPI: SDA rx irq allocation succeded\n");<br> if (request_irq(sdma_irq(tx_sdma), I2S_tx_irq, 0, "SPI tx dma",<br>NULL)) {<br> printk(KERN_ERR "SPI: SDMA tx irq allocation failed\n");<br> return -EINVAL;<br> } else printk("SPI: SDA tx irq allocation succeded\n");<br> <br>// <br>// // clear any pending interrupts<br> sdma_clear_irq(tx_sdma);<br> sdma_clear_irq(rx_sdma);<br>// <br> printk("Before activating the tasks\n");<br>// // activate the tasks<br>// sdma_enable(tx_sdma);<br>// sdma_enable(rx_sdma);<br>//
<br>// printk("about to enable SPI psc\n");<br> udelay(100);<br>// <br>// // enable transmitter and receiver<br> psc->command = MPC52xx_PSC_TX_ENABLE | MPC52xx_PSC_RX_ENABLE;<br>// // psc->command = MPC52xx_PSC_TX_ENABLE;<br>// <br>// <br>// // I2S_print(__FUNCTION__);<br>// <br>// // pcm1680_read();<br>// // pcm1680_configure(44100);<br>// // pcm1680_read();<br><br> return 0;<br>};<br>end mail<br><br>I solved my proplems of porting from 2.6.17 to 2.16.22 kernel <br>version, but in the module static int I2S_setup(void) i found <br>the sequent problems.<br><br>In this piece of code:<br><br>switch(psc_num) {<br> case 1:<br> initiator_tx =
SDMA_INITIATOR_PSC1_TX;<br> initiator_rx = SDMA_INITIATOR_PSC1_RX;<br> break;<br> case 2:<br> initiator_tx = SDMA_INITIATOR_PSC2_TX;<br> initiator_rx = SDMA_INITIATOR_PSC2_RX;<br> break;<br> default:<br> panic("snd-I2Smgt.o: invalid value for psc_num<br>(%i)\n",psc_num);<br> break;<br> };<br><br>This define are undeclared:<br>SDMA_INITIATOR_PSC1_TX<br>SDMA_INITIATOR_PSC1_RX<br>SDMA_INITIATOR_PSC2_TX<br>SDMA_INITIATOR_PSC2_RX<br><br>so perhaps i don't have some header
files.<br><br>Also this variable are undefined:<br>psc_num, tx_sdma, rx_sdma.<br><br>And where i can found this function:<br>- sdma_gen_bd_rx_init<br>- sdma_gen_bd_tx_init<br><br>However there are some other errors like:<br>// <br>// prepare the ring buffers<br> for(i=0;itasknum %d\n", sdma_irq(rx_sdma), MPC52xx_SDMA_IRQ_BASE +<br> rx_sdma->tasknum);<br> if (request_irq(sdma_irq(rx_sdma), I2S_rx_irq, 0, "SPI rx dma", NULL))<br> {<br>.....<br>I think there are some mistakes in your copy and paste operation, so <br>i don't know how solve it.<br><br>Thanks for help.<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.