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); }
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); }