drm/panel: s6e63m0: Implement reading from panel
authorLinus Walleij <linus.walleij@linaro.org>
Tue, 10 Nov 2020 23:46:50 +0000 (00:46 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Sun, 15 Nov 2020 23:48:09 +0000 (00:48 +0100)
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.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Stephan Gerhold <stephan@gerhold.net>
Cc: Paweł Chmiel <pawel.mikolaj.chmiel@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201110234653.2248594-3-linus.walleij@linaro.org
drivers/gpu/drm/panel/panel-samsung-s6e63m0-spi.c

index 75f00ed..94ae4ac 100644 (file)
 
 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)