forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-10 cde9070d9970eef1f7ec2360586c802a16230ad8
kernel/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c
....@@ -1,14 +1,13 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * TTUSB DVB driver
34 *
45 * Copyright (c) 2002 Holger Waechtler <holger@convergence.de>
56 * Copyright (c) 2003 Felix Domke <tmbinc@elitedvb.net>
6
- *
7
- * This program is free software; you can redistribute it and/or
8
- * modify it under the terms of the GNU General Public License as
9
- * published by the Free Software Foundation; either version 2 of
10
- * the License, or (at your option) any later version.
117 */
8
+
9
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
10
+
1211 #include <linux/init.h>
1312 #include <linux/slab.h>
1413 #include <linux/wait.h>
....@@ -63,7 +62,12 @@
6362
6463 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
6564
66
-#define dprintk(x...) do { if (debug) printk(KERN_DEBUG x); } while (0)
65
+#define dprintk(fmt, arg...) do { \
66
+ if (debug) \
67
+ printk(KERN_DEBUG pr_fmt("%s: " fmt), \
68
+ __func__, ##arg); \
69
+} while (0)
70
+
6771
6872 #define ISO_BUF_COUNT 4
6973 #define FRAMES_PER_ISO_BUF 4
....@@ -75,6 +79,9 @@
7579
7680 #define TTUSB_REV_2_2 0x22
7781 #define TTUSB_BUDGET_NAME "ttusb_stc_fw"
82
+
83
+#define MAX_SEND 0x28
84
+#define MAX_RCV 0x20
7885
7986 /*
8087 * since we're casting (struct ttusb*) <-> (struct dvb_demux*) around
....@@ -123,87 +130,70 @@
123130 int cc; /* MuxCounter - will increment on EVERY MUX PACKET */
124131 /* (including stuffing. yes. really.) */
125132
126
- u8 last_result[32];
133
+ u8 send_buf[MAX_SEND];
134
+ u8 last_result[MAX_RCV];
127135
128136 int revision;
129137
130138 struct dvb_frontend* fe;
131139 };
132140
133
-/* ugly workaround ... don't know why it's necessary to read */
134
-/* all result codes. */
135
-
136
-static int ttusb_cmd(struct ttusb *ttusb,
137
- const u8 * data, int len, int needresult)
141
+static int ttusb_cmd(struct ttusb *ttusb, u8 *data, int len, int len_result)
138142 {
139143 int actual_len;
140144 int err;
141
- int i;
142
-
143
- if (debug >= 3) {
144
- printk(KERN_DEBUG ">");
145
- for (i = 0; i < len; ++i)
146
- printk(KERN_CONT " %02x", data[i]);
147
- printk(KERN_CONT "\n");
148
- }
149145
150146 if (mutex_lock_interruptible(&ttusb->semusb) < 0)
151147 return -EAGAIN;
152148
149
+ if (debug >= 3)
150
+ dprintk("> %*ph\n", len, data);
151
+
152
+ memcpy(data, ttusb->send_buf, len);
153
+
153154 err = usb_bulk_msg(ttusb->dev, ttusb->bulk_out_pipe,
154
- (u8 *) data, len, &actual_len, 1000);
155
+ ttusb->send_buf, len, &actual_len, 1000);
155156 if (err != 0) {
156
- dprintk("%s: usb_bulk_msg(send) failed, err == %i!\n",
157
- __func__, err);
158
- mutex_unlock(&ttusb->semusb);
159
- return err;
157
+ dprintk("usb_bulk_msg(send) failed, err == %i!\n", err);
158
+ goto err;
160159 }
161160 if (actual_len != len) {
162
- dprintk("%s: only wrote %d of %d bytes\n", __func__,
161
+ err = -EIO;
162
+ dprintk("only wrote %d of %d bytes\n",
163163 actual_len, len);
164
- mutex_unlock(&ttusb->semusb);
165
- return -1;
164
+ goto err;
166165 }
167166
168167 err = usb_bulk_msg(ttusb->dev, ttusb->bulk_in_pipe,
169
- ttusb->last_result, 32, &actual_len, 1000);
168
+ ttusb->last_result, MAX_RCV, &actual_len, 1000);
170169
171170 if (err != 0) {
172
- printk("%s: failed, receive error %d\n", __func__,
173
- err);
174
- mutex_unlock(&ttusb->semusb);
175
- return err;
171
+ pr_err("cmd xter failed, receive error %d\n", err);
172
+ goto err;
176173 }
177174
178175 if (debug >= 3) {
179176 actual_len = ttusb->last_result[3] + 4;
180
- printk(KERN_DEBUG "<");
181
- for (i = 0; i < actual_len; ++i)
182
- printk(KERN_CONT " %02x", ttusb->last_result[i]);
183
- printk(KERN_CONT "\n");
177
+ dprintk("< %*ph\n", actual_len, ttusb->last_result);
184178 }
185179
186
- if (!needresult)
187
- mutex_unlock(&ttusb->semusb);
188
- return 0;
189
-}
180
+ if (len_result)
181
+ memcpy(ttusb->send_buf, ttusb->last_result, len_result);
190182
191
-static int ttusb_result(struct ttusb *ttusb, u8 * data, int len)
192
-{
193
- memcpy(data, ttusb->last_result, len);
183
+err:
194184 mutex_unlock(&ttusb->semusb);
195
- return 0;
185
+ return err;
196186 }
197187
198188 static int ttusb_i2c_msg(struct ttusb *ttusb,
199189 u8 addr, u8 * snd_buf, u8 snd_len, u8 * rcv_buf,
200190 u8 rcv_len)
201191 {
202
- u8 b[0x28];
192
+ u8 b[MAX_SEND];
203193 u8 id = ++ttusb->c;
204194 int i, err;
205195
206
- if (snd_len > 0x28 - 7 || rcv_len > 0x20 - 7)
196
+ if (snd_len > MAX_SEND - 7 || rcv_len > MAX_RCV - 7)
207197 return -EINVAL;
208198
209199 b[0] = 0xaa;
....@@ -217,12 +207,10 @@
217207 for (i = 0; i < snd_len; i++)
218208 b[7 + i] = snd_buf[i];
219209
220
- err = ttusb_cmd(ttusb, b, snd_len + 7, 1);
210
+ err = ttusb_cmd(ttusb, b, snd_len + 7, MAX_RCV);
221211
222212 if (err)
223213 return -EREMOTEIO;
224
-
225
- err = ttusb_result(ttusb, b, 0x20);
226214
227215 /* check if the i2c transaction was successful */
228216 if ((snd_len != b[5]) || (rcv_len != b[6])) return -EREMOTEIO;
....@@ -230,9 +218,8 @@
230218 if (rcv_len > 0) {
231219
232220 if (err || b[0] != 0x55 || b[1] != id) {
233
- dprintk
234
- ("%s: usb_bulk_msg(recv) failed, err == %i, id == %02x, b == ",
235
- __func__, err, id);
221
+ dprintk("usb_bulk_msg(recv) failed, err == %i, id == %02x, b == ",
222
+ err, id);
236223 return -EREMOTEIO;
237224 }
238225
....@@ -276,7 +263,7 @@
276263 snd_buf, snd_len, rcv_buf, rcv_len);
277264
278265 if (err < rcv_len) {
279
- dprintk("%s: i == %i\n", __func__, i);
266
+ dprintk("i == %i\n", i);
280267 break;
281268 }
282269
....@@ -296,7 +283,7 @@
296283 err = request_firmware(&fw, "ttusb-budget/dspbootcode.bin",
297284 &ttusb->dev->dev);
298285 if (err) {
299
- printk(KERN_ERR "ttusb-budget: failed to request firmware\n");
286
+ pr_err("failed to request firmware\n");
300287 return err;
301288 }
302289
....@@ -306,7 +293,7 @@
306293 b[3] = 28;
307294
308295 /* upload dsp code in 32 byte steps (36 didn't work for me ...) */
309
- /* 32 is max packet size, no messages should be splitted. */
296
+ /* 32 is max packet size, no messages should be split. */
310297 for (i = 0; i < fw->size; i += 28) {
311298 memcpy(&b[4], &fw->data[i], 28);
312299
....@@ -336,8 +323,7 @@
336323 done:
337324 release_firmware(fw);
338325 if (err) {
339
- dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
340
- __func__, err);
326
+ dprintk("usb_bulk_msg() failed, return value %i!\n", err);
341327 }
342328
343329 return err;
....@@ -404,8 +390,6 @@
404390 /* i2c write read: 5 bytes, addr 0x10, 0x02 bytes write, 1 bytes read. */
405391 u8 b3[] =
406392 { 0xaa, ++ttusb->c, 0x31, 5, 0x10, 0x02, 0x01, 0x00, 0x1e };
407
- u8 b4[] =
408
- { 0x55, ttusb->c, 0x31, 4, 0x10, 0x02, 0x01, 0x00, 0x1e };
409393
410394 u8 get_version[] = { 0xaa, ++ttusb->c, 0x17, 5, 0, 0, 0, 0, 0 };
411395 u8 get_dsp_version[0x20] =
....@@ -426,44 +410,35 @@
426410 if ((err = ttusb_cmd(ttusb, b2, sizeof(b2), 0)))
427411 return err;
428412
429
- if ((err = ttusb_cmd(ttusb, b3, sizeof(b3), 1)))
413
+ if ((err = ttusb_cmd(ttusb, b3, sizeof(b3), 0)))
430414 return err;
431415
432
- err = ttusb_result(ttusb, b4, sizeof(b4));
433
-
434
- if ((err = ttusb_cmd(ttusb, get_version, sizeof(get_version), 1)))
416
+ if ((err = ttusb_cmd(ttusb, get_version,
417
+ sizeof(get_version), sizeof(get_version))))
435418 return err;
436419
437
- if ((err = ttusb_result(ttusb, get_version, sizeof(get_version))))
438
- return err;
439
-
440
- dprintk("%s: stc-version: %c%c%c%c%c\n", __func__,
441
- get_version[4], get_version[5], get_version[6],
442
- get_version[7], get_version[8]);
420
+ dprintk("stc-version: %c%c%c%c%c\n", get_version[4], get_version[5],
421
+ get_version[6], get_version[7], get_version[8]);
443422
444423 if (memcmp(get_version + 4, "V 0.0", 5) &&
445424 memcmp(get_version + 4, "V 1.1", 5) &&
446425 memcmp(get_version + 4, "V 2.1", 5) &&
447426 memcmp(get_version + 4, "V 2.2", 5)) {
448
- printk
449
- ("%s: unknown STC version %c%c%c%c%c, please report!\n",
450
- __func__, get_version[4], get_version[5],
451
- get_version[6], get_version[7], get_version[8]);
427
+ pr_err("unknown STC version %c%c%c%c%c, please report!\n",
428
+ get_version[4], get_version[5],
429
+ get_version[6], get_version[7], get_version[8]);
452430 }
453431
454432 ttusb->revision = ((get_version[6] - '0') << 4) |
455433 (get_version[8] - '0');
456434
457435 err =
458
- ttusb_cmd(ttusb, get_dsp_version, sizeof(get_dsp_version), 1);
436
+ ttusb_cmd(ttusb, get_dsp_version,
437
+ sizeof(get_dsp_version), sizeof(get_dsp_version));
459438 if (err)
460439 return err;
461440
462
- err =
463
- ttusb_result(ttusb, get_dsp_version, sizeof(get_dsp_version));
464
- if (err)
465
- return err;
466
- printk("%s: dsp-version: %c%c%c\n", __func__,
441
+ pr_info("dsp-version: %c%c%c\n",
467442 get_dsp_version[4], get_dsp_version[5], get_dsp_version[6]);
468443 return 0;
469444 }
....@@ -485,8 +460,7 @@
485460
486461 /* Diseqc */
487462 if ((err = ttusb_cmd(ttusb, b, 4 + b[3], 0))) {
488
- dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
489
- __func__, err);
463
+ dprintk("usb_bulk_msg() failed, return value %i!\n", err);
490464 }
491465
492466 return err;
....@@ -503,8 +477,7 @@
503477
504478 /* SetLNB */
505479 if ((err = ttusb_cmd(ttusb, b, sizeof(b), 0))) {
506
- dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
507
- __func__, err);
480
+ dprintk("usb_bulk_msg() failed, return value %i!\n", err);
508481 }
509482
510483 return err;
....@@ -538,8 +511,7 @@
538511
539512 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
540513 if (err) {
541
- dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
542
- __func__, err);
514
+ dprintk("usb_bulk_msg() failed, return value %i!\n", err);
543515 }
544516 }
545517 #endif
....@@ -563,7 +535,7 @@
563535 int i;
564536
565537 if (len < 4 || len & 0x1) {
566
- pr_warn("%s: muxpack has invalid len %d\n", __func__, len);
538
+ pr_warn("muxpack has invalid len %d\n", len);
567539 numinvalid++;
568540 return;
569541 }
....@@ -571,8 +543,7 @@
571543 for (i = 0; i < len; i += 2)
572544 csum ^= le16_to_cpup((__le16 *) (muxpack + i));
573545 if (csum) {
574
- printk("%s: muxpack with incorrect checksum, ignoring\n",
575
- __func__);
546
+ pr_warn("muxpack with incorrect checksum, ignoring\n");
576547 numinvalid++;
577548 return;
578549 }
....@@ -580,8 +551,8 @@
580551 cc = (muxpack[len - 4] << 8) | muxpack[len - 3];
581552 cc &= 0x7FFF;
582553 if ((cc != ttusb->cc) && (ttusb->cc != -1))
583
- printk("%s: cc discontinuity (%d frames missing)\n",
584
- __func__, (cc - ttusb->cc) & 0x7FFF);
554
+ pr_warn("cc discontinuity (%d frames missing)\n",
555
+ (cc - ttusb->cc) & 0x7FFF);
585556 ttusb->cc = (cc + 1) & 0x7FFF;
586557 if (muxpack[0] & 0x80) {
587558 #ifdef TTUSB_HWSECTIONS
....@@ -602,7 +573,7 @@
602573 !!(ttusb->muxpack[1] & 1))
603574 data++;
604575 #warning TODO: pusi
605
- printk("cc: %04x\n", (data[0] << 8) | data[1]);
576
+ dprintk("cc: %04x\n", (data[0] << 8) | data[1]);
606577 #endif
607578 numsec++;
608579 } else if (muxpack[0] == 0x47) {
....@@ -621,7 +592,7 @@
621592 dvb_dmx_swfilter_packets(&ttusb->dvb_demux, muxpack, 1);
622593 } else if (muxpack[0] != 0) {
623594 numinvalid++;
624
- printk("illegal muxpack type %02x\n", muxpack[0]);
595
+ pr_err("illegal muxpack type %02x\n", muxpack[0]);
625596 } else
626597 numstuff++;
627598 }
....@@ -631,7 +602,7 @@
631602 int maxwork = 1024;
632603 while (len) {
633604 if (!(maxwork--)) {
634
- printk("%s: too much work\n", __func__);
605
+ pr_err("too much work\n");
635606 break;
636607 }
637608
....@@ -645,10 +616,7 @@
645616 else {
646617 ttusb->mux_state = 0;
647618 if (ttusb->insync) {
648
- dprintk("%s: %02x\n",
649
- __func__, data[-1]);
650
- printk(KERN_INFO "%s: lost sync.\n",
651
- __func__);
619
+ pr_info("lost sync.\n");
652620 ttusb->insync = 0;
653621 }
654622 }
....@@ -704,10 +672,8 @@
704672 ttusb->muxpack[1] + 2 +
705673 4;
706674 else {
707
- dprintk
708
- ("%s: invalid state: first byte is %x\n",
709
- __func__,
710
- ttusb->muxpack[0]);
675
+ dprintk("invalid state: first byte is %x\n",
676
+ ttusb->muxpack[0]);
711677 ttusb->mux_state = 0;
712678 }
713679 }
....@@ -755,12 +721,6 @@
755721
756722 if (!ttusb->iso_streaming)
757723 return;
758
-
759
-#if 0
760
- printk("%s: status %d, errcount == %d, length == %i\n",
761
- __func__,
762
- urb->status, urb->error_count, urb->actual_length);
763
-#endif
764724
765725 if (!urb->status) {
766726 for (i = 0; i < urb->number_of_packets; ++i) {
....@@ -834,7 +794,7 @@
834794 int i, j, err, buffer_offset = 0;
835795
836796 if (ttusb->iso_streaming) {
837
- printk("%s: iso xfer already running!\n", __func__);
797
+ pr_err("iso xfer already running!\n");
838798 return 0;
839799 }
840800
....@@ -868,9 +828,8 @@
868828 for (i = 0; i < ISO_BUF_COUNT; i++) {
869829 if ((err = usb_submit_urb(ttusb->iso_urb[i], GFP_ATOMIC))) {
870830 ttusb_stop_iso_xfer(ttusb);
871
- printk
872
- ("%s: failed urb submission (%i: err = %i)!\n",
873
- __func__, i, err);
831
+ pr_err("failed urb submission (%i: err = %i)!\n",
832
+ i, err);
874833 return err;
875834 }
876835 }
....@@ -1430,7 +1389,7 @@
14301389 if (fe->ops.i2c_gate_ctrl)
14311390 fe->ops.i2c_gate_ctrl(fe, 1);
14321391 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1433
- printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 1\n");
1392
+ pr_err("dvbc_philips_tdm1316l_pll_set Error 1\n");
14341393 return -EIO;
14351394 }
14361395
....@@ -1439,7 +1398,7 @@
14391398 if (fe->ops.i2c_gate_ctrl)
14401399 fe->ops.i2c_gate_ctrl(fe, 1);
14411400 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1442
- printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 2\n");
1401
+ pr_err("dvbc_philips_tdm1316l_pll_set Error 2\n");
14431402 return -EIO;
14441403 }
14451404
....@@ -1616,12 +1575,12 @@
16161575 }
16171576
16181577 if (ttusb->fe == NULL) {
1619
- printk("dvb-ttusb-budget: A frontend driver was not found for device [%04x:%04x]\n",
1578
+ pr_err("no frontend driver found for device [%04x:%04x]\n",
16201579 le16_to_cpu(ttusb->dev->descriptor.idVendor),
16211580 le16_to_cpu(ttusb->dev->descriptor.idProduct));
16221581 } else {
16231582 if (dvb_register_frontend(&ttusb->adapter, ttusb->fe)) {
1624
- printk("dvb-ttusb-budget: Frontend registration failed!\n");
1583
+ pr_err("Frontend registration failed!\n");
16251584 dvb_frontend_detach(ttusb->fe);
16261585 ttusb->fe = NULL;
16271586 }
....@@ -1641,7 +1600,7 @@
16411600 struct ttusb *ttusb;
16421601 int result;
16431602
1644
- dprintk("%s: TTUSB DVB connected\n", __func__);
1603
+ dprintk("TTUSB DVB connected\n");
16451604
16461605 udev = interface_to_usbdev(intf);
16471606
....@@ -1663,14 +1622,14 @@
16631622
16641623 result = ttusb_alloc_iso_urbs(ttusb);
16651624 if (result < 0) {
1666
- dprintk("%s: ttusb_alloc_iso_urbs - failed\n", __func__);
1625
+ dprintk("ttusb_alloc_iso_urbs - failed\n");
16671626 mutex_unlock(&ttusb->semi2c);
16681627 kfree(ttusb);
16691628 return result;
16701629 }
16711630
16721631 if (ttusb_init_controller(ttusb))
1673
- printk("ttusb_init_controller: error\n");
1632
+ pr_err("ttusb_init_controller: error\n");
16741633
16751634 mutex_unlock(&ttusb->semi2c);
16761635
....@@ -1686,7 +1645,7 @@
16861645
16871646 /* i2c */
16881647 memset(&ttusb->i2c_adap, 0, sizeof(struct i2c_adapter));
1689
- strcpy(ttusb->i2c_adap.name, "TTUSB DEC");
1648
+ strscpy(ttusb->i2c_adap.name, "TTUSB DEC", sizeof(ttusb->i2c_adap.name));
16901649
16911650 i2c_set_adapdata(&ttusb->i2c_adap, ttusb);
16921651
....@@ -1715,7 +1674,7 @@
17151674
17161675 result = dvb_dmx_init(&ttusb->dvb_demux);
17171676 if (result < 0) {
1718
- printk("ttusb_dvb: dvb_dmx_init failed (errno = %d)\n", result);
1677
+ pr_err("dvb_dmx_init failed (errno = %d)\n", result);
17191678 result = -ENODEV;
17201679 goto err_i2c_del_adapter;
17211680 }
....@@ -1726,14 +1685,14 @@
17261685
17271686 result = dvb_dmxdev_init(&ttusb->dmxdev, &ttusb->adapter);
17281687 if (result < 0) {
1729
- printk("ttusb_dvb: dvb_dmxdev_init failed (errno = %d)\n",
1688
+ pr_err("dvb_dmxdev_init failed (errno = %d)\n",
17301689 result);
17311690 result = -ENODEV;
17321691 goto err_release_dmx;
17331692 }
17341693
17351694 if (dvb_net_init(&ttusb->adapter, &ttusb->dvbnet, &ttusb->dvb_demux.dmx)) {
1736
- printk("ttusb_dvb: dvb_net_init failed!\n");
1695
+ pr_err("dvb_net_init failed!\n");
17371696 result = -ENODEV;
17381697 goto err_release_dmxdev;
17391698 }
....@@ -1782,7 +1741,7 @@
17821741
17831742 kfree(ttusb);
17841743
1785
- dprintk("%s: TTUSB DVB disconnected\n", __func__);
1744
+ dprintk("TTUSB DVB disconnected\n");
17861745 }
17871746
17881747 static const struct usb_device_id ttusb_table[] = {