first and last commit

This commit is contained in:
Chris Nutter committed 2023-07-08 13:03:17 -07:00
commit 1bf4efd552
2612 files changed
+636500

No files matched your search

+232
View File
@@ -0,0 +1,232 @@
/*
* Copyright (C) 2011,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 <drivers/display.h>
#include <drivers/displayport/displayport.h>
#include <drivers/displayport.h>
#include <drivers/power.h>
#include <platform/gpio.h>
#include <platform/gpiodef.h>
#include <lib/env.h>
#include <sys/task.h>
#include "edp.h"
#define kHPDTimeout (186 * 1000)
/*
* Panel ID is based on "DP Panel Vendor ID spec, v1.5"
*/
static u_int32_t edp_panel_id;
static u_int32_t edp_dot_pitch;
static u_int32_t edp_default_color;
static u_int32_t edp_voltage_offset;
static u_int32_t edp_backlight_cal;
static u_int8_t edp_raw_panel_id[kEDPRawPanelIdLength];
static dp_t edp_display_config;
int edp_quiesce(void);
static void edp_panel_enable(bool enable);
int edp_init(struct display_timing *timing, enum colorspace color, u_int32_t *display_id)
{
int result;
utime_t HPDTime = 0;
dprintf(DEBUG_CRITICAL, "edp_init()\n");
// Save the display's dot pitch
edp_dot_pitch = timing->dot_pitch;
memcpy(&edp_display_config, timing->display_config, sizeof(dp_t));
// Kick off eDP controller
if ((result = displayport_init_with_timing_info(timing)) != 0)
goto error;
// Power-up the display
edp_panel_enable(true);
//Wait for HPD to allow enough time for TCON to to be ready
if (dp_controller_wait_for_edp_hpd(&HPDTime) == false) {
dprintf(DEBUG_CRITICAL, "timeout waiting for HPD\n");
goto error;
}
if (edp_panel_id == 0) {
edp_panel_id = env_get_uint("pinot-panel-id", 0);
}
if (edp_panel_id == 0) {
// read the panel ID
result = displayport_get_raw_panel_id(edp_raw_panel_id);
if (result != 0) {
dprintf(DEBUG_CRITICAL, "edp_init(): read of edp panel id failed\n");
} else {
edp_panel_id = edp_raw_panel_id[0] << 24; // Build ID
edp_panel_id |= edp_raw_panel_id[1] << 16; // Panel Vendor ID
edp_panel_id |= edp_raw_panel_id[2] << 8; // Program ID
edp_panel_id |= edp_raw_panel_id[3] << 0; // Silicon Vendor/Model ID
edp_default_color = (edp_raw_panel_id[0] & 1) ? 0x00000000 : 0x00FFFFFF;
edp_voltage_offset = edp_raw_panel_id[4];
edp_backlight_cal = edp_raw_panel_id[5];
}
}
dprintf(DEBUG_CRITICAL, "edp_init(): edp_panel_id: 0x%08x\n", edp_panel_id);
dprintf(DEBUG_CRITICAL, "edp_init(): edp_default_color: 0x%08x\n", edp_default_color);
dprintf(DEBUG_CRITICAL, "edp_init(): edp_backlight_cal: 0x%08x\n", edp_backlight_cal);
// Ignore the real default color and use black
edp_default_color = 0x00000000;
if (edp_panel_id == 0) {
dprintf(DEBUG_CRITICAL, "panel_id = 0\n");
goto error;
}
// the HPD signal causes the rest of the DP initialization to occur on the dp_controller_task
// we hold the rest of the enable to prevent racing this task and hence violating the panel's timing requirement
utime_t timeout = HPDTime + kHPDTimeout;
dp_device_wait_started(timeout);
// Enable the CLCD
display_set_enable(true, &edp_default_color);
*display_id = edp_panel_id;
// Adjust display voltage offset
#if WITH_HW_POWER_DIALOG
if (edp_voltage_offset != 0) {
bool fixed_boost = env_get_bool("fixed-lcm-boost", false);
power_set_display_voltage_offset(edp_voltage_offset, fixed_boost);
}
#endif
//Allow enough time before enabling backlight. Per spec at least 134ms (T4 + T5 + T6 + T7) after seeing HPD.
dp_controller_wait_for_HPD_to_BL(HPDTime);
return 0;
error:
edp_quiesce();
return -1;
}
int edp_quiesce(void)
{
dprintf(DEBUG_CRITICAL, "edp_quiesce()\n");
displayport_quiesce();
edp_panel_enable(false);
return 0;
}
static void edp_panel_enable(bool enable)
{
#if PMU_LCD_PWR_EN
power_set_gpio(GPIO_PMU_LCD_PWR_EN, 1, enable);
#else
gpio_write(GPIO_LCD_PWR_EN, enable);
#endif
}
#if WITH_DEVICETREE
#include <lib/devicetree.h>
int edp_update_device_tree(DTNode *edp_node, DTNode *lcd_node, DTNode *clcd_node, DTNode *backlight_node)
{
u_int32_t propSize;
char *propName;
void *propData;
if (edp_panel_id == 0) return -1;
propName = "lcd-panel-id";
if (FindProperty(edp_node, &propName, &propData, &propSize)) {
((u_int32_t *)propData)[0] = edp_panel_id;
}
propName = "raw-panel-id";
if (FindProperty(edp_node, &propName, &propData, &propSize)) {
if (propSize > sizeof(edp_raw_panel_id)) propSize = sizeof(edp_raw_panel_id);
memcpy(propData, edp_raw_panel_id, propSize);
}
propName = "pre_configured";
if (FindProperty(edp_node, &propName, &propData, &propSize)) {
if (propSize >= sizeof(u_int8_t))
((u_int32_t *)propData)[0] = displayport_video_configured() ? 1 : 0;
}
if (lcd_node != NULL) {
propName = "alpm-enable";
if (FindProperty(lcd_node, &propName, &propData, &propSize)) {
if (propSize == sizeof(uint32_t)) {
uint32_t data = dp_device_is_alpm_enabled();
((uint32_t*)propData)[0] = data;
}
}
propName = "lcd-panel-id";
if (FindProperty(lcd_node, &propName, &propData, &propSize)) {
((u_int32_t *)propData)[0] = edp_panel_id;
}
propName = "raw-panel-id";
if (FindProperty(lcd_node, &propName, &propData, &propSize)) {
if (propSize > sizeof(edp_raw_panel_id)) propSize = sizeof(edp_raw_panel_id);
memcpy(propData, edp_raw_panel_id, propSize);
}
}
if (clcd_node != NULL) {
propName = "display-default-color";
if (FindProperty(clcd_node, &propName, &propData, &propSize)) {
((u_int32_t *)propData)[0] = edp_default_color;
}
propName = "dot-pitch";
if (FindProperty(clcd_node, &propName, &propData, &propSize)) {
((u_int32_t *)propData)[0] = edp_dot_pitch;
}
propName = "vrr-version";
if (FindProperty(clcd_node, &propName, &propData, &propSize)) {
if (propSize == sizeof(uint32_t)) {
uint32_t data = edp_display_config.vrr_on << 31 | edp_display_config.vrr_enable;
((uint32_t*)propData)[0] = data;
}
}
}
if (backlight_node != NULL) {
propName = "display-backlight-calibration";
if (FindProperty(backlight_node, &propName, &propData, &propSize)) {
((u_int32_t *)propData)[0] = edp_backlight_cal;
}
propName = "backlight-id";
if (FindProperty(backlight_node, &propName, &propData, &propSize)) {
if (((u_int32_t *)propData)[0] == 0xffffffff) {
// We are moving DP panel program-id by 1000 to not collide with
// MIPI panel program ids
((u_int32_t *)propData)[0] = ((edp_panel_id >> 8) & 0xff) + 1000;
}
}
}
return 0;
}
#endif
+14
View File
@@ -0,0 +1,14 @@
/*
* Copyright (C) 2011 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.
*/
#ifndef __DRIVERS_EDP_H
#define __DRIVERS_EDP_H
#endif /* ! __DRIVERS_EDP_H */
+16
View File
@@ -0,0 +1,16 @@
# Copyright (C) 2011 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.
#
LOCAL_DIR := $(GET_LOCAL_DIR)
OPTIONS += \
WITH_HW_DISPLAY_EDP=1
ALL_OBJS += \
$(LOCAL_DIR)/edp.o