diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-11 16:22:22 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-11 16:22:22 -0400 |
commit | de34f4da7f62ff59ac6e1ef320b0fcfa3296fce3 (patch) | |
tree | 88b5db2fc7fbbb0353edd8447a832a5225a49d01 /drivers/media/rc | |
parent | 56e520c7a0a490b63b042b047ec9659fc08762a4 (diff) | |
parent | 9fce0c226536fc36c7fb0a80000ca38a995be43e (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.c | 3 | ||||
-rw-r--r-- | drivers/media/rc/img-ir/img-ir-nec.c | 6 | ||||
-rw-r--r-- | drivers/media/rc/ir-nec-decoder.c | 8 | ||||
-rw-r--r-- | drivers/media/rc/ir-rc6-decoder.c | 4 | ||||
-rw-r--r-- | drivers/media/rc/nuvoton-cir.c | 40 | ||||
-rw-r--r-- | drivers/media/rc/rc-ir-raw.c | 9 | ||||
-rw-r--r-- | drivers/media/rc/rc-main.c | 13 | ||||
-rw-r--r-- | drivers/media/rc/redrat3.c | 67 | ||||
-rw-r--r-- | drivers/media/rc/streamzap.c | 2 |
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 | */ |
111 | struct img_ir_decoder img_ir_nec = { | 113 | struct 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 | ||
200 | static struct ir_raw_handler nec_handler = { | 204 | static 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 */ |
802 | static void nvt_get_rx_ir_data(struct nvt_dev *nvt) | 792 | static 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 */ |
27 | static DEFINE_MUTEX(ir_raw_handler_lock); | 27 | static DEFINE_MUTEX(ir_raw_handler_lock); |
28 | static LIST_HEAD(ir_raw_handler_list); | 28 | static LIST_HEAD(ir_raw_handler_list); |
29 | static DEFINE_MUTEX(available_protocols_lock); | ||
29 | static u64 available_protocols; | 30 | static u64 available_protocols; |
30 | 31 | ||
31 | static int ir_raw_event_thread(void *data) | 32 | static int ir_raw_event_thread(void *data) |
@@ -234,9 +235,9 @@ u64 | |||
234 | ir_raw_get_allowed_protocols(void) | 235 | ir_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 | } |
355 | EXPORT_SYMBOL(ir_raw_handler_unregister); | 360 | EXPORT_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 | */ | ||
135 | static int length_fuzz = 5; | ||
136 | module_param(length_fuzz, uint, 0644); | ||
137 | MODULE_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 | */ | ||
146 | static int minimum_pause = 18; | ||
147 | module_param(minimum_pause, uint, 0644); | ||
148 | MODULE_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 | */ | ||
157 | static int periods_measure_carrier = 8; | ||
158 | module_param(periods_measure_carrier, uint, 0644); | ||
159 | MODULE_PARM_DESC(periods_measure_carrier, "Number of Periods to Measure Carrier (1-255)"); | ||
160 | |||
161 | |||
127 | struct redrat3_header { | 162 | struct 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 | ||