aboutsummaryrefslogtreecommitdiffstats
path: root/include/media/ir-core.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/media/ir-core.h')
-rw-r--r--include/media/ir-core.h87
1 files changed, 10 insertions, 77 deletions
diff --git a/include/media/ir-core.h b/include/media/ir-core.h
index e9a0cbf67ff6..ab3bd30d43f1 100644
--- a/include/media/ir-core.h
+++ b/include/media/ir-core.h
@@ -31,13 +31,6 @@ enum rc_driver_type {
31 RC_DRIVER_IR_RAW, /* Needs a Infra-Red pulse/space decoder */ 31 RC_DRIVER_IR_RAW, /* Needs a Infra-Red pulse/space decoder */
32}; 32};
33 33
34enum raw_event_type {
35 IR_SPACE = (1 << 0),
36 IR_PULSE = (1 << 1),
37 IR_START_EVENT = (1 << 2),
38 IR_STOP_EVENT = (1 << 3),
39};
40
41/** 34/**
42 * struct ir_dev_props - Allow caller drivers to set special properties 35 * struct ir_dev_props - Allow caller drivers to set special properties
43 * @driver_type: specifies if the driver or hardware have already a decoder, 36 * @driver_type: specifies if the driver or hardware have already a decoder,
@@ -65,14 +58,6 @@ struct ir_dev_props {
65 void (*close)(void *priv); 58 void (*close)(void *priv);
66}; 59};
67 60
68struct ir_raw_event_ctrl {
69 struct work_struct rx_work; /* for the rx decoding workqueue */
70 struct kfifo kfifo; /* fifo for the pulse/space durations */
71 ktime_t last_event; /* when last event occurred */
72 enum raw_event_type last_type; /* last event type */
73 struct input_dev *input_dev; /* pointer to the parent input_dev */
74};
75
76struct ir_input_dev { 61struct ir_input_dev {
77 struct device dev; /* device */ 62 struct device dev; /* device */
78 char *driver_name; /* Name of the driver module */ 63 char *driver_name; /* Name of the driver module */
@@ -92,22 +77,16 @@ struct ir_input_dev {
92 u8 last_toggle; /* toggle of last command */ 77 u8 last_toggle; /* toggle of last command */
93}; 78};
94 79
95struct ir_raw_handler { 80enum raw_event_type {
96 struct list_head list; 81 IR_SPACE = (1 << 0),
97 82 IR_PULSE = (1 << 1),
98 int (*decode)(struct input_dev *input_dev, s64 duration); 83 IR_START_EVENT = (1 << 2),
99 int (*raw_register)(struct input_dev *input_dev); 84 IR_STOP_EVENT = (1 << 3),
100 int (*raw_unregister)(struct input_dev *input_dev);
101}; 85};
102 86
103#define to_ir_input_dev(_attr) container_of(_attr, struct ir_input_dev, attr) 87#define to_ir_input_dev(_attr) container_of(_attr, struct ir_input_dev, attr)
104 88
105/* Routines from ir-keytable.c */ 89/* From ir-keytable.c */
106
107u32 ir_g_keycode_from_table(struct input_dev *input_dev,
108 u32 scancode);
109void ir_repeat(struct input_dev *dev);
110void ir_keydown(struct input_dev *dev, int scancode, u8 toggle);
111int __ir_input_register(struct input_dev *dev, 90int __ir_input_register(struct input_dev *dev,
112 const struct ir_scancode_table *ir_codes, 91 const struct ir_scancode_table *ir_codes,
113 const struct ir_dev_props *props, 92 const struct ir_dev_props *props,
@@ -143,60 +122,14 @@ static inline int ir_input_register(struct input_dev *dev,
143 122
144void ir_input_unregister(struct input_dev *input_dev); 123void ir_input_unregister(struct input_dev *input_dev);
145 124
146/* Routines from ir-sysfs.c */ 125void ir_repeat(struct input_dev *dev);
126void ir_keydown(struct input_dev *dev, int scancode, u8 toggle);
147 127
148int ir_register_class(struct input_dev *input_dev); 128/* From ir-raw-event.c */
149void ir_unregister_class(struct input_dev *input_dev);
150 129
151/* Routines from ir-raw-event.c */
152int ir_raw_event_register(struct input_dev *input_dev);
153void ir_raw_event_unregister(struct input_dev *input_dev);
154void ir_raw_event_handle(struct input_dev *input_dev); 130void ir_raw_event_handle(struct input_dev *input_dev);
155int ir_raw_event_store(struct input_dev *input_dev, s64 duration); 131int ir_raw_event_store(struct input_dev *input_dev, s64 duration);
156int ir_raw_event_store_edge(struct input_dev *input_dev, enum raw_event_type type); 132int ir_raw_event_store_edge(struct input_dev *input_dev, enum raw_event_type type);
157static inline void ir_raw_event_reset(struct input_dev *input_dev) 133
158{
159 ir_raw_event_store(input_dev, 0);
160 ir_raw_event_handle(input_dev);
161}
162int ir_raw_handler_register(struct ir_raw_handler *ir_raw_handler);
163void ir_raw_handler_unregister(struct ir_raw_handler *ir_raw_handler);
164void ir_raw_init(void);
165
166/* from ir-nec-decoder.c */
167#ifdef CONFIG_IR_NEC_DECODER_MODULE
168#define load_nec_decode() request_module("ir-nec-decoder")
169#else
170#define load_nec_decode() 0
171#endif
172
173/* from ir-rc5-decoder.c */
174#ifdef CONFIG_IR_RC5_DECODER_MODULE
175#define load_rc5_decode() request_module("ir-rc5-decoder")
176#else
177#define load_rc5_decode() 0
178#endif
179
180/* macros for ir decoders */
181#define PULSE(units) ((units))
182#define SPACE(units) (-(units))
183#define IS_RESET(duration) ((duration) == 0)
184#define IS_PULSE(duration) ((duration) > 0)
185#define IS_SPACE(duration) ((duration) < 0)
186#define DURATION(duration) (abs((duration)))
187#define IS_TRANSITION(x, y) ((x) * (y) < 0)
188#define DECREASE_DURATION(duration, amount) \
189 do { \
190 if (IS_SPACE(duration)) \
191 duration += (amount); \
192 else if (IS_PULSE(duration)) \
193 duration -= (amount); \
194 } while (0)
195
196#define TO_UNITS(duration, unit_len) \
197 ((int)((duration) > 0 ? \
198 DIV_ROUND_CLOSEST(abs((duration)), (unit_len)) :\
199 -DIV_ROUND_CLOSEST(abs((duration)), (unit_len))))
200#define TO_US(duration) ((int)TO_UNITS(duration, 1000))
201 134
202#endif /* _IR_CORE */ 135#endif /* _IR_CORE */