On Mon, 30 Aug 2021 16:52:33 -0700 Jonathan Lemon wrote:
quoted hunk ↗ jump to hunk
+static ssize_t
+utc_tai_offset_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct ptp_ocp *bp = dev_get_drvdata(dev);
+
+ return sysfs_emit(buf, "%d\n", bp->utc_tai_offset);
+}
+
+static ssize_t
+utc_tai_offset_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct ptp_ocp *bp = dev_get_drvdata(dev);
+ unsigned long flags;
+ int err;
+ s32 val;
+
+ err = kstrtos32(buf, 0, &val);
+ if (err)
+ return err;
+
+ bp->utc_tai_offset = val;
This line should probably be under the lock.
quoted hunk ↗ jump to hunk
+ spin_lock_irqsave(&bp->lock, flags);
+ iowrite32(val, &bp->irig_out->adj_sec);
+ iowrite32(val, &bp->dcf_out->adj_sec);
+ spin_unlock_irqrestore(&bp->lock, flags);
+
+ return count;
+}
+static DEVICE_ATTR_RW(utc_tai_offset);