struct tcpm_port *port;
 
        struct regmap *regmap;
+       unsigned int alert_mask;
 
        bool controls_vbus;
 
                if (ret < 0)
                        return ret;
        }
+
+       tcpci->alert_mask = reg;
+
        return tcpci_write16(tcpci, TCPC_ALERT_MASK, reg);
 }
 
        else if (status & TCPC_ALERT_TX_FAILED)
                tcpm_pd_transmit_complete(tcpci->port, TCPC_TX_FAILED);
 
-       return IRQ_HANDLED;
+       return IRQ_RETVAL(status & tcpci->alert_mask);
 }
 EXPORT_SYMBOL_GPL(tcpci_irq);
 
 
        err = devm_request_threaded_irq(&client->dev, client->irq, NULL,
                                        _tcpci_irq,
-                                       IRQF_ONESHOT | IRQF_TRIGGER_LOW,
+                                       IRQF_SHARED | IRQF_ONESHOT | IRQF_TRIGGER_LOW,
                                        dev_name(&client->dev), chip);
        if (err < 0) {
                tcpci_unregister_port(chip->tcpci);