286,9 → 286,12 |
{ |
struct drm_i915_private *dev_priv = dev->dev_private; |
|
dev_priv->backlight_level = level; |
if (dev_priv->backlight_enabled) |
intel_panel_actually_set_backlight(dev, level); |
dev_priv->backlight.level = level; |
// if (dev_priv->backlight.device) |
// dev_priv->backlight.device->props.brightness = level; |
|
// if (dev_priv->backlight.enabled) |
// intel_panel_actually_set_backlight(dev, level); |
} |
|
void intel_panel_disable_backlight(struct drm_device *dev) |
295,7 → 298,7 |
{ |
struct drm_i915_private *dev_priv = dev->dev_private; |
|
dev_priv->backlight_enabled = false; |
dev_priv->backlight.enabled = false; |
intel_panel_actually_set_backlight(dev, 0); |
|
if (INTEL_INFO(dev)->gen >= 4) { |
318,8 → 321,12 |
{ |
struct drm_i915_private *dev_priv = dev->dev_private; |
|
if (dev_priv->backlight_level == 0) |
dev_priv->backlight_level = intel_panel_get_max_backlight(dev); |
if (dev_priv->backlight.level == 0) { |
dev_priv->backlight.level = intel_panel_get_max_backlight(dev); |
// if (dev_priv->backlight.device) |
// dev_priv->backlight.device->props.brightness = |
// dev_priv->backlight.level; |
} |
|
if (INTEL_INFO(dev)->gen >= 4) { |
uint32_t reg, tmp; |
335,7 → 342,7 |
if (tmp & BLM_PWM_ENABLE) |
goto set_level; |
|
if (dev_priv->num_pipe == 3) |
if (INTEL_INFO(dev)->num_pipes == 3) |
tmp &= ~BLM_PIPE_SELECT_IVB; |
else |
tmp &= ~BLM_PIPE_SELECT; |
360,8 → 367,8 |
* BLC_PWM_CPU_CTL may be cleared to zero automatically when these |
* registers are set. |
*/ |
dev_priv->backlight_enabled = true; |
intel_panel_actually_set_backlight(dev, dev_priv->backlight_level); |
dev_priv->backlight.enabled = true; |
intel_panel_actually_set_backlight(dev, dev_priv->backlight.level); |
} |
|
static void intel_panel_init_backlight(struct drm_device *dev) |
368,8 → 375,8 |
{ |
struct drm_i915_private *dev_priv = dev->dev_private; |
|
dev_priv->backlight_level = intel_panel_get_backlight(dev); |
dev_priv->backlight_enabled = dev_priv->backlight_level != 0; |
dev_priv->backlight.level = intel_panel_get_backlight(dev); |
dev_priv->backlight.enabled = dev_priv->backlight.level != 0; |
} |
|
enum drm_connector_status |
405,8 → 412,7 |
static int intel_panel_get_brightness(struct backlight_device *bd) |
{ |
struct drm_device *dev = bl_get_data(bd); |
struct drm_i915_private *dev_priv = dev->dev_private; |
return dev_priv->backlight_level; |
return intel_panel_get_backlight(dev); |
} |
|
static const struct backlight_ops intel_panel_bl_ops = { |
422,25 → 428,28 |
|
intel_panel_init_backlight(dev); |
|
if (WARN_ON(dev_priv->backlight.device)) |
return -ENODEV; |
|
memset(&props, 0, sizeof(props)); |
props.type = BACKLIGHT_RAW; |
props.brightness = dev_priv->backlight.level; |
props.max_brightness = _intel_panel_get_max_backlight(dev); |
if (props.max_brightness == 0) { |
DRM_DEBUG_DRIVER("Failed to get maximum backlight value\n"); |
return -ENODEV; |
} |
dev_priv->backlight = |
dev_priv->backlight.device = |
backlight_device_register("intel_backlight", |
&connector->kdev, dev, |
&intel_panel_bl_ops, &props); |
|
if (IS_ERR(dev_priv->backlight)) { |
if (IS_ERR(dev_priv->backlight.device)) { |
DRM_ERROR("Failed to register backlight: %ld\n", |
PTR_ERR(dev_priv->backlight)); |
dev_priv->backlight = NULL; |
PTR_ERR(dev_priv->backlight.device)); |
dev_priv->backlight.device = NULL; |
return -ENODEV; |
} |
dev_priv->backlight->props.brightness = intel_panel_get_backlight(dev); |
return 0; |
} |
|
447,9 → 456,11 |
void intel_panel_destroy_backlight(struct drm_device *dev) |
{ |
struct drm_i915_private *dev_priv = dev->dev_private; |
if (dev_priv->backlight) |
backlight_device_unregister(dev_priv->backlight); |
if (dev_priv->backlight.device) { |
backlight_device_unregister(dev_priv->backlight.device); |
dev_priv->backlight.device = NULL; |
} |
} |
#else |
int intel_panel_setup_backlight(struct drm_connector *connector) |
{ |