Re: [PATCH v5 08/14] staging: typec: tcpci: register port before request irq
From: Sergei Shtylyov <hidden>
Date: 2018-05-03 08:34:33
Also in:
linux-usb
On 5/3/2018 11:29 AM, Sergei Shtylyov wrote:
quoted
From: Peter Chen <redacted> With that we can clear any pending events and the port is registered so driver can be ready to handle typec events once we request irq. Signed-off-by: Peter Chen <redacted> Signed-off-by: Li Jun <redacted> --- drivers/staging/typec/tcpci.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)diff --git a/drivers/staging/typec/tcpci.c b/drivers/staging/typec/tcpci.c index a21aaf5..139c2ab 100644 --- a/drivers/staging/typec/tcpci.c +++ b/drivers/staging/typec/tcpci.c@@ -537,24 +537,27 @@ static int tcpci_probe(struct i2c_client *client,if (IS_ERR(chip->data.regmap)) return PTR_ERR(chip->data.regmap); + i2c_set_clientdata(client, chip); + /* Disable chip interrupts before requesting irq */ err = regmap_raw_write(chip->data.regmap, TCPC_ALERT_MASK, &val, sizeof(u16)); if (err < 0) return err; + chip->tcpci = tcpci_register_port(&client->dev, &chip->data); + if (PTR_ERR_OR_ZERO(chip->tcpci))Is NULL an error indication too?quoted
+ return PTR_ERR(chip->tcpci);If so, you'll return a success indication here.
... when chip->tcpci is NULL, I mean. Seems wrong...
quoted
+ err = devm_request_threaded_irq(&client->dev, client->irq, NULL, _tcpci_irq, IRQF_ONESHOT | IRQF_TRIGGER_LOW, dev_name(&client->dev), chip); - if (err < 0) + if (err < 0) { + tcpci_unregister_port(chip->tcpci); return err; + } - chip->tcpci = tcpci_register_port(&client->dev, &chip->data); - if (PTR_ERR_OR_ZERO(chip->tcpci)) - return PTR_ERR(chip->tcpci); -
Ah, you're only moving the questionable code...
quoted
- i2c_set_clientdata(client, chip); return 0; }
MBR, Sergei