Lines Matching +full:gpio +full:- +full:backlight

1 // SPDX-License-Identifier: GPL-2.0-only
7 #include <linux/backlight.h>
8 #include <linux/gpio/consumer.h>
29 struct backlight_device *backlight; member
48 struct backlight_device *backlight = panel_encoder->mod->backlight; in panel_encoder_dpms() local
49 struct gpio_desc *gpio = panel_encoder->mod->enable_gpio; in panel_encoder_dpms() local
51 if (backlight) { in panel_encoder_dpms()
52 backlight->props.power = mode == DRM_MODE_DPMS_ON ? in panel_encoder_dpms()
54 backlight_update_status(backlight); in panel_encoder_dpms()
57 if (gpio) in panel_encoder_dpms()
58 gpiod_set_value_cansleep(gpio, in panel_encoder_dpms()
93 panel_encoder = devm_kzalloc(dev->dev, sizeof(*panel_encoder), in panel_encoder_create()
98 panel_encoder->mod = mod; in panel_encoder_create()
100 encoder = &panel_encoder->base; in panel_encoder_create()
101 encoder->possible_crtcs = 1; in panel_encoder_create()
137 struct drm_device *dev = connector->dev; in panel_connector_get_modes()
139 struct display_timings *timings = panel_connector->mod->timings; in panel_connector_get_modes()
142 for (i = 0; i < timings->num_timings; i++) { in panel_connector_get_modes()
155 mode->type = DRM_MODE_TYPE_DRIVER; in panel_connector_get_modes()
157 if (timings->native_mode == i) in panel_connector_get_modes()
158 mode->type |= DRM_MODE_TYPE_PREFERRED; in panel_connector_get_modes()
171 return panel_connector->encoder; in panel_connector_best_encoder()
194 panel_connector = devm_kzalloc(dev->dev, sizeof(*panel_connector), in panel_connector_create()
199 panel_connector->encoder = encoder; in panel_connector_create()
200 panel_connector->mod = mod; in panel_connector_create()
202 connector = &panel_connector->base; in panel_connector_create()
208 connector->interlace_allowed = 0; in panel_connector_create()
209 connector->doublescan_allowed = 0; in panel_connector_create()
229 struct tilcdc_drm_private *priv = dev->dev_private; in panel_modeset_init()
235 return -ENOMEM; in panel_modeset_init()
239 return -ENOMEM; in panel_modeset_init()
241 priv->encoders[priv->num_encoders++] = encoder; in panel_modeset_init()
242 priv->connectors[priv->num_connectors++] = connector; in panel_modeset_init()
244 tilcdc_crtc_set_panel_info(priv->crtc, in panel_modeset_init()
245 to_panel_encoder(encoder)->mod->info); in panel_modeset_init()
270 info_np = of_get_child_by_name(np, "panel-info"); in of_get_panel_info()
272 pr_err("%s: could not find panel-info node\n", __func__); in of_get_panel_info()
280 ret |= of_property_read_u32(info_np, "ac-bias", &info->ac_bias); in of_get_panel_info()
281 ret |= of_property_read_u32(info_np, "ac-bias-intrpt", &info->ac_bias_intrpt); in of_get_panel_info()
282 ret |= of_property_read_u32(info_np, "dma-burst-sz", &info->dma_burst_sz); in of_get_panel_info()
283 ret |= of_property_read_u32(info_np, "bpp", &info->bpp); in of_get_panel_info()
284 ret |= of_property_read_u32(info_np, "fdd", &info->fdd); in of_get_panel_info()
285 ret |= of_property_read_u32(info_np, "sync-edge", &info->sync_edge); in of_get_panel_info()
286 ret |= of_property_read_u32(info_np, "sync-ctrl", &info->sync_ctrl); in of_get_panel_info()
287 ret |= of_property_read_u32(info_np, "raster-order", &info->raster_order); in of_get_panel_info()
288 ret |= of_property_read_u32(info_np, "fifo-th", &info->fifo_th); in of_get_panel_info()
291 info->tft_alt_mode = of_property_read_bool(info_np, "tft-alt-mode"); in of_get_panel_info()
292 info->invert_pxl_clk = of_property_read_bool(info_np, "invert-pxl-clk"); in of_get_panel_info()
295 pr_err("%s: error reading panel-info properties\n", __func__); in of_get_panel_info()
307 struct device_node *node = pdev->dev.of_node; in panel_probe()
308 struct backlight_device *backlight; in panel_probe() local
316 dev_err(&pdev->dev, "device-tree data is missing\n"); in panel_probe()
317 return -ENXIO; in panel_probe()
320 panel_mod = devm_kzalloc(&pdev->dev, sizeof(*panel_mod), GFP_KERNEL); in panel_probe()
322 return -ENOMEM; in panel_probe()
324 backlight = devm_of_find_backlight(&pdev->dev); in panel_probe()
325 if (IS_ERR(backlight)) in panel_probe()
326 return PTR_ERR(backlight); in panel_probe()
327 panel_mod->backlight = backlight; in panel_probe()
329 panel_mod->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable", in panel_probe()
331 if (IS_ERR(panel_mod->enable_gpio)) { in panel_probe()
332 ret = PTR_ERR(panel_mod->enable_gpio); in panel_probe()
333 dev_err(&pdev->dev, "failed to request enable GPIO\n"); in panel_probe()
337 if (panel_mod->enable_gpio) in panel_probe()
338 dev_info(&pdev->dev, "found enable GPIO\n"); in panel_probe()
340 mod = &panel_mod->base; in panel_probe()
341 pdev->dev.platform_data = mod; in panel_probe()
345 pinctrl = devm_pinctrl_get_select_default(&pdev->dev); in panel_probe()
347 dev_warn(&pdev->dev, "pins are not configured\n"); in panel_probe()
349 panel_mod->timings = of_get_display_timings(node); in panel_probe()
350 if (!panel_mod->timings) { in panel_probe()
351 dev_err(&pdev->dev, "could not get panel timings\n"); in panel_probe()
352 ret = -EINVAL; in panel_probe()
356 panel_mod->info = of_get_panel_info(node); in panel_probe()
357 if (!panel_mod->info) { in panel_probe()
358 dev_err(&pdev->dev, "could not get panel info\n"); in panel_probe()
359 ret = -EINVAL; in panel_probe()
366 display_timings_release(panel_mod->timings); in panel_probe()
372 if (panel_mod->backlight) in panel_probe()
373 put_device(&panel_mod->backlight->dev); in panel_probe()
379 struct tilcdc_module *mod = dev_get_platdata(&pdev->dev); in panel_remove()
381 struct backlight_device *backlight = panel_mod->backlight; in panel_remove() local
383 if (backlight) in panel_remove()
384 put_device(&backlight->dev); in panel_remove()
386 display_timings_release(panel_mod->timings); in panel_remove()
389 kfree(panel_mod->info); in panel_remove()
401 .name = "tilcdc-panel",