Rev 3482 | Rev 4104 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3482 | Rev 3746 | ||
---|---|---|---|
Line 284... | Line 284... | ||
284 | 284 | ||
285 | void intel_panel_set_backlight(struct drm_device *dev, u32 level) |
285 | void intel_panel_set_backlight(struct drm_device *dev, u32 level) |
286 | { |
286 | { |
Line 287... | Line 287... | ||
287 | struct drm_i915_private *dev_priv = dev->dev_private; |
287 | struct drm_i915_private *dev_priv = dev->dev_private; |
- | 288 | ||
- | 289 | dev_priv->backlight.level = level; |
|
- | 290 | // if (dev_priv->backlight.device) |
|
288 | 291 | // dev_priv->backlight.device->props.brightness = level; |
|
289 | dev_priv->backlight_level = level; |
292 | |
290 | if (dev_priv->backlight_enabled) |
293 | // if (dev_priv->backlight.enabled) |
Line 291... | Line 294... | ||
291 | intel_panel_actually_set_backlight(dev, level); |
294 | // intel_panel_actually_set_backlight(dev, level); |
292 | } |
295 | } |
293 | 296 | ||
Line 294... | Line 297... | ||
294 | void intel_panel_disable_backlight(struct drm_device *dev) |
297 | void intel_panel_disable_backlight(struct drm_device *dev) |
295 | { |
298 | { |
Line 296... | Line 299... | ||
296 | struct drm_i915_private *dev_priv = dev->dev_private; |
299 | struct drm_i915_private *dev_priv = dev->dev_private; |
297 | 300 | ||
Line 316... | Line 319... | ||
316 | void intel_panel_enable_backlight(struct drm_device *dev, |
319 | void intel_panel_enable_backlight(struct drm_device *dev, |
317 | enum pipe pipe) |
320 | enum pipe pipe) |
318 | { |
321 | { |
319 | struct drm_i915_private *dev_priv = dev->dev_private; |
322 | struct drm_i915_private *dev_priv = dev->dev_private; |
Line 320... | Line 323... | ||
320 | 323 | ||
321 | if (dev_priv->backlight_level == 0) |
324 | if (dev_priv->backlight.level == 0) { |
- | 325 | dev_priv->backlight.level = intel_panel_get_max_backlight(dev); |
|
- | 326 | // if (dev_priv->backlight.device) |
|
- | 327 | // dev_priv->backlight.device->props.brightness = |
|
- | 328 | // dev_priv->backlight.level; |
|
Line 322... | Line 329... | ||
322 | dev_priv->backlight_level = intel_panel_get_max_backlight(dev); |
329 | } |
323 | 330 | ||
Line 324... | Line 331... | ||
324 | if (INTEL_INFO(dev)->gen >= 4) { |
331 | if (INTEL_INFO(dev)->gen >= 4) { |
Line 333... | Line 340... | ||
333 | * we don't track the backlight dpms state, hence check whether |
340 | * we don't track the backlight dpms state, hence check whether |
334 | * we have to do anything first. */ |
341 | * we have to do anything first. */ |
335 | if (tmp & BLM_PWM_ENABLE) |
342 | if (tmp & BLM_PWM_ENABLE) |
336 | goto set_level; |
343 | goto set_level; |
Line 337... | Line 344... | ||
337 | 344 | ||
338 | if (dev_priv->num_pipe == 3) |
345 | if (INTEL_INFO(dev)->num_pipes == 3) |
339 | tmp &= ~BLM_PIPE_SELECT_IVB; |
346 | tmp &= ~BLM_PIPE_SELECT_IVB; |
340 | else |
347 | else |
Line 341... | Line 348... | ||
341 | tmp &= ~BLM_PIPE_SELECT; |
348 | tmp &= ~BLM_PIPE_SELECT; |
Line 358... | Line 365... | ||
358 | set_level: |
365 | set_level: |
359 | /* Call below after setting BLC_PWM_CPU_CTL2 and BLC_PWM_PCH_CTL1. |
366 | /* Call below after setting BLC_PWM_CPU_CTL2 and BLC_PWM_PCH_CTL1. |
360 | * BLC_PWM_CPU_CTL may be cleared to zero automatically when these |
367 | * BLC_PWM_CPU_CTL may be cleared to zero automatically when these |
361 | * registers are set. |
368 | * registers are set. |
362 | */ |
369 | */ |
363 | dev_priv->backlight_enabled = true; |
370 | dev_priv->backlight.enabled = true; |
364 | intel_panel_actually_set_backlight(dev, dev_priv->backlight_level); |
371 | intel_panel_actually_set_backlight(dev, dev_priv->backlight.level); |
365 | } |
372 | } |
Line 366... | Line 373... | ||
366 | 373 | ||
367 | static void intel_panel_init_backlight(struct drm_device *dev) |
374 | static void intel_panel_init_backlight(struct drm_device *dev) |
368 | { |
375 | { |
Line 369... | Line 376... | ||
369 | struct drm_i915_private *dev_priv = dev->dev_private; |
376 | struct drm_i915_private *dev_priv = dev->dev_private; |
370 | 377 | ||
371 | dev_priv->backlight_level = intel_panel_get_backlight(dev); |
378 | dev_priv->backlight.level = intel_panel_get_backlight(dev); |
Line 372... | Line 379... | ||
372 | dev_priv->backlight_enabled = dev_priv->backlight_level != 0; |
379 | dev_priv->backlight.enabled = dev_priv->backlight.level != 0; |
373 | } |
380 | } |
374 | 381 | ||
Line 403... | Line 410... | ||
403 | } |
410 | } |
Line 404... | Line 411... | ||
404 | 411 | ||
405 | static int intel_panel_get_brightness(struct backlight_device *bd) |
412 | static int intel_panel_get_brightness(struct backlight_device *bd) |
406 | { |
413 | { |
407 | struct drm_device *dev = bl_get_data(bd); |
- | |
408 | struct drm_i915_private *dev_priv = dev->dev_private; |
414 | struct drm_device *dev = bl_get_data(bd); |
409 | return dev_priv->backlight_level; |
415 | return intel_panel_get_backlight(dev); |
Line 410... | Line 416... | ||
410 | } |
416 | } |
411 | 417 | ||
412 | static const struct backlight_ops intel_panel_bl_ops = { |
418 | static const struct backlight_ops intel_panel_bl_ops = { |
Line 420... | Line 426... | ||
420 | struct drm_i915_private *dev_priv = dev->dev_private; |
426 | struct drm_i915_private *dev_priv = dev->dev_private; |
421 | struct backlight_properties props; |
427 | struct backlight_properties props; |
Line 422... | Line 428... | ||
422 | 428 | ||
Line -... | Line 429... | ||
- | 429 | intel_panel_init_backlight(dev); |
|
- | 430 | ||
- | 431 | if (WARN_ON(dev_priv->backlight.device)) |
|
423 | intel_panel_init_backlight(dev); |
432 | return -ENODEV; |
424 | 433 | ||
- | 434 | memset(&props, 0, sizeof(props)); |
|
425 | memset(&props, 0, sizeof(props)); |
435 | props.type = BACKLIGHT_RAW; |
426 | props.type = BACKLIGHT_RAW; |
436 | props.brightness = dev_priv->backlight.level; |
427 | props.max_brightness = _intel_panel_get_max_backlight(dev); |
437 | props.max_brightness = _intel_panel_get_max_backlight(dev); |
428 | if (props.max_brightness == 0) { |
438 | if (props.max_brightness == 0) { |
429 | DRM_DEBUG_DRIVER("Failed to get maximum backlight value\n"); |
439 | DRM_DEBUG_DRIVER("Failed to get maximum backlight value\n"); |
430 | return -ENODEV; |
440 | return -ENODEV; |
431 | } |
441 | } |
432 | dev_priv->backlight = |
442 | dev_priv->backlight.device = |
433 | backlight_device_register("intel_backlight", |
443 | backlight_device_register("intel_backlight", |
Line 434... | Line 444... | ||
434 | &connector->kdev, dev, |
444 | &connector->kdev, dev, |
435 | &intel_panel_bl_ops, &props); |
445 | &intel_panel_bl_ops, &props); |
436 | 446 | ||
437 | if (IS_ERR(dev_priv->backlight)) { |
447 | if (IS_ERR(dev_priv->backlight.device)) { |
438 | DRM_ERROR("Failed to register backlight: %ld\n", |
448 | DRM_ERROR("Failed to register backlight: %ld\n", |
439 | PTR_ERR(dev_priv->backlight)); |
449 | PTR_ERR(dev_priv->backlight.device)); |
440 | dev_priv->backlight = NULL; |
- | |
441 | return -ENODEV; |
450 | dev_priv->backlight.device = NULL; |
442 | } |
451 | return -ENODEV; |
Line 443... | Line 452... | ||
443 | dev_priv->backlight->props.brightness = intel_panel_get_backlight(dev); |
452 | } |
444 | return 0; |
453 | return 0; |
445 | } |
454 | } |
446 | 455 | ||
447 | void intel_panel_destroy_backlight(struct drm_device *dev) |
456 | void intel_panel_destroy_backlight(struct drm_device *dev) |
- | 457 | { |
|
- | 458 | struct drm_i915_private *dev_priv = dev->dev_private; |
|
448 | { |
459 | if (dev_priv->backlight.device) { |
449 | struct drm_i915_private *dev_priv = dev->dev_private; |
460 | backlight_device_unregister(dev_priv->backlight.device); |
450 | if (dev_priv->backlight) |
461 | dev_priv->backlight.device = NULL; |
451 | backlight_device_unregister(dev_priv->backlight); |
462 | } |
452 | } |
463 | } |