From 15ade055295d13f95d49e3d99b09f3bbfb4a43e7 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 06 Nov 2023 07:25:24 +0000
Subject: [PATCH] add at24 driver
---
kernel/drivers/usb/gadget/configfs.c | 21 +++++++++++++++------
1 files changed, 15 insertions(+), 6 deletions(-)
diff --git a/kernel/drivers/usb/gadget/configfs.c b/kernel/drivers/usb/gadget/configfs.c
index cc168fb..f0d8dc1 100644
--- a/kernel/drivers/usb/gadget/configfs.c
+++ b/kernel/drivers/usb/gadget/configfs.c
@@ -1599,19 +1599,29 @@
static int android_setup(struct usb_gadget *gadget,
const struct usb_ctrlrequest *c)
{
- struct usb_composite_dev *cdev = get_gadget_data(gadget);
+ struct usb_composite_dev *cdev;
unsigned long flags;
- struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev);
+ struct gadget_info *gi;
int value = -EOPNOTSUPP;
struct usb_function_instance *fi;
- spin_lock_irqsave(&cdev->lock, flags);
+ if (!android_device)
+ return 0;
+
+ gi = dev_get_drvdata(android_device);
+ spin_lock_irqsave(&gi->spinlock, flags);
+ cdev = get_gadget_data(gadget);
+ if (!cdev || gi->unbind) {
+ spin_unlock_irqrestore(&gi->spinlock, flags);
+ return 0;
+ };
+
if (c->bRequest == USB_REQ_GET_DESCRIPTOR &&
(c->wValue >> 8) == USB_DT_CONFIG && !gi->connected) {
gi->connected = 1;
schedule_work(&gi->work);
}
- spin_unlock_irqrestore(&cdev->lock, flags);
+
list_for_each_entry(fi, &gi->available_func, cfs_list) {
if (fi != NULL && fi->f != NULL && fi->f->setup != NULL) {
value = fi->f->setup(fi->f, c);
@@ -1628,12 +1638,11 @@
if (value < 0)
value = composite_setup(gadget, c);
- spin_lock_irqsave(&cdev->lock, flags);
if (c->bRequest == USB_REQ_SET_CONFIGURATION &&
cdev->config) {
schedule_work(&gi->work);
}
- spin_unlock_irqrestore(&cdev->lock, flags);
+ spin_unlock_irqrestore(&gi->spinlock, flags);
return value;
}
--
Gitblit v1.6.2