On Sun, Mar 12, 2023 at 11:02:39PM -0400, Tianfei Zhang wrote: > +static int dfl_tod_probe(struct dfl_device *ddev) > +{ > + struct device *dev = &ddev->dev; > + struct dfl_tod *dt; > + > + dt = devm_kzalloc(dev, sizeof(*dt), GFP_KERNEL); > + if (!dt) > + return -ENOMEM; > + > + dt->tod_ctrl = devm_ioremap_resource(dev, &ddev->mmio_res); > + if (IS_ERR(dt->tod_ctrl)) > + return PTR_ERR(dt->tod_ctrl); > + > + dt->dev = dev; > + spin_lock_init(&dt->tod_lock); > + dev_set_drvdata(dev, dt); > + > + dt->ptp_clock_ops = dfl_tod_clock_ops; > + > + dt->ptp_clock = ptp_clock_register(&dt->ptp_clock_ops, dev); > + if (IS_ERR(dt->ptp_clock)) > + return dev_err_probe(dt->dev, PTR_ERR(dt->ptp_clock), > + "Unable to register PTP clock\n"); Need to handle NULL as well... /** * ptp_clock_register() - register a PTP hardware clock driver * * @info: Structure describing the new clock. * @parent: Pointer to the parent device of the new clock. * * Returns a valid pointer on success or PTR_ERR on failure. If PHC * support is missing at the configuration level, this function * returns NULL, and drivers are expected to gracefully handle that * case separately. */ Thanks, Richard