Commit ba2d559b authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab

media: af9015: use af9013 demod pid filters

PID filters are moved to af9013 demod driver as those are property of
demod. As pid filters are now implemented correctly by demod driver,
we could enable pid filter support for possible slave demod too on
dual tuner configuration.
Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 83d6b7c3
...@@ -474,10 +474,6 @@ static int af9015_read_config(struct dvb_usb_device *d) ...@@ -474,10 +474,6 @@ static int af9015_read_config(struct dvb_usb_device *d)
state->dual_mode = val; state->dual_mode = val;
dev_dbg(&intf->dev, "ts mode %02x\n", state->dual_mode); 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; state->af9013_i2c_addr[0] = AF9015_I2C_DEMOD;
if (state->dual_mode) { if (state->dual_mode) {
...@@ -1045,43 +1041,28 @@ static int af9015_tuner_attach(struct dvb_usb_adapter *adap) ...@@ -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) static int af9015_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
{ {
struct dvb_usb_device *d = adap_to_d(adap); struct af9015_state *state = adap_to_priv(adap);
struct usb_interface *intf = d->intf; struct af9013_platform_data *pdata = &state->af9013_pdata[adap->id];
int ret; int ret;
dev_dbg(&intf->dev, "onoff %d\n", onoff); mutex_lock(&state->fe_mutex);
ret = pdata->pid_filter_ctrl(adap->fe[0], onoff);
if (onoff) mutex_unlock(&state->fe_mutex);
ret = af9015_set_reg_bit(d, 0xd503, 0);
else
ret = af9015_clear_reg_bit(d, 0xd503, 0);
return ret; return ret;
} }
static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid, static int af9015_pid_filter(struct dvb_usb_adapter *adap, int index,
int onoff) u16 pid, int onoff)
{ {
struct dvb_usb_device *d = adap_to_d(adap); struct af9015_state *state = adap_to_priv(adap);
struct usb_interface *intf = d->intf; struct af9013_platform_data *pdata = &state->af9013_pdata[adap->id];
int ret; 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)); mutex_lock(&state->fe_mutex);
if (ret) ret = pdata->pid_filter(adap->fe[0], index, pid, onoff);
goto error; mutex_unlock(&state->fe_mutex);
ret = af9015_write_reg(d, 0xd506, (pid >> 8));
if (ret)
goto error;
idx = ((index & 0x1f) | (1 << 5));
ret = af9015_write_reg(d, 0xd504, idx);
error:
return ret; return ret;
} }
...@@ -1448,6 +1429,12 @@ static struct dvb_usb_device_properties af9015_props = { ...@@ -1448,6 +1429,12 @@ static struct dvb_usb_device_properties af9015_props = {
.stream = DVB_USB_STREAM_BULK(0x84, 8, TS_USB20_FRAME_SIZE), .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), .stream = DVB_USB_STREAM_BULK(0x85, 8, TS_USB20_FRAME_SIZE),
}, },
}, },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment