diff options
| author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2013-12-17 02:43:04 -0500 |
|---|---|---|
| committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2014-01-13 05:19:57 -0500 |
| commit | 0eb0dafb674cd6bfac2e3204b2f8b907e26b1138 (patch) | |
| tree | 44f6c81776d1476ef2a3b12be45d6d872ee63882 /drivers/video/omap2 | |
| parent | 8bc655521bb18dd8a306ef58ed97e6862d74cd67 (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.c | 44 |
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) | |||
| 346 | static int acx565akm_bl_update_status(struct backlight_device *dev) | 346 | static 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 | ||
| 373 | static int acx565akm_bl_get_intensity(struct backlight_device *dev) | 367 | static 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 | ||
| 387 | static 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 | |||
| 399 | static 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 | |||
| 393 | static const struct backlight_ops acx565akm_bl_ops = { | 411 | static 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 | ||
