diff options
Diffstat (limited to 'drivers/staging/comedi/drivers/vmk80xx.c')
-rw-r--r-- | drivers/staging/comedi/drivers/vmk80xx.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/drivers/staging/comedi/drivers/vmk80xx.c b/drivers/staging/comedi/drivers/vmk80xx.c index cdf86284dd04..36470ee06596 100644 --- a/drivers/staging/comedi/drivers/vmk80xx.c +++ b/drivers/staging/comedi/drivers/vmk80xx.c | |||
@@ -99,6 +99,9 @@ enum { | |||
99 | #define IC3_VERSION BIT(0) | 99 | #define IC3_VERSION BIT(0) |
100 | #define IC6_VERSION BIT(1) | 100 | #define IC6_VERSION BIT(1) |
101 | 101 | ||
102 | #define MIN_BUF_SIZE 64 | ||
103 | #define PACKET_TIMEOUT 10000 /* ms */ | ||
104 | |||
102 | enum vmk80xx_model { | 105 | enum vmk80xx_model { |
103 | VMK8055_MODEL, | 106 | VMK8055_MODEL, |
104 | VMK8061_MODEL | 107 | VMK8061_MODEL |
@@ -166,22 +169,21 @@ static void vmk80xx_do_bulk_msg(struct comedi_device *dev) | |||
166 | __u8 rx_addr; | 169 | __u8 rx_addr; |
167 | unsigned int tx_pipe; | 170 | unsigned int tx_pipe; |
168 | unsigned int rx_pipe; | 171 | unsigned int rx_pipe; |
169 | size_t size; | 172 | size_t tx_size; |
173 | size_t rx_size; | ||
170 | 174 | ||
171 | tx_addr = devpriv->ep_tx->bEndpointAddress; | 175 | tx_addr = devpriv->ep_tx->bEndpointAddress; |
172 | rx_addr = devpriv->ep_rx->bEndpointAddress; | 176 | rx_addr = devpriv->ep_rx->bEndpointAddress; |
173 | tx_pipe = usb_sndbulkpipe(usb, tx_addr); | 177 | tx_pipe = usb_sndbulkpipe(usb, tx_addr); |
174 | rx_pipe = usb_rcvbulkpipe(usb, rx_addr); | 178 | rx_pipe = usb_rcvbulkpipe(usb, rx_addr); |
179 | tx_size = usb_endpoint_maxp(devpriv->ep_tx); | ||
180 | rx_size = usb_endpoint_maxp(devpriv->ep_rx); | ||
175 | 181 | ||
176 | /* | 182 | usb_bulk_msg(usb, tx_pipe, devpriv->usb_tx_buf, tx_size, NULL, |
177 | * The max packet size attributes of the K8061 | 183 | PACKET_TIMEOUT); |
178 | * input/output endpoints are identical | ||
179 | */ | ||
180 | size = usb_endpoint_maxp(devpriv->ep_tx); | ||
181 | 184 | ||
182 | usb_bulk_msg(usb, tx_pipe, devpriv->usb_tx_buf, | 185 | usb_bulk_msg(usb, rx_pipe, devpriv->usb_rx_buf, rx_size, NULL, |
183 | size, NULL, devpriv->ep_tx->bInterval); | 186 | PACKET_TIMEOUT); |
184 | usb_bulk_msg(usb, rx_pipe, devpriv->usb_rx_buf, size, NULL, HZ * 10); | ||
185 | } | 187 | } |
186 | 188 | ||
187 | static int vmk80xx_read_packet(struct comedi_device *dev) | 189 | static int vmk80xx_read_packet(struct comedi_device *dev) |
@@ -200,7 +202,7 @@ static int vmk80xx_read_packet(struct comedi_device *dev) | |||
200 | pipe = usb_rcvintpipe(usb, ep->bEndpointAddress); | 202 | pipe = usb_rcvintpipe(usb, ep->bEndpointAddress); |
201 | return usb_interrupt_msg(usb, pipe, devpriv->usb_rx_buf, | 203 | return usb_interrupt_msg(usb, pipe, devpriv->usb_rx_buf, |
202 | usb_endpoint_maxp(ep), NULL, | 204 | usb_endpoint_maxp(ep), NULL, |
203 | HZ * 10); | 205 | PACKET_TIMEOUT); |
204 | } | 206 | } |
205 | 207 | ||
206 | static int vmk80xx_write_packet(struct comedi_device *dev, int cmd) | 208 | static int vmk80xx_write_packet(struct comedi_device *dev, int cmd) |
@@ -221,7 +223,7 @@ static int vmk80xx_write_packet(struct comedi_device *dev, int cmd) | |||
221 | pipe = usb_sndintpipe(usb, ep->bEndpointAddress); | 223 | pipe = usb_sndintpipe(usb, ep->bEndpointAddress); |
222 | return usb_interrupt_msg(usb, pipe, devpriv->usb_tx_buf, | 224 | return usb_interrupt_msg(usb, pipe, devpriv->usb_tx_buf, |
223 | usb_endpoint_maxp(ep), NULL, | 225 | usb_endpoint_maxp(ep), NULL, |
224 | HZ * 10); | 226 | PACKET_TIMEOUT); |
225 | } | 227 | } |
226 | 228 | ||
227 | static int vmk80xx_reset_device(struct comedi_device *dev) | 229 | static int vmk80xx_reset_device(struct comedi_device *dev) |
@@ -687,12 +689,12 @@ static int vmk80xx_alloc_usb_buffers(struct comedi_device *dev) | |||
687 | struct vmk80xx_private *devpriv = dev->private; | 689 | struct vmk80xx_private *devpriv = dev->private; |
688 | size_t size; | 690 | size_t size; |
689 | 691 | ||
690 | size = usb_endpoint_maxp(devpriv->ep_rx); | 692 | size = max(usb_endpoint_maxp(devpriv->ep_rx), MIN_BUF_SIZE); |
691 | devpriv->usb_rx_buf = kzalloc(size, GFP_KERNEL); | 693 | devpriv->usb_rx_buf = kzalloc(size, GFP_KERNEL); |
692 | if (!devpriv->usb_rx_buf) | 694 | if (!devpriv->usb_rx_buf) |
693 | return -ENOMEM; | 695 | return -ENOMEM; |
694 | 696 | ||
695 | size = usb_endpoint_maxp(devpriv->ep_tx); | 697 | size = max(usb_endpoint_maxp(devpriv->ep_rx), MIN_BUF_SIZE); |
696 | devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL); | 698 | devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL); |
697 | if (!devpriv->usb_tx_buf) | 699 | if (!devpriv->usb_tx_buf) |
698 | return -ENOMEM; | 700 | return -ENOMEM; |