@@ -700,7 +700,7 @@ static int tcpci_init(struct tcpc_dev *tcpc)
700
700
701
701
tcpci -> alert_mask = reg ;
702
702
703
- return tcpci_write16 ( tcpci , TCPC_ALERT_MASK , reg ) ;
703
+ return 0 ;
704
704
}
705
705
706
706
irqreturn_t tcpci_irq (struct tcpci * tcpci )
@@ -924,22 +924,27 @@ static int tcpci_probe(struct i2c_client *client,
924
924
925
925
chip -> data .set_orientation = err ;
926
926
927
+ chip -> tcpci = tcpci_register_port (& client -> dev , & chip -> data );
928
+ if (IS_ERR (chip -> tcpci ))
929
+ return PTR_ERR (chip -> tcpci );
930
+
927
931
err = devm_request_threaded_irq (& client -> dev , client -> irq , NULL ,
928
932
_tcpci_irq ,
929
933
IRQF_SHARED | IRQF_ONESHOT ,
930
934
dev_name (& client -> dev ), chip );
931
935
if (err < 0 )
932
- return err ;
936
+ goto unregister_port ;
933
937
934
- /*
935
- * Disable irq while registering port. If irq is configured as an edge
936
- * irq this allow to keep track and process the irq as soon as it is enabled.
937
- */
938
- disable_irq (client -> irq );
939
- chip -> tcpci = tcpci_register_port (& client -> dev , & chip -> data );
940
- enable_irq (client -> irq );
938
+ /* Enable chip interrupts at last */
939
+ err = tcpci_write16 (chip -> tcpci , TCPC_ALERT_MASK , chip -> tcpci -> alert_mask );
940
+ if (err < 0 )
941
+ goto unregister_port ;
941
942
942
- return PTR_ERR_OR_ZERO (chip -> tcpci );
943
+ return 0 ;
944
+
945
+ unregister_port :
946
+ tcpci_unregister_port (chip -> tcpci );
947
+ return err ;
943
948
}
944
949
945
950
static int tcpci_remove (struct i2c_client * client )
0 commit comments