Thread (5 messages) flat view 5 messages, 2 authors, 2013-06-24

Re: MMP display subsystem questions

From: Daniel Drake <hidden>
Date: 2013-06-21 16:14:19
Also in: linux-arm-kernel

On Thu, Jun 20, 2013 at 8:41 PM, Zhou Zhu [off-list ref] wrote:
I admit it's an issue of no documents. We would submit a patch to add
description under Documentation soon later.
That would be much appreciated. Without the required background I am
still having trouble fully understanding your reply and reviewing your
patches.
quoted
The overlay's address is written to a register that is specific to
it's parent path. If we are dealing with two overlays, how does this
work? We write both overlay addresses to the same register and the
second one "wins"? I checked all of the other overlay-related
functions and they all defer to the parent path as well.

As an experiment I modified platform data to suggest that my path has
98 overlays and the framebuffer should run on overlay 33. Nonsense,
but the framebuffer booted up as normal. It seems like there is
something missing in this path/overlay relationship.

What is the plan going forward for this overlay management? At the
moment there is only one consumer of overlays in the kernel - the
framebuffer driver. And the framebuffer will only ever use one. Who
are the other intended in-kernel users of overlays?
We have already pushed patches to fix this issue and support overlays.
Please see patches below:
[V2 7/7] video: mmp: add video layer set win/addr operations support
http://lists.infradead.org/pipermail/linux-arm-kernel/2013-June/175071.html
At a glance, I cannot see how this patch answers any of my questions.
I will attempt to review the patches in that series and let you know
my difficulties in understanding. Hopefully that will help us write
good documentation.
quoted
path_config: this value gets written to registers LCD_SCLK *and*
IOPAD_CONTROL. The bit definitions in these registers are totally
different. It seems like nonsense to share the same configuration
value between two diversely different registers - what is going on
here?

link_config: Seems to have a dual meaning. Upper 4 bits can be used to
specify dumb panel mode in registers like LCD_DUMB_CTRL. Bit 0 is
totally unrelated and triggers "swap RB" i.e. use BGR instead of RGB,
when dealing with totally different registers. Other bits are ignored.
If "disorganised" bitfields are to be haphazardly invented in this way
it would at least be nice to have documentation.
Actually we are using mixed configs here and it is not so clear.
We may update these config to separated configs with more clearly meanings.
Currently 4 fields is here:
SCLK source: select source clock for sclk. We have plan to remove it and
move the source selection into common clock driver.
IOPAD CONTROL: for iopad control
DUMB CONTROL: for dumb panel mode
RB SWAP: for rb swaps in link. Actually it's do required as for some panels
would swap r/b links.
Yes, separating this makes sense. I look forward to the patch, with
the kind of documentation written above.
Actually in our usage mode, we'd rather prefer to make one fb connected to
one path.
In many usage mode, we may need 2 or more devices (panel, external tv...)
turned on together so 2 or more fb devices are required to connect to
separate path.
That makes sense.
quoted
4. Which overlay to use - according to my investigation above, this
doesn't actually have any meaningful effect on the driver.
As overlay enabled in patch above now, this config is required to make fb
show on some overlay and other interface(v4l2, private interface) to use
others.
I don't understand this, but it might be easier to understand once you
have documented what an overlay is and how it relates to a path. How
is v4l2 going to interact with this driver? What private interfaces
are you referring to?
So according to comments above, fb buffer is still need to be configure in
dts for path/overlay configs.
Or can we just auto-instantiate one framebuffer per path with good defaults?
Also there still might be some settings in fb for some further settings like
vsync usage or yres_virtual size in coming patches.
Wouldn't such information be represented in the modes supported by the panel?

A couple more questions:

1. What is the invert_pixclock setting in the mmp_mode structure? This
causes a currently unused bit to be set in fb_videomode->vmode to be
set (seems dangerous). And then nothing acts upon this bit, as far as
I can see.

2. What about pix_fmt_out? Why is pixel format dumped into the mode
specifier? If there is a supported panel that really can support
different pixel formats, I would expect it to support all the pixel
formats for all the resolution. This also seems unused within the
driver.

Thanks
Daniel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help