Adds adjust phase function to take advantage of a PHC clock's hardware filtering capability that uses phase offset control word instead of frequency offset control word.
Unified · Split
| @@ -146,6 +146,9 @@ static int ptp_clock_adjtime(struct posix_clock *pc, struct __kernel_timex *tx) · 145 unmodified lines | ||
| 146 | 146 | else |
| 147 | 147 | err = ops->adjfreq(ops, ppb); |
| 148 | 148 | ptp->dialed_frequency = tx->freq; |
| 149 | + } else if (tx->modes & ADJ_OFFSET) { | |
| 150 | + if (ops->adjphase) | |
| 151 | + err = ops->adjphase(ops, tx->offset); | |
| 149 | 152 | } else if (tx->modes == 0) { |
| 150 | 153 | tx->freq = ptp->dialed_frequency; |
| 151 | 154 | err = 0; |
| @@ -36,7 +36,7 @@ struct ptp_system_timestamp { · 35 unmodified lines | ||
| 36 | 36 | }; |
| 37 | 37 | |
| 38 | 38 | /** |
| 39 | − * struct ptp_clock_info - decribes a PTP hardware clock | |
| 39 | + * struct ptp_clock_info - describes a PTP hardware clock | |
| 40 | 40 | * |
| 41 | 41 | * @owner: The clock driver should set to THIS_MODULE. |
| 42 | 42 | * @name: A short "friendly name" to identify the clock and to |
| @@ -65,6 +65,9 @@ struct ptp_system_timestamp { · 22 unmodified lines | ||
| 65 | 65 | * parameter delta: Desired frequency offset from nominal frequency |
| 66 | 66 | * in parts per billion |
| 67 | 67 | * |
| 68 | + * @adjphase: Adjusts the phase offset of the hardware clock. | |
| 69 | + * parameter delta: Desired change in nanoseconds. | |
| 70 | + * | |
| 68 | 71 | * @adjtime: Shifts the time of the hardware clock. |
| 69 | 72 | * parameter delta: Desired change in nanoseconds. |
| 70 | 73 | * |
| @@ -128,6 +131,7 @@ struct ptp_clock_info { · 57 unmodified lines | ||
| 128 | 131 | struct ptp_pin_desc *pin_config; |
| 129 | 132 | int (*adjfine)(struct ptp_clock_info *ptp, long scaled_ppm); |
| 130 | 133 | int (*adjfreq)(struct ptp_clock_info *ptp, s32 delta); |
| 134 | + int (*adjphase)(struct ptp_clock_info *ptp, s32 phase); | |
| 131 | 135 | int (*adjtime)(struct ptp_clock_info *ptp, s64 delta); |
| 132 | 136 | int (*gettime64)(struct ptp_clock_info *ptp, struct timespec64 *ts); |
| 133 | 137 | int (*gettimex64)(struct ptp_clock_info *ptp, struct timespec64 *ts, |