Ignore:
Timestamp:
Apr 21, 2017, 4:28:29 AM (3 months ago)
Author:
brainslayer
Message:

update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-4.9/drivers/acpi/ec.c

    r31574 r31885  
    730730static int ec_guard(struct acpi_ec *ec)
    731731{
    732         unsigned long guard = usecs_to_jiffies(ec_polling_guard);
     732        unsigned long guard = usecs_to_jiffies(ec->polling_guard);
    733733        unsigned long timeout = ec->timestamp + guard;
    734734
    735735        /* Ensure guarding period before polling EC status */
    736736        do {
    737                 if (ec_busy_polling) {
     737                if (ec->busy_polling) {
    738738                        /* Perform busy polling */
    739739                        if (ec_transaction_completed(ec))
     
    999999}
    10001000
     1001static void acpi_ec_enter_noirq(struct acpi_ec *ec)
     1002{
     1003        unsigned long flags;
     1004
     1005        spin_lock_irqsave(&ec->lock, flags);
     1006        ec->busy_polling = true;
     1007        ec->polling_guard = 0;
     1008        ec_log_drv("interrupt blocked");
     1009        spin_unlock_irqrestore(&ec->lock, flags);
     1010}
     1011
     1012static void acpi_ec_leave_noirq(struct acpi_ec *ec)
     1013{
     1014        unsigned long flags;
     1015
     1016        spin_lock_irqsave(&ec->lock, flags);
     1017        ec->busy_polling = ec_busy_polling;
     1018        ec->polling_guard = ec_polling_guard;
     1019        ec_log_drv("interrupt unblocked");
     1020        spin_unlock_irqrestore(&ec->lock, flags);
     1021}
     1022
    10011023void acpi_ec_block_transactions(void)
    10021024{
     
    12791301                return AE_BAD_PARAMETER;
    12801302
    1281         if (ec_busy_polling || bits > 8)
     1303        if (ec->busy_polling || bits > 8)
    12821304                acpi_ec_burst_enable(ec);
    12831305
     
    12871309                        acpi_ec_write(ec, address, *value);
    12881310
    1289         if (ec_busy_polling || bits > 8)
     1311        if (ec->busy_polling || bits > 8)
    12901312                acpi_ec_burst_disable(ec);
    12911313
     
    13301352        INIT_WORK(&ec->work, acpi_ec_event_handler);
    13311353        ec->timestamp = jiffies;
     1354        ec->busy_polling = true;
     1355        ec->polling_guard = 0;
    13321356        return ec;
    13331357}
     
    13911415
    13921416        if (!test_bit(EC_FLAGS_EC_HANDLER_INSTALLED, &ec->flags)) {
     1417                acpi_ec_enter_noirq(ec);
    13931418                status = acpi_install_address_space_handler(ec->handle,
    13941419                                                            ACPI_ADR_SPACE_EC,
     
    14301455                if (ACPI_SUCCESS(status)) {
    14311456                        set_bit(EC_FLAGS_GPE_HANDLER_INSTALLED, &ec->flags);
     1457                        acpi_ec_leave_noirq(ec);
    14321458                        if (test_bit(EC_FLAGS_STARTED, &ec->flags) &&
    14331459                            ec->reference_count >= 1)
     
    18401866
    18411867#ifdef CONFIG_PM_SLEEP
    1842 static void acpi_ec_enter_noirq(struct acpi_ec *ec)
    1843 {
    1844         unsigned long flags;
    1845 
    1846         if (ec == first_ec) {
    1847                 spin_lock_irqsave(&ec->lock, flags);
    1848                 ec->saved_busy_polling = ec_busy_polling;
    1849                 ec->saved_polling_guard = ec_polling_guard;
    1850                 ec_busy_polling = true;
    1851                 ec_polling_guard = 0;
    1852                 ec_log_drv("interrupt blocked");
    1853                 spin_unlock_irqrestore(&ec->lock, flags);
    1854         }
    1855 }
    1856 
    1857 static void acpi_ec_leave_noirq(struct acpi_ec *ec)
    1858 {
    1859         unsigned long flags;
    1860 
    1861         if (ec == first_ec) {
    1862                 spin_lock_irqsave(&ec->lock, flags);
    1863                 ec_busy_polling = ec->saved_busy_polling;
    1864                 ec_polling_guard = ec->saved_polling_guard;
    1865                 ec_log_drv("interrupt unblocked");
    1866                 spin_unlock_irqrestore(&ec->lock, flags);
    1867         }
    1868 }
    1869 
    18701868static int acpi_ec_suspend_noirq(struct device *dev)
    18711869{
Note: See TracChangeset for help on using the changeset viewer.