2424#define PTP_PPS_EVENT PPS_CAPTUREASSERT
2525#define PTP_PPS_MODE (PTP_PPS_DEFAULTS | PPS_CANWAIT | PPS_TSFMT_TSPEC)
2626
27- struct class * ptp_class ;
27+ const struct class ptp_class = {
28+ .name = "ptp" ,
29+ .dev_groups = ptp_groups
30+ };
2831
2932/* private globals */
3033
@@ -189,6 +192,11 @@ static int ptp_getcycles64(struct ptp_clock_info *info, struct timespec64 *ts)
189192 return info -> gettime64 (info , ts );
190193}
191194
195+ static int ptp_enable (struct ptp_clock_info * ptp , struct ptp_clock_request * request , int on )
196+ {
197+ return - EOPNOTSUPP ;
198+ }
199+
192200static void ptp_aux_kworker (struct kthread_work * work )
193201{
194202 struct ptp_clock * ptp = container_of (work , struct ptp_clock ,
@@ -251,6 +259,9 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
251259 ptp -> info -> getcrosscycles = ptp -> info -> getcrosststamp ;
252260 }
253261
262+ if (!ptp -> info -> enable )
263+ ptp -> info -> enable = ptp_enable ;
264+
254265 if (ptp -> info -> do_aux_work ) {
255266 kthread_init_delayed_work (& ptp -> aux_work , ptp_aux_kworker );
256267 ptp -> kworker = kthread_create_worker (0 , "ptp%d" , ptp -> index );
@@ -300,7 +311,7 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info,
300311 /* Initialize a new device of our class in our clock structure. */
301312 device_initialize (& ptp -> dev );
302313 ptp -> dev .devt = ptp -> devid ;
303- ptp -> dev .class = ptp_class ;
314+ ptp -> dev .class = & ptp_class ;
304315 ptp -> dev .parent = parent ;
305316 ptp -> dev .groups = ptp -> pin_attr_groups ;
306317 ptp -> dev .release = ptp_clock_release ;
@@ -457,7 +468,7 @@ EXPORT_SYMBOL(ptp_cancel_worker_sync);
457468
458469static void __exit ptp_exit (void )
459470{
460- class_destroy ( ptp_class );
471+ class_unregister ( & ptp_class );
461472 unregister_chrdev_region (ptp_devt , MINORMASK + 1 );
462473 ida_destroy (& ptp_clocks_map );
463474}
@@ -466,10 +477,10 @@ static int __init ptp_init(void)
466477{
467478 int err ;
468479
469- ptp_class = class_create ( "ptp" );
470- if (IS_ERR ( ptp_class ) ) {
480+ err = class_register ( & ptp_class );
481+ if (err ) {
471482 pr_err ("ptp: failed to allocate class\n" );
472- return PTR_ERR ( ptp_class ) ;
483+ return err ;
473484 }
474485
475486 err = alloc_chrdev_region (& ptp_devt , 0 , MINORMASK + 1 , "ptp" );
@@ -478,12 +489,11 @@ static int __init ptp_init(void)
478489 goto no_region ;
479490 }
480491
481- ptp_class -> dev_groups = ptp_groups ;
482492 pr_info ("PTP clock support registered\n" );
483493 return 0 ;
484494
485495no_region :
486- class_destroy ( ptp_class );
496+ class_unregister ( & ptp_class );
487497 return err ;
488498}
489499
0 commit comments