#define HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS BIT(27)
 #define HIDPP_QUIRK_HI_RES_SCROLL_1P0          BIT(28)
 #define HIDPP_QUIRK_WIRELESS_STATUS            BIT(29)
+#define HIDPP_QUIRK_RESET_HI_RES_SCROLL                BIT(30)
 
 /* These are just aliases for now */
 #define HIDPP_QUIRK_KBD_SCROLL_WHEEL HIDPP_QUIRK_HIDPP_WHEELS
        void *private_data;
 
        struct work_struct work;
+       struct work_struct reset_hi_res_work;
        struct kfifo delayed_work_fifo;
        struct input_dev *delayed_input;
 
        struct hidpp_report *answer = hidpp->send_receive_buf;
        struct hidpp_report *report = (struct hidpp_report *)data;
        int ret;
+       int last_online;
 
        /*
         * If the mutex is locked then we have a pending answer from a
                        "See: https://gitlab.freedesktop.org/jwrdegoede/logitech-27mhz-keyboard-encryption-setup/\n");
        }
 
+       last_online = hidpp->battery.online;
        if (hidpp->capabilities & HIDPP_CAPABILITY_HIDPP20_BATTERY) {
                ret = hidpp20_battery_event_1000(hidpp, data, size);
                if (ret != 0)
                        return ret;
        }
 
+       if (hidpp->quirks & HIDPP_QUIRK_RESET_HI_RES_SCROLL) {
+               if (last_online == 0 && hidpp->battery.online == 1)
+                       schedule_work(&hidpp->reset_hi_res_work);
+       }
+
        if (hidpp->quirks & HIDPP_QUIRK_HIDPP_WHEELS) {
                ret = hidpp10_wheel_raw_event(hidpp, data, size);
                if (ret != 0)
        hidpp->delayed_input = input;
 }
 
+static void hidpp_reset_hi_res_handler(struct work_struct *work)
+{
+       struct hidpp_device *hidpp = container_of(work, struct hidpp_device, reset_hi_res_work);
+
+       hi_res_scroll_enable(hidpp);
+}
+
 static DEVICE_ATTR(builtin_power_supply, 0000, NULL, NULL);
 
 static struct attribute *sysfs_attrs[] = {
        }
 
        INIT_WORK(&hidpp->work, hidpp_connect_event);
+       INIT_WORK(&hidpp->reset_hi_res_work, hidpp_reset_hi_res_handler);
        mutex_init(&hidpp->send_mutex);
        init_waitqueue_head(&hidpp->wait);
 
 
        hid_hw_stop(hdev);
        cancel_work_sync(&hidpp->work);
+       cancel_work_sync(&hidpp->reset_hi_res_work);
        mutex_destroy(&hidpp->send_mutex);
 }
 
        { /* Keyboard MX5500 (Bluetooth-receiver in HID proxy mode) */
          LDJ_DEVICE(0xb30b),
          .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS },
+       { /* Logitech G502 Lightspeed Wireless Gaming Mouse */
+         LDJ_DEVICE(0x407f),
+         .driver_data = HIDPP_QUIRK_RESET_HI_RES_SCROLL },
 
        { LDJ_DEVICE(HID_ANY_ID) },