diff options
Diffstat (limited to 'drivers/usb/isp1760')
| -rw-r--r-- | drivers/usb/isp1760/isp1760-core.c | 3 | ||||
| -rw-r--r-- | drivers/usb/isp1760/isp1760-udc.c | 16 |
2 files changed, 10 insertions, 9 deletions
diff --git a/drivers/usb/isp1760/isp1760-core.c b/drivers/usb/isp1760/isp1760-core.c index b9827556455f..bfa402cf3a27 100644 --- a/drivers/usb/isp1760/isp1760-core.c +++ b/drivers/usb/isp1760/isp1760-core.c | |||
| @@ -151,8 +151,7 @@ int isp1760_register(struct resource *mem, int irq, unsigned long irqflags, | |||
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | if (IS_ENABLED(CONFIG_USB_ISP1761_UDC) && !udc_disabled) { | 153 | if (IS_ENABLED(CONFIG_USB_ISP1761_UDC) && !udc_disabled) { |
| 154 | ret = isp1760_udc_register(isp, irq, irqflags | IRQF_SHARED | | 154 | ret = isp1760_udc_register(isp, irq, irqflags); |
| 155 | IRQF_DISABLED); | ||
| 156 | if (ret < 0) { | 155 | if (ret < 0) { |
| 157 | isp1760_hcd_unregister(&isp->hcd); | 156 | isp1760_hcd_unregister(&isp->hcd); |
| 158 | return ret; | 157 | return ret; |
diff --git a/drivers/usb/isp1760/isp1760-udc.c b/drivers/usb/isp1760/isp1760-udc.c index 9612d7990565..f32c292cc868 100644 --- a/drivers/usb/isp1760/isp1760-udc.c +++ b/drivers/usb/isp1760/isp1760-udc.c | |||
| @@ -1191,6 +1191,7 @@ static int isp1760_udc_start(struct usb_gadget *gadget, | |||
| 1191 | struct usb_gadget_driver *driver) | 1191 | struct usb_gadget_driver *driver) |
| 1192 | { | 1192 | { |
| 1193 | struct isp1760_udc *udc = gadget_to_udc(gadget); | 1193 | struct isp1760_udc *udc = gadget_to_udc(gadget); |
| 1194 | unsigned long flags; | ||
| 1194 | 1195 | ||
| 1195 | /* The hardware doesn't support low speed. */ | 1196 | /* The hardware doesn't support low speed. */ |
| 1196 | if (driver->max_speed < USB_SPEED_FULL) { | 1197 | if (driver->max_speed < USB_SPEED_FULL) { |
| @@ -1198,7 +1199,7 @@ static int isp1760_udc_start(struct usb_gadget *gadget, | |||
| 1198 | return -EINVAL; | 1199 | return -EINVAL; |
| 1199 | } | 1200 | } |
| 1200 | 1201 | ||
| 1201 | spin_lock(&udc->lock); | 1202 | spin_lock_irqsave(&udc->lock, flags); |
| 1202 | 1203 | ||
| 1203 | if (udc->driver) { | 1204 | if (udc->driver) { |
| 1204 | dev_err(udc->isp->dev, "UDC already has a gadget driver\n"); | 1205 | dev_err(udc->isp->dev, "UDC already has a gadget driver\n"); |
| @@ -1208,7 +1209,7 @@ static int isp1760_udc_start(struct usb_gadget *gadget, | |||
| 1208 | 1209 | ||
| 1209 | udc->driver = driver; | 1210 | udc->driver = driver; |
| 1210 | 1211 | ||
| 1211 | spin_unlock(&udc->lock); | 1212 | spin_unlock_irqrestore(&udc->lock, flags); |
| 1212 | 1213 | ||
| 1213 | dev_dbg(udc->isp->dev, "starting UDC with driver %s\n", | 1214 | dev_dbg(udc->isp->dev, "starting UDC with driver %s\n", |
| 1214 | driver->function); | 1215 | driver->function); |
| @@ -1232,6 +1233,7 @@ static int isp1760_udc_start(struct usb_gadget *gadget, | |||
| 1232 | static int isp1760_udc_stop(struct usb_gadget *gadget) | 1233 | static int isp1760_udc_stop(struct usb_gadget *gadget) |
| 1233 | { | 1234 | { |
| 1234 | struct isp1760_udc *udc = gadget_to_udc(gadget); | 1235 | struct isp1760_udc *udc = gadget_to_udc(gadget); |
| 1236 | unsigned long flags; | ||
| 1235 | 1237 | ||
| 1236 | dev_dbg(udc->isp->dev, "%s\n", __func__); | 1238 | dev_dbg(udc->isp->dev, "%s\n", __func__); |
| 1237 | 1239 | ||
| @@ -1239,9 +1241,9 @@ static int isp1760_udc_stop(struct usb_gadget *gadget) | |||
| 1239 | 1241 | ||
| 1240 | isp1760_udc_write(udc, DC_MODE, 0); | 1242 | isp1760_udc_write(udc, DC_MODE, 0); |
| 1241 | 1243 | ||
| 1242 | spin_lock(&udc->lock); | 1244 | spin_lock_irqsave(&udc->lock, flags); |
| 1243 | udc->driver = NULL; | 1245 | udc->driver = NULL; |
| 1244 | spin_unlock(&udc->lock); | 1246 | spin_unlock_irqrestore(&udc->lock, flags); |
| 1245 | 1247 | ||
| 1246 | return 0; | 1248 | return 0; |
| 1247 | } | 1249 | } |
| @@ -1411,7 +1413,7 @@ static int isp1760_udc_init(struct isp1760_udc *udc) | |||
| 1411 | return -ENODEV; | 1413 | return -ENODEV; |
| 1412 | } | 1414 | } |
| 1413 | 1415 | ||
| 1414 | if (chipid != 0x00011582) { | 1416 | if (chipid != 0x00011582 && chipid != 0x00158210) { |
| 1415 | dev_err(udc->isp->dev, "udc: invalid chip ID 0x%08x\n", chipid); | 1417 | dev_err(udc->isp->dev, "udc: invalid chip ID 0x%08x\n", chipid); |
| 1416 | return -ENODEV; | 1418 | return -ENODEV; |
| 1417 | } | 1419 | } |
| @@ -1451,8 +1453,8 @@ int isp1760_udc_register(struct isp1760_device *isp, int irq, | |||
| 1451 | 1453 | ||
| 1452 | sprintf(udc->irqname, "%s (udc)", devname); | 1454 | sprintf(udc->irqname, "%s (udc)", devname); |
| 1453 | 1455 | ||
| 1454 | ret = request_irq(irq, isp1760_udc_irq, IRQF_SHARED | IRQF_DISABLED | | 1456 | ret = request_irq(irq, isp1760_udc_irq, IRQF_SHARED | irqflags, |
| 1455 | irqflags, udc->irqname, udc); | 1457 | udc->irqname, udc); |
| 1456 | if (ret < 0) | 1458 | if (ret < 0) |
| 1457 | goto error; | 1459 | goto error; |
| 1458 | 1460 | ||
