Lines Matching +full:panel +full:- +full:dpi
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Toppoly TD028TTEC1 panel support
9 * Copyright (C) 2006-2007 by OpenMoko, Inc.
12 * Ported and adapted from Neo 1973 U-Boot by:
60 rc = spi_write(ddata->spi_dev, (u8 *)&tx_buf, in jbt_ret_write_0()
63 dev_err(&ddata->spi_dev->dev, in jbt_ret_write_0()
76 rc = spi_write(ddata->spi_dev, (u8 *)tx_buf, in jbt_reg_write_1()
79 dev_err(&ddata->spi_dev->dev, in jbt_reg_write_1()
94 rc = spi_write(ddata->spi_dev, (u8 *)tx_buf, in jbt_reg_write_2()
98 dev_err(&ddata->spi_dev->dev, in jbt_reg_write_2()
161 struct omap_dss_device *in = ddata->in; in td028ttec1_panel_connect()
167 r = in->ops.dpi->connect(in, dssdev); in td028ttec1_panel_connect()
177 struct omap_dss_device *in = ddata->in; in td028ttec1_panel_disconnect()
182 in->ops.dpi->disconnect(in, dssdev); in td028ttec1_panel_disconnect()
188 struct omap_dss_device *in = ddata->in; in td028ttec1_panel_enable()
192 return -ENODEV; in td028ttec1_panel_enable()
197 if (ddata->data_lines) in td028ttec1_panel_enable()
198 in->ops.dpi->set_data_lines(in, ddata->data_lines); in td028ttec1_panel_enable()
199 in->ops.dpi->set_timings(in, &ddata->videomode); in td028ttec1_panel_enable()
201 r = in->ops.dpi->enable(in); in td028ttec1_panel_enable()
205 dev_dbg(dssdev->dev, "td028ttec1_panel_enable() - state %d\n", in td028ttec1_panel_enable()
206 dssdev->state); in td028ttec1_panel_enable()
217 dev_warn(dssdev->dev, "transfer error\n"); in td028ttec1_panel_enable()
288 dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; in td028ttec1_panel_enable()
292 return r ? -EIO : 0; in td028ttec1_panel_enable()
298 struct omap_dss_device *in = ddata->in; in td028ttec1_panel_disable()
303 dev_dbg(dssdev->dev, "td028ttec1_panel_disable()\n"); in td028ttec1_panel_disable()
310 in->ops.dpi->disable(in); in td028ttec1_panel_disable()
312 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; in td028ttec1_panel_disable()
319 struct omap_dss_device *in = ddata->in; in td028ttec1_panel_set_timings()
321 ddata->videomode = *timings; in td028ttec1_panel_set_timings()
322 dssdev->panel.timings = *timings; in td028ttec1_panel_set_timings()
324 in->ops.dpi->set_timings(in, timings); in td028ttec1_panel_set_timings()
332 *timings = ddata->videomode; in td028ttec1_panel_get_timings()
339 struct omap_dss_device *in = ddata->in; in td028ttec1_panel_check_timings()
341 return in->ops.dpi->check_timings(in, timings); in td028ttec1_panel_check_timings()
358 struct device_node *node = spi->dev.of_node; in td028ttec1_probe_of()
359 struct panel_drv_data *ddata = dev_get_drvdata(&spi->dev); in td028ttec1_probe_of()
364 dev_err(&spi->dev, "failed to find video source\n"); in td028ttec1_probe_of()
368 ddata->in = in; in td028ttec1_probe_of()
379 dev_dbg(&spi->dev, "%s\n", __func__); in td028ttec1_panel_probe()
381 if (!spi->dev.of_node) in td028ttec1_panel_probe()
382 return -ENODEV; in td028ttec1_panel_probe()
384 spi->bits_per_word = 9; in td028ttec1_panel_probe()
385 spi->mode = SPI_MODE_3; in td028ttec1_panel_probe()
389 dev_err(&spi->dev, "spi_setup failed: %d\n", r); in td028ttec1_panel_probe()
393 ddata = devm_kzalloc(&spi->dev, sizeof(*ddata), GFP_KERNEL); in td028ttec1_panel_probe()
395 return -ENOMEM; in td028ttec1_panel_probe()
397 dev_set_drvdata(&spi->dev, ddata); in td028ttec1_panel_probe()
399 ddata->spi_dev = spi; in td028ttec1_panel_probe()
405 ddata->videomode = td028ttec1_panel_timings; in td028ttec1_panel_probe()
407 dssdev = &ddata->dssdev; in td028ttec1_panel_probe()
408 dssdev->dev = &spi->dev; in td028ttec1_panel_probe()
409 dssdev->driver = &td028ttec1_ops; in td028ttec1_panel_probe()
410 dssdev->type = OMAP_DISPLAY_TYPE_DPI; in td028ttec1_panel_probe()
411 dssdev->owner = THIS_MODULE; in td028ttec1_panel_probe()
412 dssdev->panel.timings = ddata->videomode; in td028ttec1_panel_probe()
413 dssdev->phy.dpi.data_lines = ddata->data_lines; in td028ttec1_panel_probe()
417 dev_err(&spi->dev, "Failed to register panel\n"); in td028ttec1_panel_probe()
424 omap_dss_put_device(ddata->in); in td028ttec1_panel_probe()
430 struct panel_drv_data *ddata = dev_get_drvdata(&spi->dev); in td028ttec1_panel_remove()
431 struct omap_dss_device *dssdev = &ddata->dssdev; in td028ttec1_panel_remove()
432 struct omap_dss_device *in = ddata->in; in td028ttec1_panel_remove()
434 dev_dbg(&ddata->spi_dev->dev, "%s\n", __func__); in td028ttec1_panel_remove()
469 .name = "panel-tpo-td028ttec1",
478 MODULE_DESCRIPTION("Toppoly TD028TTEC1 panel driver");