NFC: pn533: fix order of initialization
Correctly call nfc_set_parent_dev before nfc_register_device. Otherwise the driver will OOPS when being removed. Signed-off-by: Michael Thalmeier <michael.thalmeier@hale.at> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
79f09fa79c
commit
b16931b13c
|
@ -211,7 +211,8 @@ static int pn533_i2c_probe(struct i2c_client *client,
|
||||||
PN533_NO_TYPE_B_PROTOCOLS,
|
PN533_NO_TYPE_B_PROTOCOLS,
|
||||||
PN533_PROTO_REQ_ACK_RESP,
|
PN533_PROTO_REQ_ACK_RESP,
|
||||||
phy, &i2c_phy_ops, NULL,
|
phy, &i2c_phy_ops, NULL,
|
||||||
&phy->i2c_dev->dev);
|
&phy->i2c_dev->dev,
|
||||||
|
&client->dev);
|
||||||
|
|
||||||
if (IS_ERR(priv)) {
|
if (IS_ERR(priv)) {
|
||||||
r = PTR_ERR(priv);
|
r = PTR_ERR(priv);
|
||||||
|
|
|
@ -2554,7 +2554,8 @@ struct pn533 *pn533_register_device(u32 device_type,
|
||||||
void *phy,
|
void *phy,
|
||||||
struct pn533_phy_ops *phy_ops,
|
struct pn533_phy_ops *phy_ops,
|
||||||
struct pn533_frame_ops *fops,
|
struct pn533_frame_ops *fops,
|
||||||
struct device *dev)
|
struct device *dev,
|
||||||
|
struct device *parent)
|
||||||
{
|
{
|
||||||
struct pn533_fw_version fw_ver;
|
struct pn533_fw_version fw_ver;
|
||||||
struct pn533 *priv;
|
struct pn533 *priv;
|
||||||
|
@ -2617,6 +2618,7 @@ struct pn533 *pn533_register_device(u32 device_type,
|
||||||
goto destroy_wq;
|
goto destroy_wq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nfc_set_parent_dev(priv->nfc_dev, parent);
|
||||||
nfc_set_drvdata(priv->nfc_dev, priv);
|
nfc_set_drvdata(priv->nfc_dev, priv);
|
||||||
|
|
||||||
rc = nfc_register_device(priv->nfc_dev);
|
rc = nfc_register_device(priv->nfc_dev);
|
||||||
|
|
|
@ -228,7 +228,8 @@ struct pn533 *pn533_register_device(u32 device_type,
|
||||||
void *phy,
|
void *phy,
|
||||||
struct pn533_phy_ops *phy_ops,
|
struct pn533_phy_ops *phy_ops,
|
||||||
struct pn533_frame_ops *fops,
|
struct pn533_frame_ops *fops,
|
||||||
struct device *dev);
|
struct device *dev,
|
||||||
|
struct device *parent);
|
||||||
|
|
||||||
void pn533_unregister_device(struct pn533 *priv);
|
void pn533_unregister_device(struct pn533 *priv);
|
||||||
void pn533_recv_frame(struct pn533 *dev, struct sk_buff *skb, int status);
|
void pn533_recv_frame(struct pn533 *dev, struct sk_buff *skb, int status);
|
||||||
|
|
|
@ -536,7 +536,7 @@ static int pn533_usb_probe(struct usb_interface *interface,
|
||||||
|
|
||||||
priv = pn533_register_device(id->driver_info, protocols, protocol_type,
|
priv = pn533_register_device(id->driver_info, protocols, protocol_type,
|
||||||
phy, &usb_phy_ops, fops,
|
phy, &usb_phy_ops, fops,
|
||||||
&phy->udev->dev);
|
&phy->udev->dev, &interface->dev);
|
||||||
|
|
||||||
if (IS_ERR(priv)) {
|
if (IS_ERR(priv)) {
|
||||||
rc = PTR_ERR(priv);
|
rc = PTR_ERR(priv);
|
||||||
|
@ -544,7 +544,6 @@ static int pn533_usb_probe(struct usb_interface *interface,
|
||||||
}
|
}
|
||||||
|
|
||||||
phy->priv = priv;
|
phy->priv = priv;
|
||||||
nfc_set_parent_dev(priv->nfc_dev, &interface->dev);
|
|
||||||
|
|
||||||
usb_set_intfdata(interface, phy);
|
usb_set_intfdata(interface, phy);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue