Lines Matching +full:panel +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()
45 r = in->ops.dpi->connect(in, dssdev); in panel_dpi_connect()
55 struct omap_dss_device *in = ddata->in; in panel_dpi_disconnect()
60 in->ops.dpi->disconnect(in, dssdev); in panel_dpi_disconnect()
66 struct omap_dss_device *in = ddata->in; in panel_dpi_enable()
70 return -ENODEV; in panel_dpi_enable()
75 if (ddata->data_lines) in panel_dpi_enable()
76 in->ops.dpi->set_data_lines(in, ddata->data_lines); in panel_dpi_enable()
77 in->ops.dpi->set_timings(in, &ddata->videomode); in panel_dpi_enable()
79 r = in->ops.dpi->enable(in); in panel_dpi_enable()
83 gpiod_set_value_cansleep(ddata->enable_gpio, 1); in panel_dpi_enable()
85 if (gpio_is_valid(ddata->backlight_gpio)) in panel_dpi_enable()
86 gpio_set_value_cansleep(ddata->backlight_gpio, 1); in panel_dpi_enable()
88 dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; in panel_dpi_enable()
96 struct omap_dss_device *in = ddata->in; in panel_dpi_disable()
101 if (gpio_is_valid(ddata->backlight_gpio)) in panel_dpi_disable()
102 gpio_set_value_cansleep(ddata->backlight_gpio, 0); in panel_dpi_disable()
104 gpiod_set_value_cansleep(ddata->enable_gpio, 0); in panel_dpi_disable()
106 in->ops.dpi->disable(in); in panel_dpi_disable()
108 dssdev->state = OMAP_DSS_DISPLAY_DISABLED; in panel_dpi_disable()
115 struct omap_dss_device *in = ddata->in; in panel_dpi_set_timings()
117 ddata->videomode = *timings; in panel_dpi_set_timings()
118 dssdev->panel.timings = *timings; in panel_dpi_set_timings()
120 in->ops.dpi->set_timings(in, timings); in panel_dpi_set_timings()
128 *timings = ddata->videomode; in panel_dpi_get_timings()
135 struct omap_dss_device *in = ddata->in; in panel_dpi_check_timings()
137 return in->ops.dpi->check_timings(in, timings); in panel_dpi_check_timings()
162 pdata = dev_get_platdata(&pdev->dev); in panel_dpi_probe_pdata()
164 in = omap_dss_find_output(pdata->source); in panel_dpi_probe_pdata()
166 dev_err(&pdev->dev, "failed to find video source '%s'\n", in panel_dpi_probe_pdata()
167 pdata->source); in panel_dpi_probe_pdata()
168 return -EPROBE_DEFER; in panel_dpi_probe_pdata()
171 ddata->in = in; in panel_dpi_probe_pdata()
173 ddata->data_lines = pdata->data_lines; in panel_dpi_probe_pdata()
175 videomode_from_timing(pdata->display_timing, &vm); in panel_dpi_probe_pdata()
176 videomode_to_omap_video_timings(&vm, &ddata->videomode); in panel_dpi_probe_pdata()
178 dssdev = &ddata->dssdev; in panel_dpi_probe_pdata()
179 dssdev->name = pdata->name; in panel_dpi_probe_pdata()
181 r = devm_gpio_request_one(&pdev->dev, pdata->enable_gpio, in panel_dpi_probe_pdata()
182 GPIOF_OUT_INIT_LOW, "panel enable"); in panel_dpi_probe_pdata()
186 ddata->enable_gpio = gpio_to_desc(pdata->enable_gpio); in panel_dpi_probe_pdata()
188 ddata->backlight_gpio = pdata->backlight_gpio; in panel_dpi_probe_pdata()
193 omap_dss_put_device(ddata->in); in panel_dpi_probe_pdata()
200 struct device_node *node = pdev->dev.of_node; in panel_dpi_probe_of()
207 gpio = devm_gpiod_get_optional(&pdev->dev, "enable", GPIOD_OUT_LOW); in panel_dpi_probe_of()
211 ddata->enable_gpio = gpio; in panel_dpi_probe_of()
213 ddata->backlight_gpio = -ENOENT; in panel_dpi_probe_of()
215 r = of_get_display_timing(node, "panel-timing", &timing); in panel_dpi_probe_of()
217 dev_err(&pdev->dev, "failed to get video timing\n"); in panel_dpi_probe_of()
222 videomode_to_omap_video_timings(&vm, &ddata->videomode); in panel_dpi_probe_of()
226 dev_err(&pdev->dev, "failed to find video source\n"); in panel_dpi_probe_of()
230 ddata->in = in; in panel_dpi_probe_of()
241 ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); in panel_dpi_probe()
243 return -ENOMEM; in panel_dpi_probe()
247 if (dev_get_platdata(&pdev->dev)) { in panel_dpi_probe()
251 } else if (pdev->dev.of_node) { in panel_dpi_probe()
256 return -ENODEV; in panel_dpi_probe()
259 if (gpio_is_valid(ddata->backlight_gpio)) { in panel_dpi_probe()
260 r = devm_gpio_request_one(&pdev->dev, ddata->backlight_gpio, in panel_dpi_probe()
261 GPIOF_OUT_INIT_LOW, "panel backlight"); in panel_dpi_probe()
266 dssdev = &ddata->dssdev; in panel_dpi_probe()
267 dssdev->dev = &pdev->dev; in panel_dpi_probe()
268 dssdev->driver = &panel_dpi_ops; in panel_dpi_probe()
269 dssdev->type = OMAP_DISPLAY_TYPE_DPI; in panel_dpi_probe()
270 dssdev->owner = THIS_MODULE; in panel_dpi_probe()
271 dssdev->panel.timings = ddata->videomode; in panel_dpi_probe()
272 dssdev->phy.dpi.data_lines = ddata->data_lines; in panel_dpi_probe()
276 dev_err(&pdev->dev, "Failed to register panel\n"); in panel_dpi_probe()
284 omap_dss_put_device(ddata->in); in panel_dpi_probe()
291 struct omap_dss_device *dssdev = &ddata->dssdev; in panel_dpi_remove()
292 struct omap_dss_device *in = ddata->in; in panel_dpi_remove()
305 { .compatible = "omapdss,panel-dpi", },
315 .name = "panel-dpi",
324 MODULE_DESCRIPTION("Generic MIPI DPI Panel Driver");