aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/tilcdc/tilcdc_panel.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-08-07 20:36:12 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-07 20:36:12 -0400
commita7d7a143d0b4cb1914705884ca5c25e322dba693 (patch)
tree0ee5e9e43f0863b38a29e8abc293e80eab177d74 /drivers/gpu/drm/tilcdc/tilcdc_panel.c
parent43c40df2c7fedce640a6c39fcdf58764f6bbac5c (diff)
parent7963e9db1b1f842fdc53309baa8714d38e9f5681 (diff)
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull DRM updates from Dave Airlie: "Like all good pull reqs this ends with a revert, so it must mean we tested it, [ Ed. That's _one_ way of looking at it ] This pull is missing nouveau, Ben has been stuck trying to track down a very longstanding bug that revealed itself due to some other changes. I've asked him to send you a direct pull request for nouveau once he cleans things up. I'm away until Monday so don't want to delay things, you can make a decision on that when he sends it, I have my phone so I can ack things just not really merge much. It has one trivial conflict with your tree in armada_drv.c, and also the pull request contains some component changes that are already in your tree, the base tree from Russell went via Greg's tree already, but some stuff still shows up in here that doesn't when I merge my tree into yours. Otherwise all pretty standard graphics fare, one new driver and changes all over the place. New drivers: - sti kms driver for STMicroelectronics chipsets stih416 and stih407. core: - lots of cleanups to the drm core - DP MST helper code merged - universal cursor planes. - render nodes enabled by default panel: - better panel interfaces - new panel support - non-continuous cock advertising ability ttm: - shrinker fixes i915: - hopefully ditched UMS support - runtime pm fixes - psr tracking and locking - now enabled by default - userptr fixes - backlight brightness fixes - MST support merged - runtime PM for dpms - primary planes locking fixes - gen8 hw semaphore support - fbc fixes - runtime PM on SOix sleep state hw. - mmio base page flipping - lots of vlv/chv fixes. - universal cursor planes radeon: - Hawaii fixes - display scalar support for non-fixed mode displays - new firmware format support - dpm on more asics by default - GPUVM improvements - uncached and wc GTT buffers - BOs > visible VRAM exynos: - i80 interface support - module auto-loading - ipp driver consolidated. armada: - irq handling in crtc layer only - crtc renumbering - add component support - DT interaction changes. tegra: - load as module fixes - eDP bpp and sync polarity fixed - DSI non-continuous clock mode support - better support for importing buffers from nouveau msm: - mdp5/adq8084 v1.3 hw enablement - devicetree clk changse - ifc6410 board working tda998x: - component support - DT documentation update vmwgfx: - fix compat shader namespace" * 'drm-next' of git://people.freedesktop.org/~airlied/linux: (551 commits) Revert "drm: drop redundant drm_file->is_master" drm/panel: simple: Use devm_gpiod_get_optional() drm/dsi: Replace upcasting macro by function drm/panel: ld9040: Replace upcasting macro by function drm/exynos: dp: Modify driver to support drm_panel drm/exynos: Move DP setup into commit() drm/panel: simple: Add AUO B133HTN01 panel support drm/panel: simple: Support delays in panel functions drm/panel: simple: Add proper definition for prepare and unprepare drm/panel: s6e8aa0: Add proper definition for prepare and unprepare drm/panel: ld9040: Add proper definition for prepare and unprepare drm/tegra: Add support for panel prepare and unprepare routines drm/exynos: dsi: Add support for panel prepare and unprepare routines drm/exynos: dpi: Add support for panel prepare and unprepare routines drm/panel: simple: Add dummy prepare and unprepare routines drm/panel: s6e8aa0: Add dummy prepare and unprepare routines drm/panel: ld9040: Add dummy prepare and unprepare routines drm/panel: Provide convenience wrapper for .get_modes() drm/panel: add .prepare() and .unprepare() functions drm/panel: simple: Remove simple-panel compatible ...
Diffstat (limited to 'drivers/gpu/drm/tilcdc/tilcdc_panel.c')
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_panel.c41
1 files changed, 20 insertions, 21 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
index 86c67329b605..4c7aa1d8134f 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c
@@ -151,6 +151,7 @@ struct panel_connector {
151static void panel_connector_destroy(struct drm_connector *connector) 151static void panel_connector_destroy(struct drm_connector *connector)
152{ 152{
153 struct panel_connector *panel_connector = to_panel_connector(connector); 153 struct panel_connector *panel_connector = to_panel_connector(connector);
154 drm_connector_unregister(connector);
154 drm_connector_cleanup(connector); 155 drm_connector_cleanup(connector);
155 kfree(panel_connector); 156 kfree(panel_connector);
156} 157}
@@ -247,7 +248,7 @@ static struct drm_connector *panel_connector_create(struct drm_device *dev,
247 if (ret) 248 if (ret)
248 goto fail; 249 goto fail;
249 250
250 drm_sysfs_connector_add(connector); 251 drm_connector_register(connector);
251 252
252 return connector; 253 return connector;
253 254
@@ -281,23 +282,8 @@ static int panel_modeset_init(struct tilcdc_module *mod, struct drm_device *dev)
281 return 0; 282 return 0;
282} 283}
283 284
284static void panel_destroy(struct tilcdc_module *mod)
285{
286 struct panel_module *panel_mod = to_panel_module(mod);
287
288 if (panel_mod->timings) {
289 display_timings_release(panel_mod->timings);
290 kfree(panel_mod->timings);
291 }
292
293 tilcdc_module_cleanup(mod);
294 kfree(panel_mod->info);
295 kfree(panel_mod);
296}
297
298static const struct tilcdc_module_ops panel_module_ops = { 285static const struct tilcdc_module_ops panel_module_ops = {
299 .modeset_init = panel_modeset_init, 286 .modeset_init = panel_modeset_init,
300 .destroy = panel_destroy,
301}; 287};
302 288
303/* 289/*
@@ -373,6 +359,7 @@ static int panel_probe(struct platform_device *pdev)
373 return -ENOMEM; 359 return -ENOMEM;
374 360
375 mod = &panel_mod->base; 361 mod = &panel_mod->base;
362 pdev->dev.platform_data = mod;
376 363
377 tilcdc_module_init(mod, "panel", &panel_module_ops); 364 tilcdc_module_init(mod, "panel", &panel_module_ops);
378 365
@@ -380,17 +367,16 @@ static int panel_probe(struct platform_device *pdev)
380 if (IS_ERR(pinctrl)) 367 if (IS_ERR(pinctrl))
381 dev_warn(&pdev->dev, "pins are not configured\n"); 368 dev_warn(&pdev->dev, "pins are not configured\n");
382 369
383
384 panel_mod->timings = of_get_display_timings(node); 370 panel_mod->timings = of_get_display_timings(node);
385 if (!panel_mod->timings) { 371 if (!panel_mod->timings) {
386 dev_err(&pdev->dev, "could not get panel timings\n"); 372 dev_err(&pdev->dev, "could not get panel timings\n");
387 goto fail; 373 goto fail_free;
388 } 374 }
389 375
390 panel_mod->info = of_get_panel_info(node); 376 panel_mod->info = of_get_panel_info(node);
391 if (!panel_mod->info) { 377 if (!panel_mod->info) {
392 dev_err(&pdev->dev, "could not get panel info\n"); 378 dev_err(&pdev->dev, "could not get panel info\n");
393 goto fail; 379 goto fail_timings;
394 } 380 }
395 381
396 mod->preferred_bpp = panel_mod->info->bpp; 382 mod->preferred_bpp = panel_mod->info->bpp;
@@ -401,13 +387,26 @@ static int panel_probe(struct platform_device *pdev)
401 387
402 return 0; 388 return 0;
403 389
404fail: 390fail_timings:
405 panel_destroy(mod); 391 display_timings_release(panel_mod->timings);
392
393fail_free:
394 kfree(panel_mod);
395 tilcdc_module_cleanup(mod);
406 return ret; 396 return ret;
407} 397}
408 398
409static int panel_remove(struct platform_device *pdev) 399static int panel_remove(struct platform_device *pdev)
410{ 400{
401 struct tilcdc_module *mod = dev_get_platdata(&pdev->dev);
402 struct panel_module *panel_mod = to_panel_module(mod);
403
404 display_timings_release(panel_mod->timings);
405
406 tilcdc_module_cleanup(mod);
407 kfree(panel_mod->info);
408 kfree(panel_mod);
409
411 return 0; 410 return 0;
412} 411}
413 412