Lines 483-495
static void radeon_legacy_backlight_exit(struct radeon_encoder *radeon_encoder)
Link Here
|
483 |
|
483 |
|
484 |
#else /* !CONFIG_BACKLIGHT_CLASS_DEVICE */ |
484 |
#else /* !CONFIG_BACKLIGHT_CLASS_DEVICE */ |
485 |
|
485 |
|
486 |
void radeon_legacy_backlight_init(struct radeon_encoder *encoder, |
486 |
struct backlight_device { |
|
|
487 |
struct backlight_properties { |
488 |
int brightness; |
489 |
int max_brightness; |
490 |
} props; |
491 |
struct radeon_backlight_privdata pdata; |
492 |
}; |
493 |
|
494 |
static int radeon_legacy_backlight_get_brightness(struct backlight_device *bd) |
495 |
{ |
496 |
struct radeon_encoder *radeon_encoder = bd->pdata.encoder; |
497 |
struct drm_device *dev = radeon_encoder->base.dev; |
498 |
struct radeon_device *rdev = dev->dev_private; |
499 |
uint8_t backlight_level; |
500 |
|
501 |
backlight_level = (RREG32(RADEON_LVDS_GEN_CNTL) >> |
502 |
RADEON_LVDS_BL_MOD_LEVEL_SHIFT) & 0xff; |
503 |
|
504 |
return bd->pdata.negative ? RADEON_MAX_BL_LEVEL - backlight_level : backlight_level; |
505 |
} |
506 |
|
507 |
void radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder, |
487 |
struct drm_connector *drm_connector) |
508 |
struct drm_connector *drm_connector) |
488 |
{ |
509 |
{ |
|
|
510 |
struct drm_device *dev = radeon_encoder->base.dev; |
511 |
struct radeon_device *rdev = dev->dev_private; |
512 |
struct backlight_device *bd; |
513 |
uint8_t backlight_level; |
514 |
|
515 |
if (!radeon_encoder->enc_priv) |
516 |
return; |
517 |
|
518 |
#ifdef CONFIG_PMAC_BACKLIGHT |
519 |
if (!pmac_has_backlight_type("ati") && |
520 |
!pmac_has_backlight_type("mnca")) |
521 |
return; |
522 |
#endif |
523 |
|
524 |
bd = malloc(sizeof(struct backlight_device), DRM_MEM_DRIVER, M_WAITOK); |
525 |
if (!bd) { |
526 |
DRM_ERROR("Memory allocation failed\n"); |
527 |
return; |
528 |
} |
529 |
bd->pdata.encoder = radeon_encoder; |
530 |
|
531 |
backlight_level = (RREG32(RADEON_LVDS_GEN_CNTL) >> |
532 |
RADEON_LVDS_BL_MOD_LEVEL_SHIFT) & 0xff; |
533 |
|
534 |
/* First, try to detect backlight level sense based on the assumption |
535 |
* that firmware set it up at full brightness |
536 |
*/ |
537 |
if (backlight_level == 0) |
538 |
bd->pdata.negative = true; |
539 |
else if (backlight_level == 0xff) |
540 |
bd->pdata.negative = false; |
541 |
else { |
542 |
/* XXX hack... maybe some day we can figure out in what direction |
543 |
* backlight should work on a given panel? |
544 |
*/ |
545 |
bd->pdata.negative = (rdev->family != CHIP_RV200 && |
546 |
rdev->family != CHIP_RV250 && |
547 |
rdev->family != CHIP_RV280 && |
548 |
rdev->family != CHIP_RV350); |
549 |
|
550 |
#ifdef CONFIG_PMAC_BACKLIGHT |
551 |
bd->pdata.negative = (bd->pdata.negative || |
552 |
of_machine_is_compatible("PowerBook4,3") || |
553 |
of_machine_is_compatible("PowerBook6,3") || |
554 |
of_machine_is_compatible("PowerBook6,5")); |
555 |
#endif |
556 |
} |
557 |
|
558 |
if (rdev->is_atom_bios) { |
559 |
struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; |
560 |
lvds->bl_dev = bd; |
561 |
} else { |
562 |
struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; |
563 |
lvds->bl_dev = bd; |
564 |
} |
565 |
|
566 |
bd->props.brightness = radeon_legacy_backlight_get_brightness(bd); |
567 |
|
568 |
DRM_INFO("radeon legacy LVDS backlight initialized\n"); |
569 |
return; |
489 |
} |
570 |
} |
490 |
|
571 |
|
491 |
static void radeon_legacy_backlight_exit(struct radeon_encoder *encoder) |
572 |
static void radeon_legacy_backlight_exit(struct radeon_encoder *radeon_encoder) |
492 |
{ |
573 |
{ |
|
|
574 |
struct drm_device *dev = radeon_encoder->base.dev; |
575 |
struct radeon_device *rdev = dev->dev_private; |
576 |
struct backlight_device *bd = NULL; |
577 |
|
578 |
if (!radeon_encoder->enc_priv) |
579 |
return; |
580 |
|
581 |
if (rdev->is_atom_bios) { |
582 |
struct radeon_encoder_atom_dig *lvds = radeon_encoder->enc_priv; |
583 |
bd = lvds->bl_dev; |
584 |
lvds->bl_dev = NULL; |
585 |
} else { |
586 |
struct radeon_encoder_lvds *lvds = radeon_encoder->enc_priv; |
587 |
bd = lvds->bl_dev; |
588 |
lvds->bl_dev = NULL; |
589 |
} |
590 |
|
591 |
if (bd) { |
592 |
free(bd, DRM_MEM_DRIVER); |
593 |
DRM_INFO("radeon legacy LVDS backlight unloaded\n"); |
594 |
} |
493 |
} |
595 |
} |
494 |
|
596 |
|
495 |
#endif |
597 |
#endif |