return;
 }
 
+static void wacom_remote_destroy_battery(struct wacom *wacom, int index)
+{
+       struct wacom_remote *remote = wacom->remote;
+
+       if (remote->remotes[index].battery.battery) {
+               devres_release_group(&wacom->hdev->dev,
+                                    &remote->remotes[index].battery.bat_desc);
+               remote->remotes[index].battery.battery = NULL;
+               remote->remotes[index].active_time = 0;
+       }
+}
+
 static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
 {
        struct wacom_remote *remote = wacom->remote;
                        remote->remotes[i].registered = false;
                        spin_unlock_irqrestore(&remote->remote_lock, flags);
 
-                       if (remote->remotes[i].battery.battery)
-                               devres_release_group(&wacom->hdev->dev,
-                                                    &remote->remotes[i].battery.bat_desc);
+                       wacom_remote_destroy_battery(wacom, i);
 
                        if (remote->remotes[i].group.name)
                                devres_release_group(&wacom->hdev->dev,
 
                        remote->remotes[i].serial = 0;
                        remote->remotes[i].group.name = NULL;
-                       remote->remotes[i].battery.battery = NULL;
                        wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN;
                }
        }
        if (remote->remotes[index].battery.battery)
                return 0;
 
+       if (!remote->remotes[index].active_time)
+               return 0;
+
        if (wacom->led.groups[index].select == WACOM_STATUS_UNKNOWN)
                return 0;
 
 {
        struct wacom *wacom = container_of(work, struct wacom, remote_work);
        struct wacom_remote *remote = wacom->remote;
+       ktime_t kt = ktime_get();
        struct wacom_remote_data data;
        unsigned long flags;
        unsigned int count;
                serial = data.remote[i].serial;
                if (data.remote[i].connected) {
 
+                       if (kt - remote->remotes[i].active_time > WACOM_REMOTE_BATTERY_TIMEOUT
+                           && remote->remotes[i].active_time != 0)
+                               wacom_remote_destroy_battery(wacom, i);
+
                        if (remote->remotes[i].serial == serial) {
                                wacom_remote_attach_battery(wacom, i);
                                continue;