The EBADF error is always overwritten for the standby, suspend and
hibernate ioctls, only the mode ioctl has it right.

Merge the now identical casese while here.

Tested on a Pinebook Pro.

OK?

Index: apm.c
===================================================================
RCS file: /cvs/src/sys/arch/arm64/dev/apm.c,v
retrieving revision 1.6
diff -u -p -r1.6 apm.c
--- apm.c       25 Dec 2020 12:59:51 -0000      1.6
+++ apm.c       20 Mar 2021 18:54:23 -0000
@@ -213,17 +213,15 @@ apmioctl(dev_t dev, u_long cmd, caddr_t 
        case APM_IOC_STANDBY_REQ:
        case APM_IOC_SUSPEND:
        case APM_IOC_SUSPEND_REQ:
-               if ((flag & FWRITE) == 0)
-                       error = EBADF;
-               error = EOPNOTSUPP;
-               break;
 #ifdef HIBERNATE
        case APM_IOC_HIBERNATE:
+#endif
+       case APM_IOC_DEV_CTL:
                if ((flag & FWRITE) == 0)
                        error = EBADF;
-               error = EOPNOTSUPP;
+               else
+                       error = EOPNOTSUPP; /* XXX */
                break;
-#endif
        case APM_IOC_PRN_CTL:
                if ((flag & FWRITE) == 0)
                        error = EBADF;
@@ -247,12 +245,6 @@ apmioctl(dev_t dev, u_long cmd, caddr_t 
                                break;
                        }
                }
-               break;
-       case APM_IOC_DEV_CTL:
-               if ((flag & FWRITE) == 0)
-                       error = EBADF;
-               else
-                       error = EOPNOTSUPP; /* XXX */
                break;
        case APM_IOC_GETPOWER:
                power = (struct apm_power_info *)data;

Reply via email to