3

Update: see comment below, Switching Radeon 3450 tv out mode between component and svideo

I have this card that works in Windows, and in Grub it has color and looks fine, but in xorg I just get black and white from the component (RGB) cables. I have tried changing tv format with xrandr, but no change. I can change the res though.

I suspect maybe its in composite mode instead of component mode. The card has a DVI and a DIN plug, that adapts to svideo or component (rgb)

These are the outputs of some commands:

lspci:

01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RV620 LE [Radeon HD 3450] (prog-if 00 [VGA controller])
    Subsystem: Dell OptiPlex 980
    Flags: bus master, fast devsel, latency 0, IRQ 31
    Memory at e0000000 (64-bit, prefetchable) [size=256M]
    Memory at f7d20000 (64-bit, non-prefetchable) [size=64K]
    I/O ports at e000 [size=256]
    Expansion ROM at 000c0000 [disabled] [size=128K]
    Capabilities: [50] Power Management version 3
    Capabilities: [58] Express Legacy Endpoint, MSI 00
    Capabilities: [a0] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Capabilities: [100] Vendor Specific Information: ID=0001 Rev=1 Len=010 <?>
    Kernel driver in use: radeon
    Kernel modules: radeon

xrandr --verbose:

 Screen 0: minimum 320 x 200, current 1024 x 768, maximum 8192 x 8192
DIN connected primary 1024x768+0+0 (0x55) normal (normal left inverted right x axis y axis) 0mm x 0mm
    Identifier: 0x51
    Timestamp:  29475
    Subpixel:   no subpixels
    Gamma:      1.0:1.0:1.0
    Brightness: 1.0
    Clones:    
    CRTC:       0
    CRTCs:      0 1
    Transform:  1.000000 0.000000 0.000000
                0.000000 1.000000 0.000000
                0.000000 0.000000 1.000000
               filter: 
    _MUTTER_PRESENTATION_OUTPUT: 0 
    tv standard: ntsc 
        supported: ntsc, pal, pal-m, pal-60, ntsc-j, scart-pal, pal-cn, secam
    load detection: 1 
        range: (0, 1)
  1024x768 (0x55) 63.500MHz -HSync +VSync *current
        h: width  1024 start 1072 end 1176 total 1328 skew    0 clock  47.82KHz
        v: height  768 start  771 end  775 total  798           clock  59.92Hz
  800x600 (0x56) 38.250MHz -HSync +VSync
        h: width   800 start  832 end  912 total 1024 skew    0 clock  37.35KHz
        v: height  600 start  603 end  607 total  624           clock  59.86Hz
  848x480 (0x57) 31.500MHz -HSync +VSync
        h: width   848 start  872 end  952 total 1056 skew    0 clock  29.83KHz
        v: height  480 start  483 end  493 total  500           clock  59.66Hz
  720x480 (0x58) 26.750MHz -HSync +VSync
        h: width   720 start  744 end  808 total  896 skew    0 clock  29.85KHz
        v: height  480 start  483 end  493 total  500           clock  59.71Hz
  640x480 (0x59) 23.750MHz -HSync +VSync
        h: width   640 start  664 end  720 total  800 skew    0 clock  29.69KHz
        v: height  480 start  483 end  487 total  500           clock  59.38Hz
Hayden Thring
  • 242
  • 1
  • 11

1 Answers1

4

Partial answer:

The Radeon can have both an internal (part of the GPU) or an external (extra chip) decoder. They usually have registers where you can set which signals gets output on which DAC (digital/analog converter). As the encoders were meant for analog TVs, a usual setting "composite" (both luminance and chrominance) on one channel, and "luminance" (Y) and "chrominance" (C) on two other channels. In this way, you can attach SVideo (Y/C) and Composite cables. Most external encoders also have an option to output RGB instead (for which you'd need a SCART connector in Europe).

Looking at the source code, the internal ("legacy") encoder is set up for Y on Red, C on Green, and Composite on Blue:

WREG32(RADEON_TV_PRE_DAC_MUX_CNTL, (RADEON_Y_RED_EN |
                    RADEON_C_GRN_EN |
                    RADEON_CMP_BLU_EN |
                    RADEON_DAC_DITHER_EN));

There's also some kind of autodetection which may assign signals differently.

So that's what you'll get from the DIN plug. The order may be wrong for your particular card, however. And it may be different for external encode chips.

Assuming you have connected it via SVideo (and not via SCART/RGB), if it "has color" in grub, it means the BIOS has correctly assigned C and Y to the right DACs. The driver may assign those differently for a variety of reasons, so you may end up with no chrominance at all (and hence no color) once the driver is active.

I couldn't find any way to override this assignment in the code. If the load detection is a bitfield and not just a boolean, this may mean your SVideo cable chrominance termination resistor is not correctly detected (but that's a guess).

So the choice is to either (1) change the driver code to allow manual override of DAC assignment/enable, or (2) tinker with the cable, so you can get at the chrominance signal if it's on the wrong DAC, or so it makes the detection work correctly.

Neither of which is easy.

dirkt
  • 31,679
  • 3
  • 40
  • 73
  • 1
    Thanks for your reply ! So this time it tried with a DIN adaptor that has both composite connections and svideo. And the svideo works great ! So it would seem that its in Svideo mode not component. With component hooked to display i probed around in the din, and there are only 2 connections active one that is luminescence (black and white) and one that gives the (component) picture a red or blue shade. Which corresponds with the svideo format (only 2 signal wires) while component would have 3. So not sure how i would switch the card mode, i see some mention of TvOutFormat option for xorg.conf – Hayden Thring Sep 20 '18 at 03:03
  • I have a xorg.conf, not 100% if its working, i know its being loaded as if i have a mistake i get no X, but at the same time TVStandard option does not have any effect. Also though when i did -configure to generate it, that option was not in the list commented out... – Hayden Thring Sep 20 '18 at 03:15
  • As I said, I haven't seen any part in the "legacy" source code that allows setting of this by an xorg.conf option. But anyway, the first step would be to determine if your card has the internal "legacy" encoder, or an external one. `/var/log/Xorg.0.log` may (or may not) contain information about that. Another option to tweak this is to use some tool (or write one) to directly write registers and change it on the running system, but a mistake here can be dangerous. – dirkt Sep 20 '18 at 06:26
  • thanks ill read the log looking for this, but svideo is quite nice so not such pressure now. thanks again for your help – Hayden Thring Sep 20 '18 at 10:53