lkml.org 
[lkml]   [2010]   [Apr]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/30] viafb: Retain GEMODE reserved bits
    Date
    Commit c3e25673843153ea75fda79a47cf12f10a25ca37 (viafb: 2D engine rewrite)
    changed the setting of the GEMODE register so that the reserved bits are no
    longer preserved. Fix that; at the same time, move this code to its own
    function and restore the use of symbolic constants.

    Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
    Cc: ScottFang@viatech.com.cn
    Cc: JosephChan@via.com.tw
    Signed-off-by: Jonathan Corbet <corbet@lwn.net>
    ---
    drivers/video/via/accel.c | 49 ++++++++++++++++++++++++++++++--------------
    1 files changed, 33 insertions(+), 16 deletions(-)

    diff --git a/drivers/video/via/accel.c b/drivers/video/via/accel.c
    index d5077df..a52147c 100644
    --- a/drivers/video/via/accel.c
    +++ b/drivers/video/via/accel.c
    @@ -165,12 +165,42 @@ static int hw_bitblt_1(void __iomem *engine, u8 op, u32 width, u32 height,
    return 0;
    }

    +/*
    + * Figure out an appropriate bytes-per-pixel setting.
    + */
    +static int viafb_set_bpp(void __iomem *engine, u8 bpp)
    +{
    + u32 gemode;
    +
    + /* Preserve the reserved bits */
    + /* Lowest 2 bits to zero gives us no rotation */
    + gemode = readl(engine + VIA_REG_GEMODE) & 0xfffffcfc;
    + switch (bpp) {
    + case 8:
    + gemode |= VIA_GEM_8bpp;
    + break;
    + case 16:
    + gemode |= VIA_GEM_16bpp;
    + break;
    + case 32:
    + gemode |= VIA_GEM_32bpp;
    + break;
    + default:
    + printk(KERN_WARNING "hw_bitblt_2: Unsupported bpp %d\n", bpp);
    + return -EINVAL;
    + }
    + writel(gemode, engine + VIA_REG_GEMODE);
    + return 0;
    +}
    +
    +
    static int hw_bitblt_2(void __iomem *engine, u8 op, u32 width, u32 height,
    u8 dst_bpp, u32 dst_addr, u32 dst_pitch, u32 dst_x, u32 dst_y,
    u32 *src_mem, u32 src_addr, u32 src_pitch, u32 src_x, u32 src_y,
    u32 fg_color, u32 bg_color, u8 fill_rop)
    {
    u32 ge_cmd = 0, tmp, i;
    + int ret;

    if (!op || op > 3) {
    printk(KERN_WARNING "hw_bitblt_2: Invalid operation: %d\n", op);
    @@ -204,22 +234,9 @@ static int hw_bitblt_2(void __iomem *engine, u8 op, u32 width, u32 height,
    }
    }

    - switch (dst_bpp) {
    - case 8:
    - tmp = 0x00000000;
    - break;
    - case 16:
    - tmp = 0x00000100;
    - break;
    - case 32:
    - tmp = 0x00000300;
    - break;
    - default:
    - printk(KERN_WARNING "hw_bitblt_2: Unsupported bpp %d\n",
    - dst_bpp);
    - return -EINVAL;
    - }
    - writel(tmp, engine + 0x04);
    + ret = viafb_set_bpp(engine, dst_bpp);
    + if (ret)
    + return ret;

    if (op == VIA_BITBLT_FILL)
    tmp = 0;
    --
    1.7.0.1


    \
     
     \ /
      Last update: 2010-04-29 00:29    [W:0.026 / U:0.440 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site