wacom_sys.c (2612e3bbc0386368a850140a6c9b990cd496a5ec) wacom_sys.c (9ac6678b95b0dd9458a7a6869f46e51cd55a1d84)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * USB Wacom tablet support - system specific code
4 */
5
6#include "wacom_wac.h"
7#include "wacom.h"
8#include <linux/input/mt.h>

--- 2509 unchanged lines hidden (view full) ---

2518 return;
2519
2520fail:
2521 wacom_release_resources(wacom1);
2522 wacom_release_resources(wacom2);
2523 return;
2524}
2525
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * USB Wacom tablet support - system specific code
4 */
5
6#include "wacom_wac.h"
7#include "wacom.h"
8#include <linux/input/mt.h>

--- 2509 unchanged lines hidden (view full) ---

2518 return;
2519
2520fail:
2521 wacom_release_resources(wacom1);
2522 wacom_release_resources(wacom2);
2523 return;
2524}
2525
2526static void wacom_remote_destroy_battery(struct wacom *wacom, int index)
2527{
2528 struct wacom_remote *remote = wacom->remote;
2529
2530 if (remote->remotes[index].battery.battery) {
2531 devres_release_group(&wacom->hdev->dev,
2532 &remote->remotes[index].battery.bat_desc);
2533 remote->remotes[index].battery.battery = NULL;
2534 remote->remotes[index].active_time = 0;
2535 }
2536}
2537
2526static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
2527{
2528 struct wacom_remote *remote = wacom->remote;
2529 u32 serial = remote->remotes[index].serial;
2530 int i;
2531 unsigned long flags;
2532
2533 for (i = 0; i < WACOM_MAX_REMOTES; i++) {
2534 if (remote->remotes[i].serial == serial) {
2535
2536 spin_lock_irqsave(&remote->remote_lock, flags);
2537 remote->remotes[i].registered = false;
2538 spin_unlock_irqrestore(&remote->remote_lock, flags);
2539
2538static void wacom_remote_destroy_one(struct wacom *wacom, unsigned int index)
2539{
2540 struct wacom_remote *remote = wacom->remote;
2541 u32 serial = remote->remotes[index].serial;
2542 int i;
2543 unsigned long flags;
2544
2545 for (i = 0; i < WACOM_MAX_REMOTES; i++) {
2546 if (remote->remotes[i].serial == serial) {
2547
2548 spin_lock_irqsave(&remote->remote_lock, flags);
2549 remote->remotes[i].registered = false;
2550 spin_unlock_irqrestore(&remote->remote_lock, flags);
2551
2540 if (remote->remotes[i].battery.battery)
2541 devres_release_group(&wacom->hdev->dev,
2542 &remote->remotes[i].battery.bat_desc);
2552 wacom_remote_destroy_battery(wacom, i);
2543
2544 if (remote->remotes[i].group.name)
2545 devres_release_group(&wacom->hdev->dev,
2546 &remote->remotes[i]);
2547
2548 remote->remotes[i].serial = 0;
2549 remote->remotes[i].group.name = NULL;
2553
2554 if (remote->remotes[i].group.name)
2555 devres_release_group(&wacom->hdev->dev,
2556 &remote->remotes[i]);
2557
2558 remote->remotes[i].serial = 0;
2559 remote->remotes[i].group.name = NULL;
2550 remote->remotes[i].battery.battery = NULL;
2551 wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN;
2552 }
2553 }
2554}
2555
2556static int wacom_remote_create_one(struct wacom *wacom, u32 serial,
2557 unsigned int index)
2558{

--- 68 unchanged lines hidden (view full) ---

2627 int error;
2628
2629 if (!remote->remotes[index].registered)
2630 return 0;
2631
2632 if (remote->remotes[index].battery.battery)
2633 return 0;
2634
2560 wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN;
2561 }
2562 }
2563}
2564
2565static int wacom_remote_create_one(struct wacom *wacom, u32 serial,
2566 unsigned int index)
2567{

--- 68 unchanged lines hidden (view full) ---

2636 int error;
2637
2638 if (!remote->remotes[index].registered)
2639 return 0;
2640
2641 if (remote->remotes[index].battery.battery)
2642 return 0;
2643
2644 if (!remote->remotes[index].active_time)
2645 return 0;
2646
2635 if (wacom->led.groups[index].select == WACOM_STATUS_UNKNOWN)
2636 return 0;
2637
2638 error = __wacom_initialize_battery(wacom,
2639 &wacom->remote->remotes[index].battery);
2640 if (error)
2641 return error;
2642
2643 return 0;
2644}
2645
2646static void wacom_remote_work(struct work_struct *work)
2647{
2648 struct wacom *wacom = container_of(work, struct wacom, remote_work);
2649 struct wacom_remote *remote = wacom->remote;
2647 if (wacom->led.groups[index].select == WACOM_STATUS_UNKNOWN)
2648 return 0;
2649
2650 error = __wacom_initialize_battery(wacom,
2651 &wacom->remote->remotes[index].battery);
2652 if (error)
2653 return error;
2654
2655 return 0;
2656}
2657
2658static void wacom_remote_work(struct work_struct *work)
2659{
2660 struct wacom *wacom = container_of(work, struct wacom, remote_work);
2661 struct wacom_remote *remote = wacom->remote;
2662 ktime_t kt = ktime_get();
2650 struct wacom_remote_data data;
2651 unsigned long flags;
2652 unsigned int count;
2653 u32 serial;
2654 int i;
2655
2656 spin_lock_irqsave(&remote->remote_lock, flags);
2657

--- 10 unchanged lines hidden (view full) ---

2668 wacom_schedule_work(&wacom->wacom_wac, WACOM_WORKER_REMOTE);
2669
2670 spin_unlock_irqrestore(&remote->remote_lock, flags);
2671
2672 for (i = 0; i < WACOM_MAX_REMOTES; i++) {
2673 serial = data.remote[i].serial;
2674 if (data.remote[i].connected) {
2675
2663 struct wacom_remote_data data;
2664 unsigned long flags;
2665 unsigned int count;
2666 u32 serial;
2667 int i;
2668
2669 spin_lock_irqsave(&remote->remote_lock, flags);
2670

--- 10 unchanged lines hidden (view full) ---

2681 wacom_schedule_work(&wacom->wacom_wac, WACOM_WORKER_REMOTE);
2682
2683 spin_unlock_irqrestore(&remote->remote_lock, flags);
2684
2685 for (i = 0; i < WACOM_MAX_REMOTES; i++) {
2686 serial = data.remote[i].serial;
2687 if (data.remote[i].connected) {
2688
2689 if (kt - remote->remotes[i].active_time > WACOM_REMOTE_BATTERY_TIMEOUT
2690 && remote->remotes[i].active_time != 0)
2691 wacom_remote_destroy_battery(wacom, i);
2692
2676 if (remote->remotes[i].serial == serial) {
2677 wacom_remote_attach_battery(wacom, i);
2678 continue;
2679 }
2680
2681 if (remote->remotes[i].serial)
2682 wacom_remote_destroy_one(wacom, i);
2683

--- 196 unchanged lines hidden ---
2693 if (remote->remotes[i].serial == serial) {
2694 wacom_remote_attach_battery(wacom, i);
2695 continue;
2696 }
2697
2698 if (remote->remotes[i].serial)
2699 wacom_remote_destroy_one(wacom, i);
2700

--- 196 unchanged lines hidden ---