Skip to content

Commit

Permalink
HID: hid-steam: Make client_opened a counter
Browse files Browse the repository at this point in the history
The client_opened variable was used to track if the hidraw was opened by any
clients to silence keyboard/mouse events while opened. However, there was no
counting of how many clients were opened, so opening two at the same time and
then closing one would fool the driver into thinking it had no remaining opened
clients.

Signed-off-by: Vicki Pfau <vi@endrift.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
  • Loading branch information
Vicki Pfau authored and Jiri Kosina committed Jan 2, 2024
1 parent 691ead1 commit 555b818
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions drivers/hid/hid-steam.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ struct steam_device {
spinlock_t lock;
struct hid_device *hdev, *client_hdev;
struct mutex report_mutex;
bool client_opened;
unsigned long client_opened;
struct input_dev __rcu *input;
unsigned long quirks;
struct work_struct work_connect;
Expand Down Expand Up @@ -648,7 +648,7 @@ static void steam_battery_unregister(struct steam_device *steam)
static int steam_register(struct steam_device *steam)
{
int ret;
bool client_opened;
unsigned long client_opened;
unsigned long flags;

/*
Expand Down Expand Up @@ -771,7 +771,7 @@ static int steam_client_ll_open(struct hid_device *hdev)
unsigned long flags;

spin_lock_irqsave(&steam->lock, flags);
steam->client_opened = true;
steam->client_opened++;
spin_unlock_irqrestore(&steam->lock, flags);

steam_input_unregister(steam);
Expand All @@ -787,7 +787,7 @@ static void steam_client_ll_close(struct hid_device *hdev)
bool connected;

spin_lock_irqsave(&steam->lock, flags);
steam->client_opened = false;
steam->client_opened--;
connected = steam->connected && !steam->client_opened;
spin_unlock_irqrestore(&steam->lock, flags);

Expand Down Expand Up @@ -959,7 +959,7 @@ static void steam_remove(struct hid_device *hdev)
cancel_work_sync(&steam->work_connect);
hid_destroy_device(steam->client_hdev);
steam->client_hdev = NULL;
steam->client_opened = false;
steam->client_opened = 0;
if (steam->quirks & STEAM_QUIRK_WIRELESS) {
hid_info(hdev, "Steam wireless receiver disconnected");
}
Expand Down

0 comments on commit 555b818

Please sign in to comment.