diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2009-05-01 23:37:30 +0200 |
---|---|---|
committer | Lars-Peter Clausen <lars@metafoo.de> | 2009-05-01 23:37:30 +0200 |
commit | 8b82afb51440f33fcbbe609a50ceb2c5986adf57 (patch) | |
tree | 139c2da99108c3a7703610489897cfdf2b8624d9 | |
parent | 16a993d8b17ef623a21b003f6f08adb86c76de77 (diff) |
Code cleanup:
* Delete unused files
* Move engine code to it's own file
* Remove some proxy functions
-rw-r--r-- | src/glamo-engine.c | 236 | ||||
-rw-r--r-- | src/glamo-engine.h | 48 | ||||
-rw-r--r-- | src/glamo-funcs.c | 558 | ||||
-rw-r--r-- | src/glamo-funcs.h | 85 |
4 files changed, 284 insertions, 643 deletions
diff --git a/src/glamo-engine.c b/src/glamo-engine.c new file mode 100644 index 0000000..895f019 --- /dev/null +++ b/src/glamo-engine.c @@ -0,0 +1,236 @@ +/* + * Copyright © 2009 Lars-Peter Clausen <lars@metafoo.de> + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include "glamo.h" +#include "glamo-engine.h" + +void +GLAMOEngineReset(GlamoPtr pGlamo, enum GLAMOEngine engine) +{ + CARD32 reg; + CARD16 mask; + volatile char *mmio = pGlamo->reg_base; + + if (!mmio) + return; + + switch (engine) { + case GLAMO_ENGINE_CMDQ: + reg = GLAMO_REG_CLOCK_2D; + mask = GLAMO_CLOCK_2D_CMDQ_RESET; + break; + case GLAMO_ENGINE_ISP: + reg = GLAMO_REG_CLOCK_ISP; + mask = GLAMO_CLOCK_ISP2_RESET; + break; + case GLAMO_ENGINE_2D: + reg = GLAMO_REG_CLOCK_2D; + mask = GLAMO_CLOCK_2D_RESET; + break; + default: + return; + break; + } + MMIOSetBitMask(mmio, reg, mask, 0xffff); + sleep(1); + MMIOSetBitMask(mmio, reg, mask, 0); + sleep(1); +} + +void +GLAMOEngineDisable(GlamoPtr pGlamo, enum GLAMOEngine engine) +{ + volatile char *mmio = pGlamo->reg_base; + + if (!mmio) + return; + + switch (engine) { + case GLAMO_ENGINE_CMDQ: + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_2D, + GLAMO_CLOCK_2D_EN_M6CLK, + 0); + MMIOSetBitMask(mmio, GLAMO_REG_HOSTBUS(2), + GLAMO_HOSTBUS2_MMIO_EN_CMDQ, + 0); + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_GEN5_1, + GLAMO_CLOCK_GEN51_EN_DIV_MCLK, + 0); + break; + case GLAMO_ENGINE_ISP: + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_ISP, + GLAMO_CLOCK_ISP_EN_M2CLK | + GLAMO_CLOCK_ISP_EN_I1CLK, + 0); + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_GEN5_2, + GLAMO_CLOCK_GEN52_EN_DIV_ICLK, + 0); + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_GEN5_1, + GLAMO_CLOCK_GEN51_EN_DIV_JCLK, + 0); + MMIOSetBitMask(mmio, GLAMO_REG_HOSTBUS(2), + GLAMO_HOSTBUS2_MMIO_EN_ISP, + 0); + break; + case GLAMO_ENGINE_2D: + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_2D, + GLAMO_CLOCK_2D_EN_M7CLK | + GLAMO_CLOCK_2D_EN_GCLK | + GLAMO_CLOCK_2D_DG_M7CLK | + GLAMO_CLOCK_2D_DG_GCLK, + 0); + MMIOSetBitMask(mmio, GLAMO_REG_HOSTBUS(2), + GLAMO_HOSTBUS2_MMIO_EN_2D, + 0); + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_GEN5_1, + GLAMO_CLOCK_GEN51_EN_DIV_GCLK, + 0); + break; + default: + break; + } +} + +void +GLAMOEngineEnable(GlamoPtr pGlamo, enum GLAMOEngine engine) +{ + volatile char *mmio = pGlamo->reg_base; + + if (!mmio) + return; + + switch (engine) { + case GLAMO_ENGINE_CMDQ: + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_2D, + GLAMO_CLOCK_2D_EN_M6CLK, + 0xffff); + MMIOSetBitMask(mmio, GLAMO_REG_HOSTBUS(2), + GLAMO_HOSTBUS2_MMIO_EN_CMDQ, + 0xffff); + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_GEN5_1, + GLAMO_CLOCK_GEN51_EN_DIV_MCLK, + 0xffff); + break; + case GLAMO_ENGINE_ISP: + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_ISP, + GLAMO_CLOCK_ISP_EN_M2CLK | + GLAMO_CLOCK_ISP_EN_I1CLK, + 0xffff); + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_GEN5_2, + GLAMO_CLOCK_GEN52_EN_DIV_ICLK, + 0xffff); + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_GEN5_1, + GLAMO_CLOCK_GEN51_EN_DIV_JCLK, + 0xffff); + MMIOSetBitMask(mmio, GLAMO_REG_HOSTBUS(2), + GLAMO_HOSTBUS2_MMIO_EN_ISP, + 0xffff); + break; + case GLAMO_ENGINE_2D: + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_2D, + GLAMO_CLOCK_2D_EN_M7CLK | + GLAMO_CLOCK_2D_EN_GCLK | + GLAMO_CLOCK_2D_DG_M7CLK | + GLAMO_CLOCK_2D_DG_GCLK, + 0xffff); + MMIOSetBitMask(mmio, GLAMO_REG_HOSTBUS(2), + GLAMO_HOSTBUS2_MMIO_EN_2D, + 0xffff); + MMIOSetBitMask(mmio, GLAMO_REG_CLOCK_GEN5_1, + GLAMO_CLOCK_GEN51_EN_DIV_GCLK, + 0xffff); + break; + default: + break; + } +} + +bool +GLAMOEngineBusy(GlamoPtr pGlamo, enum GLAMOEngine engine) +{ + volatile char *mmio = pGlamo->reg_base; + CARD16 status, mask, val; + + if (!mmio) + return FALSE; + + switch (engine) + { + case GLAMO_ENGINE_CMDQ: + mask = 0x3; + val = mask; + break; + case GLAMO_ENGINE_ISP: + mask = 0x3 | (1 << 8); + val = 0x3; + break; + case GLAMO_ENGINE_2D: + mask = 0x3 | (1 << 4); + val = 0x3; + break; + case GLAMO_ENGINE_ALL: + default: + mask = 1 << 2; + val = mask; + break; + } + + status = MMIO_IN16(mmio, GLAMO_REG_CMDQ_STATUS); + + return !((status & mask) == val); +} + +void +GLAMOEngineWait(GlamoPtr pGlamo, + enum GLAMOEngine engine) +{ + volatile char *mmio = pGlamo->reg_base; + CARD16 status, mask, val; + + if (!mmio) + return; + + switch (engine) + { + case GLAMO_ENGINE_CMDQ: + mask = 0x3; + val = mask; + break; + case GLAMO_ENGINE_ISP: + mask = 0x3 | (1 << 8); + val = 0x3; + break; + case GLAMO_ENGINE_2D: + mask = 0x3 | (1 << 4); + val = 0x3; + break; + case GLAMO_ENGINE_ALL: + default: + mask = 1 << 2; + val = mask; + break; + } + + do { + status = MMIO_IN16(mmio, GLAMO_REG_CMDQ_STATUS); + } while ((status & mask) != val); +} diff --git a/src/glamo-engine.h b/src/glamo-engine.h new file mode 100644 index 0000000..187fa1f --- /dev/null +++ b/src/glamo-engine.h @@ -0,0 +1,48 @@ +/* + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#include <stdbool.h> + +enum GLAMOEngine { + GLAMO_ENGINE_CMDQ, + GLAMO_ENGINE_ISP, + GLAMO_ENGINE_2D, + GLAMO_ENGINE_MPEG, + GLAMO_ENGINE_ALL, + NB_GLAMO_ENGINES /*should be the last entry*/ +}; + +void +GLAMOEngineEnable(GlamoPtr pGlamo, enum GLAMOEngine engine); + +void +GLAMOEngineDisable(GlamoPtr pGlamo, enum GLAMOEngine engine); + +void +GLAMOEngineReset(GlamoPtr pGlamo, enum GLAMOEngine engine); + +bool +GLAMOEngineBusy(GlamoPtr pGlamo, enum GLAMOEngine engine); + +void +GLAMOEngineWait(GlamoPtr pGlamo, enum GLAMOEngine engine); + + diff --git a/src/glamo-funcs.c b/src/glamo-funcs.c deleted file mode 100644 index 0ef64b8..0000000 --- a/src/glamo-funcs.c +++ /dev/null @@ -1,558 +0,0 @@ -/* - * Copyright © 2007 OpenMoko, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting documentation, and - * that the name of the copyright holders not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. The copyright holders make no representations - * about the suitability of this software for any purpose. It is provided "as - * is" without express or implied warranty. - * - * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - * - * Author: - * Dodji Seketeli <dodji@openedhand.com> - */ -#include <unistd.h> -#if 0 - - -#include "glamo-log.h" -#include "glamo.h" -#include "glamo-funcs.h" -#include "glamo-regs.h" -#include "glamo-cmdq.h" -void -GLAMOSetBitMask(GlamoPtr pGlamo, int reg, int mask, int val) -{ - MMIOSetBitMask(pGlamo->reg_base, reg, mask, val); -} - -void -setCmdMode (GlamoPtr pGlamo, Bool on) -{ - if (on) { - GLAMO_LOG("mark\n"); - /*TODO: busy waiting is bad*/ - while (!MMIO_IN16(pGlamo->reg_base, GLAMO_REG_LCD_STATUS1) - & (1 << 15)) { - GLAMO_LOG("mark\n"); - usleep(1 * 1000); - } - GLAMO_LOG("mark\n"); - MMIO_OUT16(pGlamo->reg_base, - GLAMO_REG_LCD_COMMAND1, - GLAMO_LCD_CMD_TYPE_DISP | - GLAMO_LCD_CMD_DATA_FIRE_VSYNC); - GLAMO_LOG("mark\n"); - while (!MMIO_IN16(pGlamo->reg_base, GLAMO_REG_LCD_STATUS2) - & (1 << 12)) { - GLAMO_LOG("mark\n"); - usleep(1 * 1000); - } - /* wait */ - GLAMO_LOG("mark\n"); - usleep(100 * 1000); - } else { - GLAMO_LOG("mark\n"); - MMIO_OUT16(pGlamo->reg_base, - GLAMO_REG_LCD_COMMAND1, - GLAMO_LCD_CMD_TYPE_DISP | - GLAMO_LCD_CMD_DATA_DISP_SYNC); - GLAMO_LOG("mark\n"); - MMIO_OUT16(pGlamo->reg_base, - GLAMO_REG_LCD_COMMAND1, - GLAMO_LCD_CMD_TYPE_DISP | - GLAMO_LCD_CMD_DATA_DISP_FIRE); - } -} - -#define STATUS_ENABLED 0x1 -static int engine_status[NB_GLAMO_ENGINES]; - -void -GLAMOResetEngine(GlamoPtr pGlamo, enum GLAMOEngine engine) -{ - int reg, mask; - - GLAMO_LOG("enter\n"); - - if (!(engine_status[engine] & STATUS_ENABLED)) - return; - - switch (engine) { - case GLAMO_ENGINE_MPEG: - reg = GLAMO_REG_CLOCK_MPEG; - mask = GLAMO_CLOCK_MPEG_DEC_RESET; - break; - case GLAMO_ENGINE_ISP: - reg = GLAMO_REG_CLOCK_ISP; - mask = GLAMO_CLOCK_ISP2_RESET; - break; - case GLAMO_ENGINE_CMDQ: - reg = GLAMO_REG_CLOCK_2D; - mask = GLAMO_CLOCK_2D_CMDQ_RESET; - break; - case GLAMO_ENGINE_2D: - reg = GLAMO_REG_CLOCK_2D; - mask = GLAMO_CLOCK_2D_RESET; - break; - default: - return; - } - - MMIOSetBitMask(pGlamo->reg_base, reg, mask, 0xffff); - usleep(1000); - MMIOSetBitMask(pGlamo->reg_base, reg, mask, 0); - usleep(1000); - - GLAMO_LOG("leave\n"); -} - -void -GLAMOEnableEngine(GlamoPtr pGlamo, enum GLAMOEngine engine) -{ - GLAMO_LOG("enter\n"); - if (engine_status[engine] & STATUS_ENABLED) - return; - - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_GEN5_1, - GLAMO_CLOCK_GEN51_EN_DIV_MCLK, - 0xffff); - - switch (engine) { - case GLAMO_ENGINE_MPEG: - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_MPEG, - GLAMO_CLOCK_MPEG_EN_X6CLK | - GLAMO_CLOCK_MPEG_DG_X6CLK | - GLAMO_CLOCK_MPEG_EN_X4CLK | - GLAMO_CLOCK_MPEG_DG_X4CLK | - GLAMO_CLOCK_MPEG_EN_X2CLK | - GLAMO_CLOCK_MPEG_DG_X2CLK | - GLAMO_CLOCK_MPEG_EN_X0CLK | - GLAMO_CLOCK_MPEG_DG_X0CLK, - 0xffff & ~GLAMO_CLOCK_MPEG_DG_X0CLK); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_MPROC, - GLAMO_CLOCK_MPROC_EN_M4CLK, - 0xffff); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_GEN5_1, - GLAMO_CLOCK_GEN51_EN_DIV_JCLK, - 0xffff); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_HOSTBUS(2), - GLAMO_HOSTBUS2_MMIO_EN_MPEG | - GLAMO_HOSTBUS2_MMIO_EN_MICROP1, - 0xffff); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_MPROC, - GLAMO_CLOCK_MPROC_EN_KCLK, - 0xffff); - break; - case GLAMO_ENGINE_ISP: - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_ISP, - GLAMO_CLOCK_ISP_EN_M2CLK | - GLAMO_CLOCK_ISP_EN_I1CLK, - 0xffff); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_GEN5_2, - GLAMO_CLOCK_GEN52_EN_DIV_ICLK, - 0xffff); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_GEN5_1, - GLAMO_CLOCK_GEN51_EN_DIV_JCLK, - 0xffff); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_HOSTBUS(2), - GLAMO_HOSTBUS2_MMIO_EN_ISP, - 0xffff); - break; - case GLAMO_ENGINE_CMDQ: - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_2D, - GLAMO_CLOCK_2D_EN_M6CLK, - 0xffff); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_HOSTBUS(2), - GLAMO_HOSTBUS2_MMIO_EN_CMDQ, - 0xffff); - break; - case GLAMO_ENGINE_2D: - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_2D, - GLAMO_CLOCK_2D_EN_M7CLK | - GLAMO_CLOCK_2D_EN_GCLK | - GLAMO_CLOCK_2D_DG_M7CLK | - GLAMO_CLOCK_2D_DG_GCLK, - 0xffff); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_HOSTBUS(2), - GLAMO_HOSTBUS2_MMIO_EN_2D, - 0xffff); - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_CLOCK_GEN5_1, - GLAMO_CLOCK_GEN51_EN_DIV_GCLK, - 0xffff); - break; - default: - break; - } - usleep(1000); - engine_status[engine] |= STATUS_ENABLED; - GLAMO_LOG("leave\n"); -} - - -#ifdef XV -void -GLAMOISPWaitEngineIdle (GlamoPtr pGlamo) -{ - GLAMO_LOG("enter\n"); - while (1) { - int val = MMIO_IN16(pGlamo->reg_base, GLAMO_REG_ISP_STATUS); - if (val & 0x1) { - usleep(1 * 1000); - GLAMO_LOG("isp busy\n"); - continue; - } - break; - } - GLAMO_LOG("leave\n"); -} - -static void -SetOnFlyLUTRegs(GlamoPtr pGlamo) -{ - struct { - int src_block_x; - int src_block_y; - int src_block_w; - int src_block_h; - int jpeg_out_y; - int jpeg_out_x; - int fifo_full_cnt; - int in_length; - int fifo_data_cnt; - int in_height; - } onfly; - RING_LOCALS; - - GLAMO_LOG("enter\n"); - - onfly.src_block_y = 32; - onfly.src_block_x = 32; - onfly.src_block_w = 36; - onfly.src_block_h = 35; - onfly.jpeg_out_y = 32; - onfly.jpeg_out_x = 32; - onfly.fifo_full_cnt = onfly.src_block_w * 2 + 2; - onfly.in_length = onfly.jpeg_out_x + 3; - onfly.fifo_data_cnt = onfly.src_block_w * onfly.src_block_h / 2; - onfly.in_height = onfly.jpeg_out_y + 2; - - BEGIN_CMDQ(10); - OUT_REG(GLAMO_REG_ISP_ONFLY_MODE1, - onfly.src_block_y << 10 | onfly.src_block_x << 2); - OUT_REG(GLAMO_REG_ISP_ONFLY_MODE2, - onfly.src_block_h << 8 | onfly.src_block_w); - OUT_REG(GLAMO_REG_ISP_ONFLY_MODE3, - onfly.jpeg_out_y << 8 | onfly.jpeg_out_x); - OUT_REG(GLAMO_REG_ISP_ONFLY_MODE4, - onfly.fifo_full_cnt << 8 | onfly.in_length); - OUT_REG(GLAMO_REG_ISP_ONFLY_MODE5, - onfly.fifo_data_cnt << 6 | onfly.in_height); - END_CMDQ(); - GLAMO_LOG("leave\n"); -} - -static void -SetScalingWeightMatrixRegs(GlamoPtr pGlamo) -{ - int left = 1 << 14; - RING_LOCALS; - - GLAMO_LOG("enter\n"); - - /* nearest */ - - BEGIN_CMDQ(12); - OUT_BURST(GLAMO_REG_ISP_DEC_SCALEH_MATRIX, 10); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 0, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 2, 0); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 4, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 6, 0); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 8, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 10, 0); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 12, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 14, 0); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 16, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEH_MATRIX + 18, 0); - END_CMDQ(); - - BEGIN_CMDQ(12); - OUT_BURST(GLAMO_REG_ISP_DEC_SCALEV_MATRIX, 10); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 0, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 2, 0); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 4, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 6, 0); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 8, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 10, 0); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 12, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 14, 0); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 16, left); - OUT_BURST_REG(GLAMO_REG_ISP_DEC_SCALEV_MATRIX + 18, 0); - END_CMDQ(); - GLAMO_LOG("leave\n"); -} - -static void -GLAMOISPYuvRgbPipelineInit(GlamoPtr pGlamo) -{ - unsigned short en3; - RING_LOCALS; - - GLAMO_LOG("enter.glamos:%#x\n", pGlamo); - - BEGIN_CMDQ(18); - - /* - * set the ISP into YUV 4:2:0 planar mode, - * enable scaling. - */ - en3 = GLAMO_ISP_EN3_PLANE_MODE | - GLAMO_ISP_EN3_YUV_INPUT | - GLAMO_ISP_EN3_YUV420 | - GLAMO_ISP_EN3_SCALE_IMPROVE; - - OUT_REG(GLAMO_REG_ISP_EN3, en3); - - /* - * In 8.8 fixed point, - * - * R = Y + 1.402 (Cr-128) - * = Y + 0x0167 Cr - 0xb3 - * - * G = Y - 0.34414 (Cb-128) - 0.71414 (Cr-128) - * = Y - 0x0058 Cb - 0x00b6 Cr + 0x89 - * - * B = Y + 1.772 (Cb-128) - * = Y + 0x01c5 Cb - 0xe2 - */ - - OUT_REG(GLAMO_REG_ISP_YUV2RGB_11, 0x0167); - OUT_REG(GLAMO_REG_ISP_YUV2RGB_21, 0x01c5); - OUT_REG(GLAMO_REG_ISP_YUV2RGB_32, 0x00b6); - OUT_REG(GLAMO_REG_ISP_YUV2RGB_33, 0x0058); - OUT_REG(GLAMO_REG_ISP_YUV2RGB_RG, 0xb3 << 8 | 0x89); - OUT_REG(GLAMO_REG_ISP_YUV2RGB_B, 0xe2); - - OUT_REG(GLAMO_REG_ISP_PORT1_DEC_EN, GLAMO_ISP_PORT1_EN_OUTPUT); - OUT_REG(GLAMO_REG_ISP_PORT2_EN, GLAMO_ISP_PORT2_EN_DECODE); - - END_CMDQ(); - - SetOnFlyLUTRegs(pGlamo); - SetScalingWeightMatrixRegs(pGlamo); - - GLAMO_LOG("leave\n"); -} - -#if 0 -static void -GLAMOISPColorKeyOverlayInit(GlamoPtr pGlamo) -{ - GLAMO_RETURN_IF_FAIL (pGlamo); - - /*GLAMOSetBitMask(pScreen, - GLAMO_REG_ISP_EN2, - GLAMO_ISP_EN2_OVERLAY, - 0x0001);*/ - MMIOSetBitMask(pGlamo->reg_base, - GLAMO_REG_ISP_EN4, - GLAMO_ISP_EN4_OVERLAY|GLAMO_ISP_EN4_LCD_OVERLAY, - 0x0003); -} -#endif - -void -GLAMOISPSetColorKeyOverlay(GlamoPtr pGlamo, - CARD32 start_addr/*addr on 23bits*/, - CARD16 x /*12bits*/, - CARD16 y /*12bits*/, - CARD16 width /*12bits*/, - CARD16 height /*12bits*/, - CARD16 pitch /*12bits*/, - CARD8 red_key /*5bits*/, - CARD8 green_key /*6bits*/, - CARD8 blue_key /*5bits*/) -{ - unsigned short green_red_keys = 0; - RING_LOCALS; - - GLAMO_LOG("enter. start_addr:%#x, (x,y):(%hd,%hd), " - "width,height:(%dx%d), pitch:%d\n" - "red, green, blue:(%d, %d, %d)\n", - start_addr, x, y, width, height, pitch, - red_key, green_key, blue_key); - - green_red_keys = (green_key << (8+2)) & 0xff00; - green_red_keys |= (red_key << 3) & 0x00ff; - - BEGIN_CMDQ(18); - - OUT_REG(GLAMO_REG_ISP_OVERLAY_GR_KEY, green_red_keys); - OUT_REG(GLAMO_REG_ISP_OVERLAY_B_KEY, (blue_key << 3) && 0x00ff); - OUT_REG(GLAMO_REG_ISP_OVERLAY_ADDRL, start_addr & 0x00ff); - OUT_REG(GLAMO_REG_ISP_OVERLAY_ADDRH, start_addr & 0x7f00); - OUT_REG(GLAMO_REG_ISP_OVERLAY_X, x & 0x0fff); - OUT_REG(GLAMO_REG_ISP_OVERLAY_Y, y & 0x0fff); - OUT_REG(GLAMO_REG_ISP_OVERLAY_WIDTH, width & 0x0fff); - OUT_REG(GLAMO_REG_ISP_OVERLAY_HEIGHT, width & 0x0fff); - OUT_REG(GLAMO_REG_ISP_OVERLAY_PITCH, pitch & 0x0fff); - /*TODO: no idea what this one is*/ - /*OUT_REG(GLAMO_REG_ISP_OVERLAY_BLOCK_XY, 0);*/ - - END_CMDQ(); - - GLAMO_LOG("leave\n"); -} - -void -GLAMOISPSetColorKeyOverlay2(GlamoPtr pGlamo, - CARD32 start_addr/*addr on 23bits*/, - CARD16 x /*12bits*/, - CARD16 y /*12bits*/, - CARD16 width /*12bits*/, - CARD16 height /*12bits*/, - CARD16 pitch /*12bits*/, - CARD16 color_key /*16bits*/) -{ - CARD8 red, green, blue; - - /*assume color key has rgb 565 format*/ - red = (color_key >> 11); - green = (color_key >> 5) & 0x003f; - blue = (color_key) & 0x001f; - GLAMOISPSetColorKeyOverlay(pGlamo, start_addr, x, y, - width, height, pitch, - red, green, blue); -} - -void -GLAMOISPEngineInit (GlamoPtr pGlamo) -{ - static Bool isp_enabled, isp_reset; - - GLAMO_LOG("enter\n"); - if (!isp_enabled) { - GLAMOEnableEngine(pGlamo, GLAMO_ENGINE_ISP); - isp_enabled = TRUE; - GLAMO_LOG("enabled ISP\n"); - } - if (!isp_reset) { - GLAMOResetEngine(pGlamo, GLAMO_ENGINE_ISP); - GLAMO_LOG("reset ISP\n"); - } - GLAMOISPYuvRgbPipelineInit(pGlamo); - /*GLAMOISPColorKeyOverlayInit(pScreen);*/ - GLAMO_LOG("leave\n"); -} - -void -GLAMOISPDisplayYUVPlanarFrame (GlamoPtr pGlamo, - unsigned int y_addr, - unsigned int u_addr, - unsigned int v_addr, - short y_pitch, - short uv_pitch, - short src_crop_rect_width, - short src_crop_rect_height, - unsigned int dst_addr, - short dst_pitch, - short dst_rect_width, - short dst_rect_height, - short scale_w, - short scale_h) -{ - RING_LOCALS; - - - GLAMO_LOG("enter: y_addr:%#x, u_addr:%#x, v_addr:%#x\n" - "y_pitch:%hd, uv_pitch:%hd\n" - "src_crop_rect(%hdx%hd)\n" - "dst_addr:%#x, dst_pitch:%hd\n" - "dst_rect(%hdx%hd), dst_scale(%hdx%hd)\n", - y_addr, u_addr, v_addr, - y_pitch, uv_pitch, - src_crop_rect_width, src_crop_rect_height, - dst_addr, dst_pitch, - dst_rect_width, dst_rect_height, - scale_w, scale_h); - - - /*scale_w <<= 11;*/ - /*scale_h <<= 11;*/ - - - BEGIN_CMDQ(38); - - /* - * set Y, U, V pitches. - */ - OUT_REG(GLAMO_REG_ISP_DEC_PITCH_Y, y_pitch & 0x1fff); - OUT_REG(GLAMO_REG_ISP_DEC_PITCH_UV, uv_pitch & 0x1fff); - OUT_REG(GLAMO_REG_ISP_PORT1_DEC_PITCH, dst_pitch & 0x1fff); - - /* - * set yuv starting addresses, pitches and crop rect size - */ - OUT_REG(GLAMO_REG_ISP_DEC_Y_ADDRL, y_addr & 0xffff); - OUT_REG(GLAMO_REG_ISP_DEC_Y_ADDRH, (y_addr >> 16) & 0x7f); - - OUT_REG(GLAMO_REG_ISP_DEC_U_ADDRL, u_addr & 0xffff); - OUT_REG(GLAMO_REG_ISP_DEC_U_ADDRH, (u_addr >> 16) & 0x7f); - - OUT_REG(GLAMO_REG_ISP_DEC_V_ADDRL, v_addr & 0xffff); - OUT_REG(GLAMO_REG_ISP_DEC_V_ADDRH, (v_addr >> 16) & 0x7f); - - OUT_REG(GLAMO_REG_ISP_DEC_HEIGHT, src_crop_rect_height & 0x1fff); - OUT_REG(GLAMO_REG_ISP_DEC_WIDTH, src_crop_rect_width & 0x1fff); - - /* - * set output coordinates/sizes and scaling - */ - OUT_REG(GLAMO_REG_ISP_PORT1_DEC_0_ADDRL, dst_addr & 0xffff); - OUT_REG(GLAMO_REG_ISP_PORT1_DEC_0_ADDRH, (dst_addr >> 16) & 0x7f); - - OUT_REG(GLAMO_REG_ISP_PORT1_DEC_WIDTH, dst_rect_width & 0x1fff); - OUT_REG(GLAMO_REG_ISP_PORT1_DEC_HEIGHT, dst_rect_height & 0x1fff); - - OUT_REG(GLAMO_REG_ISP_DEC_SCALEH, scale_w); - OUT_REG(GLAMO_REG_ISP_DEC_SCALEV, scale_h); - - OUT_REG(GLAMO_REG_ISP_EN1, GLAMO_ISP_EN1_FIRE_ISP); - OUT_REG(GLAMO_REG_ISP_EN1, 0); - - END_CMDQ(); - - GLAMOEngineWait(pGlamo, GLAMO_ENGINE_ALL); - - GLAMO_LOG("leave\n"); - -} - -#endif /*XV*/ -#endif diff --git a/src/glamo-funcs.h b/src/glamo-funcs.h deleted file mode 100644 index 6b021cb..0000000 --- a/src/glamo-funcs.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright © 2007 OpenMoko, Inc. - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting documentation, and - * that the name of the copyright holders not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. The copyright holders make no representations - * about the suitability of this software for any purpose. It is provided "as - * is" without express or implied warranty. - * - * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - * - * Author: - * Dodji Seketeli <dodji@openedhand.com> - */ -#ifndef _GLAMO_FUNCS_H_ -#define _GLAMO_FUNCS_H_ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <assert.h> - -void glamoOutReg(GlamoPtr pGlamo, unsigned short reg, unsigned short val); - -unsigned short glamoInReg(GlamoPtr pGlamo, unsigned short reg); - -void glamoSetBitMask(GlamoPtr pGlamo, int reg, int mask, int val); - -void setCmdMode (GlamoPtr pGlamo, Bool on); - -Bool glamoRotateLCD (GlamoPtr pGlamo, Rotation rotation); - -#ifdef XV - -void GLAMOISPWaitEngineIdle (GlamoPtr pGlamo); -void GLAMOISPEngineInit (GlamoPtr pGlamo); -void GLAMOISPDisplayYUVPlanarFrame (GlamoPtr pGlamo, - unsigned int y_addr, - unsigned int u_addr, - unsigned int v_addr, - short y_pitch, - short uv_pitch, - short src_crop_rect_width, - short src_crop_rect_height, - unsigned int dst_addr, - short dst_pitch, - short dst_rect_width, - short dst_rect_height, - short scale_w, - short scale_h); - -void GLAMOISPSetColorKeyOverlay(GlamoPtr pGlamo, - CARD32 start_addr/*addr on 23bits*/, - CARD16 x /*12bits*/, - CARD16 y /*12bits*/, - CARD16 width /*12bits*/, - CARD16 height /*12bits*/, - CARD16 pitch /*12bits*/, - CARD8 red_key /*5bits*/, - CARD8 green_key /*6bits*/, - CARD8 blue_key /*5bits*/); - -void GLAMOISPSetColorKeyOverlay2(GlamoPtr pGlamo, - CARD32 start_addr/*addr on 23bits*/, - CARD16 x /*12bits*/, - CARD16 y /*12bits*/, - CARD16 width /*12bits*/, - CARD16 height /*12bits*/, - CARD16 pitch /*12bits*/, - CARD16 color_key /*16bits*/); -#endif /*XV*/ - -#endif /*_GLAMO_FUNCS_H_*/ - |