{
        struct pn533 *dev = nfc_get_drvdata(nfc_dev);
 
+       if (dev->phy_ops->dev_up)
+               dev->phy_ops->dev_up(dev);
+
        if (dev->device_type == PN533_DEVICE_PN532) {
                int rc = pn532_sam_configuration(nfc_dev);
 
 
 static int pn533_dev_down(struct nfc_dev *nfc_dev)
 {
-       return pn533_rf_field(nfc_dev, 0);
+       struct pn533 *dev = nfc_get_drvdata(nfc_dev);
+       int ret;
+
+       ret = pn533_rf_field(nfc_dev, 0);
+       if (dev->phy_ops->dev_down && !ret)
+               dev->phy_ops->dev_down(dev);
+
+       return ret;
 }
 
 static struct nfc_ops pn533_nfc_ops = {
 
                          struct sk_buff *out);
        int (*send_ack)(struct pn533 *dev, gfp_t flags);
        void (*abort_cmd)(struct pn533 *priv, gfp_t flags);
+       /*
+        * dev_up and dev_down are optional.
+        * They are used to inform the phy layer that the nfc chip
+        * is going to be really used very soon. The phy layer can then
+        * bring up it's interface to the chip and have it suspended for power
+        * saving reasons otherwise.
+        */
+       void (*dev_up)(struct pn533 *priv);
+       void (*dev_down)(struct pn533 *priv);
 };