Re: [PATCH 2/4] dt-bindings: Document the Raspberry Pi Touchscreen nodes.

From: Archit Taneja
Date: Thu May 18 2017 - 04:26:42 EST


Hi,

On 05/17/2017 12:16 AM, Eric Anholt wrote:
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> writes:

Hi Eric,

On Tuesday 16 May 2017 09:47:49 Eric Anholt wrote:
Rob Herring <robh+dt@xxxxxxxxxx> writes:
On Mon, May 15, 2017 at 7:03 PM, Eric Anholt <eric@xxxxxxxxxx> wrote:
Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> 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@xxxxxxxxxx>
---

.../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@7e700000 {
#address-cells = <1>;
#size-cells = <0>;
<...>

/* The SoC's DSI input/output port */
ports {
#address-cells = <1>;
#size-cells = <0>;

/* port@0 if needed */

port@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@45 {
compatible = "raspberrypi,touchscreen-bridge";
reg = <0x45>;

ports {
#address-cells = <1>;
#size-cells = <0>;

port@0 {
reg = <0>;
bridge_dsi_port: endpoint {
remote-endpoint = <&dsi_out_port>;
};
};
port@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@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