iBoot/drivers/hdmi/debug.c

114 lines
4.5 KiB
C

/*
* Copyright (C) 2012, 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 <sys.h>
#include <sys/menu.h>
#include <sys/task.h>
#include <drivers/display.h>
#include <drivers/hdmi.h>
#if defined(WITH_MENU) && WITH_MENU
static struct video_link_data hdmi_video_data;
int do_hdmi(int argc, struct cmd_arg *args)
{
static struct display_timing timing_list[] =
{
#if WITH_HW_DISPLAY_HDMI
{ "720p", 0, 74250000, 243, 1280, 220, 110, 40, 720, 20, 5, 5, 0, 0, 0, 0, 24, DISPLAY_TYPE_HDMI, NULL},
#endif
};
if (argc < 2) {
puts("not enough arguments.\n");
goto usage;
}
if (strcmp("start", args[1].str) == 0) {
printf("MY PIXEL CLOCK %d\n", timing_list[0].pixel_clock);
hdmi_init(&timing_list[0]);
bzero(&hdmi_video_data, sizeof(struct video_link_data));
hdmi_video_data.mirror_mode = false;
hdmi_video_data.test_mode = 0;
hdmi_video_data.color.depth = 8;
hdmi_video_data.color.space = kDisplayColorSpacesRGB;
hdmi_video_data.color.range = kDisplayColorDynamicRangeVESA;
hdmi_video_data.color.coefficient = kDisplayColorCoefficientITU601;
hdmi_video_data.timing.axis[0].total = timing_list[0].h_active + timing_list[0].h_back_porch + timing_list[0].h_front_porch + timing_list[0].h_pulse_width;
hdmi_video_data.timing.axis[0].active = timing_list[0].h_active;
hdmi_video_data.timing.axis[0].sync_width = timing_list[0].h_pulse_width;
hdmi_video_data.timing.axis[0].back_porch = timing_list[0].h_back_porch;
hdmi_video_data.timing.axis[0].front_porch = timing_list[0].h_front_porch;
hdmi_video_data.timing.axis[0].sync_rate = 0;
hdmi_video_data.timing.axis[0].sync_polarity = 0;
hdmi_video_data.timing.axis[1].total = timing_list[0].v_active + timing_list[0].v_back_porch + timing_list[0].v_front_porch + timing_list[0].v_pulse_width;
hdmi_video_data.timing.axis[1].active = timing_list[0].v_active;
hdmi_video_data.timing.axis[1].sync_width = timing_list[0].v_pulse_width;
hdmi_video_data.timing.axis[1].back_porch = timing_list[0].v_back_porch;
hdmi_video_data.timing.axis[1].front_porch = timing_list[0].v_front_porch;
hdmi_video_data.timing.axis[1].sync_rate = 60 << 16;
hdmi_video_data.timing.axis[1].sync_polarity = 0;
} else if (strcmp("stop", args[1].str) == 0) {
hdmi_quiesce();
} else if (strcmp("video", args[1].str) == 0) {
if (strcmp("logo", args[2].str) == 0) {
hdmi_video_data.mirror_mode = false;
hdmi_video_data.test_mode = 0;
hdmi_controller_start_video(&hdmi_video_data, timing_list[0].pixel_clock);
}
if (strcmp("bist", args[2].str) == 0) {
hdmi_video_data.mirror_mode = false;
hdmi_video_data.test_mode = 1;
hdmi_controller_start_video(&hdmi_video_data, timing_list[0].pixel_clock);
}
if (strcmp("mirror", args[2].str) == 0) {
hdmi_video_data.mirror_mode = true;
hdmi_video_data.test_mode = 0;
hdmi_controller_start_video(&hdmi_video_data, timing_list[0].pixel_clock);
}
} else if (strcmp("readReg", args[1].str) == 0) {
hdmi_read_reg(args[2].n);
} else if (strcmp("writeReg", args[1].str) == 0) {
hdmi_write_reg(args[2].n, args[3].n);
} else {
puts("unrecognized command.\n");
goto usage;
}
return 0;
usage:
printf("%s start\n", args[0].str);
printf("%s video logo\n", args[0].str);
printf("%s video bist\n", args[0].str);
printf("%s video mirror\n", args[0].str);
printf("%s stop\n", args[0].str);
printf("%s readReg\n", args[0].str);
printf("%s writeReg\n", args[0].str);
return -1;
}
MENU_COMMAND_DEVELOPMENT(hdmi, do_hdmi, "hdmi stuff", NULL);
#endif