Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'pm+acpi-3.17-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull ACPI and power management fixes from Rafael Wysocki:

- Fix for an ACPI regression related to the handling of fixed events
that caused netlink routines to be (incorrectly) run in interrupt
context from Lan Tianyu

- Fix for an ACPI EC driver regression on Acer Aspire V5-573G that
caused AC/battery plug/unplug and video brightness change
notifications to be delayed on that machine from Lv Zheng

- Fix for an ACPI device enumeration regression that caused ACPI driver
probe to fail for some devices where it succeeded before (Rafael J
Wysocki)

- intel_pstate driver fix to prevent it from printing an information
message for every CPU in the system on every boot from Andi Kleen

- s5pv210 cpufreq driver fix to remove an __init annotation from a
routine that in fact can be called at any time after init too from
Mark Brown

- New Intel Braswell device ID for the ACPI LPSS (Low-Power Subsystem)
driver from Alan Cox

- New Intel Braswell CPU ID for intel_pstate from Mika Westerberg

* tag 'pm+acpi-3.17-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
cpufreq: s5pv210: Remove spurious __init annotation
cpufreq: intel_pstate: Add CPU ID for Braswell processor
intel_pstate: Turn per cpu printk into pr_debug
ACPI / LPSS: Add ACPI IDs for Intel Braswell
ACPI / EC: Add support to disallow QR_EC to be issued before completing previous QR_EC
ACPI / EC: Add support to disallow QR_EC to be issued when SCI_EVT isn't set
ACPI: Run fixed event device notifications in process context
ACPI / scan: Allow ACPI drivers to bind to PNP device objects

+49 -11
+17
drivers/acpi/acpi_lpss.c
··· 196 196 .setup = lpss_i2c_setup, 197 197 }; 198 198 199 + static struct lpss_shared_clock bsw_pwm_clock = { 200 + .name = "pwm_clk", 201 + .rate = 19200000, 202 + }; 203 + 204 + static struct lpss_device_desc bsw_pwm_dev_desc = { 205 + .clk_required = true, 206 + .save_ctx = true, 207 + .shared_clock = &bsw_pwm_clock, 208 + }; 209 + 199 210 #else 200 211 201 212 #define LPSS_ADDR(desc) (0UL) ··· 235 224 { "80860F41", LPSS_ADDR(byt_i2c_dev_desc) }, 236 225 { "INT33B2", }, 237 226 { "INT33FC", }, 227 + 228 + /* Braswell LPSS devices */ 229 + { "80862288", LPSS_ADDR(bsw_pwm_dev_desc) }, 230 + { "8086228A", LPSS_ADDR(byt_uart_dev_desc) }, 231 + { "8086228E", LPSS_ADDR(byt_spi_dev_desc) }, 232 + { "808622C1", LPSS_ADDR(byt_i2c_dev_desc) }, 238 233 239 234 { "INT3430", LPSS_ADDR(lpt_dev_desc) }, 240 235 { "INT3431", LPSS_ADDR(lpt_dev_desc) },
+18 -3
drivers/acpi/ec.c
··· 197 197 t->rdata[t->ri++] = acpi_ec_read_data(ec); 198 198 if (t->rlen == t->ri) { 199 199 t->flags |= ACPI_EC_COMMAND_COMPLETE; 200 + if (t->command == ACPI_EC_COMMAND_QUERY) 201 + pr_debug("hardware QR_EC completion\n"); 200 202 wakeup = true; 201 203 } 202 204 } else ··· 210 208 } 211 209 return wakeup; 212 210 } else { 213 - if ((status & ACPI_EC_FLAG_IBF) == 0) { 211 + /* 212 + * There is firmware refusing to respond QR_EC when SCI_EVT 213 + * is not set, for which case, we complete the QR_EC 214 + * without issuing it to the firmware. 215 + * https://bugzilla.kernel.org/show_bug.cgi?id=86211 216 + */ 217 + if (!(status & ACPI_EC_FLAG_SCI) && 218 + (t->command == ACPI_EC_COMMAND_QUERY)) { 219 + t->flags |= ACPI_EC_COMMAND_POLL; 220 + t->rdata[t->ri++] = 0x00; 221 + t->flags |= ACPI_EC_COMMAND_COMPLETE; 222 + pr_debug("software QR_EC completion\n"); 223 + wakeup = true; 224 + } else if ((status & ACPI_EC_FLAG_IBF) == 0) { 214 225 acpi_ec_write_cmd(ec, t->command); 215 226 t->flags |= ACPI_EC_COMMAND_POLL; 216 227 } else ··· 303 288 /* following two actions should be kept atomic */ 304 289 ec->curr = t; 305 290 start_transaction(ec); 306 - if (ec->curr->command == ACPI_EC_COMMAND_QUERY) 307 - clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); 308 291 spin_unlock_irqrestore(&ec->lock, tmp); 309 292 ret = ec_poll(ec); 310 293 spin_lock_irqsave(&ec->lock, tmp); 294 + if (ec->curr->command == ACPI_EC_COMMAND_QUERY) 295 + clear_bit(EC_FLAGS_QUERY_PENDING, &ec->flags); 311 296 ec->curr = NULL; 312 297 spin_unlock_irqrestore(&ec->lock, tmp); 313 298 return ret;
+11 -6
drivers/acpi/scan.c
··· 922 922 device->driver->ops.notify(device, event); 923 923 } 924 924 925 - static acpi_status acpi_device_notify_fixed(void *data) 925 + static void acpi_device_notify_fixed(void *data) 926 926 { 927 927 struct acpi_device *device = data; 928 928 929 929 /* Fixed hardware devices have no handles */ 930 930 acpi_device_notify(NULL, ACPI_FIXED_HARDWARE_EVENT, device); 931 + } 932 + 933 + static acpi_status acpi_device_fixed_event(void *data) 934 + { 935 + acpi_os_execute(OSL_NOTIFY_HANDLER, acpi_device_notify_fixed, data); 931 936 return AE_OK; 932 937 } 933 938 ··· 943 938 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) 944 939 status = 945 940 acpi_install_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, 946 - acpi_device_notify_fixed, 941 + acpi_device_fixed_event, 947 942 device); 948 943 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) 949 944 status = 950 945 acpi_install_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, 951 - acpi_device_notify_fixed, 946 + acpi_device_fixed_event, 952 947 device); 953 948 else 954 949 status = acpi_install_notify_handler(device->handle, ··· 965 960 { 966 961 if (device->device_type == ACPI_BUS_TYPE_POWER_BUTTON) 967 962 acpi_remove_fixed_event_handler(ACPI_EVENT_POWER_BUTTON, 968 - acpi_device_notify_fixed); 963 + acpi_device_fixed_event); 969 964 else if (device->device_type == ACPI_BUS_TYPE_SLEEP_BUTTON) 970 965 acpi_remove_fixed_event_handler(ACPI_EVENT_SLEEP_BUTTON, 971 - acpi_device_notify_fixed); 966 + acpi_device_fixed_event); 972 967 else 973 968 acpi_remove_notify_handler(device->handle, ACPI_DEVICE_NOTIFY, 974 969 acpi_device_notify); ··· 980 975 struct acpi_driver *acpi_drv = to_acpi_driver(dev->driver); 981 976 int ret; 982 977 983 - if (acpi_dev->handler) 978 + if (acpi_dev->handler && !acpi_is_pnp_device(acpi_dev)) 984 979 return -EINVAL; 985 980 986 981 if (!acpi_drv->ops.add)
+2 -1
drivers/cpufreq/intel_pstate.c
··· 660 660 ICPU(0x3f, core_params), 661 661 ICPU(0x45, core_params), 662 662 ICPU(0x46, core_params), 663 + ICPU(0x4c, byt_params), 663 664 ICPU(0x4f, core_params), 664 665 ICPU(0x56, core_params), 665 666 {} ··· 689 688 690 689 add_timer_on(&cpu->timer, cpunum); 691 690 692 - pr_info("Intel pstate controlling: cpu %d\n", cpunum); 691 + pr_debug("Intel pstate controlling: cpu %d\n", cpunum); 693 692 694 693 return 0; 695 694 }
+1 -1
drivers/cpufreq/s5pv210-cpufreq.c
··· 501 501 return val >> 8; 502 502 } 503 503 504 - static int __init s5pv210_cpu_init(struct cpufreq_policy *policy) 504 + static int s5pv210_cpu_init(struct cpufreq_policy *policy) 505 505 { 506 506 unsigned long mem_type; 507 507 int ret;