+11
-1
drivers/i2c/busses/i2c-ali1535.c
+11
-1
drivers/i2c/busses/i2c-ali1535.c
···
485
485
486
486
static int ali1535_probe(struct pci_dev *dev, const struct pci_device_id *id)
487
487
{
488
+
int ret;
489
+
488
490
if (ali1535_setup(dev)) {
489
491
dev_warn(&dev->dev,
490
492
"ALI1535 not detected, module not inserted.\n");
···
498
496
499
497
snprintf(ali1535_adapter.name, sizeof(ali1535_adapter.name),
500
498
"SMBus ALI1535 adapter at %04x", ali1535_offset);
501
-
return i2c_add_adapter(&ali1535_adapter);
499
+
ret = i2c_add_adapter(&ali1535_adapter);
500
+
if (ret)
501
+
goto release_region;
502
+
503
+
return 0;
504
+
505
+
release_region:
506
+
release_region(ali1535_smba, ALI1535_SMB_IOSIZE);
507
+
return ret;
502
508
}
503
509
504
510
static void ali1535_remove(struct pci_dev *dev)
+11
-1
drivers/i2c/busses/i2c-ali15x3.c
+11
-1
drivers/i2c/busses/i2c-ali15x3.c
···
472
472
473
473
static int ali15x3_probe(struct pci_dev *dev, const struct pci_device_id *id)
474
474
{
475
+
int ret;
476
+
475
477
if (ali15x3_setup(dev)) {
476
478
dev_err(&dev->dev,
477
479
"ALI15X3 not detected, module not inserted.\n");
···
485
483
486
484
snprintf(ali15x3_adapter.name, sizeof(ali15x3_adapter.name),
487
485
"SMBus ALI15X3 adapter at %04x", ali15x3_smba);
488
-
return i2c_add_adapter(&ali15x3_adapter);
486
+
ret = i2c_add_adapter(&ali15x3_adapter);
487
+
if (ret)
488
+
goto release_region;
489
+
490
+
return 0;
491
+
492
+
release_region:
493
+
release_region(ali15x3_smba, ALI15X3_SMB_IOSIZE);
494
+
return ret;
489
495
}
490
496
491
497
static void ali15x3_remove(struct pci_dev *dev)
+7
-19
drivers/i2c/busses/i2c-omap.c
+7
-19
drivers/i2c/busses/i2c-omap.c
···
1048
1048
return 0;
1049
1049
}
1050
1050
1051
-
static irqreturn_t
1052
-
omap_i2c_isr(int irq, void *dev_id)
1053
-
{
1054
-
struct omap_i2c_dev *omap = dev_id;
1055
-
irqreturn_t ret = IRQ_HANDLED;
1056
-
u16 mask;
1057
-
u16 stat;
1058
-
1059
-
stat = omap_i2c_read_reg(omap, OMAP_I2C_STAT_REG);
1060
-
mask = omap_i2c_read_reg(omap, OMAP_I2C_IE_REG) & ~OMAP_I2C_STAT_NACK;
1061
-
1062
-
if (stat & mask)
1063
-
ret = IRQ_WAKE_THREAD;
1064
-
1065
-
return ret;
1066
-
}
1067
-
1068
1051
static int omap_i2c_xfer_data(struct omap_i2c_dev *omap)
1069
1052
{
1070
1053
u16 bits;
···
1078
1095
}
1079
1096
1080
1097
if (stat & OMAP_I2C_STAT_NACK) {
1081
-
err |= OMAP_I2C_STAT_NACK;
1098
+
omap->cmd_err |= OMAP_I2C_STAT_NACK;
1082
1099
omap_i2c_ack_stat(omap, OMAP_I2C_STAT_NACK);
1100
+
1101
+
if (!(stat & ~OMAP_I2C_STAT_NACK)) {
1102
+
err = -EAGAIN;
1103
+
break;
1104
+
}
1083
1105
}
1084
1106
1085
1107
if (stat & OMAP_I2C_STAT_AL) {
···
1460
1472
IRQF_NO_SUSPEND, pdev->name, omap);
1461
1473
else
1462
1474
r = devm_request_threaded_irq(&pdev->dev, omap->irq,
1463
-
omap_i2c_isr, omap_i2c_isr_thread,
1475
+
NULL, omap_i2c_isr_thread,
1464
1476
IRQF_NO_SUSPEND | IRQF_ONESHOT,
1465
1477
pdev->name, omap);
1466
1478
+11
-1
drivers/i2c/busses/i2c-sis630.c
+11
-1
drivers/i2c/busses/i2c-sis630.c
···
509
509
510
510
static int sis630_probe(struct pci_dev *dev, const struct pci_device_id *id)
511
511
{
512
+
int ret;
513
+
512
514
if (sis630_setup(dev)) {
513
515
dev_err(&dev->dev,
514
516
"SIS630 compatible bus not detected, "
···
524
522
snprintf(sis630_adapter.name, sizeof(sis630_adapter.name),
525
523
"SMBus SIS630 adapter at %04x", smbus_base + SMB_STS);
526
524
527
-
return i2c_add_adapter(&sis630_adapter);
525
+
ret = i2c_add_adapter(&sis630_adapter);
526
+
if (ret)
527
+
goto release_region;
528
+
529
+
return 0;
530
+
531
+
release_region:
532
+
release_region(smbus_base + SMB_STS, SIS630_SMB_IOREGION);
533
+
return ret;
528
534
}
529
535
530
536
static void sis630_remove(struct pci_dev *dev)