Lines Matching +full:mipi +full:- +full:dpi

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Generic MIPI DPI Panel Driver
17 #include <video/omap-panel-data.h>
28 /* used for non-DT boot, to be removed */
39 struct omap_dss_device *in = ddata->in; in panel_dpi_connect()
44 return in->ops.dpi->connect(in, dssdev); in panel_dpi_connect()
50 struct omap_dss_device *in = ddata->in; in panel_dpi_disconnect()
55 in->ops.dpi->disconnect(in, dssdev); in panel_dpi_disconnect()
61 struct omap_dss_device *in = ddata->in; in panel_dpi_enable()
65 return -ENODEV; in panel_dpi_enable()
70 if (ddata->data_lines) in panel_dpi_enable()
71 in->ops.dpi->set_data_lines(in, ddata->data_lines); in panel_dpi_enable()
72 in->ops.dpi->set_timings(in, &ddata->videomode); in panel_dpi_enable()
74 r = in->ops.dpi->enable(in); in panel_dpi_enable()
78 gpiod_set_value_cansleep(ddata->enable_gpio, 1); in panel_dpi_enable()
80 if (gpio_is_valid(ddata->backlight_gpio)) in panel_dpi_enable()
81 gpio_set_value_cansleep(ddata->backlight_gpio, 1); in panel_dpi_enable()
83 dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; in panel_dpi_enable()
91 struct omap_dss_device *in = ddata->in; in panel_dpi_disable()
96 if (gpio_is_valid(ddata->backlight_gpio)) in panel_dpi_disable()
97 gpio_set_value_cansleep(ddata->backlight_gpio, 0); in panel_dpi_disable()
99 gpiod_set_value_cansleep(ddata->enable_gpio, 0); in panel_dpi_disable()
101 in->ops.dpi->disable(in); in panel_dpi_disable()
103 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; in panel_dpi_disable()
110 struct omap_dss_device *in = ddata->in; in panel_dpi_set_timings()
112 ddata->videomode = *timings; in panel_dpi_set_timings()
113 dssdev->panel.timings = *timings; in panel_dpi_set_timings()
115 in->ops.dpi->set_timings(in, timings); in panel_dpi_set_timings()
123 *timings = ddata->videomode; in panel_dpi_get_timings()
130 struct omap_dss_device *in = ddata->in; in panel_dpi_check_timings()
132 return in->ops.dpi->check_timings(in, timings); in panel_dpi_check_timings()
157 pdata = dev_get_platdata(&pdev->dev); in panel_dpi_probe_pdata()
159 in = omap_dss_find_output(pdata->source); in panel_dpi_probe_pdata()
161 dev_err(&pdev->dev, "failed to find video source '%s'\n", in panel_dpi_probe_pdata()
162 pdata->source); in panel_dpi_probe_pdata()
163 return -EPROBE_DEFER; in panel_dpi_probe_pdata()
166 ddata->in = in; in panel_dpi_probe_pdata()
168 ddata->data_lines = pdata->data_lines; in panel_dpi_probe_pdata()
170 videomode_from_timing(pdata->display_timing, &vm); in panel_dpi_probe_pdata()
171 videomode_to_omap_video_timings(&vm, &ddata->videomode); in panel_dpi_probe_pdata()
173 dssdev = &ddata->dssdev; in panel_dpi_probe_pdata()
174 dssdev->name = pdata->name; in panel_dpi_probe_pdata()
176 r = devm_gpio_request_one(&pdev->dev, pdata->enable_gpio, in panel_dpi_probe_pdata()
181 ddata->enable_gpio = gpio_to_desc(pdata->enable_gpio); in panel_dpi_probe_pdata()
183 ddata->backlight_gpio = pdata->backlight_gpio; in panel_dpi_probe_pdata()
188 omap_dss_put_device(ddata->in); in panel_dpi_probe_pdata()
195 struct device_node *node = pdev->dev.of_node; in panel_dpi_probe_of()
202 gpio = devm_gpiod_get_optional(&pdev->dev, "enable", GPIOD_OUT_LOW); in panel_dpi_probe_of()
206 ddata->enable_gpio = gpio; in panel_dpi_probe_of()
208 ddata->backlight_gpio = -ENOENT; in panel_dpi_probe_of()
210 r = of_get_display_timing(node, "panel-timing", &timing); in panel_dpi_probe_of()
212 dev_err(&pdev->dev, "failed to get video timing\n"); in panel_dpi_probe_of()
217 videomode_to_omap_video_timings(&vm, &ddata->videomode); in panel_dpi_probe_of()
221 dev_err(&pdev->dev, "failed to find video source\n"); in panel_dpi_probe_of()
225 ddata->in = in; in panel_dpi_probe_of()
236 ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); in panel_dpi_probe()
238 return -ENOMEM; in panel_dpi_probe()
242 if (dev_get_platdata(&pdev->dev)) { in panel_dpi_probe()
246 } else if (pdev->dev.of_node) { in panel_dpi_probe()
251 return -ENODEV; in panel_dpi_probe()
254 if (gpio_is_valid(ddata->backlight_gpio)) { in panel_dpi_probe()
255 r = devm_gpio_request_one(&pdev->dev, ddata->backlight_gpio, in panel_dpi_probe()
261 dssdev = &ddata->dssdev; in panel_dpi_probe()
262 dssdev->dev = &pdev->dev; in panel_dpi_probe()
263 dssdev->driver = &panel_dpi_ops; in panel_dpi_probe()
264 dssdev->type = OMAP_DISPLAY_TYPE_DPI; in panel_dpi_probe()
265 dssdev->owner = THIS_MODULE; in panel_dpi_probe()
266 dssdev->panel.timings = ddata->videomode; in panel_dpi_probe()
267 dssdev->phy.dpi.data_lines = ddata->data_lines; in panel_dpi_probe()
271 dev_err(&pdev->dev, "Failed to register panel\n"); in panel_dpi_probe()
279 omap_dss_put_device(ddata->in); in panel_dpi_probe()
286 struct omap_dss_device *dssdev = &ddata->dssdev; in panel_dpi_remove()
287 struct omap_dss_device *in = ddata->in; in panel_dpi_remove()
300 { .compatible = "omapdss,panel-dpi", },
310 .name = "panel-dpi",
319 MODULE_DESCRIPTION("Generic MIPI DPI Panel Driver");