Lines Matching +full:netron +full:- +full:dy
17 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
44 #include "panel-simple.h"
178 return -EINVAL; in panel_simple_parse_cmd_seq()
182 return -ENOMEM; in panel_simple_parse_cmd_seq()
191 len -= sizeof(*header); in panel_simple_parse_cmd_seq()
193 if (header->payload_length > len) in panel_simple_parse_cmd_seq()
194 return -EINVAL; in panel_simple_parse_cmd_seq()
196 d += header->payload_length; in panel_simple_parse_cmd_seq()
197 len -= header->payload_length; in panel_simple_parse_cmd_seq()
202 return -EINVAL; in panel_simple_parse_cmd_seq()
204 seq->cmd_cnt = cnt; in panel_simple_parse_cmd_seq()
205 seq->cmds = devm_kcalloc(dev, cnt, sizeof(*desc), GFP_KERNEL); in panel_simple_parse_cmd_seq()
206 if (!seq->cmds) in panel_simple_parse_cmd_seq()
207 return -ENOMEM; in panel_simple_parse_cmd_seq()
213 len -= sizeof(*header); in panel_simple_parse_cmd_seq()
216 desc = &seq->cmds[i]; in panel_simple_parse_cmd_seq()
217 desc->header = *header; in panel_simple_parse_cmd_seq()
218 desc->payload = d; in panel_simple_parse_cmd_seq()
220 d += header->payload_length; in panel_simple_parse_cmd_seq()
221 len -= header->payload_length; in panel_simple_parse_cmd_seq()
230 struct device *dev = panel->base.dev; in panel_simple_xfer_dsi_cmd_seq()
231 struct mipi_dsi_device *dsi = panel->dsi; in panel_simple_xfer_dsi_cmd_seq()
236 return -EINVAL; in panel_simple_xfer_dsi_cmd_seq()
238 return -EINVAL; in panel_simple_xfer_dsi_cmd_seq()
240 for (i = 0; i < seq->cmd_cnt; i++) { in panel_simple_xfer_dsi_cmd_seq()
241 struct panel_cmd_desc *cmd = &seq->cmds[i]; in panel_simple_xfer_dsi_cmd_seq()
243 switch (cmd->header.data_type) { in panel_simple_xfer_dsi_cmd_seq()
245 err = mipi_dsi_compression_mode(dsi, cmd->payload[0]); in panel_simple_xfer_dsi_cmd_seq()
251 err = mipi_dsi_generic_write(dsi, cmd->payload, in panel_simple_xfer_dsi_cmd_seq()
252 cmd->header.payload_length); in panel_simple_xfer_dsi_cmd_seq()
257 err = mipi_dsi_dcs_write_buffer(dsi, cmd->payload, in panel_simple_xfer_dsi_cmd_seq()
258 cmd->header.payload_length); in panel_simple_xfer_dsi_cmd_seq()
261 if (!panel->pps) { in panel_simple_xfer_dsi_cmd_seq()
262 panel->pps = devm_kzalloc(dev, sizeof(*panel->pps), in panel_simple_xfer_dsi_cmd_seq()
264 if (!panel->pps) in panel_simple_xfer_dsi_cmd_seq()
265 return -ENOMEM; in panel_simple_xfer_dsi_cmd_seq()
267 memcpy(panel->pps, cmd->payload, cmd->header.payload_length); in panel_simple_xfer_dsi_cmd_seq()
270 err = mipi_dsi_picture_parameter_set(dsi, panel->pps); in panel_simple_xfer_dsi_cmd_seq()
273 return -EINVAL; in panel_simple_xfer_dsi_cmd_seq()
279 if (cmd->header.delay) in panel_simple_xfer_dsi_cmd_seq()
280 msleep(cmd->header.delay); in panel_simple_xfer_dsi_cmd_seq()
292 return -EINVAL; in panel_simple_xfer_spi_cmd_seq()
294 for (i = 0; i < cmds->cmd_cnt; i++) { in panel_simple_xfer_spi_cmd_seq()
295 struct panel_cmd_desc *cmd = &cmds->cmds[i]; in panel_simple_xfer_spi_cmd_seq()
297 ret = panel->desc->spi_write(panel->base.dev, cmd->payload, in panel_simple_xfer_spi_cmd_seq()
298 cmd->header.payload_length, cmd->header.data_type); in panel_simple_xfer_spi_cmd_seq()
302 if (cmd->header.delay) in panel_simple_xfer_spi_cmd_seq()
303 usleep_range(cmd->header.delay * 1000, (cmd->header.delay + 1) * 1000); in panel_simple_xfer_spi_cmd_seq()
315 for (i = 0; i < panel->desc->num_timings; i++) { in panel_simple_get_timings_modes()
316 const struct display_timing *dt = &panel->desc->timings[i]; in panel_simple_get_timings_modes()
320 mode = drm_mode_create(connector->dev); in panel_simple_get_timings_modes()
322 dev_err(panel->base.dev, "failed to add mode %ux%u\n", in panel_simple_get_timings_modes()
323 dt->hactive.typ, dt->vactive.typ); in panel_simple_get_timings_modes()
329 mode->type |= DRM_MODE_TYPE_DRIVER; in panel_simple_get_timings_modes()
331 if (panel->desc->num_timings == 1) in panel_simple_get_timings_modes()
332 mode->type |= DRM_MODE_TYPE_PREFERRED; in panel_simple_get_timings_modes()
347 for (i = 0; i < panel->desc->num_modes; i++) { in panel_simple_get_display_modes()
348 const struct drm_display_mode *m = &panel->desc->modes[i]; in panel_simple_get_display_modes()
350 mode = drm_mode_duplicate(connector->dev, m); in panel_simple_get_display_modes()
352 dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n", in panel_simple_get_display_modes()
353 m->hdisplay, m->vdisplay, in panel_simple_get_display_modes()
358 mode->type |= DRM_MODE_TYPE_DRIVER; in panel_simple_get_display_modes()
360 if (panel->desc->num_modes == 1) in panel_simple_get_display_modes()
361 mode->type |= DRM_MODE_TYPE_PREFERRED; in panel_simple_get_display_modes()
376 bool has_override = panel->override_mode.type; in panel_simple_get_non_edid_modes()
379 if (!panel->desc) in panel_simple_get_non_edid_modes()
383 mode = drm_mode_duplicate(connector->dev, in panel_simple_get_non_edid_modes()
384 &panel->override_mode); in panel_simple_get_non_edid_modes()
389 dev_err(panel->base.dev, "failed to add override mode\n"); in panel_simple_get_non_edid_modes()
394 if (num == 0 && panel->desc->num_timings) in panel_simple_get_non_edid_modes()
403 WARN_ON(panel->desc->num_timings && panel->desc->num_modes); in panel_simple_get_non_edid_modes()
407 if (panel->desc->bpc) in panel_simple_get_non_edid_modes()
408 connector->display_info.bpc = panel->desc->bpc; in panel_simple_get_non_edid_modes()
409 if (panel->desc->size.width) in panel_simple_get_non_edid_modes()
410 connector->display_info.width_mm = panel->desc->size.width; in panel_simple_get_non_edid_modes()
411 if (panel->desc->size.height) in panel_simple_get_non_edid_modes()
412 connector->display_info.height_mm = panel->desc->size.height; in panel_simple_get_non_edid_modes()
413 if (panel->desc->bus_format) in panel_simple_get_non_edid_modes()
414 drm_display_info_set_bus_formats(&connector->display_info, in panel_simple_get_non_edid_modes()
415 &panel->desc->bus_format, 1); in panel_simple_get_non_edid_modes()
416 if (panel->desc->bus_flags) in panel_simple_get_non_edid_modes()
417 connector->display_info.bus_flags = panel->desc->bus_flags; in panel_simple_get_non_edid_modes()
426 if (p->power_invert) { in panel_simple_regulator_enable()
427 if (regulator_is_enabled(p->supply) > 0) in panel_simple_regulator_enable()
428 regulator_disable(p->supply); in panel_simple_regulator_enable()
430 err = regulator_enable(p->supply); in panel_simple_regulator_enable()
442 if (p->power_invert) { in panel_simple_regulator_disable()
443 if (!regulator_is_enabled(p->supply)) { in panel_simple_regulator_disable()
444 err = regulator_enable(p->supply); in panel_simple_regulator_disable()
449 regulator_disable(p->supply); in panel_simple_regulator_disable()
462 dev_err(panel->dev, "failed to enable supply: %d\n", err); in panel_simple_loader_protect()
466 p->prepared = true; in panel_simple_loader_protect()
467 p->enabled = true; in panel_simple_loader_protect()
477 if (!p->enabled) in panel_simple_disable()
480 if (p->desc->delay.disable) in panel_simple_disable()
481 msleep(p->desc->delay.disable); in panel_simple_disable()
483 p->enabled = false; in panel_simple_disable()
492 if (!p->prepared) in panel_simple_unprepare()
495 if (p->desc->exit_seq) { in panel_simple_unprepare()
496 if (p->desc->cmd_type == CMD_TYPE_SPI) { in panel_simple_unprepare()
497 if (panel_simple_xfer_spi_cmd_seq(p, p->desc->exit_seq)) { in panel_simple_unprepare()
498 dev_err(panel->dev, "failed to send exit spi cmds seq\n"); in panel_simple_unprepare()
499 return -EINVAL; in panel_simple_unprepare()
502 if (p->dsi) in panel_simple_unprepare()
503 panel_simple_xfer_dsi_cmd_seq(p, p->desc->exit_seq); in panel_simple_unprepare()
507 gpiod_direction_output(p->reset_gpio, 1); in panel_simple_unprepare()
508 gpiod_direction_output(p->enable_gpio, 0); in panel_simple_unprepare()
512 if (p->desc->delay.unprepare) in panel_simple_unprepare()
513 msleep(p->desc->delay.unprepare); in panel_simple_unprepare()
515 p->prepared = false; in panel_simple_unprepare()
525 p->hpd_gpio = devm_gpiod_get_optional(dev, "hpd", GPIOD_IN); in panel_simple_get_hpd_gpio()
526 if (IS_ERR(p->hpd_gpio)) { in panel_simple_get_hpd_gpio()
527 err = PTR_ERR(p->hpd_gpio); in panel_simple_get_hpd_gpio()
530 * If we're called from probe we won't consider '-EPROBE_DEFER' in panel_simple_get_hpd_gpio()
531 * to be an error--we'll leave the error code in "hpd_gpio". in panel_simple_get_hpd_gpio()
536 if (err != -EPROBE_DEFER || !from_probe) { in panel_simple_get_hpd_gpio()
552 if (p->prepared) in panel_simple_prepare()
557 dev_err(panel->dev, "failed to enable supply: %d\n", err); in panel_simple_prepare()
561 gpiod_direction_output(p->enable_gpio, 1); in panel_simple_prepare()
563 delay = p->desc->delay.prepare; in panel_simple_prepare()
564 if (p->no_hpd) in panel_simple_prepare()
565 delay += p->desc->delay.hpd_absent_delay; in panel_simple_prepare()
569 if (p->hpd_gpio) { in panel_simple_prepare()
570 if (IS_ERR(p->hpd_gpio)) { in panel_simple_prepare()
571 err = panel_simple_get_hpd_gpio(panel->dev, p, false); in panel_simple_prepare()
576 err = readx_poll_timeout(gpiod_get_value_cansleep, p->hpd_gpio, in panel_simple_prepare()
583 dev_err(panel->dev, in panel_simple_prepare()
589 gpiod_direction_output(p->reset_gpio, 1); in panel_simple_prepare()
591 if (p->desc->delay.reset) in panel_simple_prepare()
592 msleep(p->desc->delay.reset); in panel_simple_prepare()
594 gpiod_direction_output(p->reset_gpio, 0); in panel_simple_prepare()
596 if (p->desc->delay.init) in panel_simple_prepare()
597 msleep(p->desc->delay.init); in panel_simple_prepare()
599 if (p->desc->init_seq) { in panel_simple_prepare()
600 if (p->desc->cmd_type == CMD_TYPE_SPI) { in panel_simple_prepare()
601 if (panel_simple_xfer_spi_cmd_seq(p, p->desc->init_seq)) { in panel_simple_prepare()
602 dev_err(panel->dev, "failed to send init spi cmds seq\n"); in panel_simple_prepare()
603 return -EINVAL; in panel_simple_prepare()
606 if (p->dsi) in panel_simple_prepare()
607 panel_simple_xfer_dsi_cmd_seq(p, p->desc->init_seq); in panel_simple_prepare()
611 p->prepared = true; in panel_simple_prepare()
620 if (p->enabled) in panel_simple_enable()
623 if (p->desc->delay.enable) in panel_simple_enable()
624 msleep(p->desc->delay.enable); in panel_simple_enable()
626 p->enabled = true; in panel_simple_enable()
638 if (p->ddc) { in panel_simple_get_modes()
639 struct edid *edid = drm_get_edid(connector, p->ddc); in panel_simple_get_modes()
648 /* add hard-coded panel modes */ in panel_simple_get_modes()
652 drm_connector_set_panel_orientation(connector, p->orientation); in panel_simple_get_modes()
664 if (p->desc->num_timings < num_timings) in panel_simple_get_timings()
665 num_timings = p->desc->num_timings; in panel_simple_get_timings()
669 timings[i] = p->desc->timings[i]; in panel_simple_get_timings()
671 return p->desc->num_timings; in panel_simple_get_timings()
695 np = dev->of_node; in panel_dpi_probe()
698 return -ENOMEM; in panel_dpi_probe()
702 return -ENOMEM; in panel_dpi_probe()
704 ret = of_get_display_timing(np, "panel-timing", timing); in panel_dpi_probe()
706 dev_err(dev, "%pOF: no panel-timing node found for \"panel-dpi\" binding\n", in panel_dpi_probe()
711 desc->timings = timing; in panel_dpi_probe()
712 desc->num_timings = 1; in panel_dpi_probe()
714 of_property_read_u32(np, "width-mm", &desc->size.width); in panel_dpi_probe()
715 of_property_read_u32(np, "height-mm", &desc->size.height); in panel_dpi_probe()
719 vm.flags = timing->flags; in panel_dpi_probe()
721 desc->bus_flags = bus_flags; in panel_dpi_probe()
724 desc->connector_type = DRM_MODE_CONNECTOR_DPI; in panel_dpi_probe()
726 panel->desc = desc; in panel_dpi_probe()
732 (to_check->field.typ >= bounds->field.min && \
733 to_check->field.typ <= bounds->field.max)
738 const struct panel_desc *desc = panel->desc; in panel_simple_parse_panel_timing_node()
742 if (WARN_ON(desc->num_modes)) { in panel_simple_parse_panel_timing_node()
746 if (WARN_ON(!desc->num_timings)) { in panel_simple_parse_panel_timing_node()
751 for (i = 0; i < panel->desc->num_timings; i++) { in panel_simple_parse_panel_timing_node()
752 const struct display_timing *dt = &panel->desc->timings[i]; in panel_simple_parse_panel_timing_node()
764 if (ot->flags != dt->flags) in panel_simple_parse_panel_timing_node()
768 drm_display_mode_from_videomode(&vm, &panel->override_mode); in panel_simple_parse_panel_timing_node()
769 panel->override_mode.type |= DRM_MODE_TYPE_DRIVER | in panel_simple_parse_panel_timing_node()
774 if (WARN_ON(!panel->override_mode.type)) in panel_simple_parse_panel_timing_node()
781 struct mipi_dsi_device *dsi = p->dsi; in dcs_bl_update_status()
784 if (!p->prepared) in dcs_bl_update_status()
787 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in dcs_bl_update_status()
789 ret = mipi_dsi_dcs_set_display_brightness(dsi, bl->props.brightness); in dcs_bl_update_status()
793 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in dcs_bl_update_status()
801 struct mipi_dsi_device *dsi = p->dsi; in dcs_bl_get_brightness()
802 u16 brightness = bl->props.brightness; in dcs_bl_get_brightness()
805 if (!p->prepared) in dcs_bl_get_brightness()
808 dsi->mode_flags &= ~MIPI_DSI_MODE_LPM; in dcs_bl_get_brightness()
814 dsi->mode_flags |= MIPI_DSI_MODE_LPM; in dcs_bl_get_brightness()
835 return -ENOMEM; in panel_simple_probe()
837 panel->enabled = false; in panel_simple_probe()
838 panel->prepared = false; in panel_simple_probe()
839 panel->desc = desc; in panel_simple_probe()
841 panel->no_hpd = of_property_read_bool(dev->of_node, "no-hpd"); in panel_simple_probe()
842 if (!panel->no_hpd) { in panel_simple_probe()
848 panel->supply = devm_regulator_get(dev, "power"); in panel_simple_probe()
849 if (IS_ERR(panel->supply)) { in panel_simple_probe()
850 err = PTR_ERR(panel->supply); in panel_simple_probe()
855 panel->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_ASIS); in panel_simple_probe()
856 if (IS_ERR(panel->enable_gpio)) { in panel_simple_probe()
857 err = PTR_ERR(panel->enable_gpio); in panel_simple_probe()
858 if (err != -EPROBE_DEFER) in panel_simple_probe()
863 panel->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_ASIS); in panel_simple_probe()
864 if (IS_ERR(panel->reset_gpio)) { in panel_simple_probe()
865 err = PTR_ERR(panel->reset_gpio); in panel_simple_probe()
866 if (err != -EPROBE_DEFER) in panel_simple_probe()
871 err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation); in panel_simple_probe()
873 dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err); in panel_simple_probe()
877 panel->power_invert = of_property_read_bool(dev->of_node, "power-invert"); in panel_simple_probe()
879 ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0); in panel_simple_probe()
881 panel->ddc = of_find_i2c_adapter_by_node(ddc); in panel_simple_probe()
884 if (!panel->ddc) { in panel_simple_probe()
885 err = -EPROBE_DEFER; in panel_simple_probe()
886 dev_err(dev, "failed to find ddc-i2c-bus: %d\n", err); in panel_simple_probe()
892 /* Handle the generic panel-dpi binding */ in panel_simple_probe()
896 desc = panel->desc; in panel_simple_probe()
898 if (!of_get_display_timing(dev->of_node, "panel-timing", &dt)) in panel_simple_probe()
902 connector_type = desc->connector_type; in panel_simple_probe()
910 WARN_ON(desc->bus_flags & in panel_simple_probe()
915 WARN_ON(desc->bus_format != MEDIA_BUS_FMT_RGB666_1X7X3_SPWG && in panel_simple_probe()
916 desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_SPWG && in panel_simple_probe()
917 desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA); in panel_simple_probe()
918 WARN_ON(desc->bus_format == MEDIA_BUS_FMT_RGB666_1X7X3_SPWG && in panel_simple_probe()
919 desc->bpc != 6); in panel_simple_probe()
920 WARN_ON((desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG || in panel_simple_probe()
921 desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA) && in panel_simple_probe()
922 desc->bpc != 8); in panel_simple_probe()
925 if (desc->bus_format == 0) in panel_simple_probe()
927 if (desc->bpc != 6 && desc->bpc != 8) in panel_simple_probe()
928 dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc); in panel_simple_probe()
931 if (desc->bpc != 6 && desc->bpc != 8) in panel_simple_probe()
932 dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc); in panel_simple_probe()
943 if (desc->bus_flags & ~bus_flags) in panel_simple_probe()
944 dev_warn(dev, "Unexpected bus_flags(%d)\n", desc->bus_flags & ~bus_flags); in panel_simple_probe()
945 if (!(desc->bus_flags & bus_flags)) in panel_simple_probe()
947 if (desc->bus_format == 0) in panel_simple_probe()
949 if (desc->bpc != 6 && desc->bpc != 8) in panel_simple_probe()
950 dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc); in panel_simple_probe()
953 dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type); in panel_simple_probe()
958 drm_panel_init(&panel->base, dev, &panel_simple_funcs, connector_type); in panel_simple_probe()
960 err = drm_panel_of_backlight(&panel->base); in panel_simple_probe()
966 drm_panel_add(&panel->base); in panel_simple_probe()
973 if (panel->ddc) in panel_simple_probe()
974 put_device(&panel->ddc->dev); in panel_simple_probe()
983 drm_panel_remove(&panel->base); in panel_simple_remove()
984 drm_panel_disable(&panel->base); in panel_simple_remove()
985 drm_panel_unprepare(&panel->base); in panel_simple_remove()
987 if (panel->ddc) in panel_simple_remove()
988 put_device(&panel->ddc->dev); in panel_simple_remove()
997 drm_panel_disable(&panel->base); in panel_simple_shutdown()
998 drm_panel_unprepare(&panel->base); in panel_simple_shutdown()
1690 * - If HPD isn't hooked up you still have 200 ms delay.
1691 * - If HPD is hooked up we won't try to look at it for the
1759 /* S070PWS19HP-FC21 2017/04/22 */
1786 /* S070SWV29HG-DC44 2017/09/21 */
2576 * - total horizontal time: { 1506, 1592, 1716 }
2577 * - total vertical time: { 788, 800, 868 }
3370 * https://www.adafruit.com/images/product-files/2406/c3163.pdf
4137 .hback_porch = { 216 - 128, 216 - 128, 216 - 128 },
4141 .vback_porch = { 35 - 2, 35 - 2, 35 - 2 },
4247 .compatible = "simple-panel",
4250 .compatible = "ampire,am-1280800n3tzqw-t00h",
4253 .compatible = "ampire,am-480272h3tmqw-t01h",
4259 .compatible = "arm,rtsm-display",
4262 .compatible = "armadeus,st0700-adapt",
4319 .compatible = "bananapi,s070wv20-ct16",
4322 .compatible = "boe,hv070wsa-100",
4328 .compatible = "boe,nv133fhm-n61",
4331 .compatible = "boe,nv133fhm-n62",
4337 .compatible = "cdtech,s043wq26h-ct7",
4340 .compatible = "cdtech,s070pws19hp-fc21",
4343 .compatible = "cdtech,s070swv29hg-dc44",
4346 .compatible = "cdtech,s070wv95-ct16",
4349 .compatible = "chefree,ch101olhlwh-002",
4364 .compatible = "dlc,dlc0700yzg-1",
4397 .compatible = "foxlink,fl500wvr00-a0t",
4427 .compatible = "innolux,g070y2-l01",
4430 .compatible = "innolux,g101ice-l01",
4433 .compatible = "innolux,g121i1-l01",
4436 .compatible = "innolux,g121x1-l03",
4442 .compatible = "innolux,n156bge-l21",
4445 .compatible = "innolux,p120zdg-bf1",
4448 .compatible = "innolux,zj070na-01p",
4451 .compatible = "ivo,m133nwf4-r0",
4454 .compatible = "kingdisplay,kd116n21-30nv-a010",
4469 .compatible = "lemaker,bl035-rgb-002",
4475 .compatible = "lg,lp079qx1-sp0v",
4478 .compatible = "lg,lp097qx1-spa1",
4490 .compatible = "logictechno,lt161010-2nhc",
4493 .compatible = "logictechno,lt161010-2nhr",
4496 .compatible = "logictechno,lt170410-2whc",
4499 .compatible = "mitsubishi,aa070mc01-ca1",
4502 .compatible = "nec,nl12880bc20-05",
4505 .compatible = "nec,nl4827hc19-05b",
4508 .compatible = "netron-dy,e231732",
4514 .compatible = "newhaven,nhd-4.3-480272ef-atxl",
4517 .compatible = "nlt,nl192108ac18-02d",
4523 .compatible = "okaya,rs800480t-7x0gp",
4526 .compatible = "olimex,lcd-olinuxino-43-ts",
4541 .compatible = "osddisplays,osd070t1718-19ts",
4544 .compatible = "pda,91-00156-a0",
4547 .compatible = "powertip,ph800480t013-idf02",
4550 .compatible = "qiaodian,qd43003c0-40",
4556 .compatible = "rocktech,rk101ii01d-ct",
4559 .compatible = "samsung,lsn122dl01-c01",
4565 .compatible = "samsung,ltn140at29-301",
4571 .compatible = "sharp,ld-d5116z01b",
4589 .compatible = "shelly,sca07010-bfn-lnn",
4598 .compatible = "tfc,s9700rtwv43tr-01b",
4610 .compatible = "ti,nspire-cx-lcd-panel",
4613 .compatible = "ti,nspire-classic-lcd-panel",
4619 .compatible = "tpk,f07a-0102",
4622 .compatible = "tpk,f10a-0102",
4625 .compatible = "urt,umsh-8596md-t",
4628 .compatible = "urt,umsh-8596md-1t",
4631 .compatible = "urt,umsh-8596md-7t",
4634 .compatible = "urt,umsh-8596md-11t",
4637 .compatible = "urt,umsh-8596md-19t",
4640 .compatible = "urt,umsh-8596md-20t",
4643 .compatible = "vxt,vl050-8048nt-c01",
4650 .compatible = "panel-dpi",
4672 struct device_node *np = dev->of_node; in panel_simple_of_get_desc_data()
4678 if (of_child_node_is_present(np, "display-timings")) { in panel_simple_of_get_desc_data()
4683 return -ENOMEM; in panel_simple_of_get_desc_data()
4687 desc->modes = mode; in panel_simple_of_get_desc_data()
4688 desc->num_modes = 1; in panel_simple_of_get_desc_data()
4689 desc->bus_flags = bus_flags; in panel_simple_of_get_desc_data()
4691 } else if (of_child_node_is_present(np, "panel-timing")) { in panel_simple_of_get_desc_data()
4697 return -ENOMEM; in panel_simple_of_get_desc_data()
4699 if (!of_get_display_timing(np, "panel-timing", timing)) { in panel_simple_of_get_desc_data()
4700 desc->timings = timing; in panel_simple_of_get_desc_data()
4701 desc->num_timings = 1; in panel_simple_of_get_desc_data()
4704 vm.flags = timing->flags; in panel_simple_of_get_desc_data()
4706 desc->bus_flags = bus_flags; in panel_simple_of_get_desc_data()
4710 if (desc->num_modes || desc->num_timings) { in panel_simple_of_get_desc_data()
4711 of_property_read_u32(np, "bpc", &desc->bpc); in panel_simple_of_get_desc_data()
4712 of_property_read_u32(np, "bus-format", &desc->bus_format); in panel_simple_of_get_desc_data()
4713 of_property_read_u32(np, "width-mm", &desc->size.width); in panel_simple_of_get_desc_data()
4714 of_property_read_u32(np, "height-mm", &desc->size.height); in panel_simple_of_get_desc_data()
4717 of_property_read_u32(np, "prepare-delay-ms", &desc->delay.prepare); in panel_simple_of_get_desc_data()
4718 of_property_read_u32(np, "enable-delay-ms", &desc->delay.enable); in panel_simple_of_get_desc_data()
4719 of_property_read_u32(np, "disable-delay-ms", &desc->delay.disable); in panel_simple_of_get_desc_data()
4720 of_property_read_u32(np, "unprepare-delay-ms", &desc->delay.unprepare); in panel_simple_of_get_desc_data()
4721 of_property_read_u32(np, "reset-delay-ms", &desc->delay.reset); in panel_simple_of_get_desc_data()
4722 of_property_read_u32(np, "init-delay-ms", &desc->delay.init); in panel_simple_of_get_desc_data()
4724 data = of_get_property(np, "panel-init-sequence", &len); in panel_simple_of_get_desc_data()
4726 desc->init_seq = devm_kzalloc(dev, sizeof(*desc->init_seq), in panel_simple_of_get_desc_data()
4728 if (!desc->init_seq) in panel_simple_of_get_desc_data()
4729 return -ENOMEM; in panel_simple_of_get_desc_data()
4732 desc->init_seq); in panel_simple_of_get_desc_data()
4739 data = of_get_property(np, "panel-exit-sequence", &len); in panel_simple_of_get_desc_data()
4741 desc->exit_seq = devm_kzalloc(dev, sizeof(*desc->exit_seq), in panel_simple_of_get_desc_data()
4743 if (!desc->exit_seq) in panel_simple_of_get_desc_data()
4744 return -ENOMEM; in panel_simple_of_get_desc_data()
4747 desc->exit_seq); in panel_simple_of_get_desc_data()
4759 struct device *dev = &pdev->dev; in panel_simple_platform_probe()
4765 id = of_match_node(platform_of_match, pdev->dev.of_node); in panel_simple_platform_probe()
4767 return -ENODEV; in panel_simple_platform_probe()
4769 if (!id->data) { in panel_simple_platform_probe()
4772 return -ENOMEM; in panel_simple_platform_probe()
4781 desc = id->data ? id->data : d; in panel_simple_platform_probe()
4783 return panel_simple_probe(&pdev->dev, desc); in panel_simple_platform_probe()
4788 return panel_simple_remove(&pdev->dev); in panel_simple_platform_remove()
4793 panel_simple_shutdown(&pdev->dev); in panel_simple_platform_shutdown()
4798 .name = "panel-simple",
5018 .compatible = "simple-panel-dsi",
5024 .compatible = "boe,tv080wum-nl0",
5027 .compatible = "lg,ld070wx3-sl01",
5030 .compatible = "lg,lh500wx1-sd03",
5036 .compatible = "lg,acx467akm-7",
5039 .compatible = "osddisplays,osd101t2045-53ts",
5050 struct device_node *np = dev->of_node; in panel_simple_dsi_of_get_desc_data()
5054 err = panel_simple_of_get_desc_data(dev, &desc->desc); in panel_simple_dsi_of_get_desc_data()
5059 desc->flags = val; in panel_simple_dsi_of_get_desc_data()
5061 desc->format = val; in panel_simple_dsi_of_get_desc_data()
5063 desc->lanes = val; in panel_simple_dsi_of_get_desc_data()
5071 struct device *dev = &dsi->dev; in panel_simple_dsi_probe()
5077 id = of_match_node(dsi_of_match, dsi->dev.of_node); in panel_simple_dsi_probe()
5079 return -ENODEV; in panel_simple_dsi_probe()
5081 if (!id->data) { in panel_simple_dsi_probe()
5084 return -ENOMEM; in panel_simple_dsi_probe()
5093 desc = id->data ? id->data : d; in panel_simple_dsi_probe()
5095 err = panel_simple_probe(&dsi->dev, &desc->desc); in panel_simple_dsi_probe()
5100 panel->dsi = dsi; in panel_simple_dsi_probe()
5102 if (!panel->base.backlight) { in panel_simple_dsi_probe()
5110 panel->base.backlight = in panel_simple_dsi_probe()
5111 devm_backlight_device_register(dev, "dcs-backlight", in panel_simple_dsi_probe()
5114 if (IS_ERR(panel->base.backlight)) { in panel_simple_dsi_probe()
5115 err = PTR_ERR(panel->base.backlight); in panel_simple_dsi_probe()
5122 dsi->mode_flags = desc->flags; in panel_simple_dsi_probe()
5123 dsi->format = desc->format; in panel_simple_dsi_probe()
5124 dsi->lanes = desc->lanes; in panel_simple_dsi_probe()
5128 struct panel_simple *panel = dev_get_drvdata(&dsi->dev); in panel_simple_dsi_probe()
5130 drm_panel_remove(&panel->base); in panel_simple_dsi_probe()
5142 dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", err); in panel_simple_dsi_remove()
5144 return panel_simple_remove(&dsi->dev); in panel_simple_dsi_remove()
5149 panel_simple_shutdown(&dsi->dev); in panel_simple_dsi_shutdown()
5154 .name = "panel-simple-dsi",
5201 { .compatible = "simple-panel-spi", .data = NULL },
5208 struct device *dev = &spi->dev; in panel_simple_spi_probe()
5214 id = of_match_node(panel_simple_spi_of_match, dev->of_node); in panel_simple_spi_probe()
5216 return -ENODEV; in panel_simple_spi_probe()
5218 if (!id->data) { in panel_simple_spi_probe()
5221 return -ENOMEM; in panel_simple_spi_probe()
5229 d->spi_write = panel_simple_spi_write; in panel_simple_spi_probe()
5230 d->spi_read = panel_simple_spi_read; in panel_simple_spi_probe()
5231 d->cmd_type = CMD_TYPE_SPI; in panel_simple_spi_probe()
5233 desc = id->data ? id->data : d; in panel_simple_spi_probe()
5238 spi->bits_per_word = 9; in panel_simple_spi_probe()
5239 spi->mode = SPI_MODE_3; in panel_simple_spi_probe()
5251 return panel_simple_remove(&spi->dev); in panel_simple_spi_remove()
5256 panel_simple_shutdown(&spi->dev); in panel_simple_spi_shutdown()
5261 .name = "panel-simple-spi",