@@ -546,14 +546,57 @@ static int gpio_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
546
546
* Register GPIO pin device driver at /dev/gpioN, where N is the provided
547
547
* minor number.
548
548
*
549
+ * Input Parameters:
550
+ * dev - A pointer to a gpio_dev_s
551
+ * minor - An integer value to be concatenated with '/dev/gpio'
552
+ * to form the device name.
553
+ *
554
+ * Returned Value:
555
+ * Zero on success; A negated errno value is returned on a failure
556
+ * all error values returned by inode_reserve:
557
+ *
558
+ * EINVAL - 'path' is invalid for this operation
559
+ * EEXIST - An inode already exists at 'path'
560
+ * ENOMEM - Failed to allocate in-memory resources for the operation
561
+ *
549
562
****************************************************************************/
550
563
551
564
int gpio_pin_register (FAR struct gpio_dev_s * dev , int minor )
565
+ {
566
+ char devname [32 ];
567
+
568
+ snprintf (devname , sizeof (devname ), "gpio%u" , (unsigned int )minor );
569
+ return gpio_pin_register_byname (dev , devname );
570
+ }
571
+
572
+ /****************************************************************************
573
+ * Name: gpio_pin_register_byname
574
+ *
575
+ * Description:
576
+ * Register GPIO pin device driver with it's pin name.
577
+ *
578
+ * Input Parameters:
579
+ * dev - A pointer to a gpio_dev_s
580
+ * pinname - A pointer to the name to be concatenated with '/dev/'
581
+ * to form the device name.
582
+ *
583
+ * Returned Value:
584
+ * Zero on success; A negated errno value is returned on a failure
585
+ * all error values returned by inode_reserve:
586
+ *
587
+ * EINVAL - 'path' is invalid for this operation
588
+ * EEXIST - An inode already exists at 'path'
589
+ * ENOMEM - Failed to allocate in-memory resources for the operation
590
+ *
591
+ ****************************************************************************/
592
+
593
+ int gpio_pin_register_byname (FAR struct gpio_dev_s * dev ,
594
+ FAR const char * pinname )
552
595
{
553
596
char devname [32 ];
554
597
int ret ;
555
598
556
- DEBUGASSERT (dev != NULL && dev -> gp_ops != NULL );
599
+ DEBUGASSERT (dev != NULL && dev -> gp_ops != NULL && pinname != NULL );
557
600
558
601
switch (dev -> gp_pintype )
559
602
{
@@ -590,7 +633,8 @@ int gpio_pin_register(FAR struct gpio_dev_s *dev, int minor)
590
633
break ;
591
634
}
592
635
593
- snprintf (devname , sizeof (devname ), "/dev/gpio%u" , (unsigned int )minor );
636
+ snprintf (devname , sizeof (devname ), "/dev/%s" , pinname );
637
+
594
638
gpioinfo ("Registering %s\n" , devname );
595
639
596
640
return register_driver (devname , & g_gpio_drvrops , 0666 , dev );
@@ -603,13 +647,54 @@ int gpio_pin_register(FAR struct gpio_dev_s *dev, int minor)
603
647
* Unregister GPIO pin device driver at /dev/gpioN, where N is the provided
604
648
* minor number.
605
649
*
650
+ * Input Parameters:
651
+ * dev - A pointer to a gpio_dev_s
652
+ * minor - An integer value to be concatenated with '/dev/gpio'
653
+ * to form the device name.
654
+ *
655
+ * Returned Value:
656
+ * Zero on success; A negated value is returned on a failure
657
+ * (all error values returned by inode_remove):
658
+ *
659
+ * ENOENT - path does not exist.
660
+ * EBUSY - Ref count is not 0;
661
+ *
606
662
****************************************************************************/
607
663
608
664
int gpio_pin_unregister (FAR struct gpio_dev_s * dev , int minor )
609
665
{
610
666
char devname [32 ];
667
+ snprintf (devname , sizeof (devname ), "gpio%u" , (unsigned int )minor );
668
+ return gpio_pin_unregister_byname (dev , devname );
669
+ }
670
+
671
+ /****************************************************************************
672
+ * Name: gpio_pin_unregister_byname
673
+ *
674
+ * Description:
675
+ * Unregister GPIO pin device driver at /dev/pinname.
676
+ *
677
+ * Input Parameters:
678
+ * dev - A pointer to a gpio_dev_s
679
+ * pinname - A pointer to the name to be concatenated with '/dev/'
680
+ * to form the device name.
681
+ *
682
+ *
683
+ * Returned Value:
684
+ * Zero on success; A negated value is returned on a failure
685
+ * (all error values returned by inode_remove):
686
+ *
687
+ * ENOENT - path does not exist.
688
+ * EBUSY - Ref count is not 0;
689
+ ****************************************************************************/
690
+
691
+ int gpio_pin_unregister_byname (FAR struct gpio_dev_s * dev ,
692
+ FAR const char * pinname )
693
+ {
694
+ char devname [32 ];
695
+
696
+ snprintf (devname , sizeof (devname ), "/dev/%s" , pinname );
611
697
612
- snprintf (devname , sizeof (devname ), "/dev/gpio%u" , (unsigned int )minor );
613
698
gpioinfo ("Unregistering %s\n" , devname );
614
699
615
700
return unregister_driver (devname );
0 commit comments