diff mbox series

[2/5] drm/panel: s6e63m0: Implement reading from panel

Message ID 20201110234653.2248594-3-linus.walleij@linaro.org (mailing list archive)
State New, archived
Headers show
Series Samsung s6e63m0 improvements | expand

Commit Message

Linus Walleij Nov. 10, 2020, 11:46 p.m. UTC
This code was found in the Samsung vendor tree for the
Samsung GT-I9070 mobile phone. Let's support reading before
we implement the 3WIRE protocol for both reading and
writing.

Cc: Stephan Gerhold <stephan@gerhold.net>
Cc: Paweł Chmiel <pawel.mikolaj.chmiel@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 .../gpu/drm/panel/panel-samsung-s6e63m0-spi.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)
diff mbox series

Patch

diff --git a/drivers/gpu/drm/panel/panel-samsung-s6e63m0-spi.c b/drivers/gpu/drm/panel/panel-samsung-s6e63m0-spi.c
index 75f00ed4810b..9e1552a7ccc7 100644
--- a/drivers/gpu/drm/panel/panel-samsung-s6e63m0-spi.c
+++ b/drivers/gpu/drm/panel/panel-samsung-s6e63m0-spi.c
@@ -13,13 +13,20 @@ 
 
 static int s6e63m0_spi_dcs_read(struct device *dev, const u8 cmd, u8 *data)
 {
-	/*
-	 * FIXME: implement reading DCS commands over SPI so we can
-	 * properly identify which physical panel is connected.
-	 */
-	*data = 0;
+	struct spi_device *spi = to_spi_device(dev);
+	u16 buf[1];
+	u16 rbuf[1];
+	int ret;
 
-	return 0;
+	/* SPI buffers are always in CPU order */
+	buf[0] = (u16) cmd;
+	ret = spi_write_then_read(spi, buf, 2, rbuf, 2);
+	dev_dbg(dev, "READ CMD: %04x RET: %04x\n", buf[0], rbuf[0]);
+	if (!ret)
+		/* These high 8 bits of the 9 contains the readout */
+		*data = (rbuf[0] & 0x1ff) >> 1;
+
+	return ret;
 }
 
 static int s6e63m0_spi_write_word(struct device *dev, u16 data)