X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fw1%2Fdscore.c;h=284f378bb1b1986b4aa1a1c17d002c1d1c6c1b3c;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=f0f26a438c97723196680af9b0813e2a663c4cd3;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/w1/dscore.c b/drivers/w1/dscore.c index f0f26a438..284f378bb 100644 --- a/drivers/w1/dscore.c +++ b/drivers/w1/dscore.c @@ -35,26 +35,26 @@ MODULE_DEVICE_TABLE(usb, ds_id_table); int ds_probe(struct usb_interface *, const struct usb_device_id *); void ds_disconnect(struct usb_interface *); -inline int ds_touch_bit(struct ds_device *, u8, u8 *); -inline int ds_read_byte(struct ds_device *, u8 *); -inline int ds_read_bit(struct ds_device *, u8 *); -inline int ds_write_byte(struct ds_device *, u8); -inline int ds_write_bit(struct ds_device *, u8); -inline int ds_start_pulse(struct ds_device *, int); -inline int ds_set_speed(struct ds_device *, int); -inline int ds_reset(struct ds_device *, struct ds_status *); -inline int ds_detect(struct ds_device *, struct ds_status *); -inline int ds_stop_pulse(struct ds_device *, int); -inline int ds_send_data(struct ds_device *, unsigned char *, int); -inline int ds_recv_data(struct ds_device *, unsigned char *, int); -inline int ds_recv_status(struct ds_device *, struct ds_status *); -inline struct ds_device * ds_get_device(void); -inline void ds_put_device(struct ds_device *); +int ds_touch_bit(struct ds_device *, u8, u8 *); +int ds_read_byte(struct ds_device *, u8 *); +int ds_read_bit(struct ds_device *, u8 *); +int ds_write_byte(struct ds_device *, u8); +int ds_write_bit(struct ds_device *, u8); +int ds_start_pulse(struct ds_device *, int); +int ds_set_speed(struct ds_device *, int); +int ds_reset(struct ds_device *, struct ds_status *); +int ds_detect(struct ds_device *, struct ds_status *); +int ds_stop_pulse(struct ds_device *, int); +int ds_send_data(struct ds_device *, unsigned char *, int); +int ds_recv_data(struct ds_device *, unsigned char *, int); +int ds_recv_status(struct ds_device *, struct ds_status *); +struct ds_device * ds_get_device(void); +void ds_put_device(struct ds_device *); static inline void ds_dump_status(unsigned char *, unsigned char *, int); -static inline int ds_send_control(struct ds_device *, u16, u16); -static inline int ds_send_control_mode(struct ds_device *, u16, u16); -static inline int ds_send_control_cmd(struct ds_device *, u16, u16); +static int ds_send_control(struct ds_device *, u16, u16); +static int ds_send_control_mode(struct ds_device *, u16, u16); +static int ds_send_control_cmd(struct ds_device *, u16, u16); static struct usb_driver ds_driver = { @@ -503,7 +503,7 @@ int ds_read_byte(struct ds_device *dev, u8 *byte) return 0; } -inline int ds_read_block(struct ds_device *dev, u8 *buf, int len) +int ds_read_block(struct ds_device *dev, u8 *buf, int len) { struct ds_status st; int err; @@ -529,7 +529,7 @@ inline int ds_read_block(struct ds_device *dev, u8 *buf, int len) return err; } -inline int ds_write_block(struct ds_device *dev, u8 *buf, int len) +int ds_write_block(struct ds_device *dev, u8 *buf, int len) { int err; struct ds_status st; @@ -676,7 +676,7 @@ int ds_probe(struct usb_interface *intf, const struct usb_device_id *udev_id) ds_dev->ep[i+1] = endpoint->bEndpointAddress; printk("%d: addr=%x, size=%d, dir=%s, type=%x\n", - i, endpoint->bEndpointAddress, endpoint->wMaxPacketSize, + i, endpoint->bEndpointAddress, le16_to_cpu(endpoint->wMaxPacketSize), (endpoint->bEndpointAddress & USB_DIR_IN)?"IN":"OUT", endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK); } @@ -727,11 +727,16 @@ void ds_disconnect(struct usb_interface *intf) { struct ds_device *dev; - dev = usb_get_intfdata (intf); - usb_set_intfdata (intf, NULL); + dev = usb_get_intfdata(intf); + usb_set_intfdata(intf, NULL); - while(atomic_read(&dev->refcnt)) - schedule_timeout(HZ); + while (atomic_read(&dev->refcnt)) { + printk(KERN_INFO "Waiting for DS to become free: refcnt=%d.\n", + atomic_read(&dev->refcnt)); + + if (msleep_interruptible(1000)) + flush_signals(current); + } usb_put_dev(dev->udev); kfree(dev);