コード例 #1
0
ファイル: af9015.c プロジェクト: beam/linux-tbs-drivers
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;
}
コード例 #2
0
ファイル: af9015.c プロジェクト: ChineseDr/linux
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;
}
コード例 #3
0
ファイル: af9015.c プロジェクト: beam/linux-tbs-drivers
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;
}
コード例 #4
0
ファイル: af9015.c プロジェクト: ChineseDr/linux
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;
}