Lines Matching +full:ti +full:- +full:nspire
17 * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
27 #include <linux/media-bus-format.h>
47 * struct panel_desc - Describes a simple panel.
178 for (i = 0; i < panel->desc->num_timings; i++) { in panel_simple_get_timings_modes()
179 const struct display_timing *dt = &panel->desc->timings[i]; in panel_simple_get_timings_modes()
183 mode = drm_mode_create(connector->dev); in panel_simple_get_timings_modes()
185 dev_err(panel->base.dev, "failed to add mode %ux%u\n", in panel_simple_get_timings_modes()
186 dt->hactive.typ, dt->vactive.typ); in panel_simple_get_timings_modes()
192 mode->type |= DRM_MODE_TYPE_DRIVER; in panel_simple_get_timings_modes()
194 if (panel->desc->num_timings == 1) in panel_simple_get_timings_modes()
195 mode->type |= DRM_MODE_TYPE_PREFERRED; in panel_simple_get_timings_modes()
210 for (i = 0; i < panel->desc->num_modes; i++) { in panel_simple_get_display_modes()
211 const struct drm_display_mode *m = &panel->desc->modes[i]; in panel_simple_get_display_modes()
213 mode = drm_mode_duplicate(connector->dev, m); in panel_simple_get_display_modes()
215 dev_err(panel->base.dev, "failed to add mode %ux%u@%u\n", in panel_simple_get_display_modes()
216 m->hdisplay, m->vdisplay, in panel_simple_get_display_modes()
221 mode->type |= DRM_MODE_TYPE_DRIVER; in panel_simple_get_display_modes()
223 if (panel->desc->num_modes == 1) in panel_simple_get_display_modes()
224 mode->type |= DRM_MODE_TYPE_PREFERRED; in panel_simple_get_display_modes()
239 bool has_override = panel->override_mode.type; in panel_simple_get_non_edid_modes()
242 if (!panel->desc) in panel_simple_get_non_edid_modes()
246 mode = drm_mode_duplicate(connector->dev, in panel_simple_get_non_edid_modes()
247 &panel->override_mode); in panel_simple_get_non_edid_modes()
252 dev_err(panel->base.dev, "failed to add override mode\n"); in panel_simple_get_non_edid_modes()
257 if (num == 0 && panel->desc->num_timings) in panel_simple_get_non_edid_modes()
266 WARN_ON(panel->desc->num_timings && panel->desc->num_modes); in panel_simple_get_non_edid_modes()
270 connector->display_info.bpc = panel->desc->bpc; in panel_simple_get_non_edid_modes()
271 connector->display_info.width_mm = panel->desc->size.width; in panel_simple_get_non_edid_modes()
272 connector->display_info.height_mm = panel->desc->size.height; in panel_simple_get_non_edid_modes()
273 if (panel->desc->bus_format) in panel_simple_get_non_edid_modes()
274 drm_display_info_set_bus_formats(&connector->display_info, in panel_simple_get_non_edid_modes()
275 &panel->desc->bus_format, 1); in panel_simple_get_non_edid_modes()
276 connector->display_info.bus_flags = panel->desc->bus_flags; in panel_simple_get_non_edid_modes()
299 if (p->desc->delay.disable) in panel_simple_disable()
300 msleep(p->desc->delay.disable); in panel_simple_disable()
309 gpiod_set_value_cansleep(p->enable_gpio, 0); in panel_simple_suspend()
310 regulator_disable(p->supply); in panel_simple_suspend()
311 p->unprepared_time = ktime_get_boottime(); in panel_simple_suspend()
313 drm_edid_free(p->drm_edid); in panel_simple_suspend()
314 p->drm_edid = NULL; in panel_simple_suspend()
323 pm_runtime_mark_last_busy(panel->dev); in panel_simple_unprepare()
324 ret = pm_runtime_put_autosuspend(panel->dev); in panel_simple_unprepare()
336 panel_simple_wait(p->unprepared_time, p->desc->delay.unprepare); in panel_simple_resume()
338 err = regulator_enable(p->supply); in panel_simple_resume()
344 gpiod_set_value_cansleep(p->enable_gpio, 1); in panel_simple_resume()
346 if (p->desc->delay.prepare) in panel_simple_resume()
347 msleep(p->desc->delay.prepare); in panel_simple_resume()
356 ret = pm_runtime_get_sync(panel->dev); in panel_simple_prepare()
358 pm_runtime_put_autosuspend(panel->dev); in panel_simple_prepare()
369 if (p->desc->delay.enable) in panel_simple_enable()
370 msleep(p->desc->delay.enable); in panel_simple_enable()
382 if (p->ddc) { in panel_simple_get_modes()
383 pm_runtime_get_sync(panel->dev); in panel_simple_get_modes()
385 if (!p->drm_edid) in panel_simple_get_modes()
386 p->drm_edid = drm_edid_read_ddc(connector, p->ddc); in panel_simple_get_modes()
388 drm_edid_connector_update(connector, p->drm_edid); in panel_simple_get_modes()
392 pm_runtime_mark_last_busy(panel->dev); in panel_simple_get_modes()
393 pm_runtime_put_autosuspend(panel->dev); in panel_simple_get_modes()
396 /* add hard-coded panel modes */ in panel_simple_get_modes()
403 drm_connector_set_panel_orientation(connector, p->orientation); in panel_simple_get_modes()
415 if (p->desc->num_timings < num_timings) in panel_simple_get_timings()
416 num_timings = p->desc->num_timings; in panel_simple_get_timings()
420 timings[i] = p->desc->timings[i]; in panel_simple_get_timings()
422 return p->desc->num_timings; in panel_simple_get_timings()
429 return p->orientation; in panel_simple_get_orientation()
451 np = dev->of_node; in panel_dpi_probe()
454 return ERR_PTR(-ENOMEM); in panel_dpi_probe()
458 return ERR_PTR(-ENOMEM); in panel_dpi_probe()
460 ret = of_get_display_timing(np, "panel-timing", timing); in panel_dpi_probe()
462 dev_err(dev, "%pOF: no panel-timing node found for \"panel-dpi\" binding\n", in panel_dpi_probe()
467 desc->timings = timing; in panel_dpi_probe()
468 desc->num_timings = 1; in panel_dpi_probe()
470 of_property_read_u32(np, "width-mm", &desc->size.width); in panel_dpi_probe()
471 of_property_read_u32(np, "height-mm", &desc->size.height); in panel_dpi_probe()
475 vm.flags = timing->flags; in panel_dpi_probe()
477 desc->bus_flags = bus_flags; in panel_dpi_probe()
480 desc->connector_type = DRM_MODE_CONNECTOR_DPI; in panel_dpi_probe()
486 (to_check->field.typ >= bounds->field.min && \
487 to_check->field.typ <= bounds->field.max)
492 const struct panel_desc *desc = panel->desc; in panel_simple_parse_panel_timing_node()
496 if (WARN_ON(desc->num_modes)) { in panel_simple_parse_panel_timing_node()
500 if (WARN_ON(!desc->num_timings)) { in panel_simple_parse_panel_timing_node()
505 for (i = 0; i < panel->desc->num_timings; i++) { in panel_simple_parse_panel_timing_node()
506 const struct display_timing *dt = &panel->desc->timings[i]; in panel_simple_parse_panel_timing_node()
518 if (ot->flags != dt->flags) in panel_simple_parse_panel_timing_node()
522 drm_display_mode_from_videomode(&vm, &panel->override_mode); in panel_simple_parse_panel_timing_node()
523 panel->override_mode.type |= DRM_MODE_TYPE_DRIVER | in panel_simple_parse_panel_timing_node()
528 if (WARN_ON(!panel->override_mode.type)) in panel_simple_parse_panel_timing_node()
537 ret = drm_of_lvds_get_data_mapping(dev->of_node); in panel_simple_override_nondefault_lvds_datamapping()
539 if (ret == -EINVAL) in panel_simple_override_nondefault_lvds_datamapping()
540 dev_warn(dev, "Ignore invalid data-mapping property\n"); in panel_simple_override_nondefault_lvds_datamapping()
543 * Ignore non-existing or malformatted property, fallback to in panel_simple_override_nondefault_lvds_datamapping()
544 * default data-mapping, and return 0. in panel_simple_override_nondefault_lvds_datamapping()
562 if (panel->desc->bpc != bpc || panel->desc->bus_format != ret) { in panel_simple_override_nondefault_lvds_datamapping()
565 override_desc = devm_kmemdup(dev, panel->desc, sizeof(*panel->desc), GFP_KERNEL); in panel_simple_override_nondefault_lvds_datamapping()
567 return -ENOMEM; in panel_simple_override_nondefault_lvds_datamapping()
569 override_desc->bus_format = ret; in panel_simple_override_nondefault_lvds_datamapping()
570 override_desc->bpc = bpc; in panel_simple_override_nondefault_lvds_datamapping()
571 panel->desc = override_desc; in panel_simple_override_nondefault_lvds_datamapping()
585 return ERR_PTR(-ENODEV); in panel_simple_get_desc()
587 return &dsi_desc->desc; in panel_simple_get_desc()
596 * panel-dpi probes without a descriptor and in panel_simple_get_desc()
600 if (of_device_is_compatible(dev->of_node, "panel-dpi")) in panel_simple_get_desc()
603 return ERR_PTR(-ENODEV); in panel_simple_get_desc()
609 return ERR_PTR(-ENODEV); in panel_simple_get_desc()
627 &panel_simple_funcs, desc->connector_type); in panel_simple_probe()
631 panel->desc = desc; in panel_simple_probe()
633 panel->supply = devm_regulator_get(dev, "power"); in panel_simple_probe()
634 if (IS_ERR(panel->supply)) in panel_simple_probe()
635 return ERR_CAST(panel->supply); in panel_simple_probe()
637 panel->enable_gpio = devm_gpiod_get_optional(dev, "enable", in panel_simple_probe()
639 if (IS_ERR(panel->enable_gpio)) in panel_simple_probe()
640 return dev_err_cast_probe(dev, panel->enable_gpio, in panel_simple_probe()
643 err = of_drm_get_panel_orientation(dev->of_node, &panel->orientation); in panel_simple_probe()
645 dev_err(dev, "%pOF: failed to get orientation %d\n", dev->of_node, err); in panel_simple_probe()
649 ddc = of_parse_phandle(dev->of_node, "ddc-i2c-bus", 0); in panel_simple_probe()
651 panel->ddc = of_find_i2c_adapter_by_node(ddc); in panel_simple_probe()
654 if (!panel->ddc) in panel_simple_probe()
655 return ERR_PTR(-EPROBE_DEFER); in panel_simple_probe()
658 if (!of_device_is_compatible(dev->of_node, "panel-dpi") && in panel_simple_probe()
659 !of_get_display_timing(dev->of_node, "panel-timing", &dt)) in panel_simple_probe()
662 if (desc->connector_type == DRM_MODE_CONNECTOR_LVDS) { in panel_simple_probe()
663 /* Optional data-mapping property for overriding bus format */ in panel_simple_probe()
669 connector_type = desc->connector_type; in panel_simple_probe()
677 WARN_ON(desc->bus_flags & in panel_simple_probe()
682 WARN_ON(desc->bus_format != MEDIA_BUS_FMT_RGB666_1X7X3_SPWG && in panel_simple_probe()
683 desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_SPWG && in panel_simple_probe()
684 desc->bus_format != MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA); in panel_simple_probe()
685 WARN_ON(desc->bus_format == MEDIA_BUS_FMT_RGB666_1X7X3_SPWG && in panel_simple_probe()
686 desc->bpc != 6); in panel_simple_probe()
687 WARN_ON((desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG || in panel_simple_probe()
688 desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA) && in panel_simple_probe()
689 desc->bpc != 8); in panel_simple_probe()
692 dev_warn(dev, "eDP panels moved to panel-edp\n"); in panel_simple_probe()
693 err = -EINVAL; in panel_simple_probe()
696 if (desc->bpc != 6 && desc->bpc != 8) in panel_simple_probe()
697 dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc); in panel_simple_probe()
708 if (desc->bus_flags & ~bus_flags) in panel_simple_probe()
709 dev_warn(dev, "Unexpected bus_flags(%d)\n", desc->bus_flags & ~bus_flags); in panel_simple_probe()
710 if (!(desc->bus_flags & bus_flags)) in panel_simple_probe()
712 if (desc->bus_format == 0) in panel_simple_probe()
714 if (desc->bpc != 6 && desc->bpc != 8) in panel_simple_probe()
715 dev_warn(dev, "Expected bpc in {6,8} but got: %u\n", desc->bpc); in panel_simple_probe()
718 dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type); in panel_simple_probe()
735 err = drm_panel_of_backlight(&panel->base); in panel_simple_probe()
741 drm_panel_add(&panel->base); in panel_simple_probe()
749 if (panel->ddc) in panel_simple_probe()
750 put_device(&panel->ddc->dev); in panel_simple_probe()
765 * different DRM modeset drivers used with panel-simple. Once we've in panel_simple_shutdown()
779 if (panel->base.enabled) in panel_simple_shutdown()
780 drm_panel_disable(&panel->base); in panel_simple_shutdown()
781 if (panel->base.prepared) in panel_simple_shutdown()
782 drm_panel_unprepare(&panel->base); in panel_simple_shutdown()
789 drm_panel_remove(&panel->base); in panel_simple_remove()
794 if (panel->ddc) in panel_simple_remove()
795 put_device(&panel->ddc->dev); in panel_simple_remove()
1648 /* S070PWS19HP-FC21 2017/04/22 */
1675 /* S070SWV29HG-DC44 2017/09/21 */
3827 * https://www.adafruit.com/images/product-files/2406/c3163.pdf
4618 * The TM070JDHG34-00 datasheet computes total blanking as back porch +
4633 * the TM070JDHG34-00.
4786 .prepare = 1, /* 6.5 - 150µs PLL wake-up time */
4787 .enable = 100, /* 6.4 - Power on: 6 VSyncs */
4788 .disable = 84, /* 6.4 - Power off: 5 Vsyncs */
4789 .unprepare = 50, /* 6.4 - Power off: 3 Vsyncs */
4867 .hback_porch = { 216 - 128, 216 - 128, 216 - 128 },
4871 .vback_porch = { 35 - 2, 35 - 2, 35 - 2 },
5053 .compatible = "ampire,am-1280800n3tzqw-t00h",
5056 .compatible = "ampire,am-480272h3tmqw-t01h",
5059 .compatible = "ampire,am-800480l1tmqw-t00h",
5065 .compatible = "ampire,am800600p5tmqw-tb8h",
5068 .compatible = "arm,rtsm-display",
5071 .compatible = "armadeus,st0700-adapt",
5125 .compatible = "bananapi,s070wv20-ct16",
5128 .compatible = "boe,av101hdt-a10",
5131 .compatible = "boe,av123z7m-n17",
5134 .compatible = "boe,bp082wx1-100",
5137 .compatible = "boe,bp101wx1-100",
5140 .compatible = "boe,ev121wxm-n10-1850",
5143 .compatible = "boe,hv070wsa-100",
5149 .compatible = "cdtech,s043wq26h-ct7",
5152 .compatible = "cdtech,s070pws19hp-fc21",
5155 .compatible = "cdtech,s070swv29hg-dc44",
5158 .compatible = "cdtech,s070wv95-ct16",
5161 .compatible = "chefree,ch101olhlwh-002",
5182 .compatible = "dlc,dlc0700yzg-1",
5224 .compatible = "eink,vb3300-kca",
5233 .compatible = "foxlink,fl500wvr00-a0t",
5266 .compatible = "innolux,g070ace-l01",
5269 .compatible = "innolux,g070ace-lh3",
5272 .compatible = "innolux,g070y2-l01",
5275 .compatible = "innolux,g070y2-t02",
5278 .compatible = "innolux,g101ice-l01",
5281 .compatible = "innolux,g121i1-l01",
5284 .compatible = "innolux,g121x1-l03",
5287 .compatible = "innolux,g121xce-l01",
5290 .compatible = "innolux,g156hce-l01",
5293 .compatible = "innolux,n156bge-l21",
5296 .compatible = "innolux,zj070na-01p",
5314 .compatible = "lemaker,bl035-rgb-002",
5320 .compatible = "lincolntech,lcd185-101ct",
5326 .compatible = "logictechno,lt161010-2nhc",
5329 .compatible = "logictechno,lt161010-2nhr",
5332 .compatible = "logictechno,lt170410-2whc",
5335 .compatible = "logictechno,lttd800480070-l2rt",
5338 .compatible = "logictechno,lttd800480070-l6wh-rt",
5341 .compatible = "microtips,mf-101hiebcaf0",
5344 .compatible = "microtips,mf-103hieb0ga0",
5347 .compatible = "mitsubishi,aa070mc01-ca1",
5353 .compatible = "multi-inno,mi0700a2t-30",
5356 .compatible = "multi-inno,mi0700s4t-6",
5359 .compatible = "multi-inno,mi0800ft-9",
5362 .compatible = "multi-inno,mi1010ait-1cp",
5365 .compatible = "multi-inno,mi1010z1t-1cp11",
5368 .compatible = "nec,nl12880bc20-05",
5371 .compatible = "nec,nl4827hc19-05b",
5374 .compatible = "netron-dy,e231732",
5377 .compatible = "newhaven,nhd-4.3-480272ef-atxl",
5380 .compatible = "nlt,nl13676bc25-03f",
5383 .compatible = "nlt,nl192108ac18-02d",
5389 .compatible = "okaya,rs800480t-7x0gp",
5392 .compatible = "olimex,lcd-olinuxino-43-ts",
5395 .compatible = "olimex,lcd-olinuxino-5-cts",
5398 .compatible = "ontat,kd50g21-40nt-a1",
5413 .compatible = "osddisplays,osd070t1718-19ts",
5416 .compatible = "pda,91-00156-a0",
5419 .compatible = "powertip,ph128800t004-zza01",
5422 .compatible = "powertip,ph128800t006-zhc01",
5425 .compatible = "powertip,ph800480t013-idf02",
5431 .compatible = "qiaodian,qd43003c0-40",
5434 .compatible = "qishenglong,gopher2b-lcd",
5437 .compatible = "raystar,rff500f-awh-dnn",
5446 .compatible = "rocktech,rk101ii01d-ct",
5473 .compatible = "shelly,sca07010-bfn-lnn",
5482 .compatible = "team-source-display,tst043015cmhx",
5485 .compatible = "tfc,s9700rtwv43tr-01b",
5494 .compatible = "tianma,tm070jdhg34-00",
5503 .compatible = "ti,nspire-cx-lcd-panel",
5506 .compatible = "ti,nspire-classic-lcd-panel",
5512 .compatible = "topland,tian-g07017-01",
5515 .compatible = "tpk,f07a-0102",
5518 .compatible = "tpk,f10a-0102",
5521 .compatible = "urt,umsh-8596md-t",
5524 .compatible = "urt,umsh-8596md-1t",
5527 .compatible = "urt,umsh-8596md-7t",
5530 .compatible = "urt,umsh-8596md-11t",
5533 .compatible = "urt,umsh-8596md-19t",
5536 .compatible = "urt,umsh-8596md-20t",
5539 .compatible = "vivax,tpc9150-panel",
5542 .compatible = "vxt,vl050-8048nt-c01",
5548 .compatible = "yes-optoelectronics,ytc700tlag-05-201c",
5555 .compatible = "panel-dpi",
5572 panel = panel_simple_probe(&pdev->dev); in panel_simple_platform_probe()
5581 panel_simple_remove(&pdev->dev); in panel_simple_platform_remove()
5586 panel_simple_shutdown(&pdev->dev); in panel_simple_platform_shutdown()
5597 .name = "panel-simple",
5785 .compatible = "boe,tv080wum-nl0",
5788 .compatible = "lg,lh500wx1-sd03",
5794 .compatible = "lg,acx467akm-7",
5797 .compatible = "osddisplays,osd101t2045-53ts",
5811 panel = panel_simple_probe(&dsi->dev); in panel_simple_dsi_probe()
5815 desc = container_of(panel->desc, struct panel_desc_dsi, desc); in panel_simple_dsi_probe()
5816 dsi->mode_flags = desc->flags; in panel_simple_dsi_probe()
5817 dsi->format = desc->format; in panel_simple_dsi_probe()
5818 dsi->lanes = desc->lanes; in panel_simple_dsi_probe()
5824 drm_panel_remove(&panel->base); in panel_simple_dsi_probe()
5836 dev_err(&dsi->dev, "failed to detach from DSI host: %d\n", err); in panel_simple_dsi_remove()
5838 panel_simple_remove(&dsi->dev); in panel_simple_dsi_remove()
5843 panel_simple_shutdown(&dsi->dev); in panel_simple_dsi_shutdown()
5848 .name = "panel-simple-dsi",