On 29/04/2021 18:27, Frieder Schrempf wrote:
> On 28.04.21 16:16, Marek Vasut wrote:
>> On 4/28/21 11:24 AM, Neil Armstrong wrote:
>> [...]
>>
>>>>>>> +static int sn65dsi83_probe(struct i2c_client *client,
>>>>>>> + const struct i2c_device_id *id)
>>>>>>> +{
>>>>>>> + struct device *dev = &client->dev;
>>>>>>> + enum sn65dsi83_model model;
>>>>>>> + struct sn65dsi83 *ctx;
>>>>>>> + int ret;
>>>>>>> +
>>>>>>> + ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
>>>>>>> + if (!ctx)
>>>>>>> + return -ENOMEM;
>>>>>>> +
>>>>>>> + ctx->dev = dev;
>>>>>>> +
>>>>>>> + if (dev->of_node)
>>>>>>> + model = (enum sn65dsi83_model)of_device_get_match_data(dev);
>>>>>>> + else
>>>>>>> + model = id->driver_data;
>>>>>>> +
>>>>>>> + /* Default to dual-link LVDS on all but DSI83. */
>>>>>>> + if (model != MODEL_SN65DSI83)
>>>>>>> + ctx->lvds_dual_link = true;
>>>>>>
>>>>>> What if I use the DSI84 with a single link LVDS? I can't see any way to
>>>>>> configure that right now.
>>>>
>>>> I assume the simplest way would be to use the "ti,sn65dsi83"
>>>> compatible string in your dts, since the way you wired it is
>>>> 'compatible' with sn65dsi83, right?
>>>
>>> No this isn't the right way to to, if sn65dsi84 is supported and the
>>> bindings only support single lvds link,
>>> the driver must only support single link on sn65dsi84, or add the dual link
>>> lvds in the bindings only for sn65dsi84.
>>
>> The driver has a comment about what is supported and tested, as Frieder
>> already pointed out:
>>
>> Currently supported:
>> - SN65DSI83
>> = 1x Single-link DSI ~ 1x Single-link LVDS
>> - Supported
>> - Single-link LVDS mode tested
>> - SN65DSI84
>> = 1x Single-link DSI ~ 2x Single-link or 1x Dual-link LVDS
>> - Supported
>> - Dual-link LVDS mode tested
>> - 2x Single-link LVDS mode unsupported
>> (should be easy to add by someone who has the HW)
>> - SN65DSI85
>> = 2x Single-link or 1x Dual-link DSI ~ 2x Single-link or 1x Dual-link LVDS
>> - Unsupported
>> (should be easy to add by someone who has the HW)
>>
>> So,
>> DSI83 is always single-link DSI, single-link LVDS.
>> DSI84 is always single-link DSI, and currently always dual-link LVDS.
>>
>> The DSI83 can do one thing on the LVDS end:
>> - 1x single link lVDS
>>
>> The DSI84 can do two things on the LVDS end:
>> - 1x single link lVDS
>> - 1x dual link LVDS
>>
>> There is also some sort of mention in the DSI84 datasheet about 2x single
>> link LVDS, but I suspect that might be copied from DSI85 datasheet instead,
>> which would make sense. The other option is that it behaves as a mirror
>> (i.e. same pixels are scanned out of LVDS channel A and B). Either option
>> can be added by either adding a DT property which would enable the mirror
>> mode, or new port linking the LVDS endpoint to the same panel twice, and/or
>> two new ports for DSI85, so there is no problem to extend the bindings
>> without breaking them. So for now I would ignore this mode.
>
> Agreed.
>
>>
>> So ultimately, what we have to sort out is the 1x single / 1x dual link LVDS
>> mode setting on DSI84. Frieder already pointed out how the driver can be
>> tweaked to support the single-link mode on DSI84, so now we need to tie it
>> into DT bindings.
>>
>> Currently, neither the LVDS panels in upstream in panel-simple nor lvds.yaml
>> provide any indication that the panel is single-link or dual-link. Those
>> dual-link LVDS panels seem to always set 2x pixel clock and let the bridge
>> somehow sort it out.
>>
>> Maybe that isn't always the best approach, maybe we should add a new
>> DRM_BUS_FLAG for those panels and handle the flag in the bridge driver ?
>> Such a new flag could be added over time to panels where applicable, so old
>> setups won't be broken by that either, they will just ignore the new flag
>> and work as before.
>
> I agree that the panel driver should report whether the LVDS input is
> expected to be single or dual link. So introducing a DRM_BUS_FLAG for this
> seems like a good solution.
>
> This wouldn't reflect the physical ports, but I don't really know how we
> could use two ports connected to the same panel for this case, as all the
> existing dual link panels don't follow this scheme.
A dual-link LVDS panel should need 2 ports, because each LVDS link could come
from different controllers, here by the same but simply connect the 2 panel
ports to the 2 controller's ports.
Neil
>
> I would suggest, that the driver defaults to single link for the DSI84 and
> then switches to dual link if the panel requests it using the flag.
>
>>
>>>>> I just saw the note in the header of the driver that says that single
>>>>> link mode is unsupported for the DSI84.
>>>>>
>>>>> I have hardware with a single link display and if I set
>>>>> ctx->lvds_dual_link = false it works just fine.
>>>>>
>>>>> How is this supposed to be selected? Does it need an extra devicetree
>>>>> property? And would you mind adding single-link support in the next
>>>>> version or do you prefer adding it in a follow-up patch?
>>>>
>>>> If this has to be supported I think the proper way would be to support
>>>> two output ports in the dts (e.g. lvds0_out, lvds1_out), in the same
>>>> way as supported by the 'advantech,idk-2121wr' panel.
>>>
>>> Yes, this is why I asked to have the dual-link lvds in the bindings.
>>
>> Maybe it shouldn't really be in the bindings, see above.
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel