]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/hid/wacom_wac.c
Merge branch 'for-4.1/wacom' into for-next
[karo-tx-linux.git] / drivers / hid / wacom_wac.c
index b84498884e9b213f06937c380b0dfbc9fd393d09..5c7a924fe2ed5a717220afbd2ca729d418b95ccc 100644 (file)
@@ -46,16 +46,19 @@ static unsigned short batcap_gr[8] = { 1, 15, 25, 35, 50, 70, 100, 100 };
 static unsigned short batcap_i4[8] = { 1, 15, 30, 45, 60, 70, 85, 100 };
 
 static void wacom_notify_battery(struct wacom_wac *wacom_wac,
-       int bat_capacity, bool bat_charging, bool ps_connected)
+       int bat_capacity, bool bat_charging, bool bat_connected,
+       bool ps_connected)
 {
        struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac);
        bool changed = wacom_wac->battery_capacity != bat_capacity  ||
                       wacom_wac->bat_charging     != bat_charging  ||
+                      wacom_wac->bat_connected    != bat_connected ||
                       wacom_wac->ps_connected     != ps_connected;
 
        if (changed) {
                wacom_wac->battery_capacity = bat_capacity;
                wacom_wac->bat_charging = bat_charging;
+               wacom_wac->bat_connected = bat_connected;
                wacom_wac->ps_connected = ps_connected;
 
                if (wacom->battery.dev)
@@ -438,7 +441,7 @@ static int wacom_graphire_irq(struct wacom_wac *wacom)
                battery_capacity = batcap_gr[rw];
                ps_connected = rw == 7;
                wacom_notify_battery(wacom, battery_capacity, ps_connected,
-                                    ps_connected);
+                                    1, ps_connected);
        }
 exit:
        return retval;
@@ -1037,6 +1040,7 @@ static int wacom_intuos_bt_irq(struct wacom_wac *wacom, size_t len)
                ps_connected = (power_raw & 0x10) ? 1 : 0;
                battery_capacity = batcap_i4[power_raw & 0x07];
                wacom_notify_battery(wacom, battery_capacity, bat_charging,
+                                    battery_capacity || bat_charging,
                                     ps_connected);
                break;
        default:
@@ -1955,13 +1959,13 @@ static int wacom_wireless_irq(struct wacom_wac *wacom, size_t len)
                }
 
                if (wacom->shared->type)
-                       wacom_notify_battery(wacom, battery, charging, 0);
+                       wacom_notify_battery(wacom, battery, charging, 1, 0);
 
        } else if (wacom->pid != 0) {
                /* disconnected while previously connected */
                wacom->pid = 0;
                wacom_schedule_work(wacom);
-               wacom_notify_battery(wacom, 0, 0, 0);
+               wacom_notify_battery(wacom, 0, 0, 0, 0);
        }
 
        return 0;
@@ -1989,7 +1993,7 @@ static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
                bool charging = !!(data[8] & 0x80);
 
                wacom_notify_battery(wacom_wac, battery, charging,
-                                    1);
+                                    battery || charging, 1);
 
                if (!wacom->battery.dev &&
                    !(features->quirks & WACOM_QUIRK_BATTERY)) {
@@ -2003,7 +2007,7 @@ static int wacom_status_irq(struct wacom_wac *wacom_wac, size_t len)
                features->quirks &= ~WACOM_QUIRK_BATTERY;
                INIT_WORK(&wacom->work, wacom_battery_work);
                wacom_schedule_work(wacom_wac);
-               wacom_notify_battery(wacom_wac, 0, 0, 0);
+               wacom_notify_battery(wacom_wac, 0, 0, 0, 0);
        }
        return 0;
 }