{
        struct dp83640_private *dp83640 = clock->chosen;
        struct phy_device *phydev = dp83640->phydev;
-       u32 sec, nsec, period;
+       u32 sec, nsec, pwidth;
        u16 gpio, ptp_trig, trigger, val;
 
        gpio = on ? gpio_tab[PEROUT_GPIO] : 0;
 
        sec = clkreq->perout.start.sec;
        nsec = clkreq->perout.start.nsec;
-       period = clkreq->perout.period.sec * 1000000000UL;
-       period += clkreq->perout.period.nsec;
+       pwidth = clkreq->perout.period.sec * 1000000000UL;
+       pwidth += clkreq->perout.period.nsec;
+       pwidth /= 2;
 
        mutex_lock(&clock->extreg_lock);
 
        ext_write(0, phydev, PAGE4, PTP_TDR, nsec >> 16);      /* ns[31:16] */
        ext_write(0, phydev, PAGE4, PTP_TDR, sec & 0xffff);    /* sec[15:0] */
        ext_write(0, phydev, PAGE4, PTP_TDR, sec >> 16);       /* sec[31:16] */
-       ext_write(0, phydev, PAGE4, PTP_TDR, period & 0xffff); /* ns[15:0] */
-       ext_write(0, phydev, PAGE4, PTP_TDR, period >> 16);    /* ns[31:16] */
+       ext_write(0, phydev, PAGE4, PTP_TDR, pwidth & 0xffff); /* ns[15:0] */
+       ext_write(0, phydev, PAGE4, PTP_TDR, pwidth >> 16);    /* ns[31:16] */
 
        /*enable trigger*/
        val &= ~TRIG_LOAD;