@@ -3361,6 +3361,54 @@ static EXT_ATTR_RO(freq, frequency, 1);
33613361static EXT_ATTR_RO (freq , frequency , 2 ) ;
33623362static EXT_ATTR_RO (freq , frequency , 3 ) ;
33633363
3364+ static ssize_t
3365+ ptp_ocp_tty_show (struct device * dev , struct device_attribute * attr , char * buf )
3366+ {
3367+ struct dev_ext_attribute * ea = to_ext_attr (attr );
3368+ struct ptp_ocp * bp = dev_get_drvdata (dev );
3369+
3370+ return sysfs_emit (buf , "ttyS%d" , bp -> port [(uintptr_t )ea -> var ].line );
3371+ }
3372+
3373+ static umode_t
3374+ ptp_ocp_timecard_tty_is_visible (struct kobject * kobj , struct attribute * attr , int n )
3375+ {
3376+ struct ptp_ocp * bp = dev_get_drvdata (kobj_to_dev (kobj ));
3377+ struct ptp_ocp_serial_port * port ;
3378+ struct device_attribute * dattr ;
3379+ struct dev_ext_attribute * ea ;
3380+
3381+ if (strncmp (attr -> name , "tty" , 3 ))
3382+ return attr -> mode ;
3383+
3384+ dattr = container_of (attr , struct device_attribute , attr );
3385+ ea = container_of (dattr , struct dev_ext_attribute , attr );
3386+ port = & bp -> port [(uintptr_t )ea -> var ];
3387+ return port -> line == -1 ? 0 : 0444 ;
3388+ }
3389+
3390+ #define EXT_TTY_ATTR_RO (_name , _val ) \
3391+ struct dev_ext_attribute dev_attr_tty##_name = \
3392+ { __ATTR(tty##_name, 0444, ptp_ocp_tty_show, NULL), (void *)_val }
3393+
3394+ static EXT_TTY_ATTR_RO (GNSS , PORT_GNSS ) ;
3395+ static EXT_TTY_ATTR_RO (GNSS2 , PORT_GNSS2 ) ;
3396+ static EXT_TTY_ATTR_RO (MAC , PORT_MAC ) ;
3397+ static EXT_TTY_ATTR_RO (NMEA , PORT_NMEA ) ;
3398+ static struct attribute * ptp_ocp_timecard_tty_attrs [] = {
3399+ & dev_attr_ttyGNSS .attr .attr ,
3400+ & dev_attr_ttyGNSS2 .attr .attr ,
3401+ & dev_attr_ttyMAC .attr .attr ,
3402+ & dev_attr_ttyNMEA .attr .attr ,
3403+ NULL ,
3404+ };
3405+
3406+ static const struct attribute_group ptp_ocp_timecard_tty_group = {
3407+ .name = "tty" ,
3408+ .attrs = ptp_ocp_timecard_tty_attrs ,
3409+ .is_visible = ptp_ocp_timecard_tty_is_visible ,
3410+ };
3411+
33643412static ssize_t
33653413serialnum_show (struct device * dev , struct device_attribute * attr , char * buf )
33663414{
@@ -3790,6 +3838,7 @@ static const struct attribute_group fb_timecard_group = {
37903838
37913839static const struct ocp_attr_group fb_timecard_groups [] = {
37923840 { .cap = OCP_CAP_BASIC , .group = & fb_timecard_group },
3841+ { .cap = OCP_CAP_BASIC , .group = & ptp_ocp_timecard_tty_group },
37933842 { .cap = OCP_CAP_SIGNAL , .group = & fb_timecard_signal0_group },
37943843 { .cap = OCP_CAP_SIGNAL , .group = & fb_timecard_signal1_group },
37953844 { .cap = OCP_CAP_SIGNAL , .group = & fb_timecard_signal2_group },
@@ -3829,6 +3878,7 @@ static const struct attribute_group art_timecard_group = {
38293878
38303879static const struct ocp_attr_group art_timecard_groups [] = {
38313880 { .cap = OCP_CAP_BASIC , .group = & art_timecard_group },
3881+ { .cap = OCP_CAP_BASIC , .group = & ptp_ocp_timecard_tty_group },
38323882 { },
38333883};
38343884
@@ -3856,6 +3906,7 @@ static const struct attribute_group adva_timecard_group = {
38563906
38573907static const struct ocp_attr_group adva_timecard_groups [] = {
38583908 { .cap = OCP_CAP_BASIC , .group = & adva_timecard_group },
3909+ { .cap = OCP_CAP_BASIC , .group = & ptp_ocp_timecard_tty_group },
38593910 { .cap = OCP_CAP_SIGNAL , .group = & fb_timecard_signal0_group },
38603911 { .cap = OCP_CAP_SIGNAL , .group = & fb_timecard_signal1_group },
38613912 { .cap = OCP_CAP_FREQ , .group = & fb_timecard_freq0_group },
@@ -4361,14 +4412,6 @@ ptp_ocp_complete(struct ptp_ocp *bp)
43614412{
43624413 struct pps_device * pps ;
43634414 char buf [32 ];
4364- int i ;
4365-
4366- for (i = 0 ; i < __PORT_COUNT ; i ++ ) {
4367- if (bp -> port [i ].line != -1 ) {
4368- sprintf (buf , "ttyS%d" , bp -> port [i ].line );
4369- ptp_ocp_link_child (bp , buf , ptp_ocp_tty_port_name (i ));
4370- }
4371- }
43724415
43734416 sprintf (buf , "ptp%d" , ptp_clock_index (bp -> ptp ));
43744417 ptp_ocp_link_child (bp , buf , "ptp" );
@@ -4440,9 +4483,6 @@ ptp_ocp_detach_sysfs(struct ptp_ocp *bp)
44404483{
44414484 struct device * dev = & bp -> dev ;
44424485
4443- sysfs_remove_link (& dev -> kobj , "ttyGNSS" );
4444- sysfs_remove_link (& dev -> kobj , "ttyGNSS2" );
4445- sysfs_remove_link (& dev -> kobj , "ttyMAC" );
44464486 sysfs_remove_link (& dev -> kobj , "ptp" );
44474487 sysfs_remove_link (& dev -> kobj , "pps" );
44484488}
0 commit comments