1450N/A * Copyright (c) 2006, 2013, Oracle and/or its affiliates. All rights reserved. 1450N/A * Copyright (c) 2006-2013 Intel Corporation 1450N/A * Jesse Barnes <jesse.barnes@intel.com> 1450N/A * Permission is hereby granted, free of charge, to any person obtaining a 1450N/A * copy of this software and associated documentation files (the "Software"), 1450N/A * to deal in the Software without restriction, including without limitation 1450N/A * the rights to use, copy, modify, merge, publish, distribute, sublicense, 1450N/A * and/or sell copies of the Software, and to permit persons to whom the 1450N/A * Software is furnished to do so, subject to the following conditions: 1450N/A * The above copyright notice and this permission notice (including the next 1450N/A * paragraph) shall be included in all copies or substantial portions of the 1450N/A * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1450N/A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1450N/A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1450N/A * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 1450N/A * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 1450N/A * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 1450N/A * DEALINGS IN THE SOFTWARE. 1450N/A * Eric Anholt <eric@anholt.net> 1450N/A * Integrated TV-out support for the 915GM and 945GM. 1450N/A/** Private structure for the integrated TV support */ 1450N/A 0xB1403000,
0x2E203500,
0x35002E20,
0x3000B140,
1450N/A 0x35A0B160,
0x2DC02E80,
0xB1403480,
0xB1603000,
1450N/A 0x2EA03640,
0x34002D80,
0x3000B120,
0x36E0B160,
1450N/A 0x2D202EF0,
0xB1203380,
0xB1603000,
0x2F303780,
1450N/A 0x33002CC0,
0x3000B100,
0x3820B160,
0x2C802F50,
1450N/A 0xB10032A0,
0xB1603000,
0x2F9038C0,
0x32202C20,
1450N/A 0x3000B0E0,
0x3980B160,
0x2BC02FC0,
0xB0E031C0,
1450N/A 0xB1603000,
0x2FF03A20,
0x31602B60,
0xB020B0C0,
1450N/A 0x3AE0B160,
0x2B001810,
0xB0C03120,
0xB140B020,
1450N/A 0x18283BA0,
0x30C02A80,
0xB020B0A0,
0x3C60B140,
1450N/A 0x2A201838,
0xB0A03080,
0xB120B020,
0x18383D20,
1450N/A 0x304029C0,
0xB040B080,
0x3DE0B100,
0x29601848,
1450N/A 0xB0803000,
0xB100B040,
0x18483EC0,
0xB0402900,
1450N/A 0xB040B060,
0x3F80B0C0,
0x28801858,
0xB060B080,
1450N/A 0xB0A0B060,
0x18602820,
0xB0A02820,
0x0000B060,
1450N/A 0xB1403000,
0x2E203500,
0x35002E20,
0x3000B140,
1450N/A 0x35A0B160,
0x2DC02E80,
0xB1403480,
0xB1603000,
1450N/A 0x2EA03640,
0x34002D80,
0x3000B120,
0x36E0B160,
1450N/A 0x2D202EF0,
0xB1203380,
0xB1603000,
0x2F303780,
1450N/A 0x33002CC0,
0x3000B100,
0x3820B160,
0x2C802F50,
1450N/A 0xB10032A0,
0xB1603000,
0x2F9038C0,
0x32202C20,
1450N/A 0x3000B0E0,
0x3980B160,
0x2BC02FC0,
0xB0E031C0,
1450N/A 0xB1603000,
0x2FF03A20,
0x31602B60,
0xB020B0C0,
1450N/A 0x3AE0B160,
0x2B001810,
0xB0C03120,
0xB140B020,
1450N/A 0x18283BA0,
0x30C02A80,
0xB020B0A0,
0x3C60B140,
1450N/A 0x2A201838,
0xB0A03080,
0xB120B020,
0x18383D20,
1450N/A 0x304029C0,
0xB040B080,
0x3DE0B100,
0x29601848,
1450N/A 0xB0803000,
0xB100B040,
0x18483EC0,
0xB0402900,
1450N/A 0xB040B060,
0x3F80B0C0,
0x28801858,
0xB060B080,
1450N/A 0xB0A0B060,
0x18602820,
0xB0A02820,
0x0000B060,
1450N/A 0x36403000,
0x2D002CC0,
0x30003640,
0x2D0036C0,
1450N/A 0x35C02CC0,
0x37403000,
0x2C802D40,
0x30003540,
1450N/A 0x2D8037C0,
0x34C02C40,
0x38403000,
0x2BC02E00,
1450N/A 0x30003440,
0x2E2038C0,
0x34002B80,
0x39803000,
1450N/A 0x2B402E40,
0x30003380,
0x2E603A00,
0x33402B00,
1450N/A 0x3A803040,
0x2A802EA0,
0x30403300,
0x2EC03B40,
1450N/A 0x32802A40,
0x3C003040,
0x2A002EC0,
0x30803240,
1450N/A 0x2EC03C80,
0x320029C0,
0x3D403080,
0x29402F00,
1450N/A 0x308031C0,
0x2F203DC0,
0x31802900,
0x3E8030C0,
1450N/A 0x28802F40,
0x30C03140,
0x2F203F40,
0x31402840,
1450N/A 0x28003100,
0x28002F00,
0x00003100,
0x36403000,
1450N/A 0x2D002CC0,
0x30003640,
0x2D0036C0,
1450N/A 0x35C02CC0,
0x37403000,
0x2C802D40,
0x30003540,
1450N/A 0x2D8037C0,
0x34C02C40,
0x38403000,
0x2BC02E00,
1450N/A 0x30003440,
0x2E2038C0,
0x34002B80,
0x39803000,
1450N/A 0x2B402E40,
0x30003380,
0x2E603A00,
0x33402B00,
1450N/A 0x3A803040,
0x2A802EA0,
0x30403300,
0x2EC03B40,
1450N/A 0x32802A40,
0x3C003040,
0x2A002EC0,
0x30803240,
1450N/A 0x2EC03C80,
0x320029C0,
0x3D403080,
0x29402F00,
1450N/A 0x308031C0,
0x2F203DC0,
0x31802900,
0x3E8030C0,
1450N/A 0x28802F40,
0x30C03140,
0x2F203F40,
0x31402840,
1450N/A 0x28003100,
0x28002F00,
0x00003100,
1450N/A * Color conversion values have 3 separate fixed point formats: 1450N/A * 1.9 fixed point (b.bbbbbbbbb) 1450N/A * 11 bit fields (ry, by, ru, gu, gv) 1450N/A * exp.mantissa (ee.mmmmmmmmm) 1450N/A * ee = 00 = 10^-1 (0.mmmmmmmmm) 1450N/A * ee = 01 = 10^-2 (0.0mmmmmmmmm) 1450N/A * ee = 10 = 10^-3 (0.00mmmmmmmmm) 1450N/A * ee = 11 = 10^-4 (0.000mmmmmmmmm) 1450N/A * 12 bit fields (gy, rv, bu) 1450N/A * exp.mantissa (eee.mmmmmmmmm) 1450N/A * eee = 000 = 10^-1 (0.mmmmmmmmm) 1450N/A * eee = 001 = 10^-2 (0.0mmmmmmmmm) 1450N/A * eee = 010 = 10^-3 (0.00mmmmmmmmm) 1450N/A * eee = 011 = 10^-4 (0.000mmmmmmmmm) 1450N/A * eee = 111 = 10^0 (m.mmmmmmmm) (only usable for 1.0 representation) 1450N/A * Saturation and contrast are 8 bits, with their own representation: 1450N/A * 8 bit field (saturation, contrast) 1450N/A * ee = 00 = 10^-1 (0.mmmmmm) 1450N/A * Simple conversion function: 1450N/A * for (exp = 0; exp < 3 && f < 0.5; exp++) 1450N/A * mant = (f * (1 << 9) + 0.5); 1450N/A * Behold, magic numbers! If we plant them they might grow a big 1450N/A * s-video cable to the sky... or something. 1450N/A * Pre-converted to appropriate hex value. 1450N/A * PAL & NTSC values for composite & s-video connections 1450N/A * I think this works as follows: 1450N/A * subcarrier freq = pixel_clock * (dda1_inc + dda2_inc / dda2_size) / 4096 1450N/A * Presumably, when dda3 is added in, it gets to adjust the dda2_inc value 1450N/A * dda1_inc = floor (dda1_ideal) 1450N/A * dda2 = dda1_ideal - dda1_inc 1450N/A * then pick a ratio for dda2 that gives the closest approximation. If 1450N/A * you can't get close enough, you can play with dda3 as well. This 1450N/A * seems likely to happen when dda2 is small as the jumps would be larger 1450N/A * pixel_clock = subcarrier * 4096 / (dda1_inc + dda2_inc / dda2_size) 1450N/A * The constants below were all computed using a 107.520MHz clock 1450N/A * Register programming values for TV modes. 1450N/A * These values account for -1s required. 1450N/A /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 3.580MHz */ 1450N/A /* desired 3.5800000 actual 3.5800000 clock 107.52 */ 1450N/A /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 4.43MHz */ 1450N/A /* desired 4.4336180 actual 4.4336180 clock 107.52 */ 1450N/A /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 3.580MHz */ 1450N/A /* desired 3.5800000 actual 3.5800000 clock 107.52 */ 1450N/A /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 3.580MHz */ 1450N/A /* desired 3.5800000 actual 3.5800000 clock 107.52 */ 1450N/A /* 625 Lines, 50 Fields, 15.625KHz line, Sub-Carrier 4.434MHz */ 1450N/A /* desired 4.4336180 actual 4.4336180 clock 107.52 */ 1450N/A /* 625 Lines, 50 Fields, 15.625KHz line, Sub-Carrier 4.434MHz */ 1450N/A /* desired 4.4336180 actual 4.4336180 clock 107.52 */ 1450N/A /* Ensure TV refresh is close to desired refresh */ 1450N/A return;
/* can't happen (mode_prepare prevents this) */ 1450N/A /* Enable two fixes for the chips that need them. */ 1450N/A /* Pipe must be off here */ 1450N/A /* Wait for vblank for the disable to take effect */ 1450N/A /* Wait for vblank for the disable to take effect. */ 1450N/A /* Filter ctl must be set before TV_WIN_SIZE */ 1450N/A * Detects TV presence by checking for load. 1450N/A * Requires that the current pipe's DPLL is active. 1450N/A * \return true if TV is connected. 1450N/A * \return false if TV is disconnected. 1450N/A /* Disable TV interrupts around load detect or we'll recurse */ 1450N/A /* Poll for TV detection */ 1450N/A * The TV sense state should be cleared to zero on cantiga platform. Otherwise 1450N/A * the TV is misdetected. This is hardware requirement. 1450N/A /* For unknown reasons the hw barfs if we don't do this vblank wait. */ 1450N/A /* Restore interrupt config */ 1450N/A * Here we set accurate tv format according to connector type 1450N/A * i.e Component TV should not be assigned by NTSC or PAL 1450N/A * Detect the TV connection. 1450N/A * Currently this always returns CONNECTOR_STATUS_UNKNOWN, as we need to be sure 1450N/A * we have a pipe programmed in order to probe the TV. 1450N/A * Chose preferred mode according to line number of TV format 1450N/A * This should probably return a set of fixed modes, unless we can figure out 1450N/A * how to probe modes off of TV connections. 1450N/A * Enumerate the child dev array parsed from VBT to check whether 1450N/A * the integrated TV is present. 1450N/A * If it is present, return 1. 1450N/A * If it is not present, return false. 1450N/A * If no child dev is parsed from VBT, it assumes that the TV is present. 1450N/A * If the device type is not TV, continue. 1450N/A /* Only when the addin_offset is non-zero, it is regarded 1450N/A /* Even if we have an encoder we may not have a connector */ 1450N/A * Sanity check the TV output by checking to see if the 1450N/A * DAC register holds a value 1450N/A * If the register does not hold the state change enable 1450N/A * bit, (either as a 0 or a 1), assume it doesn't really 1450N/A /* The documentation, for the older chipsets at least, recommend 1450N/A * using a polling method rather than hotplug detection for TVs. 1450N/A * This is because in order to perform the hotplug detection, the PLLs 1450N/A * for the TV must be kept alive increasing power drain and starving 1450N/A * bandwidth from other encoders. Notably for instance, it causes 1450N/A * pipe underruns on Crestline when this encoder is supposedly idle. 1450N/A * More recent chipsets favour HDMI rather than integrated S-Video. 1450N/A /* Create TV properties then attach current values */