spin_unlock_irqrestore(&etsects->lock, flags);
 
-       etsects->clock = ptp_clock_register(&etsects->caps);
+       etsects->clock = ptp_clock_register(&etsects->caps, &dev->dev);
        if (IS_ERR(etsects->clock)) {
                err = PTR_ERR(etsects->clock);
                goto no_clock;
 
                wr32(E1000_IMS, E1000_IMS_TS);
        }
 
-       adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps);
+       adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps,
+                                               &adapter->pdev->dev);
        if (IS_ERR(adapter->ptp_clock)) {
                adapter->ptp_clock = NULL;
                dev_err(&adapter->pdev->dev, "ptp_clock_register failed\n");
 
        /* (Re)start the overflow check */
        adapter->flags2 |= IXGBE_FLAG2_OVERFLOW_CHECK_ENABLED;
 
-       adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps);
+       adapter->ptp_clock = ptp_clock_register(&adapter->ptp_caps,
+                                               &adapter->pdev->dev);
        if (IS_ERR(adapter->ptp_clock)) {
                adapter->ptp_clock = NULL;
                e_dev_err("ptp_clock_register failed\n");
 
        ptp->phc_clock_info.settime = efx_phc_settime;
        ptp->phc_clock_info.enable = efx_phc_enable;
 
-       ptp->phc_clock = ptp_clock_register(&ptp->phc_clock_info);
+       ptp->phc_clock = ptp_clock_register(&ptp->phc_clock_info,
+                                           &efx->pci_dev->dev);
        if (!ptp->phc_clock)
                goto fail3;
 
 
 
        if (choose_this_phy(clock, phydev)) {
                clock->chosen = dp83640;
-               clock->ptp_clock = ptp_clock_register(&clock->caps);
+               clock->ptp_clock = ptp_clock_register(&clock->caps, &phydev->dev);
                if (IS_ERR(clock->ptp_clock)) {
                        err = PTR_ERR(clock->ptp_clock);
                        goto no_register;
 
 
 /* public interface */
 
-struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info)
+struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
+                                    struct device *parent)
 {
        struct ptp_clock *ptp;
        int err = 0, index, major = MAJOR(ptp_devt);
        init_waitqueue_head(&ptp->tsev_wq);
 
        /* Create a new device in our class. */
-       ptp->dev = device_create(ptp_class, NULL, ptp->devid, ptp,
+       ptp->dev = device_create(ptp_class, parent, ptp->devid, ptp,
                                 "ptp%d", ptp->index);
        if (IS_ERR(ptp->dev))
                goto no_device;
 
 
        ixp_clock.caps = ptp_ixp_caps;
 
-       ixp_clock.ptp_clock = ptp_clock_register(&ixp_clock.caps);
+       ixp_clock.ptp_clock = ptp_clock_register(&ixp_clock.caps, NULL);
 
        if (IS_ERR(ixp_clock.ptp_clock))
                return PTR_ERR(ixp_clock.ptp_clock);
 
        }
 
        chip->caps = ptp_pch_caps;
-       chip->ptp_clock = ptp_clock_register(&chip->caps);
+       chip->ptp_clock = ptp_clock_register(&chip->caps, &pdev->dev);
 
        if (IS_ERR(chip->ptp_clock))
                return PTR_ERR(chip->ptp_clock);
 
 #ifndef _PTP_CLOCK_KERNEL_H_
 #define _PTP_CLOCK_KERNEL_H_
 
+#include <linux/device.h>
 #include <linux/pps_kernel.h>
 #include <linux/ptp_clock.h>
 
 /**
  * ptp_clock_register() - register a PTP hardware clock driver
  *
- * @info:  Structure describing the new clock.
+ * @info:   Structure describing the new clock.
+ * @parent: Pointer to the parent device of the new clock.
  */
 
-extern struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info);
+extern struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
+                                           struct device *parent);
 
 /**
  * ptp_clock_unregister() - unregister a PTP hardware clock driver