[PATCH 2/4] dt-bindings: Document the Raspberry Pi Touchscreen nodes.
Archit Taneja
architt at codeaurora.org
Thu May 18 08:26:19 UTC 2017
Hi,
On 05/17/2017 12:16 AM, Eric Anholt wrote:
> Laurent Pinchart <laurent.pinchart at ideasonboard.com> writes:
>
>> Hi Eric,
>>
>> On Tuesday 16 May 2017 09:47:49 Eric Anholt wrote:
>>> Rob Herring <robh+dt at kernel.org> writes:
>>>> On Mon, May 15, 2017 at 7:03 PM, Eric Anholt <eric at anholt.net> wrote:
>>>>> Laurent Pinchart <laurent.pinchart at ideasonboard.com> writes:
>>>>>> Hi Eric,
>>>>>>
>>>>>> Thank you for the patch.
>>>>>>
>>>>>> On Thursday 11 May 2017 16:56:23 Eric Anholt wrote:
>>>>>>> The Raspberry Pi 7" Touchscreen is a DPI touchscreen panel with
>>>>>>> DSI->DPI bridge and touchscreen controller integrated, that connects
>>>>>>> to the Raspberry Pi through its 15-pin "DSI" connector (some lines are
>>>>>>> DSI, some lines are I2C).
>>>>>>>
>>>>>>> This device is represented in the DT as three nodes (DSI device, I2C
>>>>>>> device, panel). Input will be left to a separate binding later, as it
>>>>>>> will be a basic I2C client device.
>>>>>>>
>>>>>>> Signed-off-by: Eric Anholt <eric at anholt.net>
>>>>>>> ---
>>>>>>>
>>>>>>> .../raspberrypi,7inch-touchscreen-bridge.txt | 68 ++++++++++++++
>>>>>>> .../panel/raspberrypi,7inch-touchscreen-panel.txt | 7 +++
>>>>>>> 2 files changed, 75 insertions(+)
>>>>>>> create mode 100644
>>>>>>>
>>>>>>> Documentation/devicetree/bindings/display/bridge/raspberrypi,7inch-touc
>>>>>>> hscreen-bridge.txt create mode 100644
>>>>>>> Documentation/devicetree/bindings/display/panel/raspberrypi,7inch-touch
>>>>>>> screen-panel.txt
>>>>>>>
>>>>>>> diff --git
>>>>>>> a/Documentation/devicetree/bindings/display/bridge/raspberrypi,7inch-to
>>>>>>> uchscreen-bridge.txt
>>>>>>> b/Documentation/devicetree/bindings/display/bridge/raspberrypi,7inch-to
>>>>>>> uchscreen-bridge.txt new file mode 100644
>>>>>>> index 000000000000..a5669beaf68f
>>>>>>> --- /dev/null
>>>>>>> +++
>>>>>>> b/Documentation/devicetree/bindings/display/bridge/raspberrypi,7inch-to
>>>>>>> uchscreen-bridge.txt
>>>>>>> @@ -0,0 +1,68 @@
>>>>>>> +Official 7" (800x480) Raspberry Pi touchscreen panel's bridge.
>>>>>>> +
>>>>>>> +This DSI panel contains:
>>>>>>> +
>>>>>>> +- TC358762 DSI->DPI bridge
>>>>>>> +- Atmel microcontroller on I2C for power sequencing the DSI bridge and
>>>>>>> + controlling backlight
>>>>>>> +- Touchscreen controller on I2C for touch input
>>>>>>> +
>>>>>>> +and this covers the TC358762 bridge and Atmel microcontroller, while
>>>>>>> +../panel/raspberrypi,7inch-touchscreen-panel.txt covers the panel.
>>>>>>
>>>>>> The TC358762 is a standalone bridge that doesn't depend on the ATTiny
>>>>>> microcontroller used by the RPI. As it's usable standalone, I believe
>>>>>> this binding should be split in two.
>>>>>
>>>>> Do you have a plan for how I would implement a driver on top of that
>>>>> binding change, though? Note that we don't program the Toshiba
>>>>> directly, we only send commands to the Atmel.
>>>>
>>>> I agree. If it is a black box and the interface to the host is defined
>>>> by the Atmel uC firmware, then that's what the DT should describe.
>>>> Perhaps a diagram here or pointer to one would help and remove
>>>> mentioning what kind of bridge chip it is.
>>>
>>> It's a *very* black box. I have some non-public schematics that don't
>>> even say what panel is involved, and no documentation of the uc
>>> interface. The driver code is just replicating the firmware's
>>> programming sequence.
>>>
>>> I would certainly love to be building a generic TC358762 driver, which
>>> would be a lot more satisfying. I just don't think it's doable for this
>>> panel. Given that, what do I need to do to the DT? Should I just drop
>>> mention of the Toshiba and talk about this being a bridge with a custom
>>> microcontroller firmware?
>>
>> I think that would be best, yes. Could you share a simple block-diagram of the
>> hardware ? It would help turning my random advices into semi-random advices
>> :-)
>
> In terms of physical connections:
>
> [15-pin "DSI" connector on 2835]
> | |
> | I2C | DSI
> | |
> / \ SPI |
> [TS] [Atmel]------[TC358762]
> \ |
> \PWM |
> \ | DPI
> [some backlight]------[some unknown panel]
>
> The binding I'm trying to create is to expose what's necessary for a
> driver that talks I2C to the Atmel, which then controls the PWM and does
> the command sequence over SPI to the Toshiba that sets up its end of the
> DSI link.
>
The bridge (Atmel + TC358762 combination) here looks like it's primarily
an i2c device (i.e, the control bus is i2c). Therefore, the drm-bridge
driver here should be an i2c driver instead of a mipi_dsi_driver.
We have the facility to create a mipi DSI device without the need to have
a corresponding node in DT. The ADV7533 and TC358767 drivers are examples
of that.
The following is what the binding could look like, it's same as what Rob
also mentioned previously in the thread.
Thanks,
Archit
dsi1: dsi at 7e700000 {
#address-cells = <1>;
#size-cells = <0>;
<...>
/* The SoC's DSI input/output port */
ports {
#address-cells = <1>;
#size-cells = <0>;
/* port at 0 if needed */
port at 1 {
dsi_out_port: endpoint {
reg = <1>;
remote-endpoint = <&bridge_dsi_port>;
};
};
};
};
i2c_dsi: i2c {
compatible = "i2c-gpio";
#address-cells = <1>;
#size-cells = <0>;
gpios = <&gpio 28 0
&gpio 29 0>;
/* the Atmel + TC35872 bridge */
pitouchscreen_bridge: bridge at 45 {
compatible = "raspberrypi,touchscreen-bridge";
reg = <0x45>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port at 0 {
reg = <0>;
bridge_dsi_port: endpoint {
remote-endpoint = <&dsi_out_port>;
};
};
port at 1 {
reg = <1>;
bridge_dpi_port: endpoint {
remote-endpoint = <&pitouchscreen_panel_port>;
};
};
};
};
};
lcd {
compatible = "raspberrypi,7inch-touchscreen-panel";
ports {
#address-cells = <1>;
#size-cells = <0>;
port at 0 {
reg = <0>;
pitouchscreen_panel_port: endpoint {
remote-endpoint = <&bridge_dpi_port>;
};
};
};
};
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
More information about the dri-devel
mailing list