On 21.08.2018 07:27, Inki Dae wrote:
>
> 2018년 08월 20일 18:00에 Andrzej Hajda 이(가) 쓴 글:
>> On 17.08.2018 03:56, Inki Dae wrote:
>>> 2018년 08월 13일 20:17에 Andrzej Hajda 이(가) 쓴 글:
>>>> On 07.08.2018 10:53, Inki Dae wrote:
>>>>> 2018년 07월 26일 00:46에 Andrzej Hajda 이(가) 쓴 글:
>>>>>> From: Maciej Purski <m.pur...@samsung.com>
>>>>>>
>>>>>> The current implementation assumes that the only possible peripheral
>>>>>> device for DSIM is a panel. Using an output bridge child device
>>>>>> should also be possible.
>>>>>>
>>>>>> If an output bridge is available, don't create a new connector.
>>>>>> Instead, call drm_bridge_attach() and set encoder's bridge to NULL
>>>>>> in order to avoid an out bridge from being visible by the framework, as
>>>>>> the DSI bus needs control on enabling its child output bridge.
>>>>>>
>>>>>> Such sequence is required by Toshiba TC358764 bridge, which is a DSI
>>>>>> peripheral bridge device.
>>>>>>
>>>>>> changed in v5:
>>>>>> - detach bridge in mipi_dsi detach callback
>>>>>>
>>>>>> Signed-off-by: Maciej Purski <m.pur...@samsung.com>
>>>>>> [ a.ha...@samsung.com: v5 ]
>>>>>> Signed-off-by: Andrzej Hajda <a.ha...@samsung.com>
>>>>>> ---
>>>>>>  drivers/gpu/drm/exynos/exynos_drm_dsi.c | 50 ++++++++++++++++---------
>>>>>>  1 file changed, 32 insertions(+), 18 deletions(-)
>>>>>>
>>>>>> diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c 
>>>>>> b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
>>>>>> index 351403f9d245..f5f51f584fa0 100644
>>>>>> --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c
>>>>>> +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c
>>>>>> @@ -255,6 +255,7 @@ struct exynos_dsi {
>>>>>>          struct mipi_dsi_host dsi_host;
>>>>>>          struct drm_connector connector;
>>>>>>          struct drm_panel *panel;
>>>>>> +        struct drm_bridge *out_bridge;
>>>>>>          struct device *dev;
>>>>>>  
>>>>>>          void __iomem *reg_base;
>>>>>> @@ -1499,7 +1500,30 @@ static int exynos_dsi_host_attach(struct 
>>>>>> mipi_dsi_host *host,
>>>>>>                                    struct mipi_dsi_device *device)
>>>>>>  {
>>>>>>          struct exynos_dsi *dsi = host_to_dsi(host);
>>>>>> -        struct drm_device *drm = dsi->connector.dev;
>>>>>> +        struct drm_encoder *encoder = &dsi->encoder;
>>>>>> +        struct drm_device *drm = encoder->dev;
>>>>>> +        struct drm_bridge *out_bridge;
>>>>>> +
>>>>>> +        out_bridge  = of_drm_find_bridge(device->dev.of_node);
>>>>> Is there any reason to find out_bridge without considering device tree 
>>>>> graph binding?
>>>> If the sink is a child MIPI-DSI device, the bindings can be omitted, as
>>>> in case of all DSI panels in Exynos platforms.
>>>> In case bindings are not present you cannot use graph functions.
>>> In other words, this means that this patch doesn't allow to use the device 
>>> tree graph binding.
>>> I.e., if other people wrote the graph things in his board dts file for the 
>>> use of bridge device then with this patch he cannot use the bride device.
>>>
>>> So I think it would be better to allow to use both of them, as a child 
>>> device and graph binding.
>>>
>>> How about trying to bind the graph things using drm_of_find_panel_or_bridge 
>>> funtion first and then for child device way?
>> It could be done this way, but it should be done for panels and for
>> bridges, and it should be rather generic helper, not Exynos specific. So
> As the function name says, drm_of_find_panel_or_bridge function will return 
> panel, bridge or both of them according to given arguments.
>
>
>> it is something which require additional investigation, discussion and
>> separate patchset.
> So I think we wouldn't need additional discussion at all becuase we don't 
> touch panel but add only bridge device as output, and the use of this 
> function for bridge looks more generic way.

But drm_of_find_panel_or_bridge is only for looking for non-dsi devices,
or more specifically for looking for devices connected in DTS via
DT-graph. This is not case of panels and bridges used in Exynos boards.
So this function is currently useless with our boards. Maybe some day we
will have bridge/panel controlled via I2C and then it will become
useful, but for now it serves for nothing.

> Of course, as a separate patch, we could consider using this function for 
> panel device later.

As you said drm_of_find_panel_or_bridge looks for panel and/or bridge,
and it was created to merge similar code in panel and bridge lookup,
using it only for bridges and not for panels seems against it's purpose.

>
>> On the other side this patch is enough to correctly handle all DSI
>> bridges in existing Exynos boards.
>>
>>> And I'm not clear about what kinds of devices could be a child device of 
>>> DSI, which isn't required for the graph binding.
>>> Is there any document I can refer to?
>> DSI devices (peripherals) should be described as child nodes of DSI host
>> node in DT bindings, it is described in [1]. And you can find all dsi
>> panels in exynos based boards are modeled this way.
>> And the graph documentation [2] says that graphs should be used for
>> connections that "can not be inferred from device tree parent-child
>> relationships", it was emphasised multiple times by Rob in discussions
>> regarding bindings of DSI devices.
> Hm... I don't see why Rob introduced drm_of_find_panel_or_bridge fucntion[1] 
> if DSI devices should be described as child nodes.
> And some DSI drivers of other ARM DRM - vc4, mediatek, and kirin - use only 
> drm_of_find_panel_or_bridge funtion.

Because this function was created for i2c/spi controlled bridges/panels
and probably these boards use only such devices.

Regards
Andrzej

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to