Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7274525d authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: gadget: f_gps: Fix multiple notifications for single response"

parents a87f5021 0698e522
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -649,14 +649,24 @@ static void gps_notify_complete(struct usb_ep *ep, struct usb_request *req)

		pr_debug("%s: decrement notify_count:%u\n", __func__,
				atomic_read(&dev->notify_count));
		if (atomic_dec_and_test(&dev->notify_count))
			break;
		atomic_dec(&dev->notify_count);

		gps_queue_notify_request(dev);
		break;
	}
}

static void gps_ctrl_send_response_complete(struct usb_ep *ep,
		struct usb_request *req)
{
	struct f_gps *dev = (struct f_gps *)req->context;

	pr_debug("%s: response queue count:%u notify count: %u\n", __func__,
			atomic_read(&dev->resp_q_count),
			atomic_read(&dev->notify_count));
	if (atomic_read(&dev->notify_count) > 0)
		gps_queue_notify_request(dev);
}

static int
gps_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
{
@@ -709,6 +719,8 @@ gps_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
			memcpy(req->buf, cpkt->buf, len);
			ret = len;

			req->complete = gps_ctrl_send_response_complete;
			req->context = dev;
			gps_free_ctrl_pkt(cpkt);
		}
		break;