更新:请参阅下面的评论,在分量和 svideo 之间切换 Radeon 3450 电视输出模式
我的这张卡可以在 Windows 中工作,在 Grub 中它有颜色并且看起来不错,但在 xorg 中我只是从组件 (RGB) 电缆中获得黑色和白色。我尝试使用 xrandr 更改电视格式,但没有任何变化。不过我可以改变分辨率。
我怀疑它可能处于复合模式而不是组件模式。该卡有一个 DVI 和一个 DIN 插头,适用于 svideo 或分量 (rgb)
这些是一些命令的输出:
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
答案1
部分答案:
Radeon 可以具有内部(GPU 的一部分)或外部(额外芯片)解码器。它们通常具有寄存器,您可以在其中设置哪些信号在哪个 DAC(数字/模拟转换器)上输出。由于编码器适用于模拟电视,因此通常在一个通道上设置“复合”(亮度和色度),在其他两个通道上设置“亮度”(Y) 和“色度”(C)。通过这种方式,您可以连接 SVideo (Y/C) 和复合电缆。大多数外部编码器还可以选择输出 RGB(在欧洲您需要 SCART 连接器)。
看着源代码,内部(“传统”)编码器设置为 Y 为红色、C 为绿色、Composite 为蓝色:
WREG32(RADEON_TV_PRE_DAC_MUX_CNTL, (RADEON_Y_RED_EN |
RADEON_C_GRN_EN |
RADEON_CMP_BLU_EN |
RADEON_DAC_DITHER_EN));
还有某种自动检测这可能会以不同的方式分配信号。
这就是您从 DIN 插头得到的结果。但是,对于您的特定卡,该顺序可能是错误的。对于外部编码芯片可能会有所不同。
假设您通过 SVideo(而不是通过 SCART/RGB)连接它,如果它在 grub 中“有颜色”,则意味着 BIOS 已将 C 和 Y 正确分配给正确的 DAC。驱动程序可能会出于各种原因以不同的方式分配这些值,因此一旦驱动程序处于活动状态,您最终可能根本没有色度(因此没有颜色)。
我找不到任何方法来覆盖代码中的此分配。如果load detection
是一个位字段而不仅仅是一个布尔值,这可能意味着您的 SVideo 电缆色度终端电阻器未正确检测到(但这是猜测)。
因此,选择是 (1) 更改驱动程序代码以允许手动覆盖 DAC 分配/启用,或者 (2) 修补电缆,这样如果色度信号位于错误的 DAC 上,您就可以获取色度信号,或者这样使检测工作正常进行。
两者都不容易。