@@ -1191,14 +1191,15 @@ static int isp1760_udc_start(struct usb_gadget *gadget,
1191
1191
struct usb_gadget_driver * driver )
1192
1192
{
1193
1193
struct isp1760_udc * udc = gadget_to_udc (gadget );
1194
+ unsigned long flags ;
1194
1195
1195
1196
/* The hardware doesn't support low speed. */
1196
1197
if (driver -> max_speed < USB_SPEED_FULL ) {
1197
1198
dev_err (udc -> isp -> dev , "Invalid gadget driver\n" );
1198
1199
return - EINVAL ;
1199
1200
}
1200
1201
1201
- spin_lock (& udc -> lock );
1202
+ spin_lock_irqsave (& udc -> lock , flags );
1202
1203
1203
1204
if (udc -> driver ) {
1204
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
1210
udc -> driver = driver ;
1210
1211
1211
- spin_unlock (& udc -> lock );
1212
+ spin_unlock_irqrestore (& udc -> lock , flags );
1212
1213
1213
1214
dev_dbg (udc -> isp -> dev , "starting UDC with driver %s\n" ,
1214
1215
driver -> function );
@@ -1232,16 +1233,17 @@ static int isp1760_udc_start(struct usb_gadget *gadget,
1232
1233
static int isp1760_udc_stop (struct usb_gadget * gadget )
1233
1234
{
1234
1235
struct isp1760_udc * udc = gadget_to_udc (gadget );
1236
+ unsigned long flags ;
1235
1237
1236
1238
dev_dbg (udc -> isp -> dev , "%s\n" , __func__ );
1237
1239
1238
1240
del_timer_sync (& udc -> vbus_timer );
1239
1241
1240
1242
isp1760_udc_write (udc , DC_MODE , 0 );
1241
1243
1242
- spin_lock (& udc -> lock );
1244
+ spin_lock_irqsave (& udc -> lock , flags );
1243
1245
udc -> driver = NULL ;
1244
- spin_unlock (& udc -> lock );
1246
+ spin_unlock_irqrestore (& udc -> lock , flags );
1245
1247
1246
1248
return 0 ;
1247
1249
}
0 commit comments