Lines Matching refs:dev

168 static int ds_send_control_cmd(struct ds_device *dev, u16 value, u16 index)  in ds_send_control_cmd()  argument
172 err = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, dev->ep[EP_CONTROL]), in ds_send_control_cmd()
175 dev_err(&dev->udev->dev, in ds_send_control_cmd()
184 static int ds_send_control_mode(struct ds_device *dev, u16 value, u16 index) in ds_send_control_mode() argument
188 err = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, dev->ep[EP_CONTROL]), in ds_send_control_mode()
191 dev_err(&dev->udev->dev, in ds_send_control_mode()
200 static int ds_send_control(struct ds_device *dev, u16 value, u16 index) in ds_send_control() argument
204 err = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, dev->ep[EP_CONTROL]), in ds_send_control()
207 dev_err(&dev->udev->dev, in ds_send_control()
218 struct device *dev = &ds_dev->udev->dev; in ds_dump_status() local
221 dev_info(dev, "ep_status=0x%x, count=%d, status=%*phC", in ds_dump_status()
225 dev_dbg(dev, "enable flag: 0x%02x", buf[0]); in ds_dump_status()
226 dev_dbg(dev, "1-wire speed: 0x%02x", buf[1]); in ds_dump_status()
227 dev_dbg(dev, "strong pullup duration: 0x%02x", buf[2]); in ds_dump_status()
228 dev_dbg(dev, "programming pulse duration: 0x%02x", buf[3]); in ds_dump_status()
229 dev_dbg(dev, "pulldown slew rate control: 0x%02x", buf[4]); in ds_dump_status()
230 dev_dbg(dev, "write-1 low time: 0x%02x", buf[5]); in ds_dump_status()
231 dev_dbg(dev, "data sample offset/write-0 recovery time: 0x%02x", buf[6]); in ds_dump_status()
232 dev_dbg(dev, "reserved (test register): 0x%02x", buf[7]); in ds_dump_status()
233 dev_dbg(dev, "device status flags: 0x%02x", buf[8]); in ds_dump_status()
234 dev_dbg(dev, "communication command byte 1: 0x%02x", buf[9]); in ds_dump_status()
235 dev_dbg(dev, "communication command byte 2: 0x%02x", buf[10]); in ds_dump_status()
236 dev_dbg(dev, "communication command buffer status: 0x%02x", buf[11]); in ds_dump_status()
237 dev_dbg(dev, "1-wire data output buffer status: 0x%02x", buf[12]); in ds_dump_status()
238 dev_dbg(dev, "1-wire data input buffer status: 0x%02x", buf[13]); in ds_dump_status()
239 dev_dbg(dev, "reserved: 0x%02x", buf[14]); in ds_dump_status()
240 dev_dbg(dev, "reserved: 0x%02x", buf[15]); in ds_dump_status()
245 dev_dbg(dev, "New device detect.\n"); in ds_dump_status()
248 dev_dbg(dev, "Result Register Value: 0x%02x", buf[i]); in ds_dump_status()
250 dev_dbg(dev, "NRS: Reset no presence or ...\n"); in ds_dump_status()
252 dev_dbg(dev, "SH: short on reset or set path\n"); in ds_dump_status()
254 dev_dbg(dev, "APP: alarming presence on reset\n"); in ds_dump_status()
256 dev_dbg(dev, "VPP: 12V expected not seen\n"); in ds_dump_status()
258 dev_dbg(dev, "CMP: compare error\n"); in ds_dump_status()
260 dev_dbg(dev, "CRC: CRC error detected\n"); in ds_dump_status()
262 dev_dbg(dev, "RDP: redirected page\n"); in ds_dump_status()
264 dev_dbg(dev, "EOS: end of search error\n"); in ds_dump_status()
268 static int ds_recv_status(struct ds_device *dev, struct ds_status *st) in ds_recv_status() argument
276 err = usb_interrupt_msg(dev->udev, in ds_recv_status()
277 usb_rcvintpipe(dev->udev, in ds_recv_status()
278 dev->ep[EP_STATUS]), in ds_recv_status()
279 dev->st_buf, sizeof(dev->st_buf), in ds_recv_status()
282 dev_err(&dev->udev->dev, in ds_recv_status()
284 dev->ep[EP_STATUS], err); in ds_recv_status()
289 memcpy(st, dev->st_buf, sizeof(*st)); in ds_recv_status()
294 static void ds_reset_device(struct ds_device *dev) in ds_reset_device() argument
296 ds_send_control_cmd(dev, CTL_RESET_DEVICE, 0); in ds_reset_device()
300 if (ds_send_control_mode(dev, MOD_PULSE_EN, PULSE_SPUE)) in ds_reset_device()
301 dev_err(&dev->udev->dev, in ds_reset_device()
304 if (dev->spu_sleep) { in ds_reset_device()
306 u8 del = dev->spu_sleep>>4; in ds_reset_device()
308 if (ds_send_control(dev, COMM_SET_DURATION | COMM_IM, del)) in ds_reset_device()
309 dev_err(&dev->udev->dev, in ds_reset_device()
314 static int ds_recv_data(struct ds_device *dev, unsigned char *buf, int size) in ds_recv_data() argument
328 err = usb_bulk_msg(dev->udev, usb_rcvbulkpipe(dev->udev, dev->ep[EP_DATA_IN]), in ds_recv_data()
333 dev_info(&dev->udev->dev, "Clearing ep0x%x.\n", dev->ep[EP_DATA_IN]); in ds_recv_data()
334 usb_clear_halt(dev->udev, usb_rcvbulkpipe(dev->udev, dev->ep[EP_DATA_IN])); in ds_recv_data()
337 recv_len = ds_recv_status(dev, NULL); in ds_recv_data()
339 ds_dump_status(dev, dev->st_buf, recv_len); in ds_recv_data()
357 static int ds_send_data(struct ds_device *dev, unsigned char *buf, int len) in ds_send_data() argument
362 …err = usb_bulk_msg(dev->udev, usb_sndbulkpipe(dev->udev, dev->ep[EP_DATA_OUT]), buf, len, &count, … in ds_send_data()
364 dev_err(&dev->udev->dev, "Failed to write 1-wire data to ep0x%x: " in ds_send_data()
365 "err=%d.\n", dev->ep[EP_DATA_OUT], err); in ds_send_data()
374 int ds_stop_pulse(struct ds_device *dev, int limit)
380 err = ds_send_control(dev, CTL_HALT_EXE_IDLE, 0);
383 err = ds_send_control(dev, CTL_RESUME_EXE, 0);
386 err = ds_recv_status(dev, &st);
391 err = ds_send_control_mode(dev, MOD_PULSE_EN, 0);
400 int ds_detect(struct ds_device *dev, struct ds_status *st)
404 err = ds_send_control_cmd(dev, CTL_RESET_DEVICE, 0);
408 err = ds_send_control(dev, COMM_SET_DURATION | COMM_IM, 0);
412 err = ds_send_control(dev, COMM_SET_DURATION | COMM_IM | COMM_TYPE, 0x40);
416 err = ds_send_control_mode(dev, MOD_PULSE_EN, PULSE_PROG);
420 err = ds_dump_status(dev, st);
427 static int ds_wait_status(struct ds_device *dev, struct ds_status *st) in ds_wait_status() argument
433 err = ds_recv_status(dev, st); in ds_wait_status()
437 printk("0x%x: count=%d, status: ", dev->ep[EP_STATUS], err); in ds_wait_status()
439 printk("%02x ", dev->st_buf[i]); in ds_wait_status()
446 dev_info(&dev->udev->dev, "Resetting device after ST_EPOF.\n"); in ds_wait_status()
447 ds_reset_device(dev); in ds_wait_status()
457 ds_dump_status(dev, dev->st_buf, err); in ds_wait_status()
469 static int ds_reset(struct ds_device *dev) in ds_reset() argument
482 err = ds_send_control(dev, COMM_1_WIRE_RESET | COMM_IM, SPEED_NORMAL); in ds_reset()
490 static int ds_set_speed(struct ds_device *dev, int speed)
502 err = ds_send_control_mode(dev, MOD_1WIRE_SPEED, speed);
510 static int ds_set_pullup(struct ds_device *dev, int delay) in ds_set_pullup() argument
518 dev->spu_bit = delay ? COMM_SPU : 0; in ds_set_pullup()
524 if (delay == 0 || ms == dev->spu_sleep) in ds_set_pullup()
527 err = ds_send_control(dev, COMM_SET_DURATION | COMM_IM, del); in ds_set_pullup()
531 dev->spu_sleep = ms; in ds_set_pullup()
536 static int ds_touch_bit(struct ds_device *dev, u8 bit, u8 *tbit) in ds_touch_bit() argument
541 err = ds_send_control(dev, COMM_BIT_IO | COMM_IM | (bit ? COMM_D : 0), in ds_touch_bit()
546 ds_wait_status(dev, &st); in ds_touch_bit()
548 err = ds_recv_data(dev, tbit, sizeof(*tbit)); in ds_touch_bit()
556 static int ds_write_bit(struct ds_device *dev, u8 bit)
565 err = ds_send_control(dev, COMM_BIT_IO | COMM_IM | COMM_ICP |
570 ds_wait_status(dev, &st);
576 static int ds_write_byte(struct ds_device *dev, u8 byte) in ds_write_byte() argument
581 err = ds_send_control(dev, COMM_BYTE_IO | COMM_IM | dev->spu_bit, byte); in ds_write_byte()
585 if (dev->spu_bit) in ds_write_byte()
586 msleep(dev->spu_sleep); in ds_write_byte()
588 err = ds_wait_status(dev, &st); in ds_write_byte()
592 err = ds_recv_data(dev, &dev->byte_buf, 1); in ds_write_byte()
596 return !(byte == dev->byte_buf); in ds_write_byte()
599 static int ds_read_byte(struct ds_device *dev, u8 *byte) in ds_read_byte() argument
604 err = ds_send_control(dev, COMM_BYTE_IO | COMM_IM, 0xff); in ds_read_byte()
608 ds_wait_status(dev, &st); in ds_read_byte()
610 err = ds_recv_data(dev, byte, sizeof(*byte)); in ds_read_byte()
617 static int ds_read_block(struct ds_device *dev, u8 *buf, int len) in ds_read_block() argument
627 err = ds_send_data(dev, buf, len); in ds_read_block()
631 err = ds_send_control(dev, COMM_BLOCK_IO | COMM_IM, len); in ds_read_block()
635 ds_wait_status(dev, &st); in ds_read_block()
638 err = ds_recv_data(dev, buf, len); in ds_read_block()
643 static int ds_write_block(struct ds_device *dev, u8 *buf, int len) in ds_write_block() argument
648 err = ds_send_data(dev, buf, len); in ds_write_block()
652 err = ds_send_control(dev, COMM_BLOCK_IO | COMM_IM | dev->spu_bit, len); in ds_write_block()
656 if (dev->spu_bit) in ds_write_block()
657 msleep(dev->spu_sleep); in ds_write_block()
659 ds_wait_status(dev, &st); in ds_write_block()
661 err = ds_recv_data(dev, buf, len); in ds_write_block()
679 struct ds_device *dev = data; in ds9490r_search() local
714 if (ds_send_data(dev, (u8 *)&master->search_id, 8) < 0) in ds9490r_search()
724 if (ds_send_control(dev, value, index) < 0) in ds9490r_search()
730 err = ds_recv_status(dev, &st); in ds9490r_search()
743 err = ds_recv_data(dev, (u8 *)buf, bufsize); in ds9490r_search()
775 dev_info(&dev->udev->dev, "%s: max_slave_count %d reached, " in ds9490r_search()
795 static int ds_match_access(struct ds_device *dev, u64 init)
800 err = ds_send_data(dev, (unsigned char *)&init, sizeof(init));
804 ds_wait_status(dev, &st);
806 err = ds_send_control(dev, COMM_MATCH_ACCESS | COMM_IM | COMM_RST, 0x0055);
810 ds_wait_status(dev, &st);
815 static int ds_set_path(struct ds_device *dev, u64 init)
824 err = ds_send_data(dev, buf, sizeof(buf));
828 ds_wait_status(dev, &st);
830 err = ds_send_control(dev, COMM_SET_PATH | COMM_IM | COMM_RST, 0);
834 ds_wait_status(dev, &st);
843 struct ds_device *dev = data; in ds9490r_touch_bit() local
845 if (ds_touch_bit(dev, bit, &dev->byte_buf)) in ds9490r_touch_bit()
848 return dev->byte_buf; in ds9490r_touch_bit()
854 struct ds_device *dev = data;
856 ds_write_bit(dev, bit);
861 struct ds_device *dev = data;
864 err = ds_touch_bit(dev, 1, &dev->byte_buf);
868 return dev->byte_buf & 1;
874 struct ds_device *dev = data; in ds9490r_write_byte() local
876 ds_write_byte(dev, byte); in ds9490r_write_byte()
881 struct ds_device *dev = data; in ds9490r_read_byte() local
884 err = ds_read_byte(dev, &dev->byte_buf); in ds9490r_read_byte()
888 return dev->byte_buf; in ds9490r_read_byte()
893 struct ds_device *dev = data; in ds9490r_write_block() local
903 ds_write_block(dev, tbuf, len); in ds9490r_write_block()
910 struct ds_device *dev = data; in ds9490r_read_block() local
921 err = ds_read_block(dev, tbuf, len); in ds9490r_read_block()
932 struct ds_device *dev = data; in ds9490r_reset() local
935 err = ds_reset(dev); in ds9490r_reset()
944 struct ds_device *dev = data; in ds9490r_set_pullup() local
946 if (ds_set_pullup(dev, delay)) in ds9490r_set_pullup()
952 static int ds_w1_init(struct ds_device *dev) in ds_w1_init() argument
954 memset(&dev->master, 0, sizeof(struct w1_bus_master)); in ds_w1_init()
966 ds_reset_device(dev); in ds_w1_init()
968 dev->master.data = dev; in ds_w1_init()
969 dev->master.touch_bit = &ds9490r_touch_bit; in ds_w1_init()
979 dev->master.read_byte = &ds9490r_read_byte; in ds_w1_init()
980 dev->master.write_byte = &ds9490r_write_byte; in ds_w1_init()
981 dev->master.read_block = &ds9490r_read_block; in ds_w1_init()
982 dev->master.write_block = &ds9490r_write_block; in ds_w1_init()
983 dev->master.reset_bus = &ds9490r_reset; in ds_w1_init()
984 dev->master.set_pullup = &ds9490r_set_pullup; in ds_w1_init()
985 dev->master.search = &ds9490r_search; in ds_w1_init()
987 return w1_add_master_device(&dev->master); in ds_w1_init()
990 static void ds_w1_fini(struct ds_device *dev) in ds_w1_fini() argument
992 w1_remove_master_device(&dev->master); in ds_w1_fini()
1001 struct ds_device *dev; in ds_probe() local
1004 dev = kzalloc(sizeof(struct ds_device), GFP_KERNEL); in ds_probe()
1005 if (!dev) in ds_probe()
1008 dev->udev = usb_get_dev(udev); in ds_probe()
1009 if (!dev->udev) { in ds_probe()
1013 memset(dev->ep, 0, sizeof(dev->ep)); in ds_probe()
1015 usb_set_intfdata(intf, dev); in ds_probe()
1017 err = usb_reset_configuration(dev->udev); in ds_probe()
1019 dev_err(&dev->udev->dev, in ds_probe()
1026 err = usb_set_interface(dev->udev, in ds_probe()
1029 dev_err(&dev->udev->dev, "Failed to set alternative setting %d " in ds_probe()
1037 dev_err(&dev->udev->dev, "Num endpoints=%d. It is not DS9490R.\n", in ds_probe()
1050 dev->ep[i+1] = endpoint->bEndpointAddress; in ds_probe()
1059 err = ds_w1_init(dev); in ds_probe()
1064 list_add_tail(&dev->ds_entry, &ds_devices); in ds_probe()
1071 usb_put_dev(dev->udev); in ds_probe()
1073 kfree(dev); in ds_probe()
1079 struct ds_device *dev; in ds_disconnect() local
1081 dev = usb_get_intfdata(intf); in ds_disconnect()
1082 if (!dev) in ds_disconnect()
1086 list_del(&dev->ds_entry); in ds_disconnect()
1089 ds_w1_fini(dev); in ds_disconnect()
1093 usb_put_dev(dev->udev); in ds_disconnect()
1094 kfree(dev); in ds_disconnect()