Lines Matching +full:remote +full:- +full:pid
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* DVB USB compliant Linux driver for the TwinhanDTV StarBox USB2.0 DVB-S
12 * see Documentation/driver-api/media/drivers/dvb-usb.rst for more information
20 MODULE_PARM_DESC(debug, "set debugging level (1=info,xfer=2,rc=4 (or-able))." DVB_USB_DEBUG_STATUS);
35 ret = usb_control_msg(d->udev, in vp702x_usb_in_op_unlocked()
36 usb_rcvctrlpipe(d->udev, 0), in vp702x_usb_in_op_unlocked()
44 ret = -EIO; in vp702x_usb_in_op_unlocked()
60 mutex_lock(&d->usb_mutex); in vp702x_usb_in_op()
62 mutex_unlock(&d->usb_mutex); in vp702x_usb_in_op()
74 if ((ret = usb_control_msg(d->udev, in vp702x_usb_out_op_unlocked()
75 usb_sndctrlpipe(d->udev,0), in vp702x_usb_out_op_unlocked()
81 return -EIO; in vp702x_usb_out_op_unlocked()
91 mutex_lock(&d->usb_mutex); in vp702x_usb_out_op()
93 mutex_unlock(&d->usb_mutex); in vp702x_usb_out_op()
102 if ((ret = mutex_lock_interruptible(&d->usb_mutex))) in vp702x_usb_inout_op()
109 mutex_unlock(&d->usb_mutex); in vp702x_usb_inout_op()
116 struct vp702x_device_state *st = d->priv; in vp702x_usb_inout_cmd()
121 ret = mutex_lock_interruptible(&st->buf_mutex); in vp702x_usb_inout_cmd()
125 if (buflen > st->buf_len) { in vp702x_usb_inout_cmd()
128 mutex_unlock(&st->buf_mutex); in vp702x_usb_inout_cmd()
129 return -ENOMEM; in vp702x_usb_inout_cmd()
132 kfree(st->buf); in vp702x_usb_inout_cmd()
133 st->buf = buf; in vp702x_usb_inout_cmd()
134 st->buf_len = buflen; in vp702x_usb_inout_cmd()
136 buf = st->buf; in vp702x_usb_inout_cmd()
147 mutex_unlock(&st->buf_mutex); in vp702x_usb_inout_cmd()
155 struct vp702x_device_state *st = adap->dev->priv; in vp702x_set_pld_mode()
158 mutex_lock(&st->buf_mutex); in vp702x_set_pld_mode()
160 buf = st->buf; in vp702x_set_pld_mode()
163 ret = vp702x_usb_in_op(adap->dev, 0xe0, (bypass << 8) | 0x0e, in vp702x_set_pld_mode()
165 mutex_unlock(&st->buf_mutex); in vp702x_set_pld_mode()
172 struct vp702x_device_state *st = adap->dev->priv; in vp702x_set_pld_state()
175 mutex_lock(&st->buf_mutex); in vp702x_set_pld_state()
177 buf = st->buf; in vp702x_set_pld_state()
179 ret = vp702x_usb_in_op(adap->dev, 0xe0, (state << 8) | 0x0f, in vp702x_set_pld_state()
182 mutex_unlock(&st->buf_mutex); in vp702x_set_pld_state()
187 static int vp702x_set_pid(struct dvb_usb_adapter *adap, u16 pid, u8 id, int onoff) in vp702x_set_pid() argument
189 struct vp702x_adapter_state *st = adap->priv; in vp702x_set_pid()
190 struct vp702x_device_state *dst = adap->dev->priv; in vp702x_set_pid()
194 st->pid_filter_state |= (1 << id); in vp702x_set_pid()
196 st->pid_filter_state &= ~(1 << id); in vp702x_set_pid()
197 pid = 0xffff; in vp702x_set_pid()
202 vp702x_set_pld_state(adap, st->pid_filter_state); in vp702x_set_pid()
204 mutex_lock(&dst->buf_mutex); in vp702x_set_pid()
206 buf = dst->buf; in vp702x_set_pid()
208 vp702x_usb_in_op(adap->dev, 0xe0, (((pid >> 8) & 0xff) << 8) | (id), 0, buf, 16); in vp702x_set_pid()
209 vp702x_usb_in_op(adap->dev, 0xe0, (((pid ) & 0xff) << 8) | (id+1), 0, buf, 16); in vp702x_set_pid()
211 mutex_unlock(&dst->buf_mutex); in vp702x_set_pid()
219 struct vp702x_adapter_state *st = adap->priv; in vp702x_init_pid_filter()
220 struct vp702x_device_state *dst = adap->dev->priv; in vp702x_init_pid_filter()
224 st->pid_filter_count = 8; in vp702x_init_pid_filter()
225 st->pid_filter_can_bypass = 1; in vp702x_init_pid_filter()
226 st->pid_filter_state = 0x00; in vp702x_init_pid_filter()
230 for (i = 0; i < st->pid_filter_count; i++) in vp702x_init_pid_filter()
233 mutex_lock(&dst->buf_mutex); in vp702x_init_pid_filter()
234 b = dst->buf; in vp702x_init_pid_filter()
236 vp702x_usb_in_op(adap->dev, 0xb5, 3, 0, b, 10); in vp702x_init_pid_filter()
237 vp702x_usb_in_op(adap->dev, 0xb5, 0, 0, b, 10); in vp702x_init_pid_filter()
238 vp702x_usb_in_op(adap->dev, 0xb5, 1, 0, b, 10); in vp702x_init_pid_filter()
239 mutex_unlock(&dst->buf_mutex); in vp702x_init_pid_filter()
250 /* keys for the enclosed remote control */
256 /* remote control stuff (does not work with my box) */
259 /* remove the following return to enabled remote querying */ in vp702x_rc_query()
266 return -ENOMEM; in vp702x_rc_query()
270 deb_rc("remote query key: %x %d\n",key[1],key[1]); in vp702x_rc_query()
295 struct vp702x_device_state *st = d->priv; in vp702x_read_mac_addr()
297 mutex_lock(&st->buf_mutex); in vp702x_read_mac_addr()
298 buf = st->buf; in vp702x_read_mac_addr()
301 &buf[i - 6], 1); in vp702x_read_mac_addr()
308 mutex_unlock(&st->buf_mutex); in vp702x_read_mac_addr()
316 vp702x_usb_out_op(adap->dev, SET_TUNER_POWER_REQ, 0, 7, NULL, 0); in vp702x_frontend_attach()
318 if (vp702x_usb_inout_cmd(adap->dev, GET_SYSTEM_STRING, NULL, 0, in vp702x_frontend_attach()
320 return -EIO; in vp702x_frontend_attach()
327 adap->fe_adap[0].fe = vp702x_fe_attach(adap->dev); in vp702x_frontend_attach()
328 vp702x_usb_out_op(adap->dev, SET_TUNER_POWER_REQ, 1, 7, NULL, 0); in vp702x_frontend_attach()
347 st = d->priv; in vp702x_usb_probe()
348 st->buf_len = 16; in vp702x_usb_probe()
349 st->buf = kmalloc(st->buf_len, GFP_KERNEL); in vp702x_usb_probe()
350 if (!st->buf) { in vp702x_usb_probe()
351 ret = -ENOMEM; in vp702x_usb_probe()
355 mutex_init(&st->buf_mutex); in vp702x_usb_probe()
365 struct vp702x_device_state *st = d->priv; in vp702x_usb_disconnect()
366 mutex_lock(&st->buf_mutex); in vp702x_usb_disconnect()
367 kfree(st->buf); in vp702x_usb_disconnect()
368 mutex_unlock(&st->buf_mutex); in vp702x_usb_disconnect()
389 .firmware = "dvb-usb-vp702x-02.fw",
404 /* parameter for the MPEG2-data transfer */
430 { .name = "TwinhanDTV StarBox DVB-S USB2.0 (VP7021)",
434 /* { .name = "TwinhanDTV StarBox DVB-S USB2.0 (VP7020)",
453 MODULE_DESCRIPTION("Driver for Twinhan StarBox DVB-S USB2.0 and clones");