static int s3cfb_setcolreg(unsigned int regno, unsigned int red, unsigned int green, unsigned int blue, unsigned int transp, struct fb_info *info) { struct s3c_fb_info *fbi = (struct s3c_fb_info *)info; unsigned int val = 0; switch (fbi->fb.fix.visual) { case FB_VISUAL_TRUECOLOR: if (regno < 16) { unsigned int *pal = fbi->fb.pseudo_palette; val = s3cfb_chan_to_field(red, fbi->fb.var.red); val |= s3cfb_chan_to_field(green, fbi->fb.var.green); val |= s3cfb_chan_to_field(blue, fbi->fb.var.blue); pal[regno] = val; } break; case FB_VISUAL_PSEUDOCOLOR: if (regno < 256) { val = ((red >> 0) & 0xf800); val |= ((green >> 5) & 0x07e0); val |= ((blue >> 11) & 0x001f); s3cfb_update_palette(fbi, regno, val); } break; default: return 1; /* unknown type */ }
static int s3cfb_setcolreg(unsigned int regno, unsigned int red, unsigned int green, unsigned int blue, unsigned int transp, struct fb_info *info) { s3c_fb_info_t *fbi = (s3c_fb_info_t *)info; unsigned int val = 0; switch (fbi->fb.fix.visual) { case FB_VISUAL_TRUECOLOR: if (regno < 16) { unsigned int *pal = fbi->fb.pseudo_palette; val = s3cfb_chan_to_field(red, fbi->fb.var.red); val |= s3cfb_chan_to_field(green, fbi->fb.var.green); val |= s3cfb_chan_to_field(blue, fbi->fb.var.blue); pal[regno] = val; } break; case FB_VISUAL_PSEUDOCOLOR: if (regno < 256) { // if (info->var.bits_per_pixel == 16) { val = ((red >> 0) & 0xf800); val |= ((green >> 5) & 0x07e0); val |= ((blue >> 11) & 0x001f); // } else if (info->var.bits_per_pixel == 24) { // val = ((red << 8) & 0xff0000); // val |= ((green >> 0) & 0xff00); // val |= ((blue >> 8) & 0xff); // } DPRINTK("index = %d, val = 0x%08x\n", regno, val); s3cfb_update_palette(fbi, regno, val); } break; default: return 1; /* unknown type */ }
static int s3cfb_setcolreg(unsigned int regno, unsigned int red, unsigned int green, unsigned int blue, unsigned int transp, struct fb_info *info) { s3cfb_info_t *fbi = (s3cfb_info_t *)info; unsigned int val = 0; switch (fbi->fb.fix.visual) { case FB_VISUAL_TRUECOLOR: if (regno < 16) { /* Fake palette of 16 colors */ unsigned int *pal = fbi->fb.pseudo_palette; val = s3cfb_chan_to_field(red, fbi->fb.var.red); val |= s3cfb_chan_to_field(green, fbi->fb.var.green); val |= s3cfb_chan_to_field(blue, fbi->fb.var.blue); val |= s3cfb_chan_to_field(transp, fbi->fb.var.transp); pal[regno] = val; } break; case FB_VISUAL_PSEUDOCOLOR: /* This means that the color format isn't 16, 24, 28 bpp. */ /* S3C6410 has 256 palette entries */ if (regno < 256) { /* When var.bits_per_pixel is 8bp, then WIN0's palette is always set as 16 bit */ val = ((red >> 0) & 0xf800); val |= ((green >> 5) & 0x07e0); val |= ((blue >> 11) & 0x001f); DPRINTK("index = %d, val = 0x%08x\n", regno, val); s3cfb_update_palette(fbi, regno, val); } break; default: return 1; /* unknown type */ }