|
@@ -474,10 +474,6 @@ static int af9015_read_config(struct dvb_usb_device *d)
|
|
|
state->dual_mode = val;
|
|
|
dev_dbg(&intf->dev, "ts mode %02x\n", state->dual_mode);
|
|
|
|
|
|
- /* disable 2nd adapter because we don't have PID-filters */
|
|
|
- if (d->udev->speed == USB_SPEED_FULL)
|
|
|
- state->dual_mode = 0;
|
|
|
-
|
|
|
state->af9013_i2c_addr[0] = AF9015_I2C_DEMOD;
|
|
|
|
|
|
if (state->dual_mode) {
|
|
@@ -1045,43 +1041,28 @@ static int af9015_tuner_attach(struct dvb_usb_adapter *adap)
|
|
|
|
|
|
static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
|
|
|
{
|
|
|
- struct dvb_usb_device *d = adap_to_d(adap);
|
|
|
- struct usb_interface *intf = d->intf;
|
|
|
+ struct af9015_state *state = adap_to_priv(adap);
|
|
|
+ struct af9013_platform_data *pdata = &state->af9013_pdata[adap->id];
|
|
|
int ret;
|
|
|
|
|
|
- dev_dbg(&intf->dev, "onoff %d\n", onoff);
|
|
|
-
|
|
|
- if (onoff)
|
|
|
- ret = af9015_set_reg_bit(d, 0xd503, 0);
|
|
|
- else
|
|
|
- ret = af9015_clear_reg_bit(d, 0xd503, 0);
|
|
|
+ mutex_lock(&state->fe_mutex);
|
|
|
+ ret = pdata->pid_filter_ctrl(adap->fe[0], onoff);
|
|
|
+ mutex_unlock(&state->fe_mutex);
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
-static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
|
|
|
- int onoff)
|
|
|
+static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index,
|
|
|
+ u16 pid, int onoff)
|
|
|
{
|
|
|
- struct dvb_usb_device *d = adap_to_d(adap);
|
|
|
- struct usb_interface *intf = d->intf;
|
|
|
+ struct af9015_state *state = adap_to_priv(adap);
|
|
|
+ struct af9013_platform_data *pdata = &state->af9013_pdata[adap->id];
|
|
|
int ret;
|
|
|
- u8 idx;
|
|
|
-
|
|
|
- dev_dbg(&intf->dev, "index %d, pid %04x, onoff %d\n",
|
|
|
- index, pid, onoff);
|
|
|
|
|
|
- ret = af9015_write_reg(d, 0xd505, (pid & 0xff));
|
|
|
- if (ret)
|
|
|
- goto error;
|
|
|
-
|
|
|
- ret = af9015_write_reg(d, 0xd506, (pid >> 8));
|
|
|
- if (ret)
|
|
|
- goto error;
|
|
|
-
|
|
|
- idx = ((index & 0x1f) | (1 << 5));
|
|
|
- ret = af9015_write_reg(d, 0xd504, idx);
|
|
|
+ mutex_lock(&state->fe_mutex);
|
|
|
+ ret = pdata->pid_filter(adap->fe[0], index, pid, onoff);
|
|
|
+ mutex_unlock(&state->fe_mutex);
|
|
|
|
|
|
-error:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
@@ -1448,6 +1429,12 @@ static struct dvb_usb_device_properties af9015_props = {
|
|
|
|
|
|
.stream = DVB_USB_STREAM_BULK(0x84, 8, TS_USB20_FRAME_SIZE),
|
|
|
}, {
|
|
|
+ .caps = DVB_USB_ADAP_HAS_PID_FILTER |
|
|
|
+ DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF,
|
|
|
+ .pid_filter_count = 32,
|
|
|
+ .pid_filter = af9015_pid_filter,
|
|
|
+ .pid_filter_ctrl = af9015_pid_filter_ctrl,
|
|
|
+
|
|
|
.stream = DVB_USB_STREAM_BULK(0x85, 8, TS_USB20_FRAME_SIZE),
|
|
|
},
|
|
|
},
|