Blame view

kernel/linux-imx6_3.14.28/Documentation/acpi/video_extension.txt 3.95 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  ACPI video extensions
  ~~~~~~~~~~~~~~~~~~~~~
  
  This driver implement the ACPI Extensions For Display Adapters for
  integrated graphics devices on motherboard, as specified in ACPI 2.0
  Specification, Appendix B, allowing to perform some basic control like
  defining the video POST device, retrieving EDID information or to
  setup a video output, etc.  Note that this is an ref. implementation
  only.  It may or may not work for your integrated video device.
  
  The ACPI video driver does 3 things regarding backlight control:
  
  1 Export a sysfs interface for user space to control backlight level
  
  If the ACPI table has a video device, and acpi_backlight=vendor kernel
  command line is not present, the driver will register a backlight device
  and set the required backlight operation structure for it for the sysfs
  interface control. For every registered class device, there will be a
  directory named acpi_videoX under /sys/class/backlight.
  
  The backlight sysfs interface has a standard definition here:
  Documentation/ABI/stable/sysfs-class-backlight.
  
  And what ACPI video driver does is:
  actual_brightness: on read, control method _BQC will be evaluated to
  get the brightness level the firmware thinks it is at;
  bl_power: not implemented, will set the current brightness instead;
  brightness: on write, control method _BCM will run to set the requested
  brightness level;
  max_brightness: Derived from the _BCL package(see below);
  type: firmware
  
  Note that ACPI video backlight driver will always use index for
  brightness, actual_brightness and max_brightness. So if we have
  the following _BCL package:
  
  Method (_BCL, 0, NotSerialized)
  {
  	Return (Package (0x0C)
  	{
  		0x64,
  		0x32,
  		0x0A,
  		0x14,
  		0x1E,
  		0x28,
  		0x32,
  		0x3C,
  		0x46,
  		0x50,
  		0x5A,
  		0x64
  	})
  }
  
  The first two levels are for when laptop are on AC or on battery and are
  not used by Linux currently. The remaining 10 levels are supported levels
  that we can choose from. The applicable index values are from 0 (that
  corresponds to the 0x0A brightness value) to 9 (that corresponds to the
  0x64 brightness value) inclusive. Each of those index values is regarded
  as a "brightness level" indicator. Thus from the user space perspective
  the range of available brightness levels is from 0 to 9 (max_brightness)
  inclusive.
  
  2 Notify user space about hotkey event
  
  There are generally two cases for hotkey event reporting:
  i) For some laptops, when user presses the hotkey, a scancode will be
     generated and sent to user space through the input device created by
     the keyboard driver as a key type input event, with proper remap, the
     following key code will appear to user space:
  
  	EV_KEY, KEY_BRIGHTNESSUP
  	EV_KEY, KEY_BRIGHTNESSDOWN
  	etc.
  
  For this case, ACPI video driver does not need to do anything(actually,
  it doesn't even know this happened).
  
  ii) For some laptops, the press of the hotkey will not generate the
      scancode, instead, firmware will notify the video device ACPI node
      about the event. The event value is defined in the ACPI spec. ACPI
      video driver will generate an key type input event according to the
      notify value it received and send the event to user space through the
      input device it created:
  
  	event		keycode
  	0x86		KEY_BRIGHTNESSUP
  	0x87		KEY_BRIGHTNESSDOWN
  	etc.
  
  so this would lead to the same effect as case i) now.
  
  Once user space tool receives this event, it can modify the backlight
  level through the sysfs interface.
  
  3 Change backlight level in the kernel
  
  This works for machines covered by case ii) in Section 2. Once the driver
  received a notification, it will set the backlight level accordingly. This does
  not affect the sending of event to user space, they are always sent to user
  space regardless of whether or not the video module controls the backlight level
  directly. This behaviour can be controlled through the brightness_switch_enabled
  module parameter as documented in kernel-parameters.txt. It is recommended to
  disable this behaviour once a GUI environment starts up and wants to have full
  control of the backlight level.