Zhang Rui | 203d3d4 | 2008-01-17 15:51:08 +0800 | [diff] [blame] | 1 | # |
| 2 | # Generic thermal sysfs drivers configuration |
| 3 | # |
| 4 | |
| 5 | menuconfig THERMAL |
Zhang Rui | 63c4ec9 | 2008-04-21 16:07:13 +0800 | [diff] [blame] | 6 | tristate "Generic Thermal sysfs driver" |
Zhang Rui | 203d3d4 | 2008-01-17 15:51:08 +0800 | [diff] [blame] | 7 | help |
| 8 | Generic Thermal Sysfs driver offers a generic mechanism for |
| 9 | thermal management. Usually it's made up of one or more thermal |
| 10 | zone and cooling device. |
Len Brown | 543a956 | 2008-02-07 16:55:08 -0500 | [diff] [blame] | 11 | Each thermal zone contains its own temperature, trip points, |
Zhang Rui | 203d3d4 | 2008-01-17 15:51:08 +0800 | [diff] [blame] | 12 | cooling devices. |
| 13 | All platforms with ACPI thermal support can use this driver. |
Zhang Rui | 63c4ec9 | 2008-04-21 16:07:13 +0800 | [diff] [blame] | 14 | If you want this support, you should say Y or M here. |
Rene Herman | 16d7523 | 2008-06-24 19:38:56 +0200 | [diff] [blame] | 15 | |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 16 | if THERMAL |
| 17 | |
Rene Herman | 16d7523 | 2008-06-24 19:38:56 +0200 | [diff] [blame] | 18 | config THERMAL_HWMON |
Jean Delvare | ab92402 | 2011-07-28 13:48:40 -0700 | [diff] [blame] | 19 | bool |
Eduardo Valentin | 0dd8879 | 2013-07-03 15:14:28 -0400 | [diff] [blame] | 20 | prompt "Expose thermal sensors as hwmon device" |
Rene Herman | 16d7523 | 2008-06-24 19:38:56 +0200 | [diff] [blame] | 21 | depends on HWMON=y || HWMON=THERMAL |
Jean Delvare | ab92402 | 2011-07-28 13:48:40 -0700 | [diff] [blame] | 22 | default y |
Eduardo Valentin | 0dd8879 | 2013-07-03 15:14:28 -0400 | [diff] [blame] | 23 | help |
| 24 | In case a sensor is registered with the thermal |
| 25 | framework, this option will also register it |
| 26 | as a hwmon. The sensor will then have the common |
| 27 | hwmon sysfs interface. |
| 28 | |
| 29 | Say 'Y' here if you want all thermal sensors to |
| 30 | have hwmon sysfs interface too. |
Vincenzo Frascino | 6a92c36 | 2012-03-21 12:55:03 -0700 | [diff] [blame] | 31 | |
Eduardo Valentin | 4e5e470 | 2013-07-03 15:35:39 -0400 | [diff] [blame] | 32 | config THERMAL_OF |
| 33 | bool |
| 34 | prompt "APIs to parse thermal data out of device tree" |
| 35 | depends on OF |
| 36 | default y |
| 37 | help |
| 38 | This options provides helpers to add the support to |
| 39 | read and parse thermal data definitions out of the |
| 40 | device tree blob. |
| 41 | |
| 42 | Say 'Y' here if you need to build thermal infrastructure |
| 43 | based on device tree. |
| 44 | |
Durgadoss R | a56757a | 2012-09-21 14:32:24 +0530 | [diff] [blame] | 45 | choice |
| 46 | prompt "Default Thermal governor" |
Durgadoss R | a56757a | 2012-09-21 14:32:24 +0530 | [diff] [blame] | 47 | default THERMAL_DEFAULT_GOV_STEP_WISE |
| 48 | help |
| 49 | This option sets which thermal governor shall be loaded at |
| 50 | startup. If in doubt, select 'step_wise'. |
| 51 | |
| 52 | config THERMAL_DEFAULT_GOV_STEP_WISE |
| 53 | bool "step_wise" |
Zhang Rui | 9d185d0 | 2013-02-08 20:33:42 +0800 | [diff] [blame] | 54 | select THERMAL_GOV_STEP_WISE |
Durgadoss R | a56757a | 2012-09-21 14:32:24 +0530 | [diff] [blame] | 55 | help |
| 56 | Use the step_wise governor as default. This throttles the |
| 57 | devices one step at a time. |
| 58 | |
| 59 | config THERMAL_DEFAULT_GOV_FAIR_SHARE |
| 60 | bool "fair_share" |
Zhang Rui | 9d185d0 | 2013-02-08 20:33:42 +0800 | [diff] [blame] | 61 | select THERMAL_GOV_FAIR_SHARE |
Durgadoss R | a56757a | 2012-09-21 14:32:24 +0530 | [diff] [blame] | 62 | help |
| 63 | Use the fair_share governor as default. This throttles the |
| 64 | devices based on their 'contribution' to a zone. The |
| 65 | contribution should be provided through platform data. |
| 66 | |
| 67 | config THERMAL_DEFAULT_GOV_USER_SPACE |
| 68 | bool "user_space" |
Zhang Rui | 9d185d0 | 2013-02-08 20:33:42 +0800 | [diff] [blame] | 69 | select THERMAL_GOV_USER_SPACE |
Durgadoss R | a56757a | 2012-09-21 14:32:24 +0530 | [diff] [blame] | 70 | help |
| 71 | Select this if you want to let the user space manage the |
Regid Ichira | ece238f | 2013-09-09 00:58:53 +0300 | [diff] [blame] | 72 | platform thermals. |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 73 | |
Javi Merino | 6b775e8 | 2015-03-02 17:17:19 +0000 | [diff] [blame^] | 74 | config THERMAL_DEFAULT_GOV_POWER_ALLOCATOR |
| 75 | bool "power_allocator" |
| 76 | select THERMAL_GOV_POWER_ALLOCATOR |
| 77 | help |
| 78 | Select this if you want to control temperature based on |
| 79 | system and device power allocation. This governor can only |
| 80 | operate on cooling devices that implement the power API. |
| 81 | |
Durgadoss R | a56757a | 2012-09-21 14:32:24 +0530 | [diff] [blame] | 82 | endchoice |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 83 | |
Zhang Rui | 9d185d0 | 2013-02-08 20:33:42 +0800 | [diff] [blame] | 84 | config THERMAL_GOV_FAIR_SHARE |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 85 | bool "Fair-share thermal governor" |
| 86 | help |
| 87 | Enable this to manage platform thermals using fair-share governor. |
| 88 | |
Zhang Rui | 9d185d0 | 2013-02-08 20:33:42 +0800 | [diff] [blame] | 89 | config THERMAL_GOV_STEP_WISE |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 90 | bool "Step_wise thermal governor" |
| 91 | help |
| 92 | Enable this to manage platform thermals using a simple linear |
Luka Perkov | a822794 | 2013-09-27 20:20:33 +0200 | [diff] [blame] | 93 | governor. |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 94 | |
Peter Feuerer | e4dbf98 | 2014-07-22 17:37:13 +0200 | [diff] [blame] | 95 | config THERMAL_GOV_BANG_BANG |
| 96 | bool "Bang Bang thermal governor" |
| 97 | default n |
| 98 | help |
| 99 | Enable this to manage platform thermals using bang bang governor. |
| 100 | |
| 101 | Say 'Y' here if you want to use two point temperature regulation |
| 102 | used for fans without throttling. Some fan drivers depend on this |
| 103 | governor to be enabled (e.g. acerhdf). |
| 104 | |
Zhang Rui | 9d185d0 | 2013-02-08 20:33:42 +0800 | [diff] [blame] | 105 | config THERMAL_GOV_USER_SPACE |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 106 | bool "User_space thermal governor" |
| 107 | help |
| 108 | Enable this to let the user space manage the platform thermals. |
| 109 | |
Javi Merino | 6b775e8 | 2015-03-02 17:17:19 +0000 | [diff] [blame^] | 110 | config THERMAL_GOV_POWER_ALLOCATOR |
| 111 | bool "Power allocator thermal governor" |
| 112 | select THERMAL_POWER_ACTOR |
| 113 | help |
| 114 | Enable this to manage platform thermals by dynamically |
| 115 | allocating and limiting power to devices. |
| 116 | |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 117 | config CPU_THERMAL |
Zhang Rui | bbf7fc8 | 2013-03-26 23:57:01 +0800 | [diff] [blame] | 118 | bool "generic cpu cooling support" |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 119 | depends on CPU_FREQ |
Eduardo Valentin | 39d99cf | 2013-09-12 19:26:45 -0400 | [diff] [blame] | 120 | depends on THERMAL_OF |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 121 | help |
| 122 | This implements the generic cpu cooling mechanism through frequency |
Eduardo Valentin | f7188b3 | 2013-04-17 17:12:10 +0000 | [diff] [blame] | 123 | reduction. An ACPI version of this already exists |
| 124 | (drivers/acpi/processor_thermal.c). |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 125 | This will be useful for platforms using the generic thermal interface |
| 126 | and not the ACPI interface. |
Eduardo Valentin | f7188b3 | 2013-04-17 17:12:10 +0000 | [diff] [blame] | 127 | |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 128 | If you want this support, you should say Y here. |
| 129 | |
Eduardo Valentin | f9df89d | 2014-01-06 09:04:18 -0400 | [diff] [blame] | 130 | config CLOCK_THERMAL |
| 131 | bool "Generic clock cooling support" |
| 132 | depends on COMMON_CLK |
| 133 | depends on PM_OPP |
| 134 | help |
| 135 | This entry implements the generic clock cooling mechanism through |
| 136 | frequency clipping. Typically used to cool off co-processors. The |
| 137 | device that is configured to use this cooling mechanism will be |
| 138 | controlled to reduce clock frequency whenever temperature is high. |
| 139 | |
| 140 | If you want this support, you should say Y here. |
| 141 | |
Amit Daniel Kachhap | e6e238c | 2013-02-04 00:30:15 +0000 | [diff] [blame] | 142 | config THERMAL_EMULATION |
| 143 | bool "Thermal emulation mode support" |
| 144 | help |
| 145 | Enable this option to make a emul_temp sysfs node in thermal zone |
| 146 | directory to support temperature emulation. With emulation sysfs node, |
| 147 | user can manually input temperature and test the different trip |
| 148 | threshold behaviour for simulation purpose. |
| 149 | |
Eduardo Valentin | 8837295 | 2013-03-26 21:38:34 +0000 | [diff] [blame] | 150 | WARNING: Be careful while enabling this option on production systems, |
| 151 | because userland can easily disable the thermal policy by simply |
| 152 | flooding this sysfs node with low temperature values. |
| 153 | |
Shawn Guo | ca3de46 | 2013-06-24 14:30:44 +0800 | [diff] [blame] | 154 | config IMX_THERMAL |
| 155 | tristate "Temperature sensor driver for Freescale i.MX SoCs" |
| 156 | depends on CPU_THERMAL |
| 157 | depends on MFD_SYSCON |
| 158 | depends on OF |
| 159 | help |
| 160 | Support for Temperature Monitor (TEMPMON) found on Freescale i.MX SoCs. |
| 161 | It supports one critical trip point and one passive trip point. The |
| 162 | cpufreq is used as the cooling device to throttle CPUs when the |
| 163 | passive trip is crossed. |
| 164 | |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 165 | config SPEAR_THERMAL |
| 166 | bool "SPEAr thermal sensor driver" |
| 167 | depends on PLAT_SPEAR |
| 168 | depends on OF |
| 169 | help |
| 170 | Enable this to plug the SPEAr thermal sensor driver into the Linux |
Luka Perkov | a822794 | 2013-09-27 20:20:33 +0200 | [diff] [blame] | 171 | thermal framework. |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 172 | |
Caesar Wang | cbac8f63 | 2014-11-24 12:58:59 +0800 | [diff] [blame] | 173 | config ROCKCHIP_THERMAL |
| 174 | tristate "Rockchip thermal driver" |
| 175 | depends on ARCH_ROCKCHIP |
| 176 | depends on RESET_CONTROLLER |
| 177 | help |
| 178 | Rockchip thermal driver provides support for Temperature sensor |
| 179 | ADC (TS-ADC) found on Rockchip SoCs. It supports one critical |
| 180 | trip point. Cpufreq is used as the cooling device and will throttle |
| 181 | CPUs when the Temperature crosses the passive trip point. |
| 182 | |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 183 | config RCAR_THERMAL |
| 184 | tristate "Renesas R-Car thermal driver" |
Laurent Pinchart | beeb5a1 | 2013-11-27 02:18:34 +0100 | [diff] [blame] | 185 | depends on ARCH_SHMOBILE || COMPILE_TEST |
Richard Weinberger | d1c8b04 | 2014-01-27 09:40:58 +0100 | [diff] [blame] | 186 | depends on HAS_IOMEM |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 187 | help |
| 188 | Enable this to plug the R-Car thermal sensor driver into the Linux |
Luka Perkov | a822794 | 2013-09-27 20:20:33 +0200 | [diff] [blame] | 189 | thermal framework. |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 190 | |
Nobuhiro Iwamatsu | 7060aa3 | 2013-02-06 06:35:24 +0000 | [diff] [blame] | 191 | config KIRKWOOD_THERMAL |
| 192 | tristate "Temperature sensor on Marvell Kirkwood SoCs" |
Andrew Lunn | 575be65 | 2014-08-30 18:46:08 +0200 | [diff] [blame] | 193 | depends on MACH_KIRKWOOD |
Nobuhiro Iwamatsu | 7060aa3 | 2013-02-06 06:35:24 +0000 | [diff] [blame] | 194 | depends on OF |
| 195 | help |
| 196 | Support for the Kirkwood thermal sensor driver into the Linux thermal |
| 197 | framework. Only kirkwood 88F6282 and 88F6283 have this sensor. |
| 198 | |
Andrew Lunn | 74ffa64 | 2013-02-06 06:35:26 +0000 | [diff] [blame] | 199 | config DOVE_THERMAL |
| 200 | tristate "Temperature sensor on Marvell Dove SoCs" |
Riku Voipio | b3dee39 | 2014-05-31 14:50:26 +0300 | [diff] [blame] | 201 | depends on ARCH_DOVE || MACH_DOVE |
Andrew Lunn | 74ffa64 | 2013-02-06 06:35:26 +0000 | [diff] [blame] | 202 | depends on OF |
| 203 | help |
| 204 | Support for the Dove thermal sensor driver in the Linux thermal |
| 205 | framework. |
| 206 | |
hongbo.zhang | aa1acb0 | 2012-11-15 18:56:42 +0800 | [diff] [blame] | 207 | config DB8500_THERMAL |
| 208 | bool "DB8500 thermal management" |
| 209 | depends on ARCH_U8500 |
| 210 | default y |
| 211 | help |
| 212 | Adds DB8500 thermal management implementation according to the thermal |
| 213 | management framework. A thermal zone with several trip points will be |
| 214 | created. Cooling devices can be bound to the trip points to cool this |
| 215 | thermal zone if trip points reached. |
| 216 | |
Ezequiel Garcia | fa0d654 | 2013-04-02 01:37:41 +0000 | [diff] [blame] | 217 | config ARMADA_THERMAL |
| 218 | tristate "Armada 370/XP thermal management" |
| 219 | depends on ARCH_MVEBU |
| 220 | depends on OF |
| 221 | help |
| 222 | Enable this option if you want to have support for thermal management |
| 223 | controller present in Armada 370 and Armada XP SoC. |
| 224 | |
Mikko Perttunen | 66fb848 | 2014-09-29 17:17:31 +0300 | [diff] [blame] | 225 | config TEGRA_SOCTHERM |
| 226 | tristate "Tegra SOCTHERM thermal management" |
| 227 | depends on ARCH_TEGRA |
| 228 | help |
| 229 | Enable this option for integrated thermal management support on NVIDIA |
| 230 | Tegra124 systems-on-chip. The driver supports four thermal zones |
| 231 | (CPU, GPU, MEM, PLLX). Cooling devices can be bound to the thermal |
| 232 | zones to manage temperatures. This option is also required for the |
| 233 | emergency thermal reset (thermtrip) feature to function. |
| 234 | |
hongbo.zhang | aa1acb0 | 2012-11-15 18:56:42 +0800 | [diff] [blame] | 235 | config DB8500_CPUFREQ_COOLING |
| 236 | tristate "DB8500 cpufreq cooling" |
| 237 | depends on ARCH_U8500 |
| 238 | depends on CPU_THERMAL |
| 239 | default y |
| 240 | help |
| 241 | Adds DB8500 cpufreq cooling devices, and these cooling devices can be |
| 242 | bound to thermal zone trip points. When a trip point reached, the |
| 243 | bound cpufreq cooling device turns active to set CPU frequency low to |
| 244 | cool down the CPU. |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 245 | |
Jacob Pan | d6d71ee | 2013-01-21 04:37:57 -0800 | [diff] [blame] | 246 | config INTEL_POWERCLAMP |
| 247 | tristate "Intel PowerClamp idle injection driver" |
| 248 | depends on THERMAL |
| 249 | depends on X86 |
| 250 | depends on CPU_SUP_INTEL |
| 251 | help |
| 252 | Enable this to enable Intel PowerClamp idle injection driver. This |
| 253 | enforce idle time which results in more package C-state residency. The |
| 254 | user interface is exposed via generic thermal framework. |
| 255 | |
Srinivas Pandruvada | f1a18a1 | 2013-05-17 23:42:02 +0000 | [diff] [blame] | 256 | config X86_PKG_TEMP_THERMAL |
| 257 | tristate "X86 package temperature thermal driver" |
Randy Dunlap | b3ba020 | 2013-06-17 12:27:17 -0700 | [diff] [blame] | 258 | depends on X86_THERMAL_VECTOR |
Srinivas Pandruvada | f1a18a1 | 2013-05-17 23:42:02 +0000 | [diff] [blame] | 259 | select THERMAL_GOV_USER_SPACE |
| 260 | default m |
| 261 | help |
| 262 | Enable this to register CPU digital sensor for package temperature as |
| 263 | thermal zone. Each package will have its own thermal zone. There are |
| 264 | two trip points which can be set by user to get notifications via thermal |
| 265 | notification methods. |
| 266 | |
Srinivas Pandruvada | bc40b5e | 2014-04-07 13:57:15 -0700 | [diff] [blame] | 267 | config INTEL_SOC_DTS_THERMAL |
| 268 | tristate "Intel SoCs DTS thermal driver" |
| 269 | depends on X86 && IOSF_MBI |
| 270 | help |
| 271 | Enable this to register Intel SoCs (e.g. Bay Trail) platform digital |
| 272 | temperature sensor (DTS). These SoCs have two additional DTSs in |
| 273 | addition to DTSs on CPU cores. Each DTS will be registered as a |
| 274 | thermal zone. There are two trip points. One of the trip point can |
| 275 | be set by user mode programs to get notifications via Linux thermal |
| 276 | notification methods.The other trip is a critical trip point, which |
| 277 | was set by the driver based on the TJ MAX temperature. |
| 278 | |
Zhang Rui | 3230bbf | 2014-03-14 00:34:05 +0800 | [diff] [blame] | 279 | config INT340X_THERMAL |
Zhang Rui | 816cab9 | 2014-03-14 12:45:05 +0800 | [diff] [blame] | 280 | tristate "ACPI INT340X thermal drivers" |
Zhang Rui | 3230bbf | 2014-03-14 00:34:05 +0800 | [diff] [blame] | 281 | depends on X86 && ACPI |
Zhang Rui | 0ab1536 | 2014-03-23 23:37:32 +0800 | [diff] [blame] | 282 | select THERMAL_GOV_USER_SPACE |
Jacob Pan | 52b1c69 | 2014-09-03 15:14:23 +0800 | [diff] [blame] | 283 | select ACPI_THERMAL_REL |
Zhang Rui | d805474 | 2014-06-19 15:43:29 +0800 | [diff] [blame] | 284 | select ACPI_FAN |
Zhang Rui | 3230bbf | 2014-03-14 00:34:05 +0800 | [diff] [blame] | 285 | help |
| 286 | Newer laptops and tablets that use ACPI may have thermal sensors and |
| 287 | other devices with thermal control capabilities outside the core |
| 288 | CPU/SOC, for thermal safety reasons. |
| 289 | They are exposed for the OS to use via the INT3400 ACPI device object |
| 290 | as the master, and INT3401~INT340B ACPI device objects as the slaves. |
| 291 | Enable this to expose the temperature information and cooling ability |
| 292 | from these objects to userspace via the normal thermal framework. |
| 293 | This means that a wide range of applications and GUI widgets can show |
| 294 | the information to the user or use this information for making |
| 295 | decisions. For example, the Intel Thermal Daemon can use this |
| 296 | information to allow the user to select his laptop to run without |
| 297 | turning on the fans. |
| 298 | |
Jacob Pan | 52b1c69 | 2014-09-03 15:14:23 +0800 | [diff] [blame] | 299 | config ACPI_THERMAL_REL |
| 300 | tristate |
| 301 | depends on ACPI |
| 302 | |
Eduardo Valentin | eb98200 | 2013-05-15 15:46:00 +0000 | [diff] [blame] | 303 | menu "Texas Instruments thermal drivers" |
| 304 | source "drivers/thermal/ti-soc-thermal/Kconfig" |
| 305 | endmenu |
Zhang Rui | f157f59 | 2013-06-18 06:31:26 +0800 | [diff] [blame] | 306 | |
Amit Daniel Kachhap | c682137 | 2013-06-24 16:20:22 +0530 | [diff] [blame] | 307 | menu "Samsung thermal drivers" |
Bartlomiej Zolnierkiewicz | 4de4581 | 2013-10-04 14:36:42 +0200 | [diff] [blame] | 308 | depends on ARCH_EXYNOS |
Amit Daniel Kachhap | c682137 | 2013-06-24 16:20:22 +0530 | [diff] [blame] | 309 | source "drivers/thermal/samsung/Kconfig" |
| 310 | endmenu |
| 311 | |
Lee Jones | 60aef7c | 2014-06-05 16:06:55 +0100 | [diff] [blame] | 312 | menu "STMicroelectronics thermal drivers" |
| 313 | depends on ARCH_STI && OF |
| 314 | source "drivers/thermal/st/Kconfig" |
| 315 | endmenu |
| 316 | |
Ivan T. Ivanov | c610afa | 2015-02-05 19:12:56 +0200 | [diff] [blame] | 317 | config QCOM_SPMI_TEMP_ALARM |
| 318 | tristate "Qualcomm SPMI PMIC Temperature Alarm" |
| 319 | depends on OF && SPMI && IIO |
| 320 | select REGMAP_SPMI |
| 321 | help |
| 322 | This enables a thermal sysfs driver for Qualcomm plug-and-play (QPNP) |
| 323 | PMIC devices. It shows up in sysfs as a thermal sensor with multiple |
| 324 | trip points. The temperature reported by the thermal sensor reflects the |
| 325 | real time die temperature if an ADC is present or an estimate of the |
| 326 | temperature based upon the over temperature stage value. |
| 327 | |
Zhang Rui | 72e1989 | 2012-11-15 09:16:20 +0800 | [diff] [blame] | 328 | endif |