static int lh7a40x_clcd_setup (struct clcd_fb *fb) { dma_addr_t dma; u32 len = FRAMESIZE (lcd_panel.mode.xres*lcd_panel.mode.yres *(lcd_panel.bpp/8)); fb->panel = &lcd_panel; /* Enforce the sync polarity defaults */ if (!(fb->panel->tim2 & TIM2_IHS)) fb->fb.var.sync |= FB_SYNC_HOR_HIGH_ACT; if (!(fb->panel->tim2 & TIM2_IVS)) fb->fb.var.sync |= FB_SYNC_VERT_HIGH_ACT; #if defined (HAS_LCD_PANEL_EXTRA) fb->board_data = &lcd_panel_extra; #endif fb->fb.screen_base = dma_alloc_writecombine (&fb->dev->dev, len, &dma, GFP_KERNEL); printk ("CLCD: LCD setup fb virt 0x%p phys 0x%p l %x io 0x%p \n", fb->fb.screen_base, (void*) dma, len, (void*) io_p2v (CLCDC_PHYS)); printk ("CLCD: pixclock %d\n", lcd_panel.mode.pixclock); if (!fb->fb.screen_base) { printk(KERN_ERR "CLCD: unable to map framebuffer\n"); return -ENOMEM; } #if defined (USE_RGB555) fb->fb.var.green.length = 5; /* Panel uses RGB 5:5:5 */ #endif fb->fb.fix.smem_start = dma; fb->fb.fix.smem_len = len; /* Drive PE4 high to prevent CPLD crash */ GPIO_PEDD |= (1<<4); GPIO_PED |= (1<<4); GPIO_PINMUX |= (1<<1) | (1<<0); /* LCDVD[15:4] */ // fb->fb.fbops->fb_check_var (&fb->fb.var, &fb->fb); // fb->fb.fbops->fb_set_par (&fb->fb); return 0; }
/* Compute the amplitude (sqrt energy) in each of the bands */ void compute_band_energies(const CELTMode *m, const celt_sig *X, celt_ener *bank, int _C) { int i, c, N; const celt_int16 *eBands = m->eBands; const int C = CHANNELS(_C); N = FRAMESIZE(m); for (c=0;c<C;c++) { for (i=0;i<m->nbEBands;i++) { int j; celt_word32 maxval=0; celt_word32 sum = 0; j=eBands[i]; do { maxval = MAX32(maxval, X[j+c*N]); maxval = MAX32(maxval, -X[j+c*N]); } while (++j<eBands[i+1]); if (maxval > 0) { int shift = celt_ilog2(maxval)-10; j=eBands[i]; do { sum = MAC16_16(sum, EXTRACT16(VSHR32(X[j+c*N],shift)), EXTRACT16(VSHR32(X[j+c*N],shift))); } while (++j<eBands[i+1]); /* We're adding one here to make damn sure we never end up with a pitch vector that's larger than unity norm */ bank[i+c*m->nbEBands] = EPSILON+VSHR32(EXTEND32(celt_sqrt(sum)),-shift); } else { bank[i+c*m->nbEBands] = EPSILON; } /*printf ("%f ", bank[i+c*m->nbEBands]);*/ } } /*printf ("\n");*/ }
} else { bank[i+c*m->nbEBands] = EPSILON; } /*printf ("%f ", bank[i+c*m->nbEBands]);*/ } } /*printf ("\n");*/ } /* Normalise each band such that the energy is one. */ void normalise_bands(const CELTMode *m, const celt_sig * restrict freq, celt_norm * restrict X, const celt_ener *bank, int _C) { int i, c, N; const celt_int16 *eBands = m->eBands; const int C = CHANNELS(_C); N = FRAMESIZE(m); for (c=0;c<C;c++) { i=0; do { celt_word16 g; int j,shift; celt_word16 E; shift = celt_zlog2(bank[i+c*m->nbEBands])-13; E = VSHR32(bank[i+c*m->nbEBands], shift); g = EXTRACT16(celt_rcp(SHL32(E,3))); j=eBands[i]; do { X[j+c*N] = MULT16_16_Q15(VSHR32(freq[j+c*N],shift-1),g); } while (++j<eBands[i+1]); } while (++i<m->nbEBands); } }