{
int ret;
- ret = devm_request_threaded_irq(smb->dev, client->irq, NULL,
- smb347_interrupt, IRQF_ONESHOT,
- client->name, smb);
- if (ret < 0)
- return ret;
+ smb->irq_unsupported = true;
+
+ /*
+ * Interrupt pin is optional. If it is connected, we setup the
+ * interrupt support here.
+ */
+ if (!client->irq)
+ return 0;
ret = smb347_set_writable(smb, true);
if (ret < 0)
smb347_set_writable(smb, false);
- return ret;
+ if (ret < 0) {
+ dev_warn(smb->dev, "failed to initialize IRQ: %d\n", ret);
+ dev_warn(smb->dev, "disabling IRQ support\n");
+ return 0;
+ }
+
+ ret = devm_request_threaded_irq(smb->dev, client->irq, NULL,
+ smb347_interrupt, IRQF_ONESHOT,
+ client->name, smb);
+ if (ret)
+ return ret;
+
+ smb->irq_unsupported = false;
+
+ ret = smb347_irq_enable(smb);
+ if (ret < 0)
+ return ret;
+
+ return 0;
}
/*
struct i2c_client *client = to_i2c_client(smb->dev);
int ret;
- disable_irq(client->irq);
+ if (!smb->irq_unsupported)
+ disable_irq(client->irq);
+
ret = smb347_get_property_locked(psy, prop, val);
- enable_irq(client->irq);
+
+ if (!smb->irq_unsupported)
+ enable_irq(client->irq);
return ret;
}
if (ret < 0)
return ret;
- /*
- * Interrupt pin is optional. If it is connected, we setup the
- * interrupt support here.
- */
- if (client->irq) {
- ret = smb347_irq_init(smb, client);
- if (ret < 0) {
- dev_warn(dev, "failed to initialize IRQ: %d\n", ret);
- dev_warn(dev, "disabling IRQ support\n");
- smb->irq_unsupported = true;
- } else {
- smb347_irq_enable(smb);
- }
- }
+ ret = smb347_irq_init(smb, client);
+ if (ret)
+ return ret;
return 0;
}