lkml.org 
[lkml]   [2016]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 02/11] NFC: pn533: fix order of initialization
    Date
    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>
    ---
    drivers/nfc/pn533/i2c.c | 3 ++-
    drivers/nfc/pn533/pn533.c | 4 +++-
    drivers/nfc/pn533/pn533.h | 3 ++-
    drivers/nfc/pn533/usb.c | 3 +--
    4 files changed, 8 insertions(+), 5 deletions(-)

    diff --git a/drivers/nfc/pn533/i2c.c b/drivers/nfc/pn533/i2c.c
    index 1a622e1..0141f19 100644
    --- a/drivers/nfc/pn533/i2c.c
    +++ b/drivers/nfc/pn533/i2c.c
    @@ -211,7 +211,8 @@ static int pn533_i2c_probe(struct i2c_client *client,
    PN533_NO_TYPE_B_PROTOCOLS,
    PN533_PROTO_REQ_ACK_RESP,
    phy, &i2c_phy_ops, NULL,
    - &phy->i2c_dev->dev);
    + &phy->i2c_dev->dev,
    + &client->dev);

    if (IS_ERR(priv)) {
    r = PTR_ERR(priv);
    diff --git a/drivers/nfc/pn533/pn533.c b/drivers/nfc/pn533/pn533.c
    index ee9e8f1..d82eecd 100644
    --- a/drivers/nfc/pn533/pn533.c
    +++ b/drivers/nfc/pn533/pn533.c
    @@ -2554,7 +2554,8 @@ struct pn533 *pn533_register_device(u32 device_type,
    void *phy,
    struct pn533_phy_ops *phy_ops,
    struct pn533_frame_ops *fops,
    - struct device *dev)
    + struct device *dev,
    + struct device *parent)
    {
    struct pn533_fw_version fw_ver;
    struct pn533 *priv;
    @@ -2617,6 +2618,7 @@ struct pn533 *pn533_register_device(u32 device_type,
    goto destroy_wq;
    }

    + nfc_set_parent_dev(priv->nfc_dev, parent);
    nfc_set_drvdata(priv->nfc_dev, priv);

    rc = nfc_register_device(priv->nfc_dev);
    diff --git a/drivers/nfc/pn533/pn533.h b/drivers/nfc/pn533/pn533.h
    index ba604f6..553c7d1 100644
    --- a/drivers/nfc/pn533/pn533.h
    +++ b/drivers/nfc/pn533/pn533.h
    @@ -228,7 +228,8 @@ struct pn533 *pn533_register_device(u32 device_type,
    void *phy,
    struct pn533_phy_ops *phy_ops,
    struct pn533_frame_ops *fops,
    - struct device *dev);
    + struct device *dev,
    + struct device *parent);

    void pn533_unregister_device(struct pn533 *priv);
    void pn533_recv_frame(struct pn533 *dev, struct sk_buff *skb, int status);
    diff --git a/drivers/nfc/pn533/usb.c b/drivers/nfc/pn533/usb.c
    index 4f73cbf..8ca0603 100644
    --- a/drivers/nfc/pn533/usb.c
    +++ b/drivers/nfc/pn533/usb.c
    @@ -536,7 +536,7 @@ static int pn533_usb_probe(struct usb_interface *interface,

    priv = pn533_register_device(id->driver_info, protocols, protocol_type,
    phy, &usb_phy_ops, fops,
    - &phy->udev->dev);
    + &phy->udev->dev, &interface->dev);

    if (IS_ERR(priv)) {
    rc = PTR_ERR(priv);
    @@ -544,7 +544,6 @@ static int pn533_usb_probe(struct usb_interface *interface,
    }

    phy->priv = priv;
    - nfc_set_parent_dev(priv->nfc_dev, &interface->dev);

    usb_set_intfdata(interface, phy);

    --
    2.5.5
    \
     
     \ /
      Last update: 2016-04-21 17:01    [W:3.827 / U:0.628 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site