Skip to content

Commit

Permalink
OMAP: DSS2: make filter coefficient tables human readable
Browse files Browse the repository at this point in the history
Reorganize scaler FIR filter data as FIR value tables from raw
register values. This makes them easier to understand and simplifies
register programming code.

No functional changes.

Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@nokia.com>
  • Loading branch information
Grazvydas Ignotas authored and Tomi Valkeinen committed Sep 29, 2010
1 parent dd9c8bf commit 66be8f6
Showing 1 changed file with 94 additions and 120 deletions.
214 changes: 94 additions & 120 deletions drivers/video/omap2/dss/dispc.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,22 @@ struct omap_dispc_isr_data {
u32 mask;
};

struct dispc_h_coef {
s8 hc4;
s8 hc3;
u8 hc2;
s8 hc1;
s8 hc0;
};

struct dispc_v_coef {
s8 vc22;
s8 vc2;
u8 vc1;
s8 vc0;
s8 vc00;
};

#define REG_GET(idx, start, end) \
FLD_GET(dispc_read_reg(idx), start, end)

Expand Down Expand Up @@ -564,154 +580,112 @@ static void _dispc_set_scale_coef(enum omap_plane plane, int hscaleup,
int vscaleup, int five_taps)
{
/* Coefficients for horizontal up-sampling */
static const u32 coef_hup[8] = {
0x00800000,
0x0D7CF800,
0x1E70F5FF,
0x335FF5FE,
0xF74949F7,
0xF55F33FB,
0xF5701EFE,
0xF87C0DFF,
static const struct dispc_h_coef coef_hup[8] = {
{ 0, 0, 128, 0, 0 },
{ -1, 13, 124, -8, 0 },
{ -2, 30, 112, -11, -1 },
{ -5, 51, 95, -11, -2 },
{ 0, -9, 73, 73, -9 },
{ -2, -11, 95, 51, -5 },
{ -1, -11, 112, 30, -2 },
{ 0, -8, 124, 13, -1 },
};

/* Coefficients for horizontal down-sampling */
static const u32 coef_hdown[8] = {
0x24382400,
0x28371FFE,
0x2C361BFB,
0x303516F9,
0x11343311,
0x1635300C,
0x1B362C08,
0x1F372804,
/* Coefficients for vertical up-sampling */
static const struct dispc_v_coef coef_vup_3tap[8] = {
{ 0, 0, 128, 0, 0 },
{ 0, 3, 123, 2, 0 },
{ 0, 12, 111, 5, 0 },
{ 0, 32, 89, 7, 0 },
{ 0, 0, 64, 64, 0 },
{ 0, 7, 89, 32, 0 },
{ 0, 5, 111, 12, 0 },
{ 0, 2, 123, 3, 0 },
};

/* Coefficients for horizontal and vertical up-sampling */
static const u32 coef_hvup[2][8] = {
{
0x00800000,
0x037B02FF,
0x0C6F05FE,
0x205907FB,
0x00404000,
0x075920FE,
0x056F0CFF,
0x027B0300,
},
{
0x00800000,
0x0D7CF8FF,
0x1E70F5FE,
0x335FF5FB,
0xF7404000,
0xF55F33FE,
0xF5701EFF,
0xF87C0D00,
},
static const struct dispc_v_coef coef_vup_5tap[8] = {
{ 0, 0, 128, 0, 0 },
{ -1, 13, 124, -8, 0 },
{ -2, 30, 112, -11, -1 },
{ -5, 51, 95, -11, -2 },
{ 0, -9, 73, 73, -9 },
{ -2, -11, 95, 51, -5 },
{ -1, -11, 112, 30, -2 },
{ 0, -8, 124, 13, -1 },
};

/* Coefficients for horizontal and vertical down-sampling */
static const u32 coef_hvdown[2][8] = {
{
0x24382400,
0x28391F04,
0x2D381B08,
0x3237170C,
0x123737F7,
0x173732F9,
0x1B382DFB,
0x1F3928FE,
},
{
0x24382400,
0x28371F04,
0x2C361B08,
0x3035160C,
0x113433F7,
0x163530F9,
0x1B362CFB,
0x1F3728FE,
},
/* Coefficients for horizontal down-sampling */
static const struct dispc_h_coef coef_hdown[8] = {
{ 0, 36, 56, 36, 0 },
{ 4, 40, 55, 31, -2 },
{ 8, 44, 54, 27, -5 },
{ 12, 48, 53, 22, -7 },
{ -9, 17, 52, 51, 17 },
{ -7, 22, 53, 48, 12 },
{ -5, 27, 54, 44, 8 },
{ -2, 31, 55, 40, 4 },
};

/* Coefficients for vertical up-sampling */
static const u32 coef_vup[8] = {
0x00000000,
0x0000FF00,
0x0000FEFF,
0x0000FBFE,
0x000000F7,
0x0000FEFB,
0x0000FFFE,
0x000000FF,
/* Coefficients for vertical down-sampling */
static const struct dispc_v_coef coef_vdown_3tap[8] = {
{ 0, 36, 56, 36, 0 },
{ 0, 40, 57, 31, 0 },
{ 0, 45, 56, 27, 0 },
{ 0, 50, 55, 23, 0 },
{ 0, 18, 55, 55, 0 },
{ 0, 23, 55, 50, 0 },
{ 0, 27, 56, 45, 0 },
{ 0, 31, 57, 40, 0 },
};


/* Coefficients for vertical down-sampling */
static const u32 coef_vdown[8] = {
0x00000000,
0x000004FE,
0x000008FB,
0x00000CF9,
0x0000F711,
0x0000F90C,
0x0000FB08,
0x0000FE04,
static const struct dispc_v_coef coef_vdown_5tap[8] = {
{ 0, 36, 56, 36, 0 },
{ 4, 40, 55, 31, -2 },
{ 8, 44, 54, 27, -5 },
{ 12, 48, 53, 22, -7 },
{ -9, 17, 52, 51, 17 },
{ -7, 22, 53, 48, 12 },
{ -5, 27, 54, 44, 8 },
{ -2, 31, 55, 40, 4 },
};

const u32 *h_coef;
const u32 *hv_coef;
const u32 *hv_coef_mod;
const u32 *v_coef;
const struct dispc_h_coef *h_coef;
const struct dispc_v_coef *v_coef;
int i;

if (hscaleup)
h_coef = coef_hup;
else
h_coef = coef_hdown;

if (vscaleup) {
hv_coef = coef_hvup[five_taps];
v_coef = coef_vup;

if (hscaleup)
hv_coef_mod = NULL;
else
hv_coef_mod = coef_hvdown[five_taps];
} else {
hv_coef = coef_hvdown[five_taps];
v_coef = coef_vdown;

if (hscaleup)
hv_coef_mod = coef_hvup[five_taps];
else
hv_coef_mod = NULL;
}
if (vscaleup)
v_coef = five_taps ? coef_vup_5tap : coef_vup_3tap;
else
v_coef = five_taps ? coef_vdown_5tap : coef_vdown_3tap;

for (i = 0; i < 8; i++) {
u32 h, hv;

h = h_coef[i];

hv = hv_coef[i];

if (hv_coef_mod) {
hv &= 0xffffff00;
hv |= (hv_coef_mod[i] & 0xff);
}
h = FLD_VAL(h_coef[i].hc0, 7, 0)
| FLD_VAL(h_coef[i].hc1, 15, 8)
| FLD_VAL(h_coef[i].hc2, 23, 16)
| FLD_VAL(h_coef[i].hc3, 31, 24);
hv = FLD_VAL(h_coef[i].hc4, 7, 0)
| FLD_VAL(v_coef[i].vc0, 15, 8)
| FLD_VAL(v_coef[i].vc1, 23, 16)
| FLD_VAL(v_coef[i].vc2, 31, 24);

_dispc_write_firh_reg(plane, i, h);
_dispc_write_firhv_reg(plane, i, hv);
}

if (!five_taps)
return;

for (i = 0; i < 8; i++) {
u32 v;
v = v_coef[i];
_dispc_write_firv_reg(plane, i, v);
if (five_taps) {
for (i = 0; i < 8; i++) {
u32 v;
v = FLD_VAL(v_coef[i].vc00, 7, 0)
| FLD_VAL(v_coef[i].vc22, 15, 8);
_dispc_write_firv_reg(plane, i, v);
}
}
}

Expand Down

0 comments on commit 66be8f6

Please sign in to comment.