aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/rc
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-10-11 16:22:22 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-10-11 16:22:22 -0400
commitde34f4da7f62ff59ac6e1ef320b0fcfa3296fce3 (patch)
tree88b5db2fc7fbbb0353edd8447a832a5225a49d01 /drivers/media/rc
parent56e520c7a0a490b63b042b047ec9659fc08762a4 (diff)
parent9fce0c226536fc36c7fb0a80000ca38a995be43e (diff)
Merge tag 'media/v4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media
Pull media updates from Mauro Carvalho Chehab: - Documentation improvements: conversion of all non-DocBook documents to Sphinx and lots of fixes to the uAPI media book - New PCI driver for Techwell TW5864 media grabber boards - New SoC driver for ATMEL Image Sensor Controller - Removal of some obsolete SoC drivers (s5p-tv driver and soc_camera drivers) - Addition of ST CEC driver - Lots of drivers fixes, improvements and additions * tag 'media/v4.9-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (464 commits) [media] ttusb_dec: avoid the risk of go past buffer [media] cx23885: Fix some smatch warnings [media] si2165: switch to regmap [media] si2165: use i2c_client->dev instead of i2c_adapter->dev for logging [media] si2165: Remove legacy attach [media] cx231xx: attach si2165 driver via i2c_client [media] cx231xx: Prepare for attaching new style i2c_client DVB demod drivers [media] cx23885: attach si2165 driver via i2c_client [media] si2165: support i2c_client attach [media] si2165: avoid division by zero [media] rcar-vin: add R-Car gen2 fallback compatibility string [media] lgdt3306a: remove 20*50 msec unnecessary timeout [media] cx25821: Remove deprecated create_singlethread_workqueue [media] cx25821: Drop Freeing of Workqueue [media] cxd2841er: force 8MHz bandwidth for DVB-C if specified bw not supported [media] redrat3: hardware-specific parameters [media] redrat3: remove hw_timeout member [media] cxd2841er: BER and SNR reading for ISDB-T [media] dvb-usb: avoid link error with dib3000m{b,c| [media] dvb-usb: split out common parts of dibusb ...
Diffstat (limited to 'drivers/media/rc')
-rw-r--r--drivers/media/rc/igorplugusb.c3
-rw-r--r--drivers/media/rc/img-ir/img-ir-nec.c6
-rw-r--r--drivers/media/rc/ir-nec-decoder.c8
-rw-r--r--drivers/media/rc/ir-rc6-decoder.c4
-rw-r--r--drivers/media/rc/nuvoton-cir.c40
-rw-r--r--drivers/media/rc/rc-ir-raw.c9
-rw-r--r--drivers/media/rc/rc-main.c13
-rw-r--r--drivers/media/rc/redrat3.c67
-rw-r--r--drivers/media/rc/streamzap.c2
9 files changed, 97 insertions, 55 deletions
diff --git a/drivers/media/rc/igorplugusb.c b/drivers/media/rc/igorplugusb.c
index e0c531fa01da..5cf983be07a2 100644
--- a/drivers/media/rc/igorplugusb.c
+++ b/drivers/media/rc/igorplugusb.c
@@ -203,7 +203,8 @@ static int igorplugusb_probe(struct usb_interface *intf,
203 * This device can only store 36 pulses + spaces, which is not enough 203 * This device can only store 36 pulses + spaces, which is not enough
204 * for the NEC protocol and many others. 204 * for the NEC protocol and many others.
205 */ 205 */
206 rc->allowed_protocols = RC_BIT_ALL & ~(RC_BIT_NEC | RC_BIT_RC6_6A_20 | 206 rc->allowed_protocols = RC_BIT_ALL & ~(RC_BIT_NEC | RC_BIT_NECX |
207 RC_BIT_NEC32 | RC_BIT_RC6_6A_20 |
207 RC_BIT_RC6_6A_24 | RC_BIT_RC6_6A_32 | RC_BIT_RC6_MCE | 208 RC_BIT_RC6_6A_24 | RC_BIT_RC6_6A_32 | RC_BIT_RC6_MCE |
208 RC_BIT_SONY20 | RC_BIT_MCE_KBD | RC_BIT_SANYO); 209 RC_BIT_SONY20 | RC_BIT_MCE_KBD | RC_BIT_SANYO);
209 210
diff --git a/drivers/media/rc/img-ir/img-ir-nec.c b/drivers/media/rc/img-ir/img-ir-nec.c
index 27a7ea8f1260..09314933ea08 100644
--- a/drivers/media/rc/img-ir/img-ir-nec.c
+++ b/drivers/media/rc/img-ir/img-ir-nec.c
@@ -34,19 +34,21 @@ static int img_ir_nec_scancode(int len, u64 raw, u64 enabled_protocols,
34 bitrev8(addr_inv) << 16 | 34 bitrev8(addr_inv) << 16 |
35 bitrev8(data) << 8 | 35 bitrev8(data) << 8 |
36 bitrev8(data_inv); 36 bitrev8(data_inv);
37 request->protocol = RC_TYPE_NEC32;
37 } else if ((addr_inv ^ addr) != 0xff) { 38 } else if ((addr_inv ^ addr) != 0xff) {
38 /* Extended NEC */ 39 /* Extended NEC */
39 /* scan encoding: AAaaDD */ 40 /* scan encoding: AAaaDD */
40 request->scancode = addr << 16 | 41 request->scancode = addr << 16 |
41 addr_inv << 8 | 42 addr_inv << 8 |
42 data; 43 data;
44 request->protocol = RC_TYPE_NECX;
43 } else { 45 } else {
44 /* Normal NEC */ 46 /* Normal NEC */
45 /* scan encoding: AADD */ 47 /* scan encoding: AADD */
46 request->scancode = addr << 8 | 48 request->scancode = addr << 8 |
47 data; 49 data;
50 request->protocol = RC_TYPE_NEC;
48 } 51 }
49 request->protocol = RC_TYPE_NEC;
50 return IMG_IR_SCANCODE; 52 return IMG_IR_SCANCODE;
51} 53}
52 54
@@ -109,7 +111,7 @@ static int img_ir_nec_filter(const struct rc_scancode_filter *in,
109 * http://wiki.altium.com/display/ADOH/NEC+Infrared+Transmission+Protocol 111 * http://wiki.altium.com/display/ADOH/NEC+Infrared+Transmission+Protocol
110 */ 112 */
111struct img_ir_decoder img_ir_nec = { 113struct img_ir_decoder img_ir_nec = {
112 .type = RC_BIT_NEC, 114 .type = RC_BIT_NEC | RC_BIT_NECX | RC_BIT_NEC32,
113 .control = { 115 .control = {
114 .decoden = 1, 116 .decoden = 1,
115 .code_type = IMG_IR_CODETYPE_PULSEDIST, 117 .code_type = IMG_IR_CODETYPE_PULSEDIST,
diff --git a/drivers/media/rc/ir-nec-decoder.c b/drivers/media/rc/ir-nec-decoder.c
index bea0d1eedee0..2a9d155548ab 100644
--- a/drivers/media/rc/ir-nec-decoder.c
+++ b/drivers/media/rc/ir-nec-decoder.c
@@ -49,6 +49,7 @@ static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev)
49{ 49{
50 struct nec_dec *data = &dev->raw->nec; 50 struct nec_dec *data = &dev->raw->nec;
51 u32 scancode; 51 u32 scancode;
52 enum rc_type rc_type;
52 u8 address, not_address, command, not_command; 53 u8 address, not_address, command, not_command;
53 bool send_32bits = false; 54 bool send_32bits = false;
54 55
@@ -171,22 +172,25 @@ static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev)
171 * least Apple and TiVo remotes */ 172 * least Apple and TiVo remotes */
172 scancode = data->bits; 173 scancode = data->bits;
173 IR_dprintk(1, "NEC (modified) scancode 0x%08x\n", scancode); 174 IR_dprintk(1, "NEC (modified) scancode 0x%08x\n", scancode);
175 rc_type = RC_TYPE_NEC32;
174 } else if ((address ^ not_address) != 0xff) { 176 } else if ((address ^ not_address) != 0xff) {
175 /* Extended NEC */ 177 /* Extended NEC */
176 scancode = address << 16 | 178 scancode = address << 16 |
177 not_address << 8 | 179 not_address << 8 |
178 command; 180 command;
179 IR_dprintk(1, "NEC (Ext) scancode 0x%06x\n", scancode); 181 IR_dprintk(1, "NEC (Ext) scancode 0x%06x\n", scancode);
182 rc_type = RC_TYPE_NECX;
180 } else { 183 } else {
181 /* Normal NEC */ 184 /* Normal NEC */
182 scancode = address << 8 | command; 185 scancode = address << 8 | command;
183 IR_dprintk(1, "NEC scancode 0x%04x\n", scancode); 186 IR_dprintk(1, "NEC scancode 0x%04x\n", scancode);
187 rc_type = RC_TYPE_NEC;
184 } 188 }
185 189
186 if (data->is_nec_x) 190 if (data->is_nec_x)
187 data->necx_repeat = true; 191 data->necx_repeat = true;
188 192
189 rc_keydown(dev, RC_TYPE_NEC, scancode, 0); 193 rc_keydown(dev, rc_type, scancode, 0);
190 data->state = STATE_INACTIVE; 194 data->state = STATE_INACTIVE;
191 return 0; 195 return 0;
192 } 196 }
@@ -198,7 +202,7 @@ static int ir_nec_decode(struct rc_dev *dev, struct ir_raw_event ev)
198} 202}
199 203
200static struct ir_raw_handler nec_handler = { 204static struct ir_raw_handler nec_handler = {
201 .protocols = RC_BIT_NEC, 205 .protocols = RC_BIT_NEC | RC_BIT_NECX | RC_BIT_NEC32,
202 .decode = ir_nec_decode, 206 .decode = ir_nec_decode,
203}; 207};
204 208
diff --git a/drivers/media/rc/ir-rc6-decoder.c b/drivers/media/rc/ir-rc6-decoder.c
index e0e2edefa651..5cc54c967a80 100644
--- a/drivers/media/rc/ir-rc6-decoder.c
+++ b/drivers/media/rc/ir-rc6-decoder.c
@@ -248,7 +248,7 @@ again:
248 toggle = 0; 248 toggle = 0;
249 break; 249 break;
250 case 24: 250 case 24:
251 protocol = RC_BIT_RC6_6A_24; 251 protocol = RC_TYPE_RC6_6A_24;
252 toggle = 0; 252 toggle = 0;
253 break; 253 break;
254 case 32: 254 case 32:
@@ -257,7 +257,7 @@ again:
257 toggle = !!(scancode & RC6_6A_MCE_TOGGLE_MASK); 257 toggle = !!(scancode & RC6_6A_MCE_TOGGLE_MASK);
258 scancode &= ~RC6_6A_MCE_TOGGLE_MASK; 258 scancode &= ~RC6_6A_MCE_TOGGLE_MASK;
259 } else { 259 } else {
260 protocol = RC_BIT_RC6_6A_32; 260 protocol = RC_TYPE_RC6_6A_32;
261 toggle = 0; 261 toggle = 0;
262 } 262 }
263 break; 263 break;
diff --git a/drivers/media/rc/nuvoton-cir.c b/drivers/media/rc/nuvoton-cir.c
index 00215f343819..04fedaa75612 100644
--- a/drivers/media/rc/nuvoton-cir.c
+++ b/drivers/media/rc/nuvoton-cir.c
@@ -769,21 +769,11 @@ static void nvt_process_rx_ir_data(struct nvt_dev *nvt)
769 rawir.pulse ? "pulse" : "space", rawir.duration); 769 rawir.pulse ? "pulse" : "space", rawir.duration);
770 770
771 ir_raw_event_store_with_filter(nvt->rdev, &rawir); 771 ir_raw_event_store_with_filter(nvt->rdev, &rawir);
772
773 /*
774 * BUF_PULSE_BIT indicates end of IR data, BUF_REPEAT_BYTE
775 * indicates end of IR signal, but new data incoming. In both
776 * cases, it means we're ready to call ir_raw_event_handle
777 */
778 if ((sample == BUF_PULSE_BIT) && (i + 1 < nvt->pkts)) {
779 nvt_dbg("Calling ir_raw_event_handle (signal end)\n");
780 ir_raw_event_handle(nvt->rdev);
781 }
782 } 772 }
783 773
784 nvt->pkts = 0; 774 nvt->pkts = 0;
785 775
786 nvt_dbg("Calling ir_raw_event_handle (buffer empty)\n"); 776 nvt_dbg("Calling ir_raw_event_handle\n");
787 ir_raw_event_handle(nvt->rdev); 777 ir_raw_event_handle(nvt->rdev);
788 778
789 nvt_dbg_verbose("%s done", __func__); 779 nvt_dbg_verbose("%s done", __func__);
@@ -801,8 +791,7 @@ static void nvt_handle_rx_fifo_overrun(struct nvt_dev *nvt)
801/* copy data from hardware rx fifo into driver buffer */ 791/* copy data from hardware rx fifo into driver buffer */
802static void nvt_get_rx_ir_data(struct nvt_dev *nvt) 792static void nvt_get_rx_ir_data(struct nvt_dev *nvt)
803{ 793{
804 u8 fifocount, val; 794 u8 fifocount;
805 unsigned int b_idx;
806 int i; 795 int i;
807 796
808 /* Get count of how many bytes to read from RX FIFO */ 797 /* Get count of how many bytes to read from RX FIFO */
@@ -810,21 +799,11 @@ static void nvt_get_rx_ir_data(struct nvt_dev *nvt)
810 799
811 nvt_dbg("attempting to fetch %u bytes from hw rx fifo", fifocount); 800 nvt_dbg("attempting to fetch %u bytes from hw rx fifo", fifocount);
812 801
813 b_idx = nvt->pkts;
814
815 /* This should never happen, but lets check anyway... */
816 if (b_idx + fifocount > RX_BUF_LEN) {
817 nvt_process_rx_ir_data(nvt);
818 b_idx = 0;
819 }
820
821 /* Read fifocount bytes from CIR Sample RX FIFO register */ 802 /* Read fifocount bytes from CIR Sample RX FIFO register */
822 for (i = 0; i < fifocount; i++) { 803 for (i = 0; i < fifocount; i++)
823 val = nvt_cir_reg_read(nvt, CIR_SRXFIFO); 804 nvt->buf[i] = nvt_cir_reg_read(nvt, CIR_SRXFIFO);
824 nvt->buf[b_idx + i] = val;
825 }
826 805
827 nvt->pkts += fifocount; 806 nvt->pkts = fifocount;
828 nvt_dbg("%s: pkts now %d", __func__, nvt->pkts); 807 nvt_dbg("%s: pkts now %d", __func__, nvt->pkts);
829 808
830 nvt_process_rx_ir_data(nvt); 809 nvt_process_rx_ir_data(nvt);
@@ -886,6 +865,15 @@ static irqreturn_t nvt_cir_isr(int irq, void *data)
886 status = nvt_cir_reg_read(nvt, CIR_IRSTS); 865 status = nvt_cir_reg_read(nvt, CIR_IRSTS);
887 iren = nvt_cir_reg_read(nvt, CIR_IREN); 866 iren = nvt_cir_reg_read(nvt, CIR_IREN);
888 867
868 /* At least NCT6779D creates a spurious interrupt when the
869 * logical device is being disabled.
870 */
871 if (status == 0xff && iren == 0xff) {
872 spin_unlock_irqrestore(&nvt->nvt_lock, flags);
873 nvt_dbg_verbose("Spurious interrupt detected");
874 return IRQ_HANDLED;
875 }
876
889 /* IRQ may be shared with CIR WAKE, therefore check for each 877 /* IRQ may be shared with CIR WAKE, therefore check for each
890 * status bit whether the related interrupt source is enabled 878 * status bit whether the related interrupt source is enabled
891 */ 879 */
diff --git a/drivers/media/rc/rc-ir-raw.c b/drivers/media/rc/rc-ir-raw.c
index 144304c94606..205ecc602e34 100644
--- a/drivers/media/rc/rc-ir-raw.c
+++ b/drivers/media/rc/rc-ir-raw.c
@@ -26,6 +26,7 @@ static LIST_HEAD(ir_raw_client_list);
26/* Used to handle IR raw handler extensions */ 26/* Used to handle IR raw handler extensions */
27static DEFINE_MUTEX(ir_raw_handler_lock); 27static DEFINE_MUTEX(ir_raw_handler_lock);
28static LIST_HEAD(ir_raw_handler_list); 28static LIST_HEAD(ir_raw_handler_list);
29static DEFINE_MUTEX(available_protocols_lock);
29static u64 available_protocols; 30static u64 available_protocols;
30 31
31static int ir_raw_event_thread(void *data) 32static int ir_raw_event_thread(void *data)
@@ -234,9 +235,9 @@ u64
234ir_raw_get_allowed_protocols(void) 235ir_raw_get_allowed_protocols(void)
235{ 236{
236 u64 protocols; 237 u64 protocols;
237 mutex_lock(&ir_raw_handler_lock); 238 mutex_lock(&available_protocols_lock);
238 protocols = available_protocols; 239 protocols = available_protocols;
239 mutex_unlock(&ir_raw_handler_lock); 240 mutex_unlock(&available_protocols_lock);
240 return protocols; 241 return protocols;
241} 242}
242 243
@@ -330,7 +331,9 @@ int ir_raw_handler_register(struct ir_raw_handler *ir_raw_handler)
330 if (ir_raw_handler->raw_register) 331 if (ir_raw_handler->raw_register)
331 list_for_each_entry(raw, &ir_raw_client_list, list) 332 list_for_each_entry(raw, &ir_raw_client_list, list)
332 ir_raw_handler->raw_register(raw->dev); 333 ir_raw_handler->raw_register(raw->dev);
334 mutex_lock(&available_protocols_lock);
333 available_protocols |= ir_raw_handler->protocols; 335 available_protocols |= ir_raw_handler->protocols;
336 mutex_unlock(&available_protocols_lock);
334 mutex_unlock(&ir_raw_handler_lock); 337 mutex_unlock(&ir_raw_handler_lock);
335 338
336 return 0; 339 return 0;
@@ -349,7 +352,9 @@ void ir_raw_handler_unregister(struct ir_raw_handler *ir_raw_handler)
349 if (ir_raw_handler->raw_unregister) 352 if (ir_raw_handler->raw_unregister)
350 ir_raw_handler->raw_unregister(raw->dev); 353 ir_raw_handler->raw_unregister(raw->dev);
351 } 354 }
355 mutex_lock(&available_protocols_lock);
352 available_protocols &= ~protocols; 356 available_protocols &= ~protocols;
357 mutex_unlock(&available_protocols_lock);
353 mutex_unlock(&ir_raw_handler_lock); 358 mutex_unlock(&ir_raw_handler_lock);
354} 359}
355EXPORT_SYMBOL(ir_raw_handler_unregister); 360EXPORT_SYMBOL(ir_raw_handler_unregister);
diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
index 8e7f2929fa6f..d9c1f2ff7119 100644
--- a/drivers/media/rc/rc-main.c
+++ b/drivers/media/rc/rc-main.c
@@ -795,7 +795,9 @@ static const struct {
795 { RC_BIT_UNKNOWN, "unknown", NULL }, 795 { RC_BIT_UNKNOWN, "unknown", NULL },
796 { RC_BIT_RC5 | 796 { RC_BIT_RC5 |
797 RC_BIT_RC5X, "rc-5", "ir-rc5-decoder" }, 797 RC_BIT_RC5X, "rc-5", "ir-rc5-decoder" },
798 { RC_BIT_NEC, "nec", "ir-nec-decoder" }, 798 { RC_BIT_NEC |
799 RC_BIT_NECX |
800 RC_BIT_NEC32, "nec", "ir-nec-decoder" },
799 { RC_BIT_RC6_0 | 801 { RC_BIT_RC6_0 |
800 RC_BIT_RC6_6A_20 | 802 RC_BIT_RC6_6A_20 |
801 RC_BIT_RC6_6A_24 | 803 RC_BIT_RC6_6A_24 |
@@ -1460,6 +1462,10 @@ int rc_register_device(struct rc_dev *dev)
1460 dev->input_dev->phys = dev->input_phys; 1462 dev->input_dev->phys = dev->input_phys;
1461 dev->input_dev->name = dev->input_name; 1463 dev->input_dev->name = dev->input_name;
1462 1464
1465 rc = input_register_device(dev->input_dev);
1466 if (rc)
1467 goto out_table;
1468
1463 /* 1469 /*
1464 * Default delay of 250ms is too short for some protocols, especially 1470 * Default delay of 250ms is too short for some protocols, especially
1465 * since the timeout is currently set to 250ms. Increase it to 500ms, 1471 * since the timeout is currently set to 250ms. Increase it to 500ms,
@@ -1475,11 +1481,6 @@ int rc_register_device(struct rc_dev *dev)
1475 */ 1481 */
1476 dev->input_dev->rep[REP_PERIOD] = 125; 1482 dev->input_dev->rep[REP_PERIOD] = 125;
1477 1483
1478 /* rc_open will be called here */
1479 rc = input_register_device(dev->input_dev);
1480 if (rc)
1481 goto out_table;
1482
1483 path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL); 1484 path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL);
1484 dev_info(&dev->dev, "%s as %s\n", 1485 dev_info(&dev->dev, "%s as %s\n",
1485 dev->input_name ?: "Unspecified device", path ?: "N/A"); 1486 dev->input_name ?: "Unspecified device", path ?: "N/A");
diff --git a/drivers/media/rc/redrat3.c b/drivers/media/rc/redrat3.c
index ec8016d9b009..05ba47bc0b61 100644
--- a/drivers/media/rc/redrat3.c
+++ b/drivers/media/rc/redrat3.c
@@ -124,6 +124,41 @@
124#define USB_RR3USB_PRODUCT_ID 0x0001 124#define USB_RR3USB_PRODUCT_ID 0x0001
125#define USB_RR3IIUSB_PRODUCT_ID 0x0005 125#define USB_RR3IIUSB_PRODUCT_ID 0x0005
126 126
127
128/*
129 * The redrat3 encodes an IR signal as set of different lengths and a set
130 * of indices into those lengths. This sets how much two lengths must
131 * differ before they are considered distinct, the value is specified
132 * in microseconds.
133 * Default 5, value 0 to 127.
134 */
135static int length_fuzz = 5;
136module_param(length_fuzz, uint, 0644);
137MODULE_PARM_DESC(length_fuzz, "Length Fuzz (0-127)");
138
139/*
140 * When receiving a continuous ir stream (for example when a user is
141 * holding a button down on a remote), this specifies the minimum size
142 * of a space when the redrat3 sends a irdata packet to the host. Specified
143 * in miliseconds. Default value 18ms.
144 * The value can be between 2 and 30 inclusive.
145 */
146static int minimum_pause = 18;
147module_param(minimum_pause, uint, 0644);
148MODULE_PARM_DESC(minimum_pause, "Minimum Pause in ms (2-30)");
149
150/*
151 * The carrier frequency is measured during the first pulse of the IR
152 * signal. The larger the number of periods used To measure, the more
153 * accurate the result is likely to be, however some signals have short
154 * initial pulses, so in some case it may be necessary to reduce this value.
155 * Default 8, value 1 to 255.
156 */
157static int periods_measure_carrier = 8;
158module_param(periods_measure_carrier, uint, 0644);
159MODULE_PARM_DESC(periods_measure_carrier, "Number of Periods to Measure Carrier (1-255)");
160
161
127struct redrat3_header { 162struct redrat3_header {
128 __be16 length; 163 __be16 length;
129 __be16 transfer_type; 164 __be16 transfer_type;
@@ -188,9 +223,6 @@ struct redrat3_dev {
188 /* usb dma */ 223 /* usb dma */
189 dma_addr_t dma_in; 224 dma_addr_t dma_in;
190 225
191 /* rx signal timeout */
192 u32 hw_timeout;
193
194 /* Is the device currently transmitting?*/ 226 /* Is the device currently transmitting?*/
195 bool transmitting; 227 bool transmitting;
196 228
@@ -372,7 +404,7 @@ static void redrat3_process_ir_data(struct redrat3_dev *rr3)
372 /* add a trailing space */ 404 /* add a trailing space */
373 rawir.pulse = false; 405 rawir.pulse = false;
374 rawir.timeout = true; 406 rawir.timeout = true;
375 rawir.duration = US_TO_NS(rr3->hw_timeout); 407 rawir.duration = rr3->rc->timeout;
376 dev_dbg(dev, "storing trailing timeout with duration %d\n", 408 dev_dbg(dev, "storing trailing timeout with duration %d\n",
377 rawir.duration); 409 rawir.duration);
378 ir_raw_event_store_with_filter(rr3->rc, &rawir); 410 ir_raw_event_store_with_filter(rr3->rc, &rawir);
@@ -480,7 +512,7 @@ static int redrat3_set_timeout(struct rc_dev *rc_dev, unsigned int timeoutns)
480 struct redrat3_dev *rr3 = rc_dev->priv; 512 struct redrat3_dev *rr3 = rc_dev->priv;
481 struct usb_device *udev = rr3->udev; 513 struct usb_device *udev = rr3->udev;
482 struct device *dev = rr3->dev; 514 struct device *dev = rr3->dev;
483 u32 *timeout; 515 __be32 *timeout;
484 int ret; 516 int ret;
485 517
486 timeout = kmalloc(sizeof(*timeout), GFP_KERNEL); 518 timeout = kmalloc(sizeof(*timeout), GFP_KERNEL);
@@ -495,10 +527,9 @@ static int redrat3_set_timeout(struct rc_dev *rc_dev, unsigned int timeoutns)
495 dev_dbg(dev, "set ir parm timeout %d ret 0x%02x\n", 527 dev_dbg(dev, "set ir parm timeout %d ret 0x%02x\n",
496 be32_to_cpu(*timeout), ret); 528 be32_to_cpu(*timeout), ret);
497 529
498 if (ret == sizeof(*timeout)) { 530 if (ret == sizeof(*timeout))
499 rr3->hw_timeout = timeoutns / 1000;
500 ret = 0; 531 ret = 0;
501 } else if (ret >= 0) 532 else if (ret >= 0)
502 ret = -EIO; 533 ret = -EIO;
503 534
504 kfree(timeout); 535 kfree(timeout);
@@ -529,12 +560,25 @@ static void redrat3_reset(struct redrat3_dev *rr3)
529 RR3_CPUCS_REG_ADDR, 0, val, len, HZ * 25); 560 RR3_CPUCS_REG_ADDR, 0, val, len, HZ * 25);
530 dev_dbg(dev, "reset returned 0x%02x\n", rc); 561 dev_dbg(dev, "reset returned 0x%02x\n", rc);
531 562
532 *val = 5; 563 *val = length_fuzz;
533 rc = usb_control_msg(udev, txpipe, RR3_SET_IR_PARAM, 564 rc = usb_control_msg(udev, txpipe, RR3_SET_IR_PARAM,
534 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, 565 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
535 RR3_IR_IO_LENGTH_FUZZ, 0, val, len, HZ * 25); 566 RR3_IR_IO_LENGTH_FUZZ, 0, val, len, HZ * 25);
536 dev_dbg(dev, "set ir parm len fuzz %d rc 0x%02x\n", *val, rc); 567 dev_dbg(dev, "set ir parm len fuzz %d rc 0x%02x\n", *val, rc);
537 568
569 *val = (65536 - (minimum_pause * 2000)) / 256;
570 rc = usb_control_msg(udev, txpipe, RR3_SET_IR_PARAM,
571 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
572 RR3_IR_IO_MIN_PAUSE, 0, val, len, HZ * 25);
573 dev_dbg(dev, "set ir parm min pause %d rc 0x%02x\n", *val, rc);
574
575 *val = periods_measure_carrier;
576 rc = usb_control_msg(udev, txpipe, RR3_SET_IR_PARAM,
577 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
578 RR3_IR_IO_PERIODS_MF, 0, val, len, HZ * 25);
579 dev_dbg(dev, "set ir parm periods measure carrier %d rc 0x%02x", *val,
580 rc);
581
538 *val = RR3_DRIVER_MAXLENS; 582 *val = RR3_DRIVER_MAXLENS;
539 rc = usb_control_msg(udev, txpipe, RR3_SET_IR_PARAM, 583 rc = usb_control_msg(udev, txpipe, RR3_SET_IR_PARAM,
540 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, 584 USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT,
@@ -889,7 +933,7 @@ static struct rc_dev *redrat3_init_rc_dev(struct redrat3_dev *rr3)
889 rc->allowed_protocols = RC_BIT_ALL; 933 rc->allowed_protocols = RC_BIT_ALL;
890 rc->min_timeout = MS_TO_NS(RR3_RX_MIN_TIMEOUT); 934 rc->min_timeout = MS_TO_NS(RR3_RX_MIN_TIMEOUT);
891 rc->max_timeout = MS_TO_NS(RR3_RX_MAX_TIMEOUT); 935 rc->max_timeout = MS_TO_NS(RR3_RX_MAX_TIMEOUT);
892 rc->timeout = US_TO_NS(rr3->hw_timeout); 936 rc->timeout = US_TO_NS(redrat3_get_timeout(rr3));
893 rc->s_timeout = redrat3_set_timeout; 937 rc->s_timeout = redrat3_set_timeout;
894 rc->tx_ir = redrat3_transmit_ir; 938 rc->tx_ir = redrat3_transmit_ir;
895 rc->s_tx_carrier = redrat3_set_tx_carrier; 939 rc->s_tx_carrier = redrat3_set_tx_carrier;
@@ -998,9 +1042,6 @@ static int redrat3_dev_probe(struct usb_interface *intf,
998 if (retval < 0) 1042 if (retval < 0)
999 goto error; 1043 goto error;
1000 1044
1001 /* store current hardware timeout, in µs */
1002 rr3->hw_timeout = redrat3_get_timeout(rr3);
1003
1004 /* default.. will get overridden by any sends with a freq defined */ 1045 /* default.. will get overridden by any sends with a freq defined */
1005 rr3->carrier = 38000; 1046 rr3->carrier = 38000;
1006 1047
diff --git a/drivers/media/rc/streamzap.c b/drivers/media/rc/streamzap.c
index 815243c65bc3..4004260a7c69 100644
--- a/drivers/media/rc/streamzap.c
+++ b/drivers/media/rc/streamzap.c
@@ -499,7 +499,7 @@ static int streamzap_resume(struct usb_interface *intf)
499 struct streamzap_ir *sz = usb_get_intfdata(intf); 499 struct streamzap_ir *sz = usb_get_intfdata(intf);
500 500
501 if (usb_submit_urb(sz->urb_in, GFP_ATOMIC)) { 501 if (usb_submit_urb(sz->urb_in, GFP_ATOMIC)) {
502 dev_err(sz->dev, "Error sumbiting urb\n"); 502 dev_err(sz->dev, "Error submitting urb\n");
503 return -EIO; 503 return -EIO;
504 } 504 }
505 505