aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/class
diff options
context:
space:
mode:
authorDave Penkler <dpenkler@gmail.com>2016-01-27 13:22:28 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-02-03 16:54:06 -0500
commit29779d89fd049bfc6c07f19aaf9b8d19fe2ecc8c (patch)
treed784934a3de29284ed67366805bcca6b039527b1 /drivers/usb/class
parenteb6b92ecc0f9412623ab1584ddd8389b371638d4 (diff)
Add ioctl to retrieve USBTMC-USB488 capabilities
This is a convenience function to obtain an instrument's capabilities from its file descriptor without having to access sysfs from the user program. Signed-off-by: Dave Penkler <dpenkler@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/class')
-rw-r--r--drivers/usb/class/usbtmc.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c
index 867842951ea0..6edb21ca9989 100644
--- a/drivers/usb/class/usbtmc.c
+++ b/drivers/usb/class/usbtmc.c
@@ -102,6 +102,9 @@ struct usbtmc_device_data {
102 u16 iin_wMaxPacketSize; 102 u16 iin_wMaxPacketSize;
103 atomic_t srq_asserted; 103 atomic_t srq_asserted;
104 104
105 /* coalesced usb488_caps from usbtmc_dev_capabilities */
106 __u8 usb488_caps;
107
105 u8 rigol_quirk; 108 u8 rigol_quirk;
106 109
107 /* attributes from the USB TMC spec for this device */ 110 /* attributes from the USB TMC spec for this device */
@@ -993,6 +996,7 @@ static int get_capabilities(struct usbtmc_device_data *data)
993 data->capabilities.device_capabilities = buffer[5]; 996 data->capabilities.device_capabilities = buffer[5];
994 data->capabilities.usb488_interface_capabilities = buffer[14]; 997 data->capabilities.usb488_interface_capabilities = buffer[14];
995 data->capabilities.usb488_device_capabilities = buffer[15]; 998 data->capabilities.usb488_device_capabilities = buffer[15];
999 data->usb488_caps = (buffer[14] & 0x07) | ((buffer[15] & 0x0f) << 4);
996 rv = 0; 1000 rv = 0;
997 1001
998err_out: 1002err_out:
@@ -1168,6 +1172,14 @@ static long usbtmc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
1168 retval = usbtmc_ioctl_abort_bulk_in(data); 1172 retval = usbtmc_ioctl_abort_bulk_in(data);
1169 break; 1173 break;
1170 1174
1175 case USBTMC488_IOCTL_GET_CAPS:
1176 retval = copy_to_user((void __user *)arg,
1177 &data->usb488_caps,
1178 sizeof(data->usb488_caps));
1179 if (retval)
1180 retval = -EFAULT;
1181 break;
1182
1171 case USBTMC488_IOCTL_READ_STB: 1183 case USBTMC488_IOCTL_READ_STB:
1172 retval = usbtmc488_ioctl_read_stb(data, (void __user *)arg); 1184 retval = usbtmc488_ioctl_read_stb(data, (void __user *)arg);
1173 break; 1185 break;