diff options
| -rw-r--r-- | drivers/media/usb/dvb-usb/af9005.c | 33 | ||||
| -rw-r--r-- | drivers/media/usb/dvb-usb/cinergyT2-core.c | 33 | ||||
| -rw-r--r-- | drivers/media/usb/dvb-usb/cxusb.c | 39 | ||||
| -rw-r--r-- | drivers/media/usb/dvb-usb/cxusb.h | 1 | ||||
| -rw-r--r-- | drivers/media/usb/dvb-usb/dtt200u.c | 40 | ||||
| -rw-r--r-- | drivers/media/usb/dvb-usb/dvb-usb-init.c | 1 | ||||
| -rw-r--r-- | drivers/media/usb/dvb-usb/dvb-usb.h | 9 |
7 files changed, 61 insertions, 95 deletions
diff --git a/drivers/media/usb/dvb-usb/af9005.c b/drivers/media/usb/dvb-usb/af9005.c index b257780fb380..7853261906b1 100644 --- a/drivers/media/usb/dvb-usb/af9005.c +++ b/drivers/media/usb/dvb-usb/af9005.c | |||
| @@ -53,7 +53,6 @@ struct af9005_device_state { | |||
| 53 | u8 sequence; | 53 | u8 sequence; |
| 54 | int led_state; | 54 | int led_state; |
| 55 | unsigned char data[256]; | 55 | unsigned char data[256]; |
| 56 | struct mutex data_mutex; | ||
| 57 | }; | 56 | }; |
| 58 | 57 | ||
| 59 | static int af9005_generic_read_write(struct dvb_usb_device *d, u16 reg, | 58 | static int af9005_generic_read_write(struct dvb_usb_device *d, u16 reg, |
| @@ -72,7 +71,7 @@ static int af9005_generic_read_write(struct dvb_usb_device *d, u16 reg, | |||
| 72 | return -EINVAL; | 71 | return -EINVAL; |
| 73 | } | 72 | } |
| 74 | 73 | ||
| 75 | mutex_lock(&st->data_mutex); | 74 | mutex_lock(&d->data_mutex); |
| 76 | st->data[0] = 14; /* rest of buffer length low */ | 75 | st->data[0] = 14; /* rest of buffer length low */ |
| 77 | st->data[1] = 0; /* rest of buffer length high */ | 76 | st->data[1] = 0; /* rest of buffer length high */ |
| 78 | 77 | ||
| @@ -140,7 +139,7 @@ static int af9005_generic_read_write(struct dvb_usb_device *d, u16 reg, | |||
| 140 | values[i] = st->data[8 + i]; | 139 | values[i] = st->data[8 + i]; |
| 141 | 140 | ||
| 142 | ret: | 141 | ret: |
| 143 | mutex_unlock(&st->data_mutex); | 142 | mutex_unlock(&d->data_mutex); |
| 144 | return ret; | 143 | return ret; |
| 145 | 144 | ||
| 146 | } | 145 | } |
| @@ -481,7 +480,7 @@ int af9005_send_command(struct dvb_usb_device *d, u8 command, u8 * wbuf, | |||
| 481 | } | 480 | } |
| 482 | packet_len = wlen + 5; | 481 | packet_len = wlen + 5; |
| 483 | 482 | ||
| 484 | mutex_lock(&st->data_mutex); | 483 | mutex_lock(&d->data_mutex); |
| 485 | 484 | ||
| 486 | st->data[0] = (u8) (packet_len & 0xff); | 485 | st->data[0] = (u8) (packet_len & 0xff); |
| 487 | st->data[1] = (u8) ((packet_len & 0xff00) >> 8); | 486 | st->data[1] = (u8) ((packet_len & 0xff00) >> 8); |
| @@ -512,7 +511,7 @@ int af9005_send_command(struct dvb_usb_device *d, u8 command, u8 * wbuf, | |||
| 512 | rbuf[i] = st->data[i + 7]; | 511 | rbuf[i] = st->data[i + 7]; |
| 513 | } | 512 | } |
| 514 | 513 | ||
| 515 | mutex_unlock(&st->data_mutex); | 514 | mutex_unlock(&d->data_mutex); |
| 516 | return ret; | 515 | return ret; |
| 517 | } | 516 | } |
| 518 | 517 | ||
| @@ -523,7 +522,7 @@ int af9005_read_eeprom(struct dvb_usb_device *d, u8 address, u8 * values, | |||
| 523 | u8 seq; | 522 | u8 seq; |
| 524 | int ret, i; | 523 | int ret, i; |
| 525 | 524 | ||
| 526 | mutex_lock(&st->data_mutex); | 525 | mutex_lock(&d->data_mutex); |
| 527 | 526 | ||
| 528 | memset(st->data, 0, sizeof(st->data)); | 527 | memset(st->data, 0, sizeof(st->data)); |
| 529 | 528 | ||
| @@ -559,7 +558,7 @@ int af9005_read_eeprom(struct dvb_usb_device *d, u8 address, u8 * values, | |||
| 559 | for (i = 0; i < len; i++) | 558 | for (i = 0; i < len; i++) |
| 560 | values[i] = st->data[6 + i]; | 559 | values[i] = st->data[6 + i]; |
| 561 | } | 560 | } |
| 562 | mutex_unlock(&st->data_mutex); | 561 | mutex_unlock(&d->data_mutex); |
| 563 | 562 | ||
| 564 | return ret; | 563 | return ret; |
| 565 | } | 564 | } |
| @@ -847,7 +846,7 @@ static int af9005_rc_query(struct dvb_usb_device *d, u32 * event, int *state) | |||
| 847 | return 0; | 846 | return 0; |
| 848 | } | 847 | } |
| 849 | 848 | ||
| 850 | mutex_lock(&st->data_mutex); | 849 | mutex_lock(&d->data_mutex); |
| 851 | 850 | ||
| 852 | /* deb_info("rc_query\n"); */ | 851 | /* deb_info("rc_query\n"); */ |
| 853 | st->data[0] = 3; /* rest of packet length low */ | 852 | st->data[0] = 3; /* rest of packet length low */ |
| @@ -890,7 +889,7 @@ static int af9005_rc_query(struct dvb_usb_device *d, u32 * event, int *state) | |||
| 890 | } | 889 | } |
| 891 | 890 | ||
| 892 | ret: | 891 | ret: |
| 893 | mutex_unlock(&st->data_mutex); | 892 | mutex_unlock(&d->data_mutex); |
| 894 | return ret; | 893 | return ret; |
| 895 | } | 894 | } |
| 896 | 895 | ||
| @@ -1004,20 +1003,8 @@ static struct dvb_usb_device_properties af9005_properties; | |||
| 1004 | static int af9005_usb_probe(struct usb_interface *intf, | 1003 | static int af9005_usb_probe(struct usb_interface *intf, |
| 1005 | const struct usb_device_id *id) | 1004 | const struct usb_device_id *id) |
| 1006 | { | 1005 | { |
| 1007 | struct dvb_usb_device *d; | 1006 | return dvb_usb_device_init(intf, &af9005_properties, |
| 1008 | struct af9005_device_state *st; | 1007 | THIS_MODULE, NULL, adapter_nr); |
| 1009 | int ret; | ||
| 1010 | |||
| 1011 | ret = dvb_usb_device_init(intf, &af9005_properties, | ||
| 1012 | THIS_MODULE, &d, adapter_nr); | ||
| 1013 | |||
| 1014 | if (ret < 0) | ||
| 1015 | return ret; | ||
| 1016 | |||
| 1017 | st = d->priv; | ||
| 1018 | mutex_init(&st->data_mutex); | ||
| 1019 | |||
| 1020 | return 0; | ||
| 1021 | } | 1008 | } |
| 1022 | 1009 | ||
| 1023 | enum af9005_usb_table_entry { | 1010 | enum af9005_usb_table_entry { |
diff --git a/drivers/media/usb/dvb-usb/cinergyT2-core.c b/drivers/media/usb/dvb-usb/cinergyT2-core.c index 8ac825413d5a..290275bc7fde 100644 --- a/drivers/media/usb/dvb-usb/cinergyT2-core.c +++ b/drivers/media/usb/dvb-usb/cinergyT2-core.c | |||
| @@ -42,7 +42,6 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); | |||
| 42 | struct cinergyt2_state { | 42 | struct cinergyt2_state { |
| 43 | u8 rc_counter; | 43 | u8 rc_counter; |
| 44 | unsigned char data[64]; | 44 | unsigned char data[64]; |
| 45 | struct mutex data_mutex; | ||
| 46 | }; | 45 | }; |
| 47 | 46 | ||
| 48 | /* We are missing a release hook with usb_device data */ | 47 | /* We are missing a release hook with usb_device data */ |
| @@ -56,12 +55,12 @@ static int cinergyt2_streaming_ctrl(struct dvb_usb_adapter *adap, int enable) | |||
| 56 | struct cinergyt2_state *st = d->priv; | 55 | struct cinergyt2_state *st = d->priv; |
| 57 | int ret; | 56 | int ret; |
| 58 | 57 | ||
| 59 | mutex_lock(&st->data_mutex); | 58 | mutex_lock(&d->data_mutex); |
| 60 | st->data[0] = CINERGYT2_EP1_CONTROL_STREAM_TRANSFER; | 59 | st->data[0] = CINERGYT2_EP1_CONTROL_STREAM_TRANSFER; |
| 61 | st->data[1] = enable ? 1 : 0; | 60 | st->data[1] = enable ? 1 : 0; |
| 62 | 61 | ||
| 63 | ret = dvb_usb_generic_rw(d, st->data, 2, st->data, 64, 0); | 62 | ret = dvb_usb_generic_rw(d, st->data, 2, st->data, 64, 0); |
| 64 | mutex_unlock(&st->data_mutex); | 63 | mutex_unlock(&d->data_mutex); |
| 65 | 64 | ||
| 66 | return ret; | 65 | return ret; |
| 67 | } | 66 | } |
| @@ -71,12 +70,12 @@ static int cinergyt2_power_ctrl(struct dvb_usb_device *d, int enable) | |||
| 71 | struct cinergyt2_state *st = d->priv; | 70 | struct cinergyt2_state *st = d->priv; |
| 72 | int ret; | 71 | int ret; |
| 73 | 72 | ||
| 74 | mutex_lock(&st->data_mutex); | 73 | mutex_lock(&d->data_mutex); |
| 75 | st->data[0] = CINERGYT2_EP1_SLEEP_MODE; | 74 | st->data[0] = CINERGYT2_EP1_SLEEP_MODE; |
| 76 | st->data[1] = enable ? 0 : 1; | 75 | st->data[1] = enable ? 0 : 1; |
| 77 | 76 | ||
| 78 | ret = dvb_usb_generic_rw(d, st->data, 2, st->data, 3, 0); | 77 | ret = dvb_usb_generic_rw(d, st->data, 2, st->data, 3, 0); |
| 79 | mutex_unlock(&st->data_mutex); | 78 | mutex_unlock(&d->data_mutex); |
| 80 | 79 | ||
| 81 | return ret; | 80 | return ret; |
| 82 | } | 81 | } |
| @@ -89,7 +88,7 @@ static int cinergyt2_frontend_attach(struct dvb_usb_adapter *adap) | |||
| 89 | 88 | ||
| 90 | adap->fe_adap[0].fe = cinergyt2_fe_attach(adap->dev); | 89 | adap->fe_adap[0].fe = cinergyt2_fe_attach(adap->dev); |
| 91 | 90 | ||
| 92 | mutex_lock(&st->data_mutex); | 91 | mutex_lock(&d->data_mutex); |
| 93 | st->data[0] = CINERGYT2_EP1_GET_FIRMWARE_VERSION; | 92 | st->data[0] = CINERGYT2_EP1_GET_FIRMWARE_VERSION; |
| 94 | 93 | ||
| 95 | ret = dvb_usb_generic_rw(d, st->data, 1, st->data, 3, 0); | 94 | ret = dvb_usb_generic_rw(d, st->data, 1, st->data, 3, 0); |
| @@ -97,7 +96,7 @@ static int cinergyt2_frontend_attach(struct dvb_usb_adapter *adap) | |||
| 97 | deb_rc("cinergyt2_power_ctrl() Failed to retrieve sleep " | 96 | deb_rc("cinergyt2_power_ctrl() Failed to retrieve sleep " |
| 98 | "state info\n"); | 97 | "state info\n"); |
| 99 | } | 98 | } |
| 100 | mutex_unlock(&st->data_mutex); | 99 | mutex_unlock(&d->data_mutex); |
| 101 | 100 | ||
| 102 | /* Copy this pointer as we are gonna need it in the release phase */ | 101 | /* Copy this pointer as we are gonna need it in the release phase */ |
| 103 | cinergyt2_usb_device = adap->dev; | 102 | cinergyt2_usb_device = adap->dev; |
| @@ -166,7 +165,7 @@ static int cinergyt2_rc_query(struct dvb_usb_device *d, u32 *event, int *state) | |||
| 166 | 165 | ||
| 167 | *state = REMOTE_NO_KEY_PRESSED; | 166 | *state = REMOTE_NO_KEY_PRESSED; |
| 168 | 167 | ||
| 169 | mutex_lock(&st->data_mutex); | 168 | mutex_lock(&d->data_mutex); |
| 170 | st->data[0] = CINERGYT2_EP1_GET_RC_EVENTS; | 169 | st->data[0] = CINERGYT2_EP1_GET_RC_EVENTS; |
| 171 | 170 | ||
| 172 | ret = dvb_usb_generic_rw(d, st->data, 1, st->data, 5, 0); | 171 | ret = dvb_usb_generic_rw(d, st->data, 1, st->data, 5, 0); |
| @@ -202,29 +201,17 @@ static int cinergyt2_rc_query(struct dvb_usb_device *d, u32 *event, int *state) | |||
| 202 | } | 201 | } |
| 203 | 202 | ||
| 204 | ret: | 203 | ret: |
| 205 | mutex_unlock(&st->data_mutex); | 204 | mutex_unlock(&d->data_mutex); |
| 206 | return ret; | 205 | return ret; |
| 207 | } | 206 | } |
| 208 | 207 | ||
| 209 | static int cinergyt2_usb_probe(struct usb_interface *intf, | 208 | static int cinergyt2_usb_probe(struct usb_interface *intf, |
| 210 | const struct usb_device_id *id) | 209 | const struct usb_device_id *id) |
| 211 | { | 210 | { |
| 212 | struct dvb_usb_device *d; | 211 | return dvb_usb_device_init(intf, &cinergyt2_properties, |
| 213 | struct cinergyt2_state *st; | 212 | THIS_MODULE, NULL, adapter_nr); |
| 214 | int ret; | ||
| 215 | |||
| 216 | ret = dvb_usb_device_init(intf, &cinergyt2_properties, | ||
| 217 | THIS_MODULE, &d, adapter_nr); | ||
| 218 | if (ret < 0) | ||
| 219 | return ret; | ||
| 220 | |||
| 221 | st = d->priv; | ||
| 222 | mutex_init(&st->data_mutex); | ||
| 223 | |||
| 224 | return 0; | ||
| 225 | } | 213 | } |
| 226 | 214 | ||
| 227 | |||
| 228 | static struct usb_device_id cinergyt2_usb_table[] = { | 215 | static struct usb_device_id cinergyt2_usb_table[] = { |
| 229 | { USB_DEVICE(USB_VID_TERRATEC, 0x0038) }, | 216 | { USB_DEVICE(USB_VID_TERRATEC, 0x0038) }, |
| 230 | { 0 } | 217 | { 0 } |
diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c index 39772812269d..243403081fa5 100644 --- a/drivers/media/usb/dvb-usb/cxusb.c +++ b/drivers/media/usb/dvb-usb/cxusb.c | |||
| @@ -68,7 +68,7 @@ static int cxusb_ctrl_msg(struct dvb_usb_device *d, | |||
| 68 | 68 | ||
| 69 | wo = (rbuf == NULL || rlen == 0); /* write-only */ | 69 | wo = (rbuf == NULL || rlen == 0); /* write-only */ |
| 70 | 70 | ||
| 71 | mutex_lock(&st->data_mutex); | 71 | mutex_lock(&d->data_mutex); |
| 72 | st->data[0] = cmd; | 72 | st->data[0] = cmd; |
| 73 | memcpy(&st->data[1], wbuf, wlen); | 73 | memcpy(&st->data[1], wbuf, wlen); |
| 74 | if (wo) | 74 | if (wo) |
| @@ -77,7 +77,7 @@ static int cxusb_ctrl_msg(struct dvb_usb_device *d, | |||
| 77 | ret = dvb_usb_generic_rw(d, st->data, 1 + wlen, | 77 | ret = dvb_usb_generic_rw(d, st->data, 1 + wlen, |
| 78 | rbuf, rlen, 0); | 78 | rbuf, rlen, 0); |
| 79 | 79 | ||
| 80 | mutex_unlock(&st->data_mutex); | 80 | mutex_unlock(&d->data_mutex); |
| 81 | return ret; | 81 | return ret; |
| 82 | } | 82 | } |
| 83 | 83 | ||
| @@ -1461,43 +1461,36 @@ static struct dvb_usb_device_properties cxusb_mygica_t230_properties; | |||
| 1461 | static int cxusb_probe(struct usb_interface *intf, | 1461 | static int cxusb_probe(struct usb_interface *intf, |
| 1462 | const struct usb_device_id *id) | 1462 | const struct usb_device_id *id) |
| 1463 | { | 1463 | { |
| 1464 | struct dvb_usb_device *d; | ||
| 1465 | struct cxusb_state *st; | ||
| 1466 | |||
| 1467 | if (0 == dvb_usb_device_init(intf, &cxusb_medion_properties, | 1464 | if (0 == dvb_usb_device_init(intf, &cxusb_medion_properties, |
| 1468 | THIS_MODULE, &d, adapter_nr) || | 1465 | THIS_MODULE, NULL, adapter_nr) || |
| 1469 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgh064f_properties, | 1466 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgh064f_properties, |
| 1470 | THIS_MODULE, &d, adapter_nr) || | 1467 | THIS_MODULE, NULL, adapter_nr) || |
| 1471 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_dee1601_properties, | 1468 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_dee1601_properties, |
| 1472 | THIS_MODULE, &d, adapter_nr) || | 1469 | THIS_MODULE, NULL, adapter_nr) || |
| 1473 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgz201_properties, | 1470 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_lgz201_properties, |
| 1474 | THIS_MODULE, &d, adapter_nr) || | 1471 | THIS_MODULE, NULL, adapter_nr) || |
| 1475 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_dtt7579_properties, | 1472 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_dtt7579_properties, |
| 1476 | THIS_MODULE, &d, adapter_nr) || | 1473 | THIS_MODULE, NULL, adapter_nr) || |
| 1477 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_dualdig4_properties, | 1474 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_dualdig4_properties, |
| 1478 | THIS_MODULE, &d, adapter_nr) || | 1475 | THIS_MODULE, NULL, adapter_nr) || |
| 1479 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_nano2_properties, | 1476 | 0 == dvb_usb_device_init(intf, &cxusb_bluebird_nano2_properties, |
| 1480 | THIS_MODULE, &d, adapter_nr) || | 1477 | THIS_MODULE, NULL, adapter_nr) || |
| 1481 | 0 == dvb_usb_device_init(intf, | 1478 | 0 == dvb_usb_device_init(intf, |
| 1482 | &cxusb_bluebird_nano2_needsfirmware_properties, | 1479 | &cxusb_bluebird_nano2_needsfirmware_properties, |
| 1483 | THIS_MODULE, &d, adapter_nr) || | 1480 | THIS_MODULE, NULL, adapter_nr) || |
| 1484 | 0 == dvb_usb_device_init(intf, &cxusb_aver_a868r_properties, | 1481 | 0 == dvb_usb_device_init(intf, &cxusb_aver_a868r_properties, |
| 1485 | THIS_MODULE, &d, adapter_nr) || | 1482 | THIS_MODULE, NULL, adapter_nr) || |
| 1486 | 0 == dvb_usb_device_init(intf, | 1483 | 0 == dvb_usb_device_init(intf, |
| 1487 | &cxusb_bluebird_dualdig4_rev2_properties, | 1484 | &cxusb_bluebird_dualdig4_rev2_properties, |
| 1488 | THIS_MODULE, &d, adapter_nr) || | 1485 | THIS_MODULE, NULL, adapter_nr) || |
| 1489 | 0 == dvb_usb_device_init(intf, &cxusb_d680_dmb_properties, | 1486 | 0 == dvb_usb_device_init(intf, &cxusb_d680_dmb_properties, |
| 1490 | THIS_MODULE, &d, adapter_nr) || | 1487 | THIS_MODULE, NULL, adapter_nr) || |
| 1491 | 0 == dvb_usb_device_init(intf, &cxusb_mygica_d689_properties, | 1488 | 0 == dvb_usb_device_init(intf, &cxusb_mygica_d689_properties, |
| 1492 | THIS_MODULE, &d, adapter_nr) || | 1489 | THIS_MODULE, NULL, adapter_nr) || |
| 1493 | 0 == dvb_usb_device_init(intf, &cxusb_mygica_t230_properties, | 1490 | 0 == dvb_usb_device_init(intf, &cxusb_mygica_t230_properties, |
| 1494 | THIS_MODULE, &d, adapter_nr) || | 1491 | THIS_MODULE, NULL, adapter_nr) || |
| 1495 | 0) { | 1492 | 0) |
| 1496 | st = d->priv; | ||
| 1497 | mutex_init(&st->data_mutex); | ||
| 1498 | |||
| 1499 | return 0; | 1493 | return 0; |
| 1500 | } | ||
| 1501 | 1494 | ||
| 1502 | return -EINVAL; | 1495 | return -EINVAL; |
| 1503 | } | 1496 | } |
diff --git a/drivers/media/usb/dvb-usb/cxusb.h b/drivers/media/usb/dvb-usb/cxusb.h index 9f3ee0e47d5c..18acda19527a 100644 --- a/drivers/media/usb/dvb-usb/cxusb.h +++ b/drivers/media/usb/dvb-usb/cxusb.h | |||
| @@ -37,7 +37,6 @@ struct cxusb_state { | |||
| 37 | struct i2c_client *i2c_client_tuner; | 37 | struct i2c_client *i2c_client_tuner; |
| 38 | 38 | ||
| 39 | unsigned char data[MAX_XFER_SIZE]; | 39 | unsigned char data[MAX_XFER_SIZE]; |
| 40 | struct mutex data_mutex; | ||
| 41 | }; | 40 | }; |
| 42 | 41 | ||
| 43 | #endif | 42 | #endif |
diff --git a/drivers/media/usb/dvb-usb/dtt200u.c b/drivers/media/usb/dvb-usb/dtt200u.c index f88572c7ae7c..fcbff7fb0c4e 100644 --- a/drivers/media/usb/dvb-usb/dtt200u.c +++ b/drivers/media/usb/dvb-usb/dtt200u.c | |||
| @@ -22,7 +22,6 @@ DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr); | |||
| 22 | 22 | ||
| 23 | struct dtt200u_state { | 23 | struct dtt200u_state { |
| 24 | unsigned char data[80]; | 24 | unsigned char data[80]; |
| 25 | struct mutex data_mutex; | ||
| 26 | }; | 25 | }; |
| 27 | 26 | ||
| 28 | static int dtt200u_power_ctrl(struct dvb_usb_device *d, int onoff) | 27 | static int dtt200u_power_ctrl(struct dvb_usb_device *d, int onoff) |
| @@ -30,23 +29,24 @@ static int dtt200u_power_ctrl(struct dvb_usb_device *d, int onoff) | |||
| 30 | struct dtt200u_state *st = d->priv; | 29 | struct dtt200u_state *st = d->priv; |
| 31 | int ret = 0; | 30 | int ret = 0; |
| 32 | 31 | ||
| 33 | mutex_lock(&st->data_mutex); | 32 | mutex_lock(&d->data_mutex); |
| 34 | 33 | ||
| 35 | st->data[0] = SET_INIT; | 34 | st->data[0] = SET_INIT; |
| 36 | 35 | ||
| 37 | if (onoff) | 36 | if (onoff) |
| 38 | ret = dvb_usb_generic_write(d, st->data, 2); | 37 | ret = dvb_usb_generic_write(d, st->data, 2); |
| 39 | 38 | ||
| 40 | mutex_unlock(&st->data_mutex); | 39 | mutex_unlock(&d->data_mutex); |
| 41 | return ret; | 40 | return ret; |
| 42 | } | 41 | } |
| 43 | 42 | ||
| 44 | static int dtt200u_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) | 43 | static int dtt200u_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) |
| 45 | { | 44 | { |
| 46 | struct dtt200u_state *st = adap->dev->priv; | 45 | struct dvb_usb_device *d = adap->dev; |
| 46 | struct dtt200u_state *st = d->priv; | ||
| 47 | int ret; | 47 | int ret; |
| 48 | 48 | ||
| 49 | mutex_lock(&st->data_mutex); | 49 | mutex_lock(&d->data_mutex); |
| 50 | st->data[0] = SET_STREAMING; | 50 | st->data[0] = SET_STREAMING; |
| 51 | st->data[1] = onoff; | 51 | st->data[1] = onoff; |
| 52 | 52 | ||
| @@ -61,26 +61,27 @@ static int dtt200u_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff) | |||
| 61 | ret = dvb_usb_generic_write(adap->dev, st->data, 1); | 61 | ret = dvb_usb_generic_write(adap->dev, st->data, 1); |
| 62 | 62 | ||
| 63 | ret: | 63 | ret: |
| 64 | mutex_unlock(&st->data_mutex); | 64 | mutex_unlock(&d->data_mutex); |
| 65 | 65 | ||
| 66 | return ret; | 66 | return ret; |
| 67 | } | 67 | } |
| 68 | 68 | ||
| 69 | static int dtt200u_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid, int onoff) | 69 | static int dtt200u_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid, int onoff) |
| 70 | { | 70 | { |
| 71 | struct dtt200u_state *st = adap->dev->priv; | 71 | struct dvb_usb_device *d = adap->dev; |
| 72 | struct dtt200u_state *st = d->priv; | ||
| 72 | int ret; | 73 | int ret; |
| 73 | 74 | ||
| 74 | pid = onoff ? pid : 0; | 75 | pid = onoff ? pid : 0; |
| 75 | 76 | ||
| 76 | mutex_lock(&st->data_mutex); | 77 | mutex_lock(&d->data_mutex); |
| 77 | st->data[0] = SET_PID_FILTER; | 78 | st->data[0] = SET_PID_FILTER; |
| 78 | st->data[1] = index; | 79 | st->data[1] = index; |
| 79 | st->data[2] = pid & 0xff; | 80 | st->data[2] = pid & 0xff; |
| 80 | st->data[3] = (pid >> 8) & 0x1f; | 81 | st->data[3] = (pid >> 8) & 0x1f; |
| 81 | 82 | ||
| 82 | ret = dvb_usb_generic_write(adap->dev, st->data, 4); | 83 | ret = dvb_usb_generic_write(adap->dev, st->data, 4); |
| 83 | mutex_unlock(&st->data_mutex); | 84 | mutex_unlock(&d->data_mutex); |
| 84 | 85 | ||
| 85 | return ret; | 86 | return ret; |
| 86 | } | 87 | } |
| @@ -91,7 +92,7 @@ static int dtt200u_rc_query(struct dvb_usb_device *d) | |||
| 91 | u32 scancode; | 92 | u32 scancode; |
| 92 | int ret; | 93 | int ret; |
| 93 | 94 | ||
| 94 | mutex_lock(&st->data_mutex); | 95 | mutex_lock(&d->data_mutex); |
| 95 | st->data[0] = GET_RC_CODE; | 96 | st->data[0] = GET_RC_CODE; |
| 96 | 97 | ||
| 97 | ret = dvb_usb_generic_rw(d, st->data, 1, st->data, 5, 0); | 98 | ret = dvb_usb_generic_rw(d, st->data, 1, st->data, 5, 0); |
| @@ -126,7 +127,7 @@ static int dtt200u_rc_query(struct dvb_usb_device *d) | |||
| 126 | deb_info("st->data: %*ph\n", 5, st->data); | 127 | deb_info("st->data: %*ph\n", 5, st->data); |
| 127 | 128 | ||
| 128 | ret: | 129 | ret: |
| 129 | mutex_unlock(&st->data_mutex); | 130 | mutex_unlock(&d->data_mutex); |
| 130 | return ret; | 131 | return ret; |
| 131 | } | 132 | } |
| 132 | 133 | ||
| @@ -145,24 +146,17 @@ static struct dvb_usb_device_properties wt220u_miglia_properties; | |||
| 145 | static int dtt200u_usb_probe(struct usb_interface *intf, | 146 | static int dtt200u_usb_probe(struct usb_interface *intf, |
| 146 | const struct usb_device_id *id) | 147 | const struct usb_device_id *id) |
| 147 | { | 148 | { |
| 148 | struct dvb_usb_device *d; | ||
| 149 | struct dtt200u_state *st; | ||
| 150 | |||
| 151 | if (0 == dvb_usb_device_init(intf, &dtt200u_properties, | 149 | if (0 == dvb_usb_device_init(intf, &dtt200u_properties, |
| 152 | THIS_MODULE, &d, adapter_nr) || | 150 | THIS_MODULE, NULL, adapter_nr) || |
| 153 | 0 == dvb_usb_device_init(intf, &wt220u_properties, | 151 | 0 == dvb_usb_device_init(intf, &wt220u_properties, |
| 154 | THIS_MODULE, &d, adapter_nr) || | 152 | THIS_MODULE, NULL, adapter_nr) || |
| 155 | 0 == dvb_usb_device_init(intf, &wt220u_fc_properties, | 153 | 0 == dvb_usb_device_init(intf, &wt220u_fc_properties, |
| 156 | THIS_MODULE, &d, adapter_nr) || | 154 | THIS_MODULE, NULL, adapter_nr) || |
| 157 | 0 == dvb_usb_device_init(intf, &wt220u_zl0353_properties, | 155 | 0 == dvb_usb_device_init(intf, &wt220u_zl0353_properties, |
| 158 | THIS_MODULE, &d, adapter_nr) || | 156 | THIS_MODULE, NULL, adapter_nr) || |
| 159 | 0 == dvb_usb_device_init(intf, &wt220u_miglia_properties, | 157 | 0 == dvb_usb_device_init(intf, &wt220u_miglia_properties, |
| 160 | THIS_MODULE, &d, adapter_nr)) { | 158 | THIS_MODULE, NULL, adapter_nr)) |
| 161 | st = d->priv; | ||
| 162 | mutex_init(&st->data_mutex); | ||
| 163 | |||
| 164 | return 0; | 159 | return 0; |
| 165 | } | ||
| 166 | 160 | ||
| 167 | return -ENODEV; | 161 | return -ENODEV; |
| 168 | } | 162 | } |
diff --git a/drivers/media/usb/dvb-usb/dvb-usb-init.c b/drivers/media/usb/dvb-usb/dvb-usb-init.c index 3896ba9a4179..84308569e7dc 100644 --- a/drivers/media/usb/dvb-usb/dvb-usb-init.c +++ b/drivers/media/usb/dvb-usb/dvb-usb-init.c | |||
| @@ -142,6 +142,7 @@ static int dvb_usb_init(struct dvb_usb_device *d, short *adapter_nums) | |||
| 142 | { | 142 | { |
| 143 | int ret = 0; | 143 | int ret = 0; |
| 144 | 144 | ||
| 145 | mutex_init(&d->data_mutex); | ||
| 145 | mutex_init(&d->usb_mutex); | 146 | mutex_init(&d->usb_mutex); |
| 146 | mutex_init(&d->i2c_mutex); | 147 | mutex_init(&d->i2c_mutex); |
| 147 | 148 | ||
diff --git a/drivers/media/usb/dvb-usb/dvb-usb.h b/drivers/media/usb/dvb-usb/dvb-usb.h index 639c4678c65b..107255b08b2b 100644 --- a/drivers/media/usb/dvb-usb/dvb-usb.h +++ b/drivers/media/usb/dvb-usb/dvb-usb.h | |||
| @@ -404,8 +404,12 @@ struct dvb_usb_adapter { | |||
| 404 | * Powered is in/decremented for each call to modify the state. | 404 | * Powered is in/decremented for each call to modify the state. |
| 405 | * @udev: pointer to the device's struct usb_device. | 405 | * @udev: pointer to the device's struct usb_device. |
| 406 | * | 406 | * |
| 407 | * @usb_mutex: semaphore of USB control messages (reading needs two messages) | 407 | * @data_mutex: mutex to protect the data structure used to store URB data |
| 408 | * @i2c_mutex: semaphore for i2c-transfers | 408 | * @usb_mutex: mutex of USB control messages (reading needs two messages). |
| 409 | * Please notice that this mutex is used internally at the generic | ||
| 410 | * URB control functions. So, drivers using dvb_usb_generic_rw() and | ||
| 411 | * derivated functions should not lock it internally. | ||
| 412 | * @i2c_mutex: mutex for i2c-transfers | ||
| 409 | * | 413 | * |
| 410 | * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB | 414 | * @i2c_adap: device's i2c_adapter if it uses I2CoverUSB |
| 411 | * | 415 | * |
| @@ -433,6 +437,7 @@ struct dvb_usb_device { | |||
| 433 | int powered; | 437 | int powered; |
| 434 | 438 | ||
| 435 | /* locking */ | 439 | /* locking */ |
| 440 | struct mutex data_mutex; | ||
| 436 | struct mutex usb_mutex; | 441 | struct mutex usb_mutex; |
| 437 | 442 | ||
| 438 | /* i2c */ | 443 | /* i2c */ |
