Hi Paul, just a drive-by comment: On Sat, Aug 22, 2020 at 6:33 PM Paul Cercueil <paul@xxxxxxxxxxxxxxx> wrote: > + gpiod_set_value_cansleep(priv->reset_gpiod, 0); > + usleep_range(20, 1000); > + gpiod_set_value_cansleep(priv->reset_gpiod, 1); This implies that the reset line is active low. I would specify in the DT GPIO handle that it is active low and invert the above. So: reset-gpios = <&gpio 4 GPIO_ACTIVE_LOW>; gpiod_set_value_cansleep(priv->reset_gpiod, 1); usleep_range(20, 1000); gpiod_set_value_cansleep(priv->reset_gpiod, 0); > + priv->reset_gpiod = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); > + if (IS_ERR(priv->reset_gpiod)) { > + dev_err(dev, "Couldn't get our reset GPIO\n"); > + return PTR_ERR(priv->reset_gpiod); > + } This would then fetch the GPIO as asserted (device in reset) unless changed, but that may be the right thing to do actually. > +static const struct ili9341_pdata yx240qv29_pdata = { > + .mode = { DRM_SIMPLE_MODE(240, 320, 37, 49) }, > + .width_mm = 0, // TODO > + .height_mm = 0, // TODO When nothing else works and data sheets are incomplete I just take out a ruler and measure on the actual device. Yours, Linus Walleij