static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff) { int ret; deb_info("%s: onoff:%d\n", __func__, onoff); if (onoff) ret = af9015_set_reg_bit(adap->dev, 0xd503, 0); else ret = af9015_clear_reg_bit(adap->dev, 0xd503, 0); return ret; }
static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff) { struct dvb_usb_device *d = adap_to_d(adap); int ret; dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff); if (onoff) ret = af9015_set_reg_bit(d, 0xd503, 0); else ret = af9015_clear_reg_bit(d, 0xd503, 0); return ret; }
static int af9015_init_endpoint(struct dvb_usb_device *d) { int ret; u16 frame_size; u8 packet_size; deb_info("%s: USB speed:%d\n", __func__, d->udev->speed); /* Windows driver uses packet count 21 for USB1.1 and 348 for USB2.0. We use smaller - about 1/4 from the original, 5 and 87. */ #define TS_PACKET_SIZE 188 #define TS_USB20_PACKET_COUNT 87 #define TS_USB20_FRAME_SIZE (TS_PACKET_SIZE*TS_USB20_PACKET_COUNT) #define TS_USB11_PACKET_COUNT 5 #define TS_USB11_FRAME_SIZE (TS_PACKET_SIZE*TS_USB11_PACKET_COUNT) #define TS_USB20_MAX_PACKET_SIZE 512 #define TS_USB11_MAX_PACKET_SIZE 64 if (d->udev->speed == USB_SPEED_FULL) { frame_size = TS_USB11_FRAME_SIZE/4; packet_size = TS_USB11_MAX_PACKET_SIZE/4; } else { frame_size = TS_USB20_FRAME_SIZE/4; packet_size = TS_USB20_MAX_PACKET_SIZE/4; } ret = af9015_set_reg_bit(d, 0xd507, 2); /* assert EP4 reset */ if (ret) goto error; ret = af9015_set_reg_bit(d, 0xd50b, 1); /* assert EP5 reset */ if (ret) goto error; ret = af9015_clear_reg_bit(d, 0xdd11, 5); /* disable EP4 */ if (ret) goto error; ret = af9015_clear_reg_bit(d, 0xdd11, 6); /* disable EP5 */ if (ret) goto error; ret = af9015_set_reg_bit(d, 0xdd11, 5); /* enable EP4 */ if (ret) goto error; if (af9015_config.dual_mode) { ret = af9015_set_reg_bit(d, 0xdd11, 6); /* enable EP5 */ if (ret) goto error; } ret = af9015_clear_reg_bit(d, 0xdd13, 5); /* disable EP4 NAK */ if (ret) goto error; if (af9015_config.dual_mode) { ret = af9015_clear_reg_bit(d, 0xdd13, 6); /* disable EP5 NAK */ if (ret) goto error; } /* EP4 xfer length */ ret = af9015_write_reg(d, 0xdd88, frame_size & 0xff); if (ret) goto error; ret = af9015_write_reg(d, 0xdd89, frame_size >> 8); if (ret) goto error; /* EP5 xfer length */ ret = af9015_write_reg(d, 0xdd8a, frame_size & 0xff); if (ret) goto error; ret = af9015_write_reg(d, 0xdd8b, frame_size >> 8); if (ret) goto error; ret = af9015_write_reg(d, 0xdd0c, packet_size); /* EP4 packet size */ if (ret) goto error; ret = af9015_write_reg(d, 0xdd0d, packet_size); /* EP5 packet size */ if (ret) goto error; ret = af9015_clear_reg_bit(d, 0xd507, 2); /* negate EP4 reset */ if (ret) goto error; if (af9015_config.dual_mode) { ret = af9015_clear_reg_bit(d, 0xd50b, 1); /* negate EP5 reset */ if (ret) goto error; } /* enable / disable mp2if2 */ if (af9015_config.dual_mode) ret = af9015_set_reg_bit(d, 0xd50b, 0); else ret = af9015_clear_reg_bit(d, 0xd50b, 0); error: if (ret) err("endpoint init failed:%d", ret); return ret; }
static int af9015_init_endpoint(struct dvb_usb_device *d) { struct af9015_state *state = d_to_priv(d); int ret; u16 frame_size; u8 packet_size; dev_dbg(&d->udev->dev, "%s: USB speed=%d\n", __func__, d->udev->speed); if (d->udev->speed == USB_SPEED_FULL) { frame_size = TS_USB11_FRAME_SIZE/4; packet_size = TS_USB11_MAX_PACKET_SIZE/4; } else { frame_size = TS_USB20_FRAME_SIZE/4; packet_size = TS_USB20_MAX_PACKET_SIZE/4; } ret = af9015_set_reg_bit(d, 0xd507, 2); /* assert EP4 reset */ if (ret) goto error; ret = af9015_set_reg_bit(d, 0xd50b, 1); /* assert EP5 reset */ if (ret) goto error; ret = af9015_clear_reg_bit(d, 0xdd11, 5); /* disable EP4 */ if (ret) goto error; ret = af9015_clear_reg_bit(d, 0xdd11, 6); /* disable EP5 */ if (ret) goto error; ret = af9015_set_reg_bit(d, 0xdd11, 5); /* enable EP4 */ if (ret) goto error; if (state->dual_mode) { ret = af9015_set_reg_bit(d, 0xdd11, 6); /* enable EP5 */ if (ret) goto error; } ret = af9015_clear_reg_bit(d, 0xdd13, 5); /* disable EP4 NAK */ if (ret) goto error; if (state->dual_mode) { ret = af9015_clear_reg_bit(d, 0xdd13, 6); /* disable EP5 NAK */ if (ret) goto error; } /* EP4 xfer length */ ret = af9015_write_reg(d, 0xdd88, frame_size & 0xff); if (ret) goto error; ret = af9015_write_reg(d, 0xdd89, frame_size >> 8); if (ret) goto error; /* EP5 xfer length */ ret = af9015_write_reg(d, 0xdd8a, frame_size & 0xff); if (ret) goto error; ret = af9015_write_reg(d, 0xdd8b, frame_size >> 8); if (ret) goto error; ret = af9015_write_reg(d, 0xdd0c, packet_size); /* EP4 packet size */ if (ret) goto error; ret = af9015_write_reg(d, 0xdd0d, packet_size); /* EP5 packet size */ if (ret) goto error; ret = af9015_clear_reg_bit(d, 0xd507, 2); /* negate EP4 reset */ if (ret) goto error; if (state->dual_mode) { ret = af9015_clear_reg_bit(d, 0xd50b, 1); /* negate EP5 reset */ if (ret) goto error; } /* enable / disable mp2if2 */ if (state->dual_mode) ret = af9015_set_reg_bit(d, 0xd50b, 0); else ret = af9015_clear_reg_bit(d, 0xd50b, 0); error: if (ret) dev_err(&d->udev->dev, "%s: endpoint init failed=%d\n", KBUILD_MODNAME, ret); return ret; }