[PREVIEW 2] New display subsystem for OMAP2/3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I sent a preview of a new display subsystem for OMAP2/3 some time ago:
http://marc.info/?l=linux-omap&m=122114505030542&w=2

I now have updated it, the patches are at the same place:
http://www.bat.org/~tomba/omap-dss/

What's new
----------

As was pointed out in the feedback, my version was not enough to fully
utilize OMAP's DISPC. I did a bit of a rewrite and I now model the
overlays and overlay managers. This conveniently allows multiple display
configurations, and it also solved some other problems I had previously.
The code is still bit of a mess after this change.

The tv-out and DVI are also now working on OMAP3 SDP board, and you can
switch between, and combine, LCD, TV-out and DVI outputs. The current
interface for this is a couple of hackish sysfs files.

The Kconfig is also a bit more versatile, you can leave out the parts of
the DSS that you don't need.

Overlays
--------

Here's the default setup on OMAP3 SDP board. All planes go to LCD. DVI
and TV-out are not in use. The columns from left to right are:
framebuffers, overlays, overlay managers, displays. Framebuffers are
handled by omapfb, and the rest by the DSS.

FB0 --- GFX  -\            DVI
FB1 --- VID1 --+- LCD ---- LCD
FB2 --- VID2 -/   TV ----- TV

In the examples below we use DVI and TV so that the setup changes to the
following:

FB0 --- GFX  -\         -- DVI
FB1 --- VID1 --+- LCD -/   LCD
FB2 --- VID2 ---- TV ----- TV

It is also possible to setup a virtual overlay & overlay manager, which
can be used with displays that can be updated with CPU/sDMA. For
example:

FB3 --- VOVL ---- VMGR

You can also change the overlay to which a framebuffer is connected.
With this we can, for example, change fb0 from DISPC overlay to virtual
overlay while X is running on the framebuffer. This way X doesn't notice
anything, but DISPC is free for other displays.

And, although not implemented yet, one framebuffer can be connected to
multiple overlays. This will allow cloning of a framebuffer to multiple
outputs.

Sysfs
-----
The sysfs interface is a hack, but works for testing. And I don't think
sysfs interface is the best for this in the final version.

In /sys/devices/platform/omapfb we have four files: framebuffers,
overlays, managers and displays. You can read them so see the current
setup, and change it by writing "arg1:arg2" to it. So changing
framebuffer 0 to point to vid1 overlay would require writing "0:vid1" to
framebuffers file.

Examples
--------
In these examples I have symlink omapfb -> /sys/devices/platform/omapfb

# VIDEO2 plane to TV out
echo "vid2:" > omapfb/overlays                                 # (1)
fbset -fb /dev/fb2 -xres 720 -pw 720 -yres 482 -ph 482 -pe 1   # (2)
echo "vid2:tv" > omapfb/overlays                               # (3)
echo "tv:1" > omapfb/displays                                  # (4)

1. Detach vid2 overlay. Otherwise the DSS will reject the fbset, as
   the asked resolution is larger than the LCD's resolution.
2. Set x/y res, and enable plane
3. Attach vid2 to tv overlay manager.
4. Enable tv display

# Use DVI instead of LCD
echo "lcd:0" > omapfb/displays                                 # (1)
echo "lcd:" > omapfb/managers                                  # (2)
# switch the dvi/lcd dip-switch                                # (3)
fbset -fb /dev/fb0 -xres 800 -pw 800 -yres 600 -ph 600 -pe 1   # (4)
echo "lcd:dvi" > omapfb/managers                               # (5)
echo "dvi:1" > omapfb/displays                                 # (6)

1. Disable LCD display. We have to disable LCD before we can enable DVI
2. Detach LCD overlay manager
3. Here you have to set the DIP switch to DVI position
4. Set the new resolution
5. Attach LCD overlay manager to DVI display
6. Enable DVI display

 Tomi


--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux