On Sun, May 21, 2023 at 11:23 PM Marijn Suijten <marijn.suijten@xxxxxxxxxxxxxx> wrote: > The Sony Xperia 1 (codename kumano griffin) features an unnamed 4k OLED > DSI cmd mode panel produced by Samsung. It can be driven in a > 1644x3840@60 or 1096x2560@60 mode, and always has Display Stream > Compression 1.1 enabled. > > Signed-off-by: Marijn Suijten <marijn.suijten@xxxxxxxxxxxxxx> (...) > +static int sony_griffin_samsung_on(struct sony_griffin_samsung *ctx) > +{ > + ret = mipi_dsi_dcs_exit_sleep_mode(dsi); > + if (ret < 0) { > + dev_err(dev, "Failed to exit sleep mode: %d\n", ret); > + return ret; > + } > + usleep_range(10000, 11000); > + > + ret = mipi_dsi_dcs_set_tear_on(dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK); > + if (ret < 0) { > + dev_err(dev, "Failed to set tear on: %d\n", ret); > + return ret; > + } > + > + mipi_dsi_dcs_write_seq(dsi, 0xf0, 0x5a, 0x5a); > + mipi_dsi_dcs_write_seq(dsi, 0xb0, 0x05); > + mipi_dsi_dcs_write_seq(dsi, 0xd7, 0x07); > + mipi_dsi_dcs_write_seq(dsi, 0xf0, 0xa5, 0xa5); > + /* Enable backlight control */ > + mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_CONTROL_DISPLAY, BIT(5)); > + msleep(110); > + mipi_dsi_dcs_write_seq(dsi, 0xf0, 0x5a, 0x5a); > + mipi_dsi_dcs_write_seq(dsi, 0xe2, enable_4k ? 0 : 1); > + mipi_dsi_dcs_write_seq(dsi, 0xf0, 0xa5, 0xa5); > + > + ret = mipi_dsi_dcs_set_column_address(dsi, 0, hdisplay - 1); > + if (ret < 0) { > + dev_err(dev, "Failed to set column address: %d\n", ret); > + return ret; > + } > + > + ret = mipi_dsi_dcs_set_page_address(dsi, 0, vdisplay - 1); > + if (ret < 0) { > + dev_err(dev, "Failed to set page address: %d\n", ret); > + return ret; > + } > + > + mipi_dsi_dcs_write_seq(dsi, 0xf0, 0x5a, 0x5a); > + mipi_dsi_dcs_write_seq(dsi, 0xb0, 0x70); > + mipi_dsi_dcs_write_seq(dsi, 0xb9, 0x00, 0x60); > + mipi_dsi_dcs_write_seq(dsi, 0xf0, 0xa5, 0xa5); > + mipi_dsi_dcs_write_seq(dsi, 0xf0, 0x5a, 0x5a); > + mipi_dsi_dcs_write_seq(dsi, 0xc5, 0x2e, 0x21); > + mipi_dsi_dcs_write_seq(dsi, 0xf0, 0xa5, 0xa5); > + > + ret = mipi_dsi_dcs_set_display_on(dsi); > + if (ret < 0) { > + dev_err(dev, "Failed to turn display on: %d\n", ret); > + return ret; > + } > + > + return 0; > +} This is eerily similar to the sequence in panel-samsung-sofef00.c: static int sofef00_panel_on(struct sofef00_panel *ctx) { struct mipi_dsi_device *dsi = ctx->dsi; struct device *dev = &dsi->dev; int ret; dsi->mode_flags |= MIPI_DSI_MODE_LPM; ret = mipi_dsi_dcs_exit_sleep_mode(dsi); if (ret < 0) { dev_err(dev, "Failed to exit sleep mode: %d\n", ret); return ret; } usleep_range(10000, 11000); mipi_dsi_dcs_write_seq(dsi, 0xf0, 0x5a, 0x5a); ret = mipi_dsi_dcs_set_tear_on(dsi, MIPI_DSI_DCS_TEAR_MODE_VBLANK); if (ret < 0) { dev_err(dev, "Failed to set tear on: %d\n", ret); return ret; } mipi_dsi_dcs_write_seq(dsi, 0xf0, 0xa5, 0xa5); mipi_dsi_dcs_write_seq(dsi, 0xf0, 0x5a, 0x5a); mipi_dsi_dcs_write_seq(dsi, 0xb0, 0x07); mipi_dsi_dcs_write_seq(dsi, 0xb6, 0x12); mipi_dsi_dcs_write_seq(dsi, 0xf0, 0xa5, 0xa5); mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_CONTROL_DISPLAY, 0x20); mipi_dsi_dcs_write_seq(dsi, MIPI_DCS_WRITE_POWER_SAVE, 0x00); ret = mipi_dsi_dcs_set_display_on(dsi); if (ret < 0) { dev_err(dev, "Failed to set display on: %d\n", ret); return ret; } return 0; } Isn't this just the same display controller with a different configuration? Especially the sleep ranges are even the same. I almost feel like buying these phones just to pry them apart and put under a microscope to figure out what these displays actually contain. Yours, Linus Walleij