aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/omap2
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2013-12-17 02:43:04 -0500
committerTomi Valkeinen <tomi.valkeinen@ti.com>2014-01-13 05:19:57 -0500
commit0eb0dafb674cd6bfac2e3204b2f8b907e26b1138 (patch)
tree44f6c81776d1476ef2a3b12be45d6d872ee63882 /drivers/video/omap2
parent8bc655521bb18dd8a306ef58ed97e6862d74cd67 (diff)
OMAPDSS: panel-acx565akm: clean-up locking
The locking in the acx565akm panel driver was getting too complex. Clean it up by making new functions, acx565akm_bl_get_intensity_locked and acx565akm_bl_update_status_locked, which are called by the backlight subsystem. This way the non-locked versions can be called by the panel's other funcs, simplifying the lock management. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/omap2')
-rw-r--r--drivers/video/omap2/displays-new/panel-sony-acx565akm.c44
1 files changed, 30 insertions, 14 deletions
diff --git a/drivers/video/omap2/displays-new/panel-sony-acx565akm.c b/drivers/video/omap2/displays-new/panel-sony-acx565akm.c
index d94f35dbd536..8e97d06921ff 100644
--- a/drivers/video/omap2/displays-new/panel-sony-acx565akm.c
+++ b/drivers/video/omap2/displays-new/panel-sony-acx565akm.c
@@ -346,28 +346,22 @@ static int acx565akm_get_actual_brightness(struct panel_drv_data *ddata)
346static int acx565akm_bl_update_status(struct backlight_device *dev) 346static int acx565akm_bl_update_status(struct backlight_device *dev)
347{ 347{
348 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); 348 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev);
349 int r;
350 int level; 349 int level;
351 350
352 dev_dbg(&ddata->spi->dev, "%s\n", __func__); 351 dev_dbg(&ddata->spi->dev, "%s\n", __func__);
353 352
354 mutex_lock(&ddata->mutex);
355
356 if (dev->props.fb_blank == FB_BLANK_UNBLANK && 353 if (dev->props.fb_blank == FB_BLANK_UNBLANK &&
357 dev->props.power == FB_BLANK_UNBLANK) 354 dev->props.power == FB_BLANK_UNBLANK)
358 level = dev->props.brightness; 355 level = dev->props.brightness;
359 else 356 else
360 level = 0; 357 level = 0;
361 358
362 r = 0;
363 if (ddata->has_bc) 359 if (ddata->has_bc)
364 acx565akm_set_brightness(ddata, level); 360 acx565akm_set_brightness(ddata, level);
365 else 361 else
366 r = -ENODEV; 362 return -ENODEV;
367
368 mutex_unlock(&ddata->mutex);
369 363
370 return r; 364 return 0;
371} 365}
372 366
373static int acx565akm_bl_get_intensity(struct backlight_device *dev) 367static int acx565akm_bl_get_intensity(struct backlight_device *dev)
@@ -390,9 +384,33 @@ static int acx565akm_bl_get_intensity(struct backlight_device *dev)
390 return 0; 384 return 0;
391} 385}
392 386
387static int acx565akm_bl_update_status_locked(struct backlight_device *dev)
388{
389 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev);
390 int r;
391
392 mutex_lock(&ddata->mutex);
393 r = acx565akm_bl_update_status(dev);
394 mutex_unlock(&ddata->mutex);
395
396 return r;
397}
398
399static int acx565akm_bl_get_intensity_locked(struct backlight_device *dev)
400{
401 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev);
402 int r;
403
404 mutex_lock(&ddata->mutex);
405 r = acx565akm_bl_get_intensity(dev);
406 mutex_unlock(&ddata->mutex);
407
408 return r;
409}
410
393static const struct backlight_ops acx565akm_bl_ops = { 411static const struct backlight_ops acx565akm_bl_ops = {
394 .get_brightness = acx565akm_bl_get_intensity, 412 .get_brightness = acx565akm_bl_get_intensity_locked,
395 .update_status = acx565akm_bl_update_status, 413 .update_status = acx565akm_bl_update_status_locked,
396}; 414};
397 415
398/*--------------------Auto Brightness control via Sysfs---------------------*/ 416/*--------------------Auto Brightness control via Sysfs---------------------*/
@@ -526,8 +544,6 @@ static int acx565akm_panel_power_on(struct omap_dss_device *dssdev)
526 struct omap_dss_device *in = ddata->in; 544 struct omap_dss_device *in = ddata->in;
527 int r; 545 int r;
528 546
529 mutex_lock(&ddata->mutex);
530
531 dev_dbg(&ddata->spi->dev, "%s\n", __func__); 547 dev_dbg(&ddata->spi->dev, "%s\n", __func__);
532 548
533 in->ops.sdi->set_timings(in, &ddata->videomode); 549 in->ops.sdi->set_timings(in, &ddata->videomode);
@@ -568,8 +584,6 @@ static int acx565akm_panel_power_on(struct omap_dss_device *dssdev)
568 set_display_state(ddata, 1); 584 set_display_state(ddata, 1);
569 set_cabc_mode(ddata, ddata->cabc_mode); 585 set_cabc_mode(ddata, ddata->cabc_mode);
570 586
571 mutex_unlock(&ddata->mutex);
572
573 return acx565akm_bl_update_status(ddata->bl_dev); 587 return acx565akm_bl_update_status(ddata->bl_dev);
574} 588}
575 589
@@ -616,7 +630,9 @@ static int acx565akm_enable(struct omap_dss_device *dssdev)
616 if (omapdss_device_is_enabled(dssdev)) 630 if (omapdss_device_is_enabled(dssdev))
617 return 0; 631 return 0;
618 632
633 mutex_lock(&ddata->mutex);
619 r = acx565akm_panel_power_on(dssdev); 634 r = acx565akm_panel_power_on(dssdev);
635 mutex_unlock(&ddata->mutex);
620 if (r) 636 if (r)
621 return r; 637 return r;
622 638