forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/drivers/media/usb/dvb-usb-v2/dvbsky.c
....@@ -1,17 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * Driver for DVBSky USB2.0 receiver
34 *
45 * Copyright (C) 2013 Max nibble <nibble.max@gmail.com>
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
156 */
167
178 #include "dvb_usb.h"
....@@ -31,7 +22,6 @@
3122 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
3223
3324 struct dvbsky_state {
34
- struct mutex stream_mutex;
3525 u8 ibuf[DVBSKY_BUF_LEN];
3626 u8 obuf[DVBSKY_BUF_LEN];
3727 u8 last_lock;
....@@ -69,17 +59,19 @@
6959 static int dvbsky_stream_ctrl(struct dvb_usb_device *d, u8 onoff)
7060 {
7161 struct dvbsky_state *state = d_to_priv(d);
62
+ static const u8 obuf_pre[3] = { 0x37, 0, 0 };
63
+ static const u8 obuf_post[3] = { 0x36, 3, 0 };
7264 int ret;
73
- u8 obuf_pre[3] = { 0x37, 0, 0 };
74
- u8 obuf_post[3] = { 0x36, 3, 0 };
7565
76
- mutex_lock(&state->stream_mutex);
77
- ret = dvbsky_usb_generic_rw(d, obuf_pre, 3, NULL, 0);
66
+ mutex_lock(&d->usb_mutex);
67
+ memcpy(state->obuf, obuf_pre, 3);
68
+ ret = dvb_usbv2_generic_write_locked(d, state->obuf, 3);
7869 if (!ret && onoff) {
7970 msleep(20);
80
- ret = dvbsky_usb_generic_rw(d, obuf_post, 3, NULL, 0);
71
+ memcpy(state->obuf, obuf_post, 3);
72
+ ret = dvb_usbv2_generic_write_locked(d, state->obuf, 3);
8173 }
82
- mutex_unlock(&state->stream_mutex);
74
+ mutex_unlock(&d->usb_mutex);
8375 return ret;
8476 }
8577
....@@ -100,8 +92,6 @@
10092 obuf[1] = gport;
10193 obuf[2] = value;
10294 ret = dvbsky_usb_generic_rw(d, obuf, 3, ibuf, 1);
103
- if (ret)
104
- dev_err(&d->udev->dev, "failed=%d\n", ret);
10595 return ret;
10696 }
10797
....@@ -139,8 +129,6 @@
139129 obuf[3] = msg[0].addr;
140130 ret = dvbsky_usb_generic_rw(d, obuf, 4,
141131 ibuf, msg[0].len + 1);
142
- if (ret)
143
- dev_err(&d->udev->dev, "failed=%d\n", ret);
144132 if (!ret)
145133 memcpy(msg[0].buf, &ibuf[1], msg[0].len);
146134 } else {
....@@ -151,8 +139,6 @@
151139 memcpy(&obuf[3], msg[0].buf, msg[0].len);
152140 ret = dvbsky_usb_generic_rw(d, obuf,
153141 msg[0].len + 3, ibuf, 1);
154
- if (ret)
155
- dev_err(&d->udev->dev, "failed=%d\n", ret);
156142 }
157143 } else {
158144 if ((msg[0].len > 60) || (msg[1].len > 60)) {
....@@ -170,9 +156,6 @@
170156 memcpy(&obuf[4], msg[0].buf, msg[0].len);
171157 ret = dvbsky_usb_generic_rw(d, obuf,
172158 msg[0].len + 4, ibuf, msg[1].len + 1);
173
- if (ret)
174
- dev_err(&d->udev->dev, "failed=%d\n", ret);
175
-
176159 if (!ret)
177160 memcpy(msg[1].buf, &ibuf[1], msg[1].len);
178161 }
....@@ -201,8 +184,6 @@
201184
202185 obuf[0] = 0x10;
203186 ret = dvbsky_usb_generic_rw(d, obuf, 1, ibuf, 2);
204
- if (ret)
205
- dev_err(&d->udev->dev, "failed=%d\n", ret);
206187 if (ret == 0)
207188 code = (ibuf[0] << 8) | ibuf[1];
208189 if (code != 0xffff) {
....@@ -560,6 +541,8 @@
560541 si2168_config.i2c_adapter = &i2c_adapter;
561542 si2168_config.fe = &adap->fe[0];
562543 si2168_config.ts_mode = SI2168_TS_PARALLEL;
544
+ if (le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_MYGICA_T230C2)
545
+ si2168_config.ts_mode |= SI2168_TS_CLK_MANUAL;
563546 si2168_config.ts_clock_inv = 1;
564547
565548 state->i2c_client_demod = dvb_module_probe("si2168", NULL,
....@@ -570,11 +553,19 @@
570553
571554 /* attach tuner */
572555 si2157_config.fe = adap->fe[0];
573
- si2157_config.if_port = 0;
574
-
575
- state->i2c_client_tuner = dvb_module_probe("si2157", "si2141",
576
- i2c_adapter,
577
- 0x60, &si2157_config);
556
+ if (le16_to_cpu(d->udev->descriptor.idProduct) == USB_PID_MYGICA_T230) {
557
+ si2157_config.if_port = 1;
558
+ state->i2c_client_tuner = dvb_module_probe("si2157", NULL,
559
+ i2c_adapter,
560
+ 0x60,
561
+ &si2157_config);
562
+ } else {
563
+ si2157_config.if_port = 0;
564
+ state->i2c_client_tuner = dvb_module_probe("si2157", "si2141",
565
+ i2c_adapter,
566
+ 0x60,
567
+ &si2157_config);
568
+ }
578569 if (!state->i2c_client_tuner) {
579570 dvb_module_release(state->i2c_client_demod);
580571 return -ENODEV;
....@@ -601,17 +592,7 @@
601592 static int dvbsky_init(struct dvb_usb_device *d)
602593 {
603594 struct dvbsky_state *state = d_to_priv(d);
604
-
605
- /* use default interface */
606
- /*
607
- ret = usb_set_interface(d->udev, 0, 0);
608
- if (ret)
609
- return ret;
610
- */
611
- mutex_init(&state->stream_mutex);
612
-
613595 state->last_lock = 0;
614
-
615596 return 0;
616597 }
617598
....@@ -796,8 +777,17 @@
796777 { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_TERRATEC_CINERGY_S2_R4,
797778 &dvbsky_s960_props, "Terratec Cinergy S2 Rev.4",
798779 RC_MAP_DVBSKY) },
780
+ { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230,
781
+ &mygica_t230c_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230",
782
+ RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
799783 { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C,
800
- &mygica_t230c_props, "MyGica Mini DVB-T2 USB Stick T230C",
784
+ &mygica_t230c_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230C",
785
+ RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
786
+ { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C_LITE,
787
+ &mygica_t230c_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230C Lite",
788
+ NULL) },
789
+ { DVB_USB_DEVICE(USB_VID_CONEXANT, USB_PID_MYGICA_T230C2,
790
+ &mygica_t230c_props, "MyGica Mini DVB-(T/T2/C) USB Stick T230C v2",
801791 RC_MAP_TOTAL_MEDIA_IN_HAND_02) },
802792 { }
803793 };