diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/media/ir-core.h | 47 |
1 files changed, 36 insertions, 11 deletions
diff --git a/include/media/ir-core.h b/include/media/ir-core.h index e9fa94fe2ef5..e9a0cbf67ff6 100644 --- a/include/media/ir-core.h +++ b/include/media/ir-core.h | |||
@@ -65,14 +65,12 @@ struct ir_dev_props { | |||
65 | void (*close)(void *priv); | 65 | void (*close)(void *priv); |
66 | }; | 66 | }; |
67 | 67 | ||
68 | struct ir_raw_event { | ||
69 | struct timespec delta; /* Time spent before event */ | ||
70 | enum raw_event_type type; /* event type */ | ||
71 | }; | ||
72 | |||
73 | struct ir_raw_event_ctrl { | 68 | struct ir_raw_event_ctrl { |
74 | struct kfifo kfifo; /* fifo for the pulse/space events */ | 69 | struct work_struct rx_work; /* for the rx decoding workqueue */ |
75 | struct timespec last_event; /* when last event occurred */ | 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 */ | ||
76 | }; | 74 | }; |
77 | 75 | ||
78 | struct ir_input_dev { | 76 | struct ir_input_dev { |
@@ -97,8 +95,7 @@ struct ir_input_dev { | |||
97 | struct ir_raw_handler { | 95 | struct ir_raw_handler { |
98 | struct list_head list; | 96 | struct list_head list; |
99 | 97 | ||
100 | int (*decode)(struct input_dev *input_dev, | 98 | int (*decode)(struct input_dev *input_dev, s64 duration); |
101 | struct ir_raw_event *ev); | ||
102 | int (*raw_register)(struct input_dev *input_dev); | 99 | int (*raw_register)(struct input_dev *input_dev); |
103 | int (*raw_unregister)(struct input_dev *input_dev); | 100 | int (*raw_unregister)(struct input_dev *input_dev); |
104 | }; | 101 | }; |
@@ -154,8 +151,14 @@ void ir_unregister_class(struct input_dev *input_dev); | |||
154 | /* Routines from ir-raw-event.c */ | 151 | /* Routines from ir-raw-event.c */ |
155 | int ir_raw_event_register(struct input_dev *input_dev); | 152 | int ir_raw_event_register(struct input_dev *input_dev); |
156 | void ir_raw_event_unregister(struct input_dev *input_dev); | 153 | void ir_raw_event_unregister(struct input_dev *input_dev); |
157 | int ir_raw_event_store(struct input_dev *input_dev, enum raw_event_type type); | 154 | void ir_raw_event_handle(struct input_dev *input_dev); |
158 | int ir_raw_event_handle(struct input_dev *input_dev); | 155 | int ir_raw_event_store(struct input_dev *input_dev, s64 duration); |
156 | int ir_raw_event_store_edge(struct input_dev *input_dev, enum raw_event_type type); | ||
157 | static inline void ir_raw_event_reset(struct input_dev *input_dev) | ||
158 | { | ||
159 | ir_raw_event_store(input_dev, 0); | ||
160 | ir_raw_event_handle(input_dev); | ||
161 | } | ||
159 | int ir_raw_handler_register(struct ir_raw_handler *ir_raw_handler); | 162 | 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); | 163 | void ir_raw_handler_unregister(struct ir_raw_handler *ir_raw_handler); |
161 | void ir_raw_init(void); | 164 | void ir_raw_init(void); |
@@ -174,4 +177,26 @@ void ir_raw_init(void); | |||
174 | #define load_rc5_decode() 0 | 177 | #define load_rc5_decode() 0 |
175 | #endif | 178 | #endif |
176 | 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 | |||
177 | #endif /* _IR_CORE */ | 202 | #endif /* _IR_CORE */ |