Example #1
0
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 */
	}
Example #2
0
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 */
	}
Example #3
0
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 */
	}