diff options
Diffstat (limited to 'drivers/gpu/drm/emgd/emgd/pal/sdvo/sdvo_port.c')
-rw-r--r-- | drivers/gpu/drm/emgd/emgd/pal/sdvo/sdvo_port.c | 3536 |
1 files changed, 0 insertions, 3536 deletions
diff --git a/drivers/gpu/drm/emgd/emgd/pal/sdvo/sdvo_port.c b/drivers/gpu/drm/emgd/emgd/pal/sdvo/sdvo_port.c deleted file mode 100644 index 43e4bfd9c8ac..000000000000 --- a/drivers/gpu/drm/emgd/emgd/pal/sdvo/sdvo_port.c +++ /dev/null @@ -1,3536 +0,0 @@ -/* -*- pse-c -*- - *----------------------------------------------------------------------------- - * Filename: sdvo_port.c - * $Revision: 1.12 $ - *----------------------------------------------------------------------------- - * Copyright © 2002-2010, Intel Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. - * - *----------------------------------------------------------------------------- - * Description: - * Port driver interface functions - *----------------------------------------------------------------------------- - */ -#include "sdvo_port.h" - -/* .......................................................................... */ - -int sdvo_open(pd_callback_t *p_callback, void **p_context); -int sdvo_init_device(void *p_context); -int sdvo_get_timing_list(void *p_context, pd_timing_t *p_in_list, - pd_timing_t **pp_out_list); -int sdvo_set_mode(void *p_context, pd_timing_t *p_mode, unsigned long flags); -int sdvo_post_set_mode(void *p_context, pd_timing_t *p_mode, - unsigned long flags); -int sdvo_get_attributes(void *p_context, unsigned long *p_num_attr, - pd_attr_t **pp_list); -int sdvo_set_attributes(void *p_context, unsigned long num_attr, - pd_attr_t *p_list); -unsigned long sdvo_validate(unsigned long cookie); -int sdvo_close(void *p_context); -int sdvo_set_power(void *p_context, unsigned long state); -int sdvo_get_power(void *p_context, unsigned long *p_state); -int sdvo_save(void *p_context, void **pp_state, unsigned long flags); -int sdvo_restore(void *p_context, void *p_state, unsigned long flags); -int sdvo_get_port_status(void *p_context, pd_port_status_t *port_status); -#ifndef CONFIG_MICRO -int sdvo_set_tv_settings(void *p_context, i2c_reg_t tv_format); -#endif -char *sdvo_get_output_type(sdvo_display_output_t out, unsigned char byte); -int sdvo_init_attribute_table(sdvo_device_context_t *p_ctx); -void sdvo_convert_pd_timing_to_dtd(pd_timing_t *p_mode, sdvo_dtd_t *p_dtd, - unsigned long dclk); -void sdvo_convert_dtd_to_pd_timing(sdvo_dtd_t *p_dtd, pd_timing_t *p_mode); - -static pd_version_t g_sdvo_version = {3, 4, 0, 0}; -static unsigned long g_sdvo_dab_list[] = {0x70, 0x72, PD_DAB_LIST_END}; - -static pd_driver_t g_sdvo_drv = { - PD_SDK_VERSION, - "SDVO Port Driver", - 0, - &g_sdvo_version, - PD_DISPLAY_FP, - PD_FLAG_CLOCK_MASTER, - g_sdvo_dab_list, - 1000, - sdvo_validate, - sdvo_open, - sdvo_init_device, - sdvo_close, - sdvo_set_mode, - sdvo_post_set_mode, - sdvo_set_attributes, - sdvo_get_attributes, - sdvo_get_timing_list, - sdvo_set_power, - sdvo_get_power, - sdvo_save, - sdvo_restore, - sdvo_get_port_status -}; - -pd_timing_t sdvo_sdtv_timing_table[] = -{ -#ifndef CONFIG_MICRO -#if 0 - /* byte 0 */ - { - 320, 200, /* width, height */ - 60, 19140, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 319, 1286, /* hblank_start, hblank_end (will be set) */ - 561, 593, /* hsync_start, hsync_end (will be set) */ - 249, /* vtotal */ - 199, 249, /* vblank_start, vblank_end (will be set) */ - 216, 218, /* vsync_start, vsync_end (will be set) */ - 648, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 320, 240, /* width, height */ - 60, 22970, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 319, 1286, /* hblank_start, hblank_end (will be set) */ - 561, 593, /* hsync_start, hsync_end (will be set) */ - 299, /* vtotal */ - 239, 299, /* vblank_start, vblank_end (will be set) */ - 260, 262, /* vsync_start, vsync_end (will be set) */ - 658, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 400, 300, /* width, height */ - 60, 28330, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 399, 1286, /* hblank_start, hblank_end (will be set) */ - 621, 653, /* hsync_start, hsync_end (will be set) */ - 369, /* vtotal */ - 299, 369, /* vblank_start, vblank_end (will be set) */ - 322, 324, /* vsync_start, vsync_end (will be set) */ - 662, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 640, 350, /* width, height */ - 60, 32930, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 639, 1286, /* hblank_start, hblank_end (will be set) */ - 801, 833, /* hsync_start, hsync_end (will be set) */ - 429, /* vtotal */ - 349, 429, /* vblank_start, vblank_end (will be set) */ - 376, 378, /* vsync_start, vsync_end (will be set) */ - 768, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 640, 400, /* width, height */ - 60, 37520, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 639, 1286, /* hblank_start, hblank_end (will be set) */ - 801, 833, /* hsync_start, hsync_end (will be set) */ - 489, /* vtotal */ - 399, 489, /* vblank_start, vblank_end (will be set) */ - 429, 431, /* vsync_start, vsync_end (will be set) */ - 772, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#else - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#endif -#endif - { - 640, 480, /* width, height */ - 60, 45180, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 639, 1286, /* hblank_start, hblank_end (will be set) */ - 801, 833, /* hsync_start, hsync_end (will be set) */ - 589, /* vtotal */ - 479, 589, /* vblank_start, vblank_end (will be set) */ - 516, 518, /* vsync_start, vsync_end (will be set) */ - 599, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#ifndef CONFIG_MICRO -#if 0 - { - 704, 480, /* width, height */ - 60, 45180, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 703, 1286, /* hblank_start, hblank_end (will be set) */ - 849, 881, /* hsync_start, hsync_end (will be set) */ - 589, /* vtotal */ - 479, 589, /* vblank_start, vblank_end (will be set) */ - 516, 518, /* vsync_start, vsync_end (will be set) */ - 776, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 704, 576, /* width, height */ - 60, 54370, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 703, 1286, /* hblank_start, hblank_end (will be set) */ - 849, 881, /* hsync_start, hsync_end (will be set) */ - 709, /* vtotal */ - 575, 709, /* vblank_start, vblank_end (will be set) */ - 620, 622, /* vsync_start, vsync_end (will be set) */ - 786, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - /* byte 1 */ - { - 720, 350, /* width, height */ - 60, 32930, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 719, 1286, /* hblank_start, hblank_end (will be set) */ - 861, 893, /* hsync_start, hsync_end (will be set) */ - 429, /* vtotal */ - 349, 429, /* vblank_start, vblank_end (will be set) */ - 376, 378, /* vsync_start, vsync_end (will be set) */ - 790, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 720, 400, /* width, height */ - 60, 37520, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 719, 1286, /* hblank_start, hblank_end (will be set) */ - 861, 893, /* hsync_start, hsync_end (will be set) */ - 489, /* vtotal */ - 399, 489, /* vblank_start, vblank_end (will be set) */ - 429, 431, /* vsync_start, vsync_end (will be set) */ - 800, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#else - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#endif - - { - 720, 480, /* width, height */ - 60, 45180, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 719, 1286, /* hblank_start, hblank_end (will be set) */ - 861, 893, /* hsync_start, hsync_end (will be set) */ - 589, /* vtotal */ - 479, 589, /* vblank_start, vblank_end (will be set) */ - 516, 518, /* vsync_start, vsync_end (will be set) */ - 804, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - -#if 0 - { - 720, 540, /* width, height */ - 60, 51310, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 719, 1286, /* hblank_start, hblank_end (will be set) */ - 861, 893, /* hsync_start, hsync_end (will be set) */ - 669, /* vtotal */ - 539, 669, /* vblank_start, vblank_end (will be set) */ - 583, 585, /* vsync_start, vsync_end (will be set) */ - 808, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#else - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#endif - - { - 720, 576, /* width, height */ - 60, 36250, /* refresh (will be set), dot clock */ - 857, /* htotal */ - 719, 857, /* hblank_start, hblank_end (will be set) */ - 754, 786, /* hsync_start, hsync_end (will be set) */ - 709, /* vtotal */ - 575, 709, /* vblank_start, vblank_end (will be set) */ - 620, 622, /* vsync_start, vsync_end (will be set) */ - 818, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - -#if 0 - { - 768, 576, /* width, height */ - 60, 54370, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 767, 1286, /* hblank_start, hblank_end (will be set) */ - 897, 929, /* hsync_start, hsync_end (will be set) */ - 709, /* vtotal */ - 575, 709, /* vblank_start, vblank_end (will be set) */ - 620, 622, /* vsync_start, vsync_end (will be set) */ - 822, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#else - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#endif -#endif - { - 800, 600, /* width, height */ - 60, 56670, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 799, 1286, /* hblank_start, hblank_end (will be set) */ - 921, 953, /* hsync_start, hsync_end (will be set) */ - 739, /* vtotal */ - 599, 739, /* vblank_start, vblank_end (will be set) */ - 646, 648, /* vsync_start, vsync_end (will be set) */ - 601, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#ifndef CONFIG_MICRO -#if 0 - { - 832, 624, /* width, height */ - 60, 58970, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 831, 1286, /* hblank_start, hblank_end (will be set) */ - 945, 977, /* hsync_start, hsync_end (will be set) */ - 769, /* vtotal */ - 623, 769, /* vblank_start, vblank_end (will be set) */ - 672, 674, /* vsync_start, vsync_end (will be set) */ - 832, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - /* byte 2 */ - { - 920, 766, /* width, height */ - 60, 71990, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 919, 1286, /* hblank_start, hblank_end (will be set) */ - 1011, 1043, /* hsync_start, hsync_end (will be set) */ - 939, /* vtotal */ - 765, 939, /* vblank_start, vblank_end (will be set) */ - 823, 825, /* vsync_start, vsync_end (will be set) */ - 836, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#else - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#endif - - { - 1024, 768, /* width, height */ - 60, 72750, /* refresh (will be set), dot clock */ - 1286, /* htotal */ - 1023, 1286, /* hblank_start, hblank_end (will be set) */ - 1089, 1121, /* hsync_start, hsync_end (will be set) */ - 949, /* vtotal */ - 767, 949, /* vblank_start, vblank_end (will be set) */ - 828, 830, /* vsync_start, vsync_end (will be set) */ - 609, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1280, 1024, /* width, height */ - 60, 128660, /* refresh (will be set), dot clock */ - 1715, /* htotal */ - 1279, 1715, /* hblank_start, hblank_end (will be set) */ - 1388, 1420, /* hsync_start, hsync_end (will be set) */ - 1259, /* vtotal */ - 1023, 1259, /* vblank_start, vblank_end (will be set) */ - 1086, 1088, /* vsync_start, vsync_end (will be set) */ - 611, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#endif - PD_TIMING_TABLE_END -}; -pd_timing_t sdvo_hdtv_timing_table[] = -{ - /* byte 0 */ - { - 640, 480, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - - { - 800, 600, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#ifndef CONFIG_MICRO - { - 1024, 768, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1280, 960, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1400, 1050, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1600, 1200, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1920, 1440, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 2048, 1536, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - /* byte 1 */ - { - 2560, 1920, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL , /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - /* byte 2 */ - { - 848, 480, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1064, 600, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1280, 720, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1360, 768, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1704, 960, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1864, 1050, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1920, 1080, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 2128, 1200, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - /* byte 3 */ - { - 2560, 1400, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 2728, 1536, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - /* byte 4 */ - { - 768, 480, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 960, 600, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1152, 720, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1124, 768, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1536, 960, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1680, 1050, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1728, 1080, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 1920, 1200, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - /* byte 5 */ - { - 2304, 1440, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 2456, 1536, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - /* byte 6 */ - { - 1280, 1024, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - - /* byte 7 */ - { - 1280, 768, /* width, height */ - 60, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - PD_MODE_SUPPORTED| /* this mode is supported */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, - { - 0, 0, /* width, height */ - 0, 0, /* refresh (will be set), dot clock */ - 0, /* htotal */ - 0, 0, /* hblank_start, hblank_end (will be set) */ - 0, 0, /* hsync_start, hsync_end (will be set) */ - 0, /* vtotal */ - 0, 0, /* vblank_start, vblank_end (will be set) */ - 0, 0, /* vsync_start, vsync_end (will be set) */ - 0, /* mode number */ - 0, /* mode info flags */ - 0, 0, /* x, y offset */ - NULL, /* mode extenstion pointer (will bet set) */ - 0, 0 /* Reserved */ - }, -#endif - PD_TIMING_TABLE_END -}; - -/* .......................................................................... */ -/* .......................................................................... */ -/*============================================================================ - Function : pd_init is the first function that is invoked by IEG driver. - - Parameters : handle : not used - - Remarks : pd_init initializes pd_driver_t structure and registers the - port driver with IEG driver by calling pd_register function - - Returns : Status returned by pd_register function. - ------------------------------------------------------------------------- */ -int PD_MODULE_INIT(sdvo_init, (void *handle)) -{ - int status; - - PD_DEBUG("sdvo: pd_init()"); - - status = pd_register(handle, &g_sdvo_drv); - if (status != PD_SUCCESS) { - PD_DEBUG("sdvo: Error ! pd_init: pd_register() failed with " - "status=%#x", status); - } - return status; -} - - -/*---------------------------------------------------------------------- - * Function: sdvo_exit() - * - * Description: This is the exit function for SDVO port driver to unload - * the driver. - * - * Parameters: None. - * - * Return: PD_SUCCESS(0) success - * PD_ERR_XXXXXX otherwise - *----------------------------------------------------------------------*/ -int PD_MODULE_EXIT(sdvo_exit, (void)) -{ - return (PD_SUCCESS); -} /* end sdvo_exit() */ - - -/* ============================================================================ - Function : sdvo_open is called for each combination of port and dab - registers to detect the SDVO device. - - Parameters : p_callback : Contains pointers to read_regs/write_regs - functions to access I2C registes. - - pp_context : Pointer to port driver allocated context - structure is returned in this argument - - Remarks : sdvo_open detects the presence of SDVO device for specified - port. - - Returns : PD_SUCCESS If SDVO device is detected - PD_ERR_xxx On Failure - ------------------------------------------------------------------------- */ -int sdvo_open(pd_callback_t *p_callback, void **pp_context) -{ - sdvo_device_context_t *p_ctx; - sdvo_status_t status; - sdvo_output_flags_t output_flags; - unsigned long power_state; -#ifndef CONFIG_MICRO - i2c_reg_t reg; -#endif - - PD_DEBUG("sdvo: sdvo_open(): port_num=%ld", p_callback->port_num); - - p_ctx = pd_malloc(sizeof(sdvo_device_context_t)); - if (p_ctx == NULL) { - PD_ERROR("sdvo: Error ! sdvo_open: pd_malloc() failed"); - return PD_ERR_NOMEM; - } - - pd_memset(p_ctx, 0, sizeof(sdvo_device_context_t)); - - *pp_context = p_ctx; - p_ctx->p_callback = p_callback; - - status = sdvo_get_device_capabilities(p_ctx, &p_ctx->dev_cap); - if (status != SS_SUCCESS) { - - PD_DEBUG("sdvo: Error ! sdvo_open: sdvo_get_device_capabilities() " - "failed with status=%d", status); - pd_free(p_ctx); - return PD_ERR_NODEV; - } - - PD_DEBUG("sdvo: Device Capabilities:"); - PD_DEBUG("sdvo: vendor=%d, device=%d, revision=%d,", - p_ctx->dev_cap.vendor_id, p_ctx->dev_cap.device_id, - p_ctx->dev_cap.revision_id); - PD_DEBUG("sdvo: version_major=%d, version_minor=%d, num sDVO inputs=%d", - p_ctx->dev_cap.version_major, p_ctx->dev_cap.version_minor, - p_ctx->dev_cap.num_inputs); - PD_DEBUG("sdvo: Scaling support: smooth=%d, sharp=%d, up=%d, down=%d,", - p_ctx->dev_cap.smooth_scaling, p_ctx->dev_cap.sharp_scaling, - p_ctx->dev_cap.up_scaling, - p_ctx->dev_cap.down_scaling); - PD_DEBUG("sdvo: Stall support=%d", p_ctx->dev_cap.stall); - - PD_DEBUG("sdvo: out0:%s", - sdvo_get_output_type(p_ctx->dev_cap.output.out0, 0)); - PD_DEBUG("sdvo: out1:%s", - sdvo_get_output_type(p_ctx->dev_cap.output.out1, 1)); - - /* ...................................................................... */ - p_ctx->out_type = p_ctx->dev_cap.output; - status = sdvo_set_target_output(p_ctx, p_ctx->out_type); - status = sdvo_get_supported_power_states(p_ctx, &p_ctx->supp_pwr_states); - if (status == SS_SUCCESS) { - PD_DEBUG("sdvo: Supported Power States = %#x", - p_ctx->supp_pwr_states); - } else { - - PD_DEBUG("sdvo: GetSupported Power States FAILED with status = %d",status); - } - - /* ...................................................................... */ - /* Assume SDVO0 connected to Port B and SDVO1 connected to Port C */ - /* However the correct way to determine SDVO port to device mapping at */ - /* run-time is via Get_Trained_Inputs opcode */ - p_ctx->inp_dev = SDVO0; - - /* This code is to find out whether a TV encoder is used to get VGA display - * or TVout display */ - - /* Read the power state */ - sdvo_get_power(p_ctx, &power_state); - - /* set device to DO before performing connection detect attempt */ - sdvo_set_power(p_ctx, PD_POWER_MODE_D0); - - status = sdvo_get_attached_displays(p_ctx, &output_flags); - /* - * sdvo_get_attached_displays returns "0" when sdvo cable is - * disconnected. Need to make sure out_type flags not - * overridden. - */ - if (status == SS_SUCCESS && output_flags.flags != 0) { - PD_DEBUG("sdvo: get_attached_display returned => [0x%x]", - output_flags.flags); - p_ctx->out_type.flags &= output_flags.flags; - } else { - /* If display detection fails, reset the hardware and try again: */ - PD_ERROR("get_attached_display() did not succeed; trying HW reset"); - status = sdvo_reset(p_ctx); - PD_DEBUG("sdvo_reset returned %u", status); - status = sdvo_get_attached_displays(p_ctx, &output_flags); - if (status == SS_SUCCESS && output_flags.flags != 0) { - PD_DEBUG("sdvo: get_attached_display returned => [0x%x]", - output_flags.flags); - p_ctx->out_type.flags &= output_flags.flags; - } else { - PD_ERROR("get_attached_display() did not succeed again; giving up"); - return PD_ERR_NODEV; - } - } - - /* restore the previous power state */ - sdvo_set_power(p_ctx, power_state); - g_sdvo_drv.flags &= ~(PD_FLAG_CLK_SOURCE|PD_FLAG_PIPE_MASTER); - - /* Set the display type */ - if (p_ctx->out_type.flags & CRT_EXT_DISP_MASK) { - g_sdvo_drv.type = PD_DISPLAY_CRT_EXT; - } else if (p_ctx->out_type.flags & DRGB_DISP_MASK) { - g_sdvo_drv.type = PD_DISPLAY_DRGB; - } else if (p_ctx->out_type.flags & FP_DISP_MASK) { - status = SDVO_IS_HDMI_SUPPORTED(p_ctx); - if (status == SS_SUCCESS) { - PD_DEBUG("sdvo: HDMI transmiter "); - g_sdvo_drv.type = PD_DISPLAY_HDMI_EXT; - } else{ - g_sdvo_drv.type = PD_DISPLAY_FP; - } - } else if (p_ctx->out_type.flags & TV_DISP_MASK) { - g_sdvo_drv.type = PD_DISPLAY_TVOUT; - - /* TV display is PIPE master and also generates clock */ - g_sdvo_drv.flags |= (PD_FLAG_CLK_SOURCE|PD_FLAG_PIPE_MASTER); - - /* CH7021: Initialize H/V Overscan */ - sdvo_write_i2c_reg(p_ctx, 0x38, 0x1F); - sdvo_write_i2c_reg(p_ctx, 0x39, 0x1F); - -#ifndef CONFIG_MICRO - /*Set optimal TV settings*/ - - /*identify tv output systems in terms of line, and frame rate*/ - sdvo_read_i2c_reg(p_ctx, 0x36, ®); - - if (reg != 0 && reg != 0x24) //not 480i, and 576i system - reg = 0xFF; - - status = sdvo_set_tv_settings(p_ctx,reg); - - if (status != SS_SUCCESS) { - PD_DEBUG("sdvo: Error ! sdvo_open(): sdvo_set_tv_settings " - "failed with status=%d", status); - } -#endif - - } - - /* Indicate main driver about upscaling */ - if (p_ctx->dev_cap.up_scaling && g_sdvo_drv.type != PD_DISPLAY_CRT_EXT) { - g_sdvo_drv.flags |= PD_FLAG_UP_SCALING; - } else { - /* Remove the upscaling dev caps for VGA bypass. There are functions - * that decides on upscaling based on the caps and not the flags. */ - p_ctx->dev_cap.up_scaling = 0; - } - - /* ...................................................................... */ - /* CH7308 up-scaling workaround */ - if ((p_ctx->dev_cap.vendor_id == 2) && (p_ctx->dev_cap.device_id == 0x41) && - (p_ctx->dev_cap.revision_id == 1)) { - i2c_reg_t reg; - sdvo_read_i2c_reg(p_ctx, 0x5D, ®); - reg |= 1; - sdvo_write_i2c_reg(p_ctx, 0x5D, reg); - } - /* ...................................................................... */ - - /* CH7021A XUD VGAbypass */ - if (((p_ctx->dev_cap.vendor_id == 2) && - ((p_ctx->dev_cap.device_id==0xC2)||(p_ctx->dev_cap.device_id==0x42)))&& - (p_ctx->dev_cap.revision_id == 2) && - (g_sdvo_drv.type == PD_DISPLAY_CRT_EXT)) { - i2c_reg_t reg; - sdvo_read_i2c_reg(p_ctx, 0x7F, ®); - reg |= 1; - sdvo_write_i2c_reg(p_ctx, 0x7F, reg); - - sdvo_read_i2c_reg(p_ctx, 0x6C, ®); - reg |= 0x03; - sdvo_write_i2c_reg(p_ctx, 0x6C, reg); - - sdvo_read_i2c_reg(p_ctx, 0x7F, ®); - reg &= 0xFE; - sdvo_write_i2c_reg(p_ctx, 0x7F, reg); - } - - return PD_SUCCESS; -} - -/* ============================================================================ - Function : sdvo_init_device is called to initialize a SDVO device - - Parameters : p_context : Pointer to port driver allocated context - structure - - Remarks : - - Returns : PD_SUCCESS If initialization is successful - PD_ERR_xxx On Failure - ------------------------------------------------------------------------- */ -int sdvo_init_device(void *p_context) -{ - PD_DEBUG("sdvo: sdvo_init_device()"); -#ifndef CONFIG_MICRO - if(g_sdvo_drv.type == PD_DISPLAY_HDMI_EXT){ - /* Initialize transmitter audio capability if available */ - SDVO_INIT_HDMI(p_context); - } -#endif - return PD_SUCCESS; -} - -/* ============================================================================ - Function : sdvo_get_timing_list is called to get the list of display - modes supported by the SDVO device and the display. - - Parameters : p_context: Pointer to port driver allocated context - structure - p_in_list: List of display modes supported by the IEG driver - pp_out_list: List of modes supported by the SDVO device - - Remarks : - - Returns : PD_SUCCESS On Success - PD_ERR_xxx On Failure - ------------------------------------------------------------------------- */ -int sdvo_get_timing_list(void *p_context, pd_timing_t *p_in_list, - pd_timing_t **pp_out_list) -{ - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - sdvo_status_t status; - unsigned short pixel_range[2]; - pd_dvo_info_t sdvo_info = {0, 0, 0, 0, 0, 0, 0, 0}; - pd_display_info_t sdvo_display_info = {0, 0, 0, 0, NULL}; - int ret = PD_SUCCESS; - pd_timing_t *tv_timing; - unsigned char hdtv = 0; /* 0: standard ; 1: high definition */ - - PD_DEBUG("sdvo: sdvo_get_timing_list()"); - - /* ...................................................................... */ - status = sdvo_set_target_input(p_ctx, p_ctx->inp_dev); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_get_timing_list: sdvo_set_target_input()" - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - status = sdvo_get_input_pixel_clock_range(p_ctx, pixel_range); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_get_timing_list: " - "sdvo_get_input_pixel_clock_range() failed with status=%d", - status); - sdvo_info.min_dclk = 0; - sdvo_info.max_dclk = 0; - } else { - sdvo_info.min_dclk = (unsigned long)pixel_range[0] * 10; - sdvo_info.max_dclk = (unsigned long)pixel_range[1] * 10; - } - - sdvo_info.upscale = p_ctx->dev_cap.up_scaling; - sdvo_info.downscale = p_ctx->dev_cap.down_scaling; - sdvo_display_info.panel_fit = p_ctx->up_scaling; - - if (!(p_ctx->out_type.flags & TV_DISP_MASK)) { - /* For VGA, DVI, LVDS and HDMI displays, - * call helper function to filter the modes */ - ret = pd_filter_timings(p_ctx->p_callback->callback_context, - p_in_list, &p_ctx->p_mode_table, &sdvo_info, &sdvo_display_info); - - /* Helper function returns the below values */ - p_ctx->native_dtd = sdvo_display_info.native_dtd; - p_ctx->fp_width = sdvo_display_info.width; - p_ctx->fp_height = sdvo_display_info.height; - *pp_out_list = p_ctx->p_mode_table; - } else { - sdvo_create_preferred_timings_t pref_timings; - sdvo_dtd_t dtd_in; - unsigned char params[6] = {0,0,0,0,0,0}; - unsigned char ret_value[8] = {0,0,0,0,0,0,0,0}; - unsigned long *temp = (unsigned long *)¶ms[2]; - unsigned char i=0, j=0; - - status = sdvo_get_tv_output_format(p_ctx,params); - if (params[0] > 0 || params[1] > 0 || (params[2] > 0 && - params[2] < 0x08)) { - /* SDTV support */ - status = sdvo_get_sdtv_resolution_support(p_ctx,params,ret_value); - tv_timing = sdvo_sdtv_timing_table; - - } else { - /* HDTV support */ - (*temp) >>= 3; - status = sdvo_get_scaled_hdtv_resolution_support( - p_ctx, ¶ms[2], ret_value); - tv_timing = sdvo_hdtv_timing_table; - hdtv = 1; - } - - - /* For TV displays generate supported timing table */ - - while (tv_timing->width != PD_TIMING_LIST_END) { - /* Fill-in pref timings */ - /* Go through bits 0 to 7 of the returned byte and check to see if - * it is on. If yes, calculate the preferred timing */ - - for (j=0; j<8; j++) { - tv_timing->mode_info_flags &= ~PD_MODE_SUPPORTED; - /* Cannot request preferred input timing for width/height = 0 */ - if (!tv_timing->width || !tv_timing->height) { - tv_timing++; - continue; - } - if (ret_value[i] & BIT(j)) { - pd_memset(&pref_timings, 0, sizeof(pref_timings)); - /* pref_timings.pixel_clock=(unsigned short)(t1->dclk/10);*/ - pref_timings.active_horz_pixels = tv_timing->width; - pref_timings.active_vert_pixels = tv_timing->height; - status = sdvo_get_preferred_input_timings(p_ctx, - &pref_timings, &dtd_in); - - if (status != SS_SUCCESS) { - PD_ERROR("sdvo_get_timing_list: %ux%u cannot be " - "supported status = %u", - tv_timing->width, tv_timing->height, status); - } else { - PD_DEBUG("sdvo_get_timing_list: " - "device returned values = %ux%u dclk=%u", - dtd_in.horz_active, dtd_in.vert_active, - dtd_in.pixel_clock); - } - if (dtd_in.horz_active && dtd_in.vert_active) { - sdvo_convert_dtd_to_pd_timing(&dtd_in, tv_timing); - } - PD_DEBUG("sdvo_get_timing_list: after conversion: " - "device returned values = %ux%u dclk=%lu", - tv_timing->width, tv_timing->height, - tv_timing->dclk); - tv_timing->refresh = 60; /* This is for OS to see */ - tv_timing->mode_info_flags |= PD_MODE_SUPPORTED; - } /* end checking ret_value[i] */ - tv_timing++; - } /* end for loop */ - i++; /* grab next returned byte */ - } /* end while timing list */ - - if (hdtv) { - *pp_out_list = sdvo_hdtv_timing_table; - } - else { - *pp_out_list = sdvo_sdtv_timing_table; - } - } - /* end tv if */ - return ret; -} - -/* ============================================================================ - Function : sdvo_set_mode is called to test if specified mode can be - supported or to set it. - - Parameters : p_context: Pointer to port driver allocated context - p_mode : New mode - flags : In test mode it is set to PD_SET_MODE_FLAG_TEST - - Remarks : sdvo_set_mode first verifies that the new mode is - supportable. - If not it returns an error status - If the flags is not set to PD_SET_MODE_FLAG_TEST it sets the - new mode. - - Returns : PD_SUCCESS On Success - PD_ERR_xxx On Failure - ------------------------------------------------------------------------- */ -int sdvo_set_mode(void *p_context, pd_timing_t *p_mode, unsigned long flags) -{ - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - sdvo_status_t status; - sdvo_dtd_t dtd_out, dtd_in; - sdvo_clock_rate_mult_t clock_mult; - unsigned char b_use_scaled_timing; - pd_timing_t *p_native_mode; - unsigned long dclk; - - PD_DEBUG("sdvo: sdvo_set_mode() mode=%dx%d@%d", - p_mode->width, p_mode->height, p_mode->refresh); - - p_native_mode = p_ctx->native_dtd; - - if (p_ctx->out_type.flags & TV_DISP_MASK) { - p_native_mode = p_mode; - } - - /* ...................................................................... */ - status = sdvo_set_target_input(p_ctx, p_ctx->inp_dev); - if (status != SS_SUCCESS) { - - PD_ERROR("sdvo: Error ! sdvo_set_mode: sdvo_set_target_input()" - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - status = sdvo_set_target_output(p_ctx, p_ctx->out_type); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_set_mode: sdvo_set_target_output()" - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - /* ...................................................................... */ - /* Test mode. Specified mode is supported by this device return success */ - if (flags & PD_SET_MODE_FLAG_TEST) { - return PD_SUCCESS; - } - - /* ...................................................................... */ - /* Set power state to D0 */ - sdvo_set_power(p_context, PD_POWER_MODE_D0); - /* ...................................................................... */ - /* Initialize the DTD structure and set output and input timings */ - b_use_scaled_timing = FALSE; - /* p_ctx->unscaled_Mode.width = 0; */ - - dclk = p_mode->dclk; - - /* If this sDVO device supports scaling and if native mode was specified */ - /* get the preferred input timings for native output timings */ - if (((p_native_mode) && - ((p_native_mode->width != p_mode->width) || - (p_native_mode->height != p_mode->height)) && - - ((p_ctx->up_scaling) || (p_ctx->dev_cap.down_scaling))) || - - (p_ctx->out_type.flags & TV_DISP_MASK)) { - - sdvo_create_preferred_timings_t pref_timings; - - sdvo_convert_pd_timing_to_dtd(p_native_mode, &dtd_out, - p_native_mode->dclk); - - status = sdvo_set_output_timings(p_ctx, &dtd_out); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_set_mode: sdvo_set_output_timings() " - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - pd_memset(&pref_timings, 0, sizeof(pref_timings)); - pref_timings.pixel_clock = (unsigned short)(p_native_mode->dclk / 10); - pref_timings.active_horz_pixels = p_mode->width; - pref_timings.active_vert_pixels = p_mode->height; - - if (!(p_ctx->out_type.flags & TV_DISP_MASK)) { - pref_timings.b_scaled = 1; - if (p_native_mode->mode_info_flags & PD_SCAN_INTERLACE) { - pref_timings.b_interlaced = 1; - } - } - - status = sdvo_get_preferred_input_timings(p_ctx, &pref_timings,&dtd_in); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_set_mode: " - "sdvo_get_preferred_input_timings() failed with status=%d", - status); - } else { - PD_DEBUG("sdvo: sdvo_set_mode: pref_in_timings = %ux%u dclk=%u", - dtd_in.horz_active, dtd_in.vert_active, dtd_in.pixel_clock); - b_use_scaled_timing = TRUE; - dclk = p_native_mode->dclk; - } - } - - /* ...................................................................... */ - /* Determine clock rate multiplier */ - if (dclk > 100000) { /* 100-200 MHz */ - clock_mult = CRM_1X; - } else if (dclk > 50000) { /* 50-100 Mhz */ - clock_mult = CRM_2X; - } else { /* 25-50 Mhz */ - clock_mult = CRM_4X; - } - - PD_DEBUG("sdvo: Clock Multiplier = %d dclk = %lu", clock_mult, dclk); - - /* ...................................................................... */ - /* SI 1364 Autozone switch workaround */ - if ((p_ctx->dev_cap.vendor_id == 4) && (p_ctx->dev_cap.device_id == 0xAA)) { - i2c_reg_t data; - if (clock_mult == CRM_1X) { - data = 0x4D; - } else { - data = 0x49; - } - sdvo_write_i2c_reg(p_ctx, 0x51, data); - } - - /* ...................................................................... */ - if (! b_use_scaled_timing) { - sdvo_convert_pd_timing_to_dtd(p_mode, &dtd_out, p_mode->dclk); - status = sdvo_set_output_timings(p_ctx, &dtd_out); - if ((status != SS_SUCCESS) && (status != SS_NOT_SUPPORTED)) { - PD_ERROR("sdvo: Error ! sdvo_set_mode: sdvo_set_output_timings() " - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - dtd_in = dtd_out; - } - - status = sdvo_set_input_timings(p_ctx, &dtd_in); - if ((status != SS_SUCCESS) && (status != SS_NOT_SUPPORTED)) { - PD_ERROR("sdvo: Error ! sdvo_set_mode: sdvo_set_input_timings() " - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - status = sdvo_set_clock_rate_multiplier(p_ctx, clock_mult); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error!sdvo_set_mode: sdvo_set_clock_rate_multiplier() " - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - return PD_SUCCESS; -} - -/* ============================================================================ - Function : sdvo_post_set_mode - - Parameters : p_context: Pointer to port driver allocated context - p_mode : - flags : - - Remarks : - - Returns : - ------------------------------------------------------------------------- */ -int sdvo_post_set_mode(void *p_context, pd_timing_t *p_mode, - unsigned long flags) -{ - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - sdvo_status_t status; - i2c_reg_t trained = 0; - sdvo_output_flags_t out_flags[2]; - int pd_status = PD_SUCCESS; - sdvo_output_flags_t output_flags; - /*sdvo_output_flags_t is_attached display;*/ - - PD_DEBUG("sdvo: sdvo_post_set_mode()"); - - status = sdvo_get_trained_inputs(p_ctx, &trained); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_get_trained_inputs() failed with " - "status=%d", status); - } else { - if (trained == 0) { - PD_DEBUG("sdvo: Error ! sdvo_post_set_mode: " - "No inputs are trained"); - } else { - PD_DEBUG("sdvo: Success ! sdvo_post_set_mode: " - "Inputs are trained"); - } - } - - status = sdvo_get_attached_displays(p_ctx, &output_flags); - if (status == SS_SUCCESS) { - PD_DEBUG("sdvo: get_attached_display returned => [0x%x]", - output_flags.flags); - } else { - /* TODO: What if display detection fails? */ - /* pd_status = PD_ERR_NODEV; */ - output_flags.flags = 0; - } - - if (output_flags.flags == 0) { - output_flags.flags = p_ctx->out_type.flags; - }else if(output_flags.flags != p_ctx->out_type.flags){ - /* enable switching tv output type on-the-fly; - * also to enable cvbs+svideo simul display */ - /* NOTE: Removed on-the-fly support with PRD change. - p_ctx->out_type.flags will always retain the registry - settings. Setting multiple bits out_type.flags for - sdvo_set_target_output will caused INVALID_ARGUMENT error - which in turn causes un-trained output. */ - /*p_ctx->out_type.flags = output_flags.flags; */ - } - - /* set inout map */ - PD_DEBUG("sdvo_post_set_mode: out_type.flags:[0x%x]", - output_flags.flags); - - PD_DEBUG("sdvo_post_set_mode: out0:%s, out 1:%s", - sdvo_get_output_type(p_ctx->out_type.out0, 0), - sdvo_get_output_type(p_ctx->out_type.out1, 1)); - - /* set inout map */ - if(output_flags.flags & TV_DISP_MASK){ - /* Ensure only one output (SVIDEO) is used since in out map - * command can only handle one active port. SDVO specs also - * states that any tv setting would be applied to all connectors */ - out_flags[0].flags = TV_SVIDEO_DISP_MASK; - }else{ - out_flags[0].flags = output_flags.flags; - /* in0 = required output type */ - } - out_flags[1].flags = 0; /* in1 = 0 */ - status = sdvo_set_in_out_map(p_ctx, out_flags); - /* Some encoders doesn't support INOUT Map */ - if (status != SS_SUCCESS && status != SS_NOT_SUPPORTED) { - PD_ERROR("sdvo: Error ! sdvo_post_set_mode: sdvo_set_in_out_map() " - "failed with status=%d", status); - pd_status = PD_ERR_INTERNAL; - } - - /* set active outputs */ - status = sdvo_set_active_outputs(p_ctx, output_flags); - if (status != SS_SUCCESS) { - - PD_ERROR("sdvo: Error ! sdvo_post_set_mode: sdvo_set_active_outputs() " - "failed with status=%d", status); - pd_status = PD_ERR_INTERNAL; - } -#ifndef CONFIG_MICRO - status = SDVO_IS_HDMI_SUPPORTED(p_context); - if(status == SS_SUCCESS){ - SDVO_CONFIGURE_HDMI(p_ctx); - } -#endif - /* Wait for panel power up sequence to complete */ - pd_usleep((unsigned long)(p_ctx->t1+p_ctx->t2)*1000 + 10); - - return pd_status; -} - - -/* ============================================================================ - Function : sdvo_get_attributes is called to get the list of all the - available attributes - - Parameters : p_context: Pointer to port driver allocated context structure - p_Num : Return the total number of attributes - pp_list : Return the list of port driver attributes - - Remarks : sdvo_get_attributes calls SDVO interface functions to get all - available range,bool and list attributes supported by the - SDVO device - - Returns : PD_SUCCESS On Success - PD_ERR_xxx On Failure - ------------------------------------------------------------------------- */ -int sdvo_get_attributes(void *p_context, unsigned long *p_num_attr, - pd_attr_t **pp_list) -{ - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - sdvo_status_t status; - unsigned long i; - - PD_DEBUG("sdvo: sdvo_get_attributes()"); - - /* No attributes for external CRT */ - if (p_ctx->out_type.flags & CRT_EXT_DISP_MASK) { - PD_DEBUG("No attributes available for SDVO CRT."); - *p_num_attr = 0; - return 0; - } - - status = sdvo_set_target_output(p_ctx, p_ctx->out_type); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_get_attributes: sdvo_set_target_output()" - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - if (p_ctx->p_attr_table == NULL) { - PD_DEBUG("sdvo: sdvo_get_attributes: " - "Attribute Table not initialized"); - return PD_ERR_INTERNAL; - } - /* ...................................................................... */ - for (i = 0; i < p_ctx->num_attrs ; i++) { - pd_attr_t *p_attr_cur = &p_ctx->p_attr_table[i]; - - if ((p_attr_cur->flags & PD_ATTR_FLAG_DYNAMIC) == 0) { - status = sdvo_query_static_attr(p_ctx, p_attr_cur); - } else { - if ((p_attr_cur->id >= PD_ATTR_ID_FP_PWR_T1) && - (p_attr_cur->id <= PD_ATTR_ID_FP_PWR_T5)) { - status = sdvo_query_panel_pwr_seq_attr(p_ctx, - (pd_range_attr_t *)p_attr_cur); - } else if (p_attr_cur->type == PD_ATTR_TYPE_RANGE) { - status = sdvo_query_range_attr(p_ctx, - (pd_range_attr_t *)p_attr_cur); - } else if (p_attr_cur->type == PD_ATTR_TYPE_BOOL) { - status = sdvo_query_bool_attr(p_ctx, - (pd_bool_attr_t *)p_attr_cur); - } else if (p_attr_cur->type == PD_ATTR_TYPE_LIST) { - status = sdvo_query_list_attr(p_ctx, - (pd_list_attr_t *)p_attr_cur); - i += ((pd_list_attr_t *)p_attr_cur)->num_entries; - } - - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_get_attributes: " - "Failed to query attr[%ld]='%s', id=%ld", - i, SDVO_GET_ATTR_NAME(p_attr_cur), p_attr_cur->id); - } - } - } - - /* ...................................................................... */ - *pp_list = p_ctx->p_attr_table; - *p_num_attr = p_ctx->num_attrs ; - return PD_SUCCESS; -} - -#ifndef CONFIG_MICRO -int sdvo_set_tv_settings(void *p_context, i2c_reg_t tv_format) -{ - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - - unsigned char chron_tv_code; - - PD_DEBUG("sdvo: sdvo_set_tv_settings: tv_format [0x%x]\n",tv_format); - - - if ((tv_format == 0xFF) || (p_ctx->out_type.flags & BIT(2)) ){ - chron_tv_code = tv_format; /*HDTV or SDTV and composite type*/ - } else { - chron_tv_code = tv_format | 0x01; /*include s-video and everything else*/ - } - - PD_DEBUG("sdvo: sdvo_set_tv_settings: chron_tv_code [0x%x]\n",chron_tv_code); - - return sdvo_set_tv_optimal_settings(p_ctx,chron_tv_code); - -} -#endif - -/* ============================================================================ - Function : sdvo_set_attributes is called to modify one or more display - attributes - - Parameters : p_context: Pointer to port driver allocated context structure - num : Number of attributes - p_list : List of attributes - - Remarks : sdvo_set_attributes scans the attribute list to find the ones - that are to be modified by checking flags field in each - attribute for PD_ATTR_FLAG_VALUE_CHANGED bit. If this bit is - set it will call SDVO interface functions to set the new - value for the attribute. - - Returns : PD_SUCCESS On Success - PD_ERR_xxx On Failure - ------------------------------------------------------------------------- */ -int sdvo_set_attributes(void *p_context, unsigned long num_attrs, - pd_attr_t *p_list) -{ - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - sdvo_status_t status; - unsigned long i; - static unsigned char set_tvformat = 1; - unsigned short tvformat = 1; /* Index 1 is for NTSC */ - - PD_DEBUG("sdvo: sdvo_set_attributes(): num_attrs=%ld", num_attrs); - /* Search for PD_ATTR_ID_DISPLAY in the incoming attribute table, if it */ - /* present and if sDVO supports > 1 displays use it to set TargetOutput */ - for (i = 0; i < num_attrs; i++) { - if ((p_list[i].flags & PD_ATTR_FLAG_VALUE_CHANGED) == 0) { - continue; - } - - /* overwrite the connected display with requested display */ - if (p_list[i].id == PD_ATTR_ID_DISPLAY) - - { - - p_ctx->out_type.flags = (unsigned short)p_list[i].current_value; - - PD_DEBUG("sdvo: Success ! sdvo_set_attributes: " - "attr='%s', id=%ld, current_value=%ld", - SDVO_GET_ATTR_NAME((&p_list[i])), p_list[i].id, - p_list[i].current_value); - /* Clear attribute changed flag */ - p_list[i].flags &= ~PD_ATTR_FLAG_VALUE_CHANGED; - break; - } - } - - /* ...................................................................... */ - status = sdvo_set_target_output(p_ctx, p_ctx->out_type); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_set_attributes: sdvo_set_target_output()" - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - /* Here will try to get the supported power states again. For multiple - * displays functionality card, the supported power state will only can get - * succesfully after the output display type been seted. - */ - status = sdvo_get_supported_power_states(p_ctx, &p_ctx->supp_pwr_states); - - /* ...................................................................... */ - /* Create attribute table if not already created */ - if (p_ctx->p_attr_table == NULL) { - sdvo_init_attribute_table(p_ctx); - } - - for (i = 0; i < num_attrs; i++) { - pd_attr_t *p_attr; - unsigned long new_value; - - if ((p_list[i].flags & PD_ATTR_FLAG_VALUE_CHANGED) == 0) { - continue; - } - - /* Special handling for TVFormat in vbios */ - if (p_list[i].id == PD_ATTR_ID_TVFORMAT) { - set_tvformat = 1; - tvformat = (unsigned short) p_list[i].current_value; - } - - /* Clear attribute changed flag */ - p_list[i].flags &= ~PD_ATTR_FLAG_VALUE_CHANGED; - - new_value = p_list[i].current_value; - - p_attr = pd_get_attr(p_ctx->p_attr_table, p_ctx->num_attrs, - p_list[i].id, 0); - if (p_attr == NULL) { - PD_DEBUG("sdvo: Error ! pd_get_attr() failed for attr " - "id=%ld", p_list[i].id); - continue; - } - - /* .................................................................. */ - if(!(p_attr->flags & PD_ATTR_FLAG_DYNAMIC)) { - status = sdvo_alter_static_attr(p_ctx, p_attr, new_value); - } else { - if ((p_attr->id >= PD_ATTR_ID_FP_PWR_T1) && - (p_attr->id <= PD_ATTR_ID_FP_PWR_T5)) { - status = sdvo_alter_panel_pwr_seq_attr(p_ctx, - (pd_range_attr_t *)p_attr, new_value); - } else if (p_attr->type == PD_ATTR_TYPE_RANGE) { - status = sdvo_alter_range_attr(p_ctx, (pd_range_attr_t *)p_attr, - new_value); - if (p_attr->id == PD_ATTR_ID_VERT_OVERSCAN) { - p_attr->flags |= PD_ATTR_FLAG_SETMODE; - } - } else if (p_attr->type == PD_ATTR_TYPE_BOOL) { - status = sdvo_alter_bool_attr(p_ctx, (pd_bool_attr_t *)p_attr, - new_value); - } else if (p_attr->type == PD_ATTR_TYPE_LIST) { - status = sdvo_alter_list_attr(p_ctx, (pd_list_attr_t *)p_attr, - new_value); - if (p_attr->id == PD_ATTR_ID_TVFORMAT) { - p_attr->flags |= PD_ATTR_FLAG_SETMODE; - } - /* Note: Incoming attribute list may or maynot have the - * list entries, so don't skip. - i += ((pd_list_attr_t *)p_attr)->num_entries; - p_attr += ((pd_list_attr_t *)p_attr)->num_entries; */ - - } else if (p_attr->type == PD_ATTR_TYPE_LIST_ENTRY) { - /* Skip the list entries */ - } else { - PD_ERROR("sdvo: Error ! sdvo_set_attributes: " - "Unknown attr='%s', id=%ld, type=%ld", - SDVO_GET_ATTR_NAME(p_attr), p_attr->id, p_attr->type); - status = SS_UNSUCCESSFUL; - } - } - - /* .................................................................. */ - if (status == SS_SUCCESS) { - p_attr->current_value = new_value; - PD_DEBUG("sdvo: Success ! sdvo_set_attributes: " - "attr='%s', id=%ld, current_value=%ld", - SDVO_GET_ATTR_NAME(p_attr), p_attr->id, p_attr->current_value); - - } else { - PD_ERROR("sdvo: Error ! sdvo_set_attributes: Failed to set " - "attr='%s', id=%ld", SDVO_GET_ATTR_NAME(p_attr), p_attr->id); - } - } - -#ifdef CONFIG_MICRO - if ((p_ctx->out_type.flags & TV_DISP_MASK) && set_tvformat) { - unsigned char params[8] = {0,0,0,0,0,0,0,0}; - /* Special handling of TVFormat attribute in VBIOS, because - * it wasn't enabled in the list attributes. */ - /* TVFormat Byte Byte - * Number Value - * -------- ------ ----- - * 1 0 0x01 - * 2 0 0x02 - * 3 0 0x04 - * 4 0 0x08 - * 5 0 0x10 - * 6 0 0x20 - * 7 0 0x40 - * 8 0 0x80 - * 9 1 0x01 - * 10 1 0x02 - * 11 1 0x04 - * 12 1 0x08 - * 13 1 0x10 - * ... - * - * 40 4 0x80 - * 41 5 0x01 - * 42 5 0x02 - * 43 5 0x04 - * 44 5 0x08 - * 45 5 0x10 - */ - tvformat %= 46; /* TVformat <= 45 */ - params[tvformat/8] = 1<<((tvformat%8)-1); - status = sdvo_execute_command(p_ctx, SET_TV_OUTPUT_FORMAT, 8, - params, 0, NULL); - PD_DEBUG("sdvo_set_attributes(): Set TVFormat = %u:" - "params=0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x status=%u", - tvformat, - params[0], params[1], params[2], - params[3], params[4], params[5], - params[6], params[7], status); - set_tvformat = 0; - } -#endif - return PD_SUCCESS; -} - - -/* ============================================================================ - Function : sdvo_set_power is called to change the power state of the - device - - Parameters : p_context: Pointer to port driver allocated context structure - state : New power state - - Remarks : - - Returns : PD_SUCCESS On Success - PD_ERR_xxx On Failure - ------------------------------------------------------------------------- */ -int sdvo_set_power(void *p_context, unsigned long state) -{ - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - sdvo_output_flags_t active_outputs; - sdvo_status_t status = SS_SUCCESS; - unsigned short power_state; - - PD_DEBUG("sdvo: sdvo_set_power(): requested state=%#lx", state); - - /* Bits 7-4 in supp_pwr_states are display power states: - * Find next supported low power state if requested state isn't - * supported. */ - power_state = 0x1 << state; - for (;power_state<=0x8; power_state<<=1) { - if ((p_ctx->supp_pwr_states>>4) & power_state) { - break; - } - } - - /* Set display power state if it is a supported power state */ - if (power_state <= 0x80) { - status = sdvo_set_display_power_state(p_ctx, (i2c_reg_t) power_state); - PD_DEBUG("sdvo: sdvo_set_power: " - "display_power_state = %#x status = %d", - (i2c_reg_t)power_state, status); - } else { - PD_DEBUG("sdvo: sdvo_set_power: No supported display power state"); - } - - /* Bits 3-0 in supp_pwr_states are device power states: - * Find next supported low power state if requested state isn't - * supported. */ - power_state = 0x1 << state; - for (;power_state<=0x8; power_state<<=1) { - if (p_ctx->supp_pwr_states & power_state) { - break; - } - } - - /* To avoid LCD flickering avoid setting the current state */ - if (sdvo_get_power_state(p_ctx, &p_ctx->device_pwr_state) == SS_SUCCESS) { - if ((p_ctx->device_pwr_state & 0x0f) == power_state) { - PD_DEBUG("sdvo: sdvo_set_power: Device is already" - "in %u power state", power_state); - return PD_SUCCESS; - } - } - - - /* Disable the output if status is not POWER ON */ - if (state != PD_POWER_MODE_D0) { - status = sdvo_get_active_outputs(p_ctx, &active_outputs); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_set_power: " - "sdvo_get_active_outputs() failed with status=%d", - status); - } else { - active_outputs.flags = active_outputs.flags & - (~p_ctx->out_type.flags); - status = sdvo_set_active_outputs(p_ctx, active_outputs); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error ! sdvo_set_power: " - "sdvo_set_active_outputs() failed with status=%d", - status); - } - /* Wait for panel power down sequence to complete */ - pd_usleep((unsigned long)(p_ctx->t3+p_ctx->t4+p_ctx->t5)*1000 + 10); - } - } - - /* Set device power state if it is a supported power state */ - if (power_state <= 0x8) { - status = sdvo_set_power_state(p_ctx, (i2c_reg_t)power_state); - PD_DEBUG("sdvo: sdvo_set_power: " - "device_power_state = %#x status = %d", - (i2c_reg_t)power_state, status); - if (status == SS_SUCCESS || status == SS_POWER_ON_STATE) { - p_ctx->device_pwr_state = (unsigned char) power_state; - } - } else { - PD_DEBUG("sdvo: sdvo_set_power: No supported device power state"); - } - -#ifdef DEBUG - { - unsigned char pstate; - status = sdvo_get_power_state(p_ctx, &pstate); - PD_DEBUG("sdvo: sdvo_set_power: new sdvo pwr_state=%#x", power_state); - } -#endif - return PD_SUCCESS; -} - - -/* ============================================================================ - Function : sdvo_get_power is called to get the current power state - - Parameters : p_context: Pointer to port driver allocated context structure - p_state : Returns the current power state - - Remarks : - - Returns : PD_SUCCESS On Success - PD_ERR_xxx On Failure - ------------------------------------------------------------------------- */ -int sdvo_get_power(void *p_context, unsigned long *p_state) -{ - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - sdvo_status_t status; - unsigned char power_state; - - PD_DEBUG("sdvo: sdvo_get_power()"); - - status = sdvo_get_power_state(p_ctx, &power_state); - if (status != SS_SUCCESS) { - PD_ERROR("sdvo: Error! sdvo_get_power_state() failed with status=%d", - status); - } - - /* ...................................................................... */ - PD_DEBUG("sdvo: Current Power state=%#x", power_state); - - /* - * power_state has both the display and the encoder power state. - * The display state is in the upper nybble and the encoder state - * is in the lower nybble. Currently we only care about the - * encoder state so mask off the upper mybble. - */ - switch ((power_state & 0x0f)) { - case 0x1: /* Bit 0 */ - *p_state = PD_POWER_MODE_D0; - break; - case 0x2: /* Bit 1 */ - *p_state = PD_POWER_MODE_D1; - break; - case 0x4: /* Bit 2 */ - *p_state = PD_POWER_MODE_D2; - break; - case 0x8: /* Bit 3 */ - default: - *p_state = PD_POWER_MODE_D3; - break; - } - - return PD_SUCCESS; -} - - -/* ============================================================================ - Function : sdvo_save is called to save the default state of registers - - Parameters : p_context: Pointer to port driver allocated context structure - pp_state : Returs a pointer to list of SDVO registers - terminated with PD_REG_LIST_END. - flags : Not used - - Remarks : sdvo_save does not save any registers. - - Returns : PD_SUCCESS - ------------------------------------------------------------------------- */ -int sdvo_save(void *p_context, void **pp_state, unsigned long flags) -{ -#ifndef CONFIG_MICRO - sdvo_device_context_t *pd_context = (sdvo_device_context_t *)p_context; - sdvo_state_t *reg_state; - int ret, status; - sdvo_dtd_t p_dtd; - - PD_DEBUG("sdvo: sdvo_save()"); - /* Allocate memory to save the current regs */ - reg_state = (sdvo_state_t *) pd_malloc(sizeof(sdvo_state_t)); - if (!reg_state) { - return (PD_ERR_NOMEM); - } - pd_memset(reg_state, 0, sizeof(sdvo_state_t)); - - /* Save the current state */ - ret = sdvo_get_power(pd_context, &(reg_state->power_state)); - if (ret) { - pd_free(reg_state); - return ret; - } - - /* Save current timings */ - ret = sdvo_set_power(p_context, PD_POWER_MODE_D0); - if ((status = sdvo_get_input_timings(pd_context, &p_dtd)) != SS_SUCCESS) { - if (status != SS_SUCCESS) { - /* Standard VGA mode 3+ timings */ - p_dtd.pixel_clock = 2832; - p_dtd.horz_active = 720; - p_dtd.horz_blanking = 162; - p_dtd.vert_active = 400; - p_dtd.vert_blanking = 35; - p_dtd.horz_sync_offset = 45; - p_dtd.horz_sync_pulse_width = 108; - p_dtd.vert_sync_offset = 12; - p_dtd.vert_sync_pulse_width = 2; - p_dtd.dtd_flags = 0x1c; - p_dtd.sdvo_flags = 0; - PD_ERROR("sdvo: Failed to save current timings - command not " - "supported."); - PD_ERROR("sdvo: Standard 720x400 VGA timings will be used."); - } - } - sdvo_convert_dtd_to_pd_timing(&p_dtd, &(reg_state->timing)); - - *pp_state = (void *)reg_state; - - /* restore power state, just in case */ - ret = sdvo_set_power(pd_context, reg_state->power_state); -#endif - return PD_SUCCESS; -} - - -/* ============================================================================ - Function : sdvo_restore is called to restore the registers which were - save previously via a call to sdvo_save - - Parameters : p_context: Pointer to port driver allocated context structure - p_state : List of SDVO registers - flags : Not used - - Remarks : - - Returns : PD_SUCCESS - ------------------------------------------------------------------------- */ -int sdvo_restore(void *p_context, void *p_state, unsigned long flags) -{ -#ifndef CONFIG_MICRO - sdvo_device_context_t *pd_context = (sdvo_device_context_t *)p_context; - sdvo_state_t *reg_state = (sdvo_state_t *)p_state; - pd_attr_t attr_tmp; - int ret; - unsigned long i; - /*i2c_reg_t reg;*/ - - - - PD_DEBUG("sdvo: sdvo_restore()"); - if (!reg_state) { - PD_ERROR("restore got a NULL saved state."); - return PD_ERR_NULL_STATE; - } - - sdvo_reset(p_context); /* Reset the sdvo device to known state for good - * start. */ - /* Add the code to process the CH7022 card */ - if ((pd_context->dev_cap.vendor_id == 0x02) && - ((pd_context->dev_cap.device_id == 0xc2) || - (pd_context->dev_cap.device_id == 0x42)) && - ((pd_context->p_attr_table[0].current_value == 0x04) || - (pd_context->p_attr_table[0].current_value == 0x08))) { - ret = sdvo_set_target_input(p_context, pd_context->inp_dev); - ret = sdvo_set_target_output(p_context, pd_context->out_type); - ret = sdvo_set_power(p_context, PD_POWER_MODE_D0); - ret = sdvo_set_power(p_context, PD_POWER_MODE_D3); - - /* CH7021: Initialize H/V Overscan */ - if (pd_context->out_type.flags & TV_DISP_MASK) { - sdvo_write_i2c_reg(p_context, 0x38, 0x1F); - sdvo_write_i2c_reg(p_context, 0x39, 0x1F); - } - } else { - /* - * 0X5Acircuitry enable register for 7308 - * BIT0=1 triggers power up sequence - * BIT0=0 triggers power down sequence - * BIT3=1 enable bit for circuitry access - */ - /* removing this as this seems to cause screen corruption after killx */ - /*if ((pd_context->dev_cap.vendor_id == 2) && (pd_context->dev_cap.device_id == 0x41)){ - sdvo_read_i2c_reg(pd_context, 0x5A, ®); - reg |= 9; - sdvo_write_i2c_reg(pd_context, 0x5A, reg); - }*/ -#endif - /* Restore the saved mode */ - ret = sdvo_set_power(p_context, PD_POWER_MODE_D0); - reg_state->timing.refresh = 70; /* Is refresh needed? */ - sdvo_set_mode(p_context, &(reg_state->timing), 0); - sdvo_post_set_mode(p_context, &(reg_state->timing), 0); - if (!(flags & PD_NO_RESTORE_FREE_STATE)) { - /* Restore the power state */ - ret = sdvo_set_power(p_context, reg_state->power_state); - if (ret) { - return ret; - } - } - } - - /* restore the sdvo attributes. */ - /* The below should be sufficient for general sdvo + ch7308 */ - /* TODO, add more attributes as neccessary for other cards */ - for(i=0;i<pd_context->num_attrs;i++) { - switch (pd_context->p_attr_table[i].id) { - case PD_ATTR_ID_2_CHANNEL_PANEL: - case PD_ATTR_ID_LVDS_PANEL_TYPE: - case PD_ATTR_ID_DITHER: - case PD_ATTR_ID_PANEL_PROTECT_HSYNC: - case PD_ATTR_ID_PANEL_PROTECT_VSYNC: - case PD_ATTR_ID_TEXT_TUNING: - case PD_ATTR_ID_PANEL_DEPTH: - case PD_ATTR_ID_SSC: - case PD_ATTR_ID_DISPLAY: - case PD_ATTR_ID_FP_PWR_T1: - case PD_ATTR_ID_FP_PWR_T2: - case PD_ATTR_ID_FP_PWR_T3: - case PD_ATTR_ID_FP_PWR_T4: - case PD_ATTR_ID_FP_PWR_T5: - pd_context->p_attr_table[i].flags |= PD_ATTR_FLAG_VALUE_CHANGED; - sdvo_set_attributes(p_context, 1, &pd_context->p_attr_table[i]); - break; - - /* TV format is a list attribute, need to alter in different way */ - case PD_ATTR_ID_TVFORMAT: - if (pd_context->p_attr_table[i].type == PD_ATTR_TYPE_LIST) { - pd_memcpy(&attr_tmp, &pd_context->p_attr_table[i], - sizeof(pd_attr_t)); - attr_tmp.flags |= PD_ATTR_FLAG_VALUE_CHANGED; - sdvo_set_attributes(p_context, 1, &attr_tmp); - } - default: - break; - } - } - - pd_free(p_state); - return PD_SUCCESS; -} - - -/* ============================================================================ - Function : sdvo_validate - - Parameters : cookie - - Remarks : sdvo_Valite returns the cookie it received as an argument - - Returns : cookie - ------------------------------------------------------------------------- */ -unsigned long sdvo_validate(unsigned long cookie) -{ - PD_DEBUG("sdvo: sdvo_validate()"); - return cookie; -} - - -/* ============================================================================ - Function : sdvo_close is the last function to be called in the port - driver - - Parameters : p_context: Pointer to port driver allocated context structure - - Remarks : - - Returns : PD_SUCCESS - ------------------------------------------------------------------------- */ -int sdvo_close(void *p_context) -{ -#ifndef CONFIG_MICRO - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - /* Shutdown device if it is tv to avoid flickering */ - if (p_ctx->out_type.flags & TV_DISP_MASK) { - sdvo_set_power(p_context, PD_POWER_MODE_D3); - } - PD_DEBUG("sdvo: sdvo_close()"); - - if (p_ctx->p_attr_table != NULL) { - - pd_free(p_ctx->p_attr_table); - p_ctx->p_attr_table = NULL; - p_ctx->num_attrs = 0; - } - - if (p_ctx->p_mode_table) { - pd_free(p_ctx->p_mode_table); - } - pd_free(p_ctx); -#endif - return PD_SUCCESS; -} - - -/* ============================================================================ - Function : sdvo_get_port_status is called to get the status of the - display - - Parameters : p_context: Pointer to port driver allocated context structure - port_status : Returns display type and connection state - - Returns : PD_SUCCESS or PD_ERR_XXX - ------------------------------------------------------------------------- */ -int sdvo_get_port_status(void *p_context, pd_port_status_t *port_status) -{ - sdvo_device_context_t *p_ctx = (sdvo_device_context_t *)p_context; - sdvo_output_flags_t out_flags; - sdvo_display_output_t disp_out; - sdvo_status_t status; - unsigned long pwr_state; - - port_status->display_type = 0; - port_status->connected = PD_DISP_STATUS_UNKNOWN; - - - /* Save the current power state and turn on the port device's power - * so we can query it - */ - sdvo_get_power(p_context, &pwr_state); - sdvo_set_power(p_context, PD_POWER_MODE_D0); - - status = sdvo_get_attached_displays(p_ctx, &out_flags); - - sdvo_set_power(p_context, pwr_state); - - if (status != SS_SUCCESS) { - /* TODO: Certain SDVO cards (CH7022) would return SS_PENDING. Need to - * Identify correct setting so the card behaves correctly. For now - * we would fallback to out_type kept in the context. - */ - if(status == SS_PENDING){ - out_flags.flags = p_ctx->out_type.flags; - }else{ - PD_ERROR("sdvo: Error ! sdvo_get_port_status: " - "sdvo_get_attached_displays() failed with status=%d", status); - return PD_ERR_INTERNAL; - } - } - - if (p_ctx->inp_dev == SDVO0) { - disp_out = out_flags.out0; - } else { - disp_out = out_flags.out1; - } - - port_status->connected = PD_DISP_STATUS_ATTACHED; - - if (disp_out.tmds) { - status = SDVO_IS_HDMI_SUPPORTED(p_ctx); - if (status == SS_SUCCESS) { - PD_DEBUG("sdvo: HDMI transmiter "); - g_sdvo_drv.type = PD_DISPLAY_HDMI_EXT; - port_status->display_type = PD_DISPLAY_HDMI_EXT; - } else{ - g_sdvo_drv.type = PD_DISPLAY_FP; - port_status->display_type = PD_DISPLAY_FP; - } - } else if (disp_out.lvds) { - port_status->display_type = PD_DISPLAY_LVDS_EXT; - } else if (disp_out.rgb) { - port_status->display_type = PD_DISPLAY_CRT_EXT; - } else if (disp_out.drgb) { - port_status->display_type = PD_DISPLAY_DRGB; - } else if (disp_out.cvbs || disp_out.scart || - disp_out.svid || disp_out.yprpb) { - port_status->display_type = PD_DISPLAY_TVOUT; - } else { - port_status->connected = PD_DISP_STATUS_DETACHED; - } - return PD_SUCCESS; -} - -char *sdvo_get_output_type(sdvo_display_output_t out, unsigned char byte) -{ - static char buff[40] = ""; - int indx = 0; - - if (out.tmds) { - - pd_strcpy(&buff[indx], " tmds"); - indx += 5; - } - - if (out.rgb) { - - pd_strcpy(&buff[indx], " rgb"); - indx += 4; - } - - if (out.cvbs) { - - pd_strcpy(&buff[indx], " cvbs"); - indx += 5; - } - - if (out.svid) { - - pd_strcpy(&buff[indx], " svid"); - indx += 5; - } - - if (out.yprpb) { - - pd_strcpy(&buff[indx], " yprpb"); - indx += 6; - } - - if (out.scart) { - - pd_strcpy(&buff[indx], " scart"); - indx += 6; - } - - if (out.lvds) { - - pd_strcpy(&buff[indx], " lvds"); - indx += 5; - } - - /* DRGB defined in byte0 of SDVOOutputFlagStructure */ - if (byte == 0 && out.drgb) { - pd_strcpy(&buff[indx], " drgb"); - indx += 5; - } - - if (indx == 0) { - - pd_strcpy(buff, " None"); - } - - return buff; -} - - -/* ============================================================================ - Function : sdvo_convert_pd_timing_to_dtd - - Parameters : - - Remarks : - - Returns : - ------------------------------------------------------------------------- */ -void sdvo_convert_pd_timing_to_dtd(pd_timing_t *p_mode, sdvo_dtd_t *p_dtd, - unsigned long dclk) -{ - pd_memset(p_dtd, 0, sizeof(sdvo_dtd_t)); - - p_dtd->pixel_clock = (unsigned short)(dclk / 10); - - p_dtd->horz_active = p_mode->width; - p_dtd->horz_blanking = p_mode->hblank_end - p_mode->hblank_start; - p_dtd->horz_sync_offset = p_mode->hsync_start - p_mode->width + 1; - p_dtd->horz_sync_pulse_width= p_mode->hsync_end - p_mode->hsync_start; - - p_dtd->vert_active = p_mode->height; - p_dtd->vert_blanking = p_mode->vblank_end - p_mode->vblank_start; - p_dtd->vert_sync_offset = p_mode->vsync_start - p_mode->height + 1; - p_dtd->vert_sync_pulse_width= p_mode->vsync_end - p_mode->vsync_start; - - /* ...................................................................... */ - p_dtd->dtd_flags = (BIT(4) | BIT(3)); /* Digital Seperate */ - - if (p_mode->mode_info_flags & PD_SCAN_INTERLACE) { - - p_dtd->dtd_flags |= BIT(7); - } - - if (p_mode->mode_info_flags & PD_HSYNC_HIGH) { /* HSync + */ - - p_dtd->dtd_flags |= BIT(1); - } - - if (p_mode->mode_info_flags & PD_VSYNC_HIGH) { /* VSync + */ - - p_dtd->dtd_flags |= BIT(2); - } - - /* .................................................................... */ - p_dtd->sdvo_flags = 0; -} - - -/* ============================================================================ - Function : sdvo_convert_dtd_to_pd_timing - - Parameters : - - Remarks : - - Returns : - ------------------------------------------------------------------------- */ -void sdvo_convert_dtd_to_pd_timing(sdvo_dtd_t *p_dtd, pd_timing_t *p_mode) -{ - pd_memset(p_mode, 0, sizeof(pd_timing_t)); - - p_mode->dclk = p_dtd->pixel_clock * 10L; - - p_mode->width = p_dtd->horz_active; - p_mode->hsync_start = p_dtd->horz_sync_offset + p_dtd->horz_active - 1; - p_mode->hsync_end = p_dtd->horz_sync_pulse_width + p_mode->hsync_start; - p_mode->hblank_start= p_dtd->horz_active - 1; - p_mode->hblank_end = p_dtd->horz_blanking + p_mode->hblank_start; - p_mode->htotal = p_dtd->horz_active + p_dtd->horz_blanking - 1; - - p_mode->height = p_dtd->vert_active; - p_mode->vsync_start = p_dtd->vert_sync_offset + p_dtd->vert_active - 1; - p_mode->vsync_end = p_dtd->vert_sync_pulse_width + p_mode->vsync_start; - p_mode->vblank_start= p_dtd->vert_active - 1; - p_mode->vblank_end = p_dtd->vert_blanking + p_mode->vblank_start; - p_mode->vtotal = p_dtd->vert_active + p_dtd->vert_blanking - 1; - - /* .................................................................... */ - if (p_dtd->dtd_flags & BIT(7)) { - p_mode->mode_info_flags |= PD_SCAN_INTERLACE; - } - - if (p_dtd->dtd_flags & BIT(1)) { - p_mode->mode_info_flags |= PD_HSYNC_HIGH; - } - - if (p_dtd->dtd_flags & BIT(2)) { - p_mode->mode_info_flags |= PD_VSYNC_HIGH; - } -} - -/* ============================================================================ - Function : sdvo_init_attribute_table - - Parameters : p_ctx - - Remarks : - - Returns : PD_SUCCESS or PD_ERR_XXX - ------------------------------------------------------------------------- */ -int sdvo_init_attribute_table(sdvo_device_context_t *p_ctx) -{ - unsigned long num_attrs, num_static_attrs, num_pwr_seq_attrs; - unsigned long num_range_attrs, num_bool_attrs, num_list_attrs; - unsigned char *p_table; - sdvo_status_t status; - - /* .................................................................. */ - status = sdvo_set_target_input(p_ctx, p_ctx->inp_dev); - if (status != SS_SUCCESS) { - - PD_ERROR("sdvo: Error ! sdvo_init_attribute_table: sdvo_set_target_input()" - "failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - status = sdvo_set_target_output(p_ctx, p_ctx->out_type); - if (status != SS_SUCCESS) { - - PD_ERROR("sdvo: Error ! sdvo_init_attribute_table:" - "sdvo_set_target_output()failed with status=%d", status); - return PD_ERR_INTERNAL; - } - - - /* .................................................................. */ - /* Get the number of available attributes from the SDVO interface */ - num_static_attrs = sdvo_get_static_attrs(p_ctx, NULL); - num_pwr_seq_attrs = sdvo_get_panel_pwr_seq_attrs(p_ctx, NULL); - num_range_attrs = sdvo_get_range_attrs(p_ctx, NULL); - num_bool_attrs = sdvo_get_bool_attrs(p_ctx, NULL); - num_list_attrs = sdvo_get_list_attrs(p_ctx, NULL); - p_ctx->num_attrs = num_static_attrs + num_pwr_seq_attrs + - num_range_attrs + num_bool_attrs + num_list_attrs; - - if (p_ctx->num_attrs == 0) { - - PD_ERROR("sdvo: Warning ! sdvo_init_attribute_table: " - "No attributes found"); - - return PD_SUCCESS; - } - - /* .................................................................. */ - /* Allocate memory to save all available port attributes. */ - /* Allocate space for extra attribute so Query_Attr function can be */ - /* called using that space for the last+1 attribute. */ - /* Query and save all the available attributes. */ - p_ctx->p_attr_table = pd_malloc((p_ctx->num_attrs + 1) * sizeof(pd_attr_t)); - if (p_ctx->p_attr_table == NULL) { - - PD_ERROR("sdvo: Error ! sdvo_init_attribute_table: " - "pd_malloc(p_attr_table) failed"); - - p_ctx->num_attrs = 0; - return PD_ERR_NOMEM; - } - - pd_memset(p_ctx->p_attr_table, 0, (p_ctx->num_attrs + 1) * - sizeof(pd_attr_t)); - - p_table = (unsigned char *)p_ctx->p_attr_table; - - /* .................................................................. */ - if (num_static_attrs > 0) { - - num_attrs = sdvo_get_static_attrs(p_ctx, (pd_attr_t *)p_table); - if (num_attrs != num_static_attrs) { - - PD_ERROR("sdvo: Error ! sdvo_init_attribute_table: " - "sdvo_get_static_attrs() returned %ld entries, expected %ld", - num_attrs, num_static_attrs); - - } else { - - p_table += (num_static_attrs * sizeof(pd_attr_t)); - } - } - - if (num_pwr_seq_attrs > 0) { - - num_attrs = sdvo_get_panel_pwr_seq_attrs(p_ctx, - (pd_range_attr_t *)p_table); - if (num_attrs != num_pwr_seq_attrs) { - - PD_ERROR("sdvo: Error ! sdvo_init_attribute_table: " - "sdvo_get_panel_pwr_seq_attrs() returned %ld entries," - " expected %ld", num_attrs, num_pwr_seq_attrs); - - } else { - - p_table += (num_pwr_seq_attrs * sizeof(pd_attr_t)); - } - } - - if (num_range_attrs > 0) { - - num_attrs = sdvo_get_range_attrs(p_ctx, (pd_range_attr_t *)p_table); - if (num_attrs != num_range_attrs) { - - PD_ERROR("sdvo: Error ! sdvo_init_attribute_table: " - "sdvo_get_range_attrs() returned %ld entries," - " expected %ld", num_attrs, num_range_attrs); - - } else { - - p_table += (num_range_attrs * sizeof(pd_attr_t)); - } - } - - if (num_bool_attrs > 0) { - - num_attrs = sdvo_get_bool_attrs(p_ctx, (pd_bool_attr_t *)p_table); - if (num_attrs != num_bool_attrs) { - - PD_ERROR("sdvo: Error ! sdvo_init_attribute_table: " - "sdvo_get_bool_attrs() returned %ld entries, expected %ld", - num_attrs, num_bool_attrs); - - } else { - - p_table += (num_bool_attrs * sizeof(pd_attr_t)); - } - } - - if (num_list_attrs > 0) { - - num_attrs = sdvo_get_list_attrs(p_ctx, (pd_list_attr_t *)p_table); - if (num_attrs != num_list_attrs) { - - PD_ERROR("sdvo: Error ! sdvo_init_attribute_table: " - "sdvo_get_list_attrs() returned %ld entries, expected %ld", - num_attrs, num_list_attrs); - } else { - - p_table += (num_list_attrs * sizeof(pd_attr_t)); - } - } - return PD_SUCCESS; -} - -int sdvo_is_multi_display_device(sdvo_device_context_t *p_ctx) -{ - unsigned short i; - int b_multi_display = 0; - - for (i = 0; i < 16; i++) { - if (p_ctx->dev_cap.output.flags & (1 << i)) { - if (!b_multi_display) { - b_multi_display = 1; - } else { - return TRUE; - } - } - } - return 0; -} - -/*---------------------------------------------------------------------------- - * File Revision History - * $Id: sdvo_port.c,v 1.12 2010/07/23 16:54:50 bpaauwe Exp $ - * $Source: /nfs/fm/proj/eia/cvsroot/koheo/linux/egd_drm/emgd/pal/sdvo/sdvo_port.c,v $ - *---------------------------------------------------------------------------- - */ |