Using LVDS in a iMX6Q/D from Barebox

Sascha Hauer s.hauer at pengutronix.de
Wed Feb 15 23:28:01 PST 2017


On Wed, Feb 15, 2017 at 03:34:55PM +0100, gianluca wrote:
> On 02/15/2017 12:51 PM, Sascha Hauer wrote:
> > On Tue, Feb 14, 2017 at 11:32:44AM +0100, gianluca wrote:
> > > On 02/10/2017 08:35 AM, Sascha Hauer wrote:
> > > > Hi Gianluca,
> > > > 
> > > > On Thu, Feb 09, 2017 at 03:37:41PM +0100, gianluca wrote:
> > > > > Hello,
> > > > > I would like to know if there is a clear way on using the lvds pins to drive
> > > > > a LVDS display in a custom made board, based on iMX6Q (in the near future
> > > > > the iMX6Dual).
> > > > 
> > > > I think what you are looking for is of_device_enable_and_register() or
> > > > of_device_enable_and_register_by_name(). You can call it on either the
> > > > lvds device node or the hdmi device node, depending on whether you found
> > > > an EEPROM or not.
> > > > 
> > > 
> > > I think this is not necessary as during boot I can see clearly:
> > > 
> > > > imx-ipuv3 2400000.ipu: IPUv3H probed
> > > > imx-ipuv3 2800000.ipu: IPUv3H probed
> > > > imx-ldb ldb.10: probe failed: Invalid argument
> > > > imx-hdmi 120000.hdmi: Detected HDMI controller 0x13:0xa:0xa0:0xc1
> > > 
> > > So barebox is trying to bring-up the imx-ldb but fails.
> > > 
> > > So I suppose something is wrong in my device tree structure.
> > 
> > Nope, there's everything right.
> > 
> > I can reproduce this here on a GuF Santaro board. LVDS works fine on
> > current barebox as long as I leave hdmi disabled in the device tree.
> > When I enable hdmi I also get a "failed to get modes".
> > 
> > Normally when different outputs are available then one would expect
> > that each one of them is routed to some framebuffer, maybe with some
> > sane default and configurable during runtime. The current code falls
> > short here.
> > What happens is each framebuffer looks around for outputs, all finding
> > hdmi and lvds. Now the hdmi output may not have a monitor connected
> > and returns no valid mode. In this case the lvds is not even asked for
> > modes.
> > Also in the current code it can happen that the lvds is asked for modes
> > which are then applied to hdmi.
> > Where we currently are is that it should work when exactly one output
> > is enabled. Does lvds work properly when hdmi is disabled? In this
> > case I would suggest that you manipulate your devicetree so that exactly
> > one output is enabled.
> > 
> 
> 
> That's works. Thank you!
> 
> Now I am planning to adapt the (internal) and external device-tree to match
> the hardware.
> 
> First of all hdmi and ldb node are "disabled" by default.
> 
> Then I am looking for any eeprom in the lvds connector I have.
> If it is found, check the phandle "native-mode" of the display-timings node
> to match the value found in eeprom. If not matches the native-mode, it
> should change the native-mode phandle accordingly with the value found. (I
> was thinking about of_find_node_by_name() and then change its value using
> of_set_property_to_child_phandle(display, "native-mode")). And finally
> change the status of ldb node from "disabled" to "okay". Is this the correct
> way of doing this?
> 
> If no eeprom is found activate the status of the hdmi node from "disabled"
> to "okay". So with the same algorithm as above,
> 
> Those operations will be done in the coredevice_initcall() level. Is this
> correct?

Sounds like a plan. I'm not sure though if you find your EEPROM at
coredevice_initcall time.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list