Skip to content

Commit 0c70a1e

Browse files
authored
Merge pull request #177 from fbelavenuto/rc
Adding rc module
2 parents f8788da + 7c9ca5e commit 0c70a1e

File tree

13 files changed

+2189
-1
lines changed

13 files changed

+2189
-1
lines changed

apollolake-4.4.180/rc-core.ko

37.9 KB
Binary file not shown.

broadwell-4.4.180/rc-core.ko

38.4 KB
Binary file not shown.

broadwellnk-4.4.180/rc-core.ko

38.4 KB
Binary file not shown.

denverton-4.4.180/rc-core.ko

38.5 KB
Binary file not shown.

geminilake-4.4.180/rc-core.ko

37.8 KB
Binary file not shown.

r1000-4.4.180/rc-core.ko

38.4 KB
Binary file not shown.

src/4.x/defines.apollolake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ CONFIG_VMWARE_VMCI=n
125125

126126
nCONFIG_MEDIA_SUPPORT=m
127127
nCONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
128+
nCONFIG_RC_CORE=m
128129
nCONFIG_DVB_CORE=m
129130
nCONFIG_DVB_MAX_ADAPTERS=8
130131
nCONFIG_MEDIA_USB_SUPPORT=y

src/4.x/drivers/media/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ endif
2424
obj-$(CONFIG_DVB_CORE) += dvb-core/
2525

2626
# There are both core and drivers at RC subtree - merge before drivers
27-
#obj-y += rc/
27+
obj-y += rc/
2828

2929
#
3030
# Finally, merge the drivers that require the core

src/4.x/drivers/media/rc/Makefile

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
rc-core-objs := rc-main.o rc-ir-raw.o
2+
3+
#obj-y += keymaps/
4+
5+
obj-$(CONFIG_RC_CORE) += rc-core.o
6+
#obj-$(CONFIG_LIRC) += lirc_dev.o
7+
#obj-$(CONFIG_IR_NEC_DECODER) += ir-nec-decoder.o
8+
#obj-$(CONFIG_IR_RC5_DECODER) += ir-rc5-decoder.o
9+
#obj-$(CONFIG_IR_RC6_DECODER) += ir-rc6-decoder.o
10+
#obj-$(CONFIG_IR_JVC_DECODER) += ir-jvc-decoder.o
11+
#obj-$(CONFIG_IR_SONY_DECODER) += ir-sony-decoder.o
12+
#obj-$(CONFIG_IR_SANYO_DECODER) += ir-sanyo-decoder.o
13+
#obj-$(CONFIG_IR_SHARP_DECODER) += ir-sharp-decoder.o
14+
#obj-$(CONFIG_IR_MCE_KBD_DECODER) += ir-mce_kbd-decoder.o
15+
#obj-$(CONFIG_IR_LIRC_CODEC) += ir-lirc-codec.o
16+
#obj-$(CONFIG_IR_XMP_DECODER) += ir-xmp-decoder.o
17+
18+
# stand-alone IR receivers/transmitters
19+
#obj-$(CONFIG_RC_ATI_REMOTE) += ati_remote.o
20+
#obj-$(CONFIG_IR_HIX5HD2) += ir-hix5hd2.o
21+
#obj-$(CONFIG_IR_IMON) += imon.o
22+
#obj-$(CONFIG_IR_ITE_CIR) += ite-cir.o
23+
#obj-$(CONFIG_IR_MCEUSB) += mceusb.o
24+
#obj-$(CONFIG_IR_FINTEK) += fintek-cir.o
25+
#obj-$(CONFIG_IR_MESON) += meson-ir.o
26+
#obj-$(CONFIG_IR_NUVOTON) += nuvoton-cir.o
27+
#obj-$(CONFIG_IR_ENE) += ene_ir.o
28+
#obj-$(CONFIG_IR_REDRAT3) += redrat3.o
29+
#obj-$(CONFIG_IR_RX51) += ir-rx51.o
30+
#obj-$(CONFIG_IR_STREAMZAP) += streamzap.o
31+
#obj-$(CONFIG_IR_WINBOND_CIR) += winbond-cir.o
32+
#obj-$(CONFIG_RC_LOOPBACK) += rc-loopback.o
33+
#obj-$(CONFIG_IR_GPIO_CIR) += gpio-ir-recv.o
34+
#obj-$(CONFIG_IR_IGORPLUGUSB) += igorplugusb.o
35+
#obj-$(CONFIG_IR_IGUANA) += iguanair.o
36+
#obj-$(CONFIG_IR_TTUSBIR) += ttusbir.o
37+
#obj-$(CONFIG_RC_ST) += st_rc.o
38+
#obj-$(CONFIG_IR_SUNXI) += sunxi-cir.o
39+
#obj-$(CONFIG_IR_IMG) += img-ir/
Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
/*
2+
* Remote Controller core raw events header
3+
*
4+
* Copyright (C) 2010 by Mauro Carvalho Chehab
5+
*
6+
* This program is free software; you can redistribute it and/or modify
7+
* it under the terms of the GNU General Public License as published by
8+
* the Free Software Foundation version 2 of the License.
9+
*
10+
* This program is distributed in the hope that it will be useful,
11+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13+
* GNU General Public License for more details.
14+
*/
15+
16+
#ifndef _RC_CORE_PRIV
17+
#define _RC_CORE_PRIV
18+
19+
#include <linux/slab.h>
20+
#include <linux/spinlock.h>
21+
#include <media/rc-core.h>
22+
23+
struct ir_raw_handler {
24+
struct list_head list;
25+
26+
u64 protocols; /* which are handled by this handler */
27+
int (*decode)(struct rc_dev *dev, struct ir_raw_event event);
28+
29+
/* These two should only be used by the lirc decoder */
30+
int (*raw_register)(struct rc_dev *dev);
31+
int (*raw_unregister)(struct rc_dev *dev);
32+
};
33+
34+
struct ir_raw_event_ctrl {
35+
struct list_head list; /* to keep track of raw clients */
36+
struct task_struct *thread;
37+
spinlock_t lock;
38+
struct kfifo_rec_ptr_1 kfifo; /* fifo for the pulse/space durations */
39+
ktime_t last_event; /* when last event occurred */
40+
enum raw_event_type last_type; /* last event type */
41+
struct rc_dev *dev; /* pointer to the parent rc_dev */
42+
43+
/* raw decoder state follows */
44+
struct ir_raw_event prev_ev;
45+
struct ir_raw_event this_ev;
46+
struct nec_dec {
47+
int state;
48+
unsigned count;
49+
u32 bits;
50+
bool is_nec_x;
51+
bool necx_repeat;
52+
} nec;
53+
struct rc5_dec {
54+
int state;
55+
u32 bits;
56+
unsigned count;
57+
bool is_rc5x;
58+
} rc5;
59+
struct rc6_dec {
60+
int state;
61+
u8 header;
62+
u32 body;
63+
bool toggle;
64+
unsigned count;
65+
unsigned wanted_bits;
66+
} rc6;
67+
struct sony_dec {
68+
int state;
69+
u32 bits;
70+
unsigned count;
71+
} sony;
72+
struct jvc_dec {
73+
int state;
74+
u16 bits;
75+
u16 old_bits;
76+
unsigned count;
77+
bool first;
78+
bool toggle;
79+
} jvc;
80+
struct sanyo_dec {
81+
int state;
82+
unsigned count;
83+
u64 bits;
84+
} sanyo;
85+
struct sharp_dec {
86+
int state;
87+
unsigned count;
88+
u32 bits;
89+
unsigned int pulse_len;
90+
} sharp;
91+
struct mce_kbd_dec {
92+
struct input_dev *idev;
93+
struct timer_list rx_timeout;
94+
char name[64];
95+
char phys[64];
96+
int state;
97+
u8 header;
98+
u32 body;
99+
unsigned count;
100+
unsigned wanted_bits;
101+
} mce_kbd;
102+
struct lirc_codec {
103+
struct rc_dev *dev;
104+
struct lirc_driver *drv;
105+
int carrier_low;
106+
107+
ktime_t gap_start;
108+
u64 gap_duration;
109+
bool gap;
110+
bool send_timeout_reports;
111+
112+
} lirc;
113+
struct xmp_dec {
114+
int state;
115+
unsigned count;
116+
u32 durations[16];
117+
} xmp;
118+
};
119+
120+
/* macros for IR decoders */
121+
static inline bool geq_margin(unsigned d1, unsigned d2, unsigned margin)
122+
{
123+
return d1 > (d2 - margin);
124+
}
125+
126+
static inline bool eq_margin(unsigned d1, unsigned d2, unsigned margin)
127+
{
128+
return ((d1 > (d2 - margin)) && (d1 < (d2 + margin)));
129+
}
130+
131+
static inline bool is_transition(struct ir_raw_event *x, struct ir_raw_event *y)
132+
{
133+
return x->pulse != y->pulse;
134+
}
135+
136+
static inline void decrease_duration(struct ir_raw_event *ev, unsigned duration)
137+
{
138+
if (duration > ev->duration)
139+
ev->duration = 0;
140+
else
141+
ev->duration -= duration;
142+
}
143+
144+
/* Returns true if event is normal pulse/space event */
145+
static inline bool is_timing_event(struct ir_raw_event ev)
146+
{
147+
return !ev.carrier_report && !ev.reset;
148+
}
149+
150+
#define TO_US(duration) DIV_ROUND_CLOSEST((duration), 1000)
151+
#define TO_STR(is_pulse) ((is_pulse) ? "pulse" : "space")
152+
153+
/*
154+
* Routines from rc-raw.c to be used internally and by decoders
155+
*/
156+
u64 ir_raw_get_allowed_protocols(void);
157+
int ir_raw_event_register(struct rc_dev *dev);
158+
void ir_raw_event_unregister(struct rc_dev *dev);
159+
int ir_raw_handler_register(struct ir_raw_handler *ir_raw_handler);
160+
void ir_raw_handler_unregister(struct ir_raw_handler *ir_raw_handler);
161+
void ir_raw_init(void);
162+
163+
/*
164+
* Decoder initialization code
165+
*
166+
* Those load logic are called during ir-core init, and automatically
167+
* loads the compiled decoders for their usage with IR raw events
168+
*/
169+
170+
/* from ir-nec-decoder.c */
171+
#ifdef CONFIG_IR_NEC_DECODER_MODULE
172+
#define load_nec_decode() request_module_nowait("ir-nec-decoder")
173+
#else
174+
static inline void load_nec_decode(void) { }
175+
#endif
176+
177+
/* from ir-rc5-decoder.c */
178+
#ifdef CONFIG_IR_RC5_DECODER_MODULE
179+
#define load_rc5_decode() request_module_nowait("ir-rc5-decoder")
180+
#else
181+
static inline void load_rc5_decode(void) { }
182+
#endif
183+
184+
/* from ir-rc6-decoder.c */
185+
#ifdef CONFIG_IR_RC6_DECODER_MODULE
186+
#define load_rc6_decode() request_module_nowait("ir-rc6-decoder")
187+
#else
188+
static inline void load_rc6_decode(void) { }
189+
#endif
190+
191+
/* from ir-jvc-decoder.c */
192+
#ifdef CONFIG_IR_JVC_DECODER_MODULE
193+
#define load_jvc_decode() request_module_nowait("ir-jvc-decoder")
194+
#else
195+
static inline void load_jvc_decode(void) { }
196+
#endif
197+
198+
/* from ir-sony-decoder.c */
199+
#ifdef CONFIG_IR_SONY_DECODER_MODULE
200+
#define load_sony_decode() request_module_nowait("ir-sony-decoder")
201+
#else
202+
static inline void load_sony_decode(void) { }
203+
#endif
204+
205+
/* from ir-sanyo-decoder.c */
206+
#ifdef CONFIG_IR_SANYO_DECODER_MODULE
207+
#define load_sanyo_decode() request_module_nowait("ir-sanyo-decoder")
208+
#else
209+
static inline void load_sanyo_decode(void) { }
210+
#endif
211+
212+
/* from ir-sharp-decoder.c */
213+
#ifdef CONFIG_IR_SHARP_DECODER_MODULE
214+
#define load_sharp_decode() request_module_nowait("ir-sharp-decoder")
215+
#else
216+
static inline void load_sharp_decode(void) { }
217+
#endif
218+
219+
/* from ir-mce_kbd-decoder.c */
220+
#ifdef CONFIG_IR_MCE_KBD_DECODER_MODULE
221+
#define load_mce_kbd_decode() request_module_nowait("ir-mce_kbd-decoder")
222+
#else
223+
static inline void load_mce_kbd_decode(void) { }
224+
#endif
225+
226+
/* from ir-lirc-codec.c */
227+
#ifdef CONFIG_IR_LIRC_CODEC_MODULE
228+
#define load_lirc_codec() request_module_nowait("ir-lirc-codec")
229+
#else
230+
static inline void load_lirc_codec(void) { }
231+
#endif
232+
233+
/* from ir-xmp-decoder.c */
234+
#ifdef CONFIG_IR_XMP_DECODER_MODULE
235+
#define load_xmp_decode() request_module_nowait("ir-xmp-decoder")
236+
#else
237+
static inline void load_xmp_decode(void) { }
238+
#endif
239+
240+
241+
#endif /* _RC_CORE_PRIV */

0 commit comments

Comments
 (0)