}
 
        if (client->irq) {
+               unsigned int flags = IRQF_TRIGGER_FALLING | IRQF_ONESHOT;
+
+               /*
+                * On ACPI systems the IRQ may be handled by ACPI-event code,
+                * so we need to share (if the ACPI code is willing to share).
+                */
+               if (acpi_id)
+                       flags |= IRQF_SHARED | IRQF_PROBE_SHARED;
+
                ret = devm_request_threaded_irq(&client->dev, client->irq,
                                                NULL,
-                                               max17042_thread_handler,
-                                               IRQF_TRIGGER_FALLING |
-                                               IRQF_ONESHOT,
+                                               max17042_thread_handler, flags,
                                                chip->battery->desc->name,
                                                chip);
                if (!ret) {
                        max17042_set_soc_threshold(chip, 1);
                } else {
                        client->irq = 0;
-                       dev_err(&client->dev, "%s(): cannot get IRQ\n",
-                               __func__);
+                       if (ret != -EBUSY)
+                               dev_err(&client->dev, "Failed to get IRQ\n");
                }
        }
+       /* Not able to update the charge threshold when exceeded? -> disable */
+       if (!client->irq)
+               regmap_write(chip->regmap, MAX17042_SALRT_Th, 0xff00);
 
        regmap_read(chip->regmap, MAX17042_STATUS, &val);
        if (val & STATUS_POR_BIT) {