Esempio n. 1
0
void s3cfb_write_palette(s3cfb_info_t *fbi)
{
	unsigned int i;
	unsigned long ent;
	unsigned int win_num = fbi->win_id;

	fbi->palette_ready = 0;

	writel((s3cfb_fimd.wpalcon | S3C_WPALCON_PALUPDATEEN), S3C_WPALCON);

	for (i = 0; i < 256; i++) {
		if ((ent = fbi->palette_buffer[i]) == S3CFB_PALETTE_BUFF_CLEAR)
			continue;

		writel(ent, S3C_TFTPAL0(i) + 0x400 * win_num);

		



		if (readl(S3C_TFTPAL0(i) + 0x400 * win_num) == ent) {
			fbi->palette_buffer[i] = S3CFB_PALETTE_BUFF_CLEAR;
		} else {
			fbi->palette_ready = 1;   
			printk("Retry writing into the palette\n");
		}
	}

	writel(s3cfb_fimd.wpalcon, S3C_WPALCON);
}
Esempio n. 2
0
void s3cfb_write_palette(s3cfb_info_t *fbi)
{
	unsigned int i;
	unsigned long ent;
	unsigned int win_num = fbi->win_id;

	fbi->palette_ready = 0;

	writel((s3cfb_fimd.wpalcon | S3C_WPALCON_PALUPDATEEN), S3C_WPALCON);

	for (i = 0; i < 256; i++) {
		if ((ent = fbi->palette_buffer[i]) == S3CFB_PALETTE_BUFF_CLEAR)
			continue;

		writel(ent, S3C_TFTPAL0(i) + 0x400 * win_num);

		/* it seems the only way to know exactly
		 * if the palette wrote ok, is to check
		 * to see if the value verifies ok
		 */
		if (readl(S3C_TFTPAL0(i) + 0x400 * win_num) == ent) {
			fbi->palette_buffer[i] = S3CFB_PALETTE_BUFF_CLEAR;
		} else {
			fbi->palette_ready = 1;   /* retry */
			printk("Retry writing into the palette\n");
		}
	}

	writel(s3cfb_fimd.wpalcon, S3C_WPALCON);
}