94 lines
3.7 KiB
C
94 lines
3.7 KiB
C
/*
|
|
* Copyright (C) 2015 Apple Inc. All rights reserved.
|
|
*
|
|
* This document is the property of Apple Inc.
|
|
* It is considered confidential and proprietary.
|
|
*
|
|
* This document may not be reproduced or transmitted in any form,
|
|
* in whole or in part, without the express written permission of
|
|
* Apple Inc.
|
|
*/
|
|
#include <debug.h>
|
|
#include <lib/env.h>
|
|
#include <lib/paint.h>
|
|
#include <lib/syscfg.h>
|
|
#include <drivers/prc.h>
|
|
#include "prc.h"
|
|
|
|
|
|
static const uint32_t prc_prcLUT[256] =
|
|
{0, 64, 128, 192, 256, 320, 384, 448,
|
|
512, 576, 640, 704, 768, 832, 896, 960,
|
|
1024, 1088, 1152, 1216, 1280, 1344, 1408, 1472,
|
|
1536, 1600, 1664, 1728, 1792, 1856, 1920, 1984,
|
|
2048, 2112, 2176, 2240, 2304, 2368, 2432, 2496,
|
|
2560, 2624, 2688, 2752, 2816, 2880, 2944, 3008,
|
|
3072, 3136, 3200, 3264, 3328, 3392, 3456, 3520,
|
|
3584, 3648, 3712, 3776, 3840, 3904, 3968, 4032,
|
|
4096, 4160, 4224, 4288, 4352, 4416, 4480, 4544,
|
|
4608, 4672, 4736, 4800, 4864, 4928, 4992, 5056,
|
|
5120, 5184, 5248, 5312, 5376, 5440, 5504, 5568,
|
|
5632, 5696, 5760, 5824, 5888, 5952, 6016, 6080,
|
|
6144, 6208, 6272, 6336, 6400, 6464, 6528, 6592,
|
|
6656, 6720, 6784, 6848, 6912, 6976, 7040, 7104,
|
|
7168, 7232, 7296, 7360, 7424, 7488, 7552, 7616,
|
|
7680, 7744, 7808, 7872, 7936, 8000, 8064, 8128,
|
|
8192, 8256, 8320, 8384, 8448, 8512, 8576, 8640,
|
|
8704, 8768, 8832, 8896, 8960, 9024, 9088, 9152,
|
|
9216, 9280, 9344, 9408, 9472, 9536, 9600, 9664,
|
|
9728, 9792, 9856, 9920, 9984, 10048, 10112, 10176,
|
|
10240, 10304, 10368, 10432, 10496, 10560, 10624, 10688,
|
|
10752, 10816, 10880, 10944, 11008, 11072, 11136, 11200,
|
|
11264, 11328, 11392, 11456, 11520, 11584, 11648, 11712,
|
|
11776, 11840, 11904, 11968, 12032, 12096, 12160, 12224,
|
|
12288, 12352, 12416, 12480, 12544, 12608, 12672, 12736,
|
|
12800, 12864, 12928, 12992, 13056, 13120, 13184, 13248,
|
|
13312, 13376, 13440, 13504, 13568, 13632, 13696, 13760,
|
|
13824, 13888, 13952, 14016, 14080, 14144, 14208, 14272,
|
|
14336, 14400, 14464, 14528, 14592, 14656, 14720, 14784,
|
|
14848, 14912, 14976, 15040, 15104, 15168, 15232, 15296,
|
|
15360, 15424, 15488, 15552, 15616, 15680, 15744, 15808,
|
|
15872, 15936, 16000, 16064, 16128, 16192, 16256, 16320 };
|
|
|
|
void prc_write_reg(uint32_t reg, uint32_t value);
|
|
uint32_t prc_read_reg(uint32_t reg);
|
|
|
|
void prc_init(uint32_t display_width, uint32_t display_height)
|
|
{
|
|
// WPC Configuration defined in ADBE TRM v0.1.14. Section 4.4
|
|
|
|
// Active Region Start
|
|
prc_write_reg(PRC_CONFIG_ACTIVE_REGION_START_OFFSET,
|
|
PRC_CONFIG_ACTIVE_REGION_START_START_X_INSRT(0) |
|
|
PRC_CONFIG_ACTIVE_REGION_START_START_Y_INSRT(0));
|
|
|
|
// Active Region Size
|
|
prc_write_reg(PRC_CONFIG_ACTIVE_REGION_SIZE_OFFSET,
|
|
PRC_CONFIG_ACTIVE_REGION_SIZE_WIDTH_INSRT(display_width) |
|
|
PRC_CONFIG_ACTIVE_REGION_SIZE_HEIGHT_INSRT(display_height));
|
|
|
|
//force update due to double buffer registers
|
|
prc_write_reg(PRC_CONFIG_UPDATE_CONTROL_OFFSET, 0x3);
|
|
}
|
|
|
|
void prc_install_gamma_table(u_int32_t *red_lut, u_int32_t *green_lut, u_int32_t *blue_lut, struct syscfg_wpcl *wpcl)
|
|
{
|
|
for (int i = 0; i < PRC_LUT_REG_COUNT; i++) {
|
|
prc_write_reg(PRC_LUT_REG_OFFSET(i), prc_prcLUT[i % 256]);
|
|
}
|
|
|
|
for (int i = 0; i < PRC_LUT_LAST_COUNT; i ++) {
|
|
prc_write_reg(PRC_LUT_LAST_OFFSET_V1(i), 16384);
|
|
}
|
|
}
|
|
|
|
void prc_write_reg(uint32_t reg, uint32_t value)
|
|
{
|
|
(*(volatile u_int32_t *)(PRC_BASE_ADDR + reg)) = value;
|
|
}
|
|
|
|
uint32_t prc_read_reg(uint32_t reg)
|
|
{
|
|
return (*(volatile u_int32_t *)(PRC_BASE_ADDR + reg));
|
|
}
|