Skip to content

Raspberry Pi 4 missing "720x480 (scaled)" composite mode on 6.6.33 #6242

@synthic

Description

@synthic

Describe the bug

For a long time it was recommended to enable 240p output over composite video by adding video=Composite-1:720x480@60e to cmdline.txt. On previous kernel verions 5.10 and earlier, this resulted in the following output from modetest -M vc4:

Connectors:
55	54	connected	composite-1    	0x0		3	54
  modes:
	index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
  #0 720x480 (scaled) 60.05 720 734 798 858 480 486 492 524 27000 flags: ; type: preferred, driver
  #1 720x480i 29.97 720 734 798 858 480 487 493 525 13500 flags: interlace; type: userdef, driver
  #2 720x240 60.05 720 734 798 858 240 243 246 262 13500 flags: ; type: driver

This worked perfectly as the device was outputting a progressive 240p signal as expected, but according to KMS/DRM the system was running at 720x480. From what I have gathered, this is achieved by vertically scaling the image to double it's height, but since it's still outputting at 240p it's technically a "fake" resolution. However, this is perfect because GUI apps can display properly in 4:3 while still maintaining a sharp progressive output.

When adding the same option to the cmdline on 6.6, the result is quite different:

Connectors:
id	encoder	status		name		size (mm)	modes	encoders
45	44	connected	Composite-1    	0x0		4	44
  modes:
	index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot
  #0 720x480i 59.94 720 736 800 858 480 486 492 525 13500 flags: nhsync, nvsync, interlace; type: preferred, userdef, driver
  #1 720x576i 50.00 720 732 796 864 576 581 587 625 13500 flags: nhsync, nvsync, interlace; type: driver
  #2 720x288 50.08 720 740 804 864 288 290 293 312 13500 flags: ; type: driver
  #3 720x240 60.05 720 734 798 858 240 243 246 262 13500 flags: ; type: driver

Only 480i and 240p modes are present and when switching mode to 720x240 and starting an application, the video is stretched or fails to scale properly due to the unusual aspect ratio.

Steps to reproduce the behaviour

Boot up Raspberry Pi 4 with latest kernel after adding video=Composite-1:720x480@60e to cmdline.txt and connect to a CRT display.

Device (s)

Raspberry Pi 4 Mod. B

System

May 24 2024 15:30:43 
Copyright (c) 2012 Broadcom
version 4942b7633c0ff1af1ee95a51a33b56a9dae47529 (clean) (release) (start_x)
Linux Lakka 6.6.33 #1 SMP Wed Jun 26 07:50:27 CEST 2024 aarch64 GNU/Linux

Logs

No response

Additional context

I realize that the composite output and vc4 driver code have been improved recently to better adhere to broadcast standards. At the same time, this pull request was merged giving the RP1 on the Raspberry Pi 5 much more flexibility with a new custom mode option. #6105

In the case of Lakka there is now a build for dedicated composite output thanks to this very helpful custom mode option. A custom mode that matches the missing one can now easily be defined on the RPi 5. However, for the RPi 3/4 the 6.6 kernel could not be used due to this issue so they are forced to stay with 5.10, which means a unified build is not possible. Similar distros focused around gaming on CRT TVs have had to take steps to fix this issue in other ways as well. It doesn't make sense that the RPi 5 can output in this mode while the previous models used to be able to and are now unable.

That being said, having a complete custom mode option for RPi 3/4 doesn't make sense as the encoder is too strict to allow for just anything. However, the aforementioned "720x480 (scaled)" mode has been present and functional for years it seems. Ultimately, I was wondering if this functionality could be introduced back into the kernel somehow. My proposition is to add a new option for the vc4 driver such as vc4.vdouble that could be added to the cmdline to recreate the scaled mode how it was previously and enable it. If it is possible to restore this functionality it would help many users get the most out of their CRT displays without being relegated to an older kernel version.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions