NFC: st21nfcb: Fix "NULL pointer dereference" possible error
When the platform with CONFIG_ST21NFCB_I2C=y without any st21nfcb component physically connected a: "Unable to handle kernel NULL pointer dereference at virtual address" may show up at driver initialization phase. Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:

committed by
Samuel Ortiz

parent
c490c557b6
commit
7274496f2e
@@ -199,7 +199,7 @@ static irqreturn_t st21nfcb_nci_irq_thread_fn(int irq, void *phy_id)
|
|||||||
struct sk_buff *skb = NULL;
|
struct sk_buff *skb = NULL;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (!phy || irq != phy->i2c_dev->irq) {
|
if (!phy || !phy->ndlc || irq != phy->i2c_dev->irq) {
|
||||||
WARN_ON_ONCE(1);
|
WARN_ON_ONCE(1);
|
||||||
return IRQ_NONE;
|
return IRQ_NONE;
|
||||||
}
|
}
|
||||||
@@ -343,18 +343,22 @@ static int st21nfcb_nci_i2c_probe(struct i2c_client *client,
|
|||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r = ndlc_probe(phy, &i2c_phy_ops, &client->dev,
|
||||||
|
ST21NFCB_FRAME_HEADROOM, ST21NFCB_FRAME_TAILROOM,
|
||||||
|
&phy->ndlc);
|
||||||
|
if (r < 0) {
|
||||||
|
nfc_err(&client->dev, "Unable to register ndlc layer\n");
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
r = devm_request_threaded_irq(&client->dev, client->irq, NULL,
|
r = devm_request_threaded_irq(&client->dev, client->irq, NULL,
|
||||||
st21nfcb_nci_irq_thread_fn,
|
st21nfcb_nci_irq_thread_fn,
|
||||||
phy->irq_polarity | IRQF_ONESHOT,
|
phy->irq_polarity | IRQF_ONESHOT,
|
||||||
ST21NFCB_NCI_DRIVER_NAME, phy);
|
ST21NFCB_NCI_DRIVER_NAME, phy);
|
||||||
if (r < 0) {
|
if (r < 0)
|
||||||
nfc_err(&client->dev, "Unable to register IRQ handler\n");
|
nfc_err(&client->dev, "Unable to register IRQ handler\n");
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ndlc_probe(phy, &i2c_phy_ops, &client->dev,
|
return r;
|
||||||
ST21NFCB_FRAME_HEADROOM, ST21NFCB_FRAME_TAILROOM,
|
|
||||||
&phy->ndlc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int st21nfcb_nci_i2c_remove(struct i2c_client *client)
|
static int st21nfcb_nci_i2c_remove(struct i2c_client *client)
|
||||||
|
Reference in New Issue
Block a user