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>
28 struct backlight_device *backlight; member
47 struct backlight_device *backlight = panel_encoder->mod->backlight; in panel_encoder_dpms() local
48 struct gpio_desc *gpio = panel_encoder->mod->enable_gpio; in panel_encoder_dpms() local
50 if (backlight) { in panel_encoder_dpms()
51 backlight->props.power = mode == DRM_MODE_DPMS_ON ? in panel_encoder_dpms()
53 backlight_update_status(backlight); in panel_encoder_dpms()
56 if (gpio) in panel_encoder_dpms()
57 gpiod_set_value_cansleep(gpio, in panel_encoder_dpms()
92 panel_encoder = devm_kzalloc(dev->dev, sizeof(*panel_encoder), in panel_encoder_create()
97 panel_encoder->mod = mod; in panel_encoder_create()
99 encoder = &panel_encoder->base; in panel_encoder_create()
100 encoder->possible_crtcs = 1; in panel_encoder_create()
136 struct drm_device *dev = connector->dev; in panel_connector_get_modes()
138 struct display_timings *timings = panel_connector->mod->timings; in panel_connector_get_modes()
141 for (i = 0; i < timings->num_timings; i++) { in panel_connector_get_modes()
154 mode->type = DRM_MODE_TYPE_DRIVER; in panel_connector_get_modes()
156 if (timings->native_mode == i) in panel_connector_get_modes()
157 mode->type |= DRM_MODE_TYPE_PREFERRED; in panel_connector_get_modes()
170 return panel_connector->encoder; in panel_connector_best_encoder()
193 panel_connector = devm_kzalloc(dev->dev, sizeof(*panel_connector), in panel_connector_create()
198 panel_connector->encoder = encoder; in panel_connector_create()
199 panel_connector->mod = mod; in panel_connector_create()
201 connector = &panel_connector->base; in panel_connector_create()
207 connector->interlace_allowed = 0; in panel_connector_create()
208 connector->doublescan_allowed = 0; in panel_connector_create()
228 struct tilcdc_drm_private *priv = dev->dev_private; in panel_modeset_init()
234 return -ENOMEM; in panel_modeset_init()
238 return -ENOMEM; in panel_modeset_init()
240 priv->encoders[priv->num_encoders++] = encoder; in panel_modeset_init()
241 priv->connectors[priv->num_connectors++] = connector; in panel_modeset_init()
243 tilcdc_crtc_set_panel_info(priv->crtc, in panel_modeset_init()
244 to_panel_encoder(encoder)->mod->info); in panel_modeset_init()
269 info_np = of_get_child_by_name(np, "panel-info"); in of_get_panel_info()
271 pr_err("%s: could not find panel-info node\n", __func__); in of_get_panel_info()
279 ret |= of_property_read_u32(info_np, "ac-bias", &info->ac_bias); in of_get_panel_info()
280 ret |= of_property_read_u32(info_np, "ac-bias-intrpt", &info->ac_bias_intrpt); in of_get_panel_info()
281 ret |= of_property_read_u32(info_np, "dma-burst-sz", &info->dma_burst_sz); in of_get_panel_info()
282 ret |= of_property_read_u32(info_np, "bpp", &info->bpp); in of_get_panel_info()
283 ret |= of_property_read_u32(info_np, "fdd", &info->fdd); in of_get_panel_info()
284 ret |= of_property_read_u32(info_np, "sync-edge", &info->sync_edge); in of_get_panel_info()
285 ret |= of_property_read_u32(info_np, "sync-ctrl", &info->sync_ctrl); in of_get_panel_info()
286 ret |= of_property_read_u32(info_np, "raster-order", &info->raster_order); in of_get_panel_info()
287 ret |= of_property_read_u32(info_np, "fifo-th", &info->fifo_th); in of_get_panel_info()
290 info->tft_alt_mode = of_property_read_bool(info_np, "tft-alt-mode"); in of_get_panel_info()
291 info->invert_pxl_clk = of_property_read_bool(info_np, "invert-pxl-clk"); in of_get_panel_info()
294 pr_err("%s: error reading panel-info properties\n", __func__); in of_get_panel_info()
306 struct device_node *node = pdev->dev.of_node; in panel_probe()
307 struct backlight_device *backlight; in panel_probe() local
314 dev_err(&pdev->dev, "device-tree data is missing\n"); in panel_probe()
315 return -ENXIO; in panel_probe()
318 panel_mod = devm_kzalloc(&pdev->dev, sizeof(*panel_mod), GFP_KERNEL); in panel_probe()
320 return -ENOMEM; in panel_probe()
322 backlight = devm_of_find_backlight(&pdev->dev); in panel_probe()
323 if (IS_ERR(backlight)) in panel_probe()
324 return PTR_ERR(backlight); in panel_probe()
325 panel_mod->backlight = backlight; in panel_probe()
327 panel_mod->enable_gpio = devm_gpiod_get_optional(&pdev->dev, "enable", in panel_probe()
329 if (IS_ERR(panel_mod->enable_gpio)) { in panel_probe()
330 ret = PTR_ERR(panel_mod->enable_gpio); in panel_probe()
331 dev_err(&pdev->dev, "failed to request enable GPIO\n"); in panel_probe()
335 if (panel_mod->enable_gpio) in panel_probe()
336 dev_info(&pdev->dev, "found enable GPIO\n"); in panel_probe()
338 mod = &panel_mod->base; in panel_probe()
339 pdev->dev.platform_data = mod; in panel_probe()
343 panel_mod->timings = of_get_display_timings(node); in panel_probe()
344 if (!panel_mod->timings) { in panel_probe()
345 dev_err(&pdev->dev, "could not get panel timings\n"); in panel_probe()
346 ret = -EINVAL; in panel_probe()
350 panel_mod->info = of_get_panel_info(node); in panel_probe()
351 if (!panel_mod->info) { in panel_probe()
352 dev_err(&pdev->dev, "could not get panel info\n"); in panel_probe()
353 ret = -EINVAL; in panel_probe()
360 display_timings_release(panel_mod->timings); in panel_probe()
366 if (panel_mod->backlight) in panel_probe()
367 put_device(&panel_mod->backlight->dev); in panel_probe()
373 struct tilcdc_module *mod = dev_get_platdata(&pdev->dev); in panel_remove()
375 struct backlight_device *backlight = panel_mod->backlight; in panel_remove() local
377 if (backlight) in panel_remove()
378 put_device(&backlight->dev); in panel_remove()
380 display_timings_release(panel_mod->timings); in panel_remove()
383 kfree(panel_mod->info); in panel_remove()
395 .name = "tilcdc-panel",