aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/usb/dvb-usb-v2/anysee.c27
-rw-r--r--drivers/media/usb/dvb-usb-v2/anysee.h3
2 files changed, 14 insertions, 16 deletions
diff --git a/drivers/media/usb/dvb-usb-v2/anysee.c b/drivers/media/usb/dvb-usb-v2/anysee.c
index a20d691d0b63..85ba24650f01 100644
--- a/drivers/media/usb/dvb-usb-v2/anysee.c
+++ b/drivers/media/usb/dvb-usb-v2/anysee.c
@@ -45,25 +45,24 @@
45#include "cxd2820r.h" 45#include "cxd2820r.h"
46 46
47DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); 47DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
48static DEFINE_MUTEX(anysee_usb_mutex);
49 48
50static int anysee_ctrl_msg(struct dvb_usb_device *d, u8 *sbuf, u8 slen, 49static int anysee_ctrl_msg(struct dvb_usb_device *d, u8 *sbuf, u8 slen,
51 u8 *rbuf, u8 rlen) 50 u8 *rbuf, u8 rlen)
52{ 51{
53 struct anysee_state *state = d_to_priv(d); 52 struct anysee_state *state = d_to_priv(d);
54 int act_len, ret, i; 53 int act_len, ret, i;
55 u8 buf[64];
56 54
57 memcpy(&buf[0], sbuf, slen); 55 mutex_lock(&d->usb_mutex);
58 buf[60] = state->seq++;
59 56
60 mutex_lock(&anysee_usb_mutex); 57 memcpy(&state->buf[0], sbuf, slen);
58 state->buf[60] = state->seq++;
61 59
62 dev_dbg(&d->udev->dev, "%s: >>> %*ph\n", __func__, slen, buf); 60 dev_dbg(&d->udev->dev, "%s: >>> %*ph\n", __func__, slen, state->buf);
63 61
64 /* We need receive one message more after dvb_usb_generic_rw due 62 /* We need receive one message more after dvb_usb_generic_rw due
65 to weird transaction flow, which is 1 x send + 2 x receive. */ 63 to weird transaction flow, which is 1 x send + 2 x receive. */
66 ret = dvb_usbv2_generic_rw(d, buf, sizeof(buf), buf, sizeof(buf)); 64 ret = dvb_usbv2_generic_rw_locked(d, state->buf, sizeof(state->buf),
65 state->buf, sizeof(state->buf));
67 if (ret) 66 if (ret)
68 goto error_unlock; 67 goto error_unlock;
69 68
@@ -82,17 +81,16 @@ static int anysee_ctrl_msg(struct dvb_usb_device *d, u8 *sbuf, u8 slen,
82 for (i = 0; i < 3; i++) { 81 for (i = 0; i < 3; i++) {
83 /* receive 2nd answer */ 82 /* receive 2nd answer */
84 ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev, 83 ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev,
85 d->props->generic_bulk_ctrl_endpoint), buf, sizeof(buf), 84 d->props->generic_bulk_ctrl_endpoint),
86 &act_len, 2000); 85 state->buf, sizeof(state->buf), &act_len, 2000);
87
88 if (ret) { 86 if (ret) {
89 dev_dbg(&d->udev->dev, "%s: recv bulk message " \ 87 dev_dbg(&d->udev->dev, "%s: recv bulk message " \
90 "failed=%d\n", __func__, ret); 88 "failed=%d\n", __func__, ret);
91 } else { 89 } else {
92 dev_dbg(&d->udev->dev, "%s: <<< %*ph\n", __func__, 90 dev_dbg(&d->udev->dev, "%s: <<< %*ph\n", __func__,
93 rlen, buf); 91 rlen, state->buf);
94 92
95 if (buf[63] != 0x4f) 93 if (state->buf[63] != 0x4f)
96 dev_dbg(&d->udev->dev, "%s: cmd failed\n", 94 dev_dbg(&d->udev->dev, "%s: cmd failed\n",
97 __func__); 95 __func__);
98 96
@@ -109,11 +107,10 @@ static int anysee_ctrl_msg(struct dvb_usb_device *d, u8 *sbuf, u8 slen,
109 107
110 /* read request, copy returned data to return buf */ 108 /* read request, copy returned data to return buf */
111 if (rbuf && rlen) 109 if (rbuf && rlen)
112 memcpy(rbuf, buf, rlen); 110 memcpy(rbuf, state->buf, rlen);
113 111
114error_unlock: 112error_unlock:
115 mutex_unlock(&anysee_usb_mutex); 113 mutex_unlock(&d->usb_mutex);
116
117 return ret; 114 return ret;
118} 115}
119 116
diff --git a/drivers/media/usb/dvb-usb-v2/anysee.h b/drivers/media/usb/dvb-usb-v2/anysee.h
index c1a4273f14ff..8f426d9fc6e1 100644
--- a/drivers/media/usb/dvb-usb-v2/anysee.h
+++ b/drivers/media/usb/dvb-usb-v2/anysee.h
@@ -52,8 +52,9 @@ enum cmd {
52}; 52};
53 53
54struct anysee_state { 54struct anysee_state {
55 u8 hw; /* PCB ID */ 55 u8 buf[64];
56 u8 seq; 56 u8 seq;
57 u8 hw; /* PCB ID */
57 u8 fe_id:1; /* frondend ID */ 58 u8 fe_id:1; /* frondend ID */
58 u8 has_ci:1; 59 u8 has_ci:1;
59 u8 ci_attached:1; 60 u8 ci_attached:1;