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.h41
1 files changed, 35 insertions, 6 deletions
diff --git a/include/media/ir-core.h b/include/media/ir-core.h
index eb7fddf8f607..6dc37fae6606 100644
--- a/include/media/ir-core.h
+++ b/include/media/ir-core.h
@@ -60,6 +60,7 @@ enum rc_driver_type {
60 * @s_idle: optional: enable/disable hardware idle mode, upon which, 60 * @s_idle: optional: enable/disable hardware idle mode, upon which,
61 device doesn't interrupt host until it sees IR pulses 61 device doesn't interrupt host until it sees IR pulses
62 * @s_learning_mode: enable wide band receiver used for learning 62 * @s_learning_mode: enable wide band receiver used for learning
63 * @s_carrier_report: enable carrier reports
63 */ 64 */
64struct ir_dev_props { 65struct ir_dev_props {
65 enum rc_driver_type driver_type; 66 enum rc_driver_type driver_type;
@@ -82,8 +83,9 @@ struct ir_dev_props {
82 int (*s_tx_duty_cycle)(void *priv, u32 duty_cycle); 83 int (*s_tx_duty_cycle)(void *priv, u32 duty_cycle);
83 int (*s_rx_carrier_range)(void *priv, u32 min, u32 max); 84 int (*s_rx_carrier_range)(void *priv, u32 min, u32 max);
84 int (*tx_ir)(void *priv, int *txbuf, u32 n); 85 int (*tx_ir)(void *priv, int *txbuf, u32 n);
85 void (*s_idle)(void *priv, int enable); 86 void (*s_idle)(void *priv, bool enable);
86 int (*s_learning_mode)(void *priv, int enable); 87 int (*s_learning_mode)(void *priv, int enable);
88 int (*s_carrier_report) (void *priv, int enable);
87}; 89};
88 90
89struct ir_input_dev { 91struct ir_input_dev {
@@ -157,27 +159,54 @@ void ir_input_unregister(struct input_dev *input_dev);
157 159
158void ir_repeat(struct input_dev *dev); 160void ir_repeat(struct input_dev *dev);
159void ir_keydown(struct input_dev *dev, int scancode, u8 toggle); 161void ir_keydown(struct input_dev *dev, int scancode, u8 toggle);
162void ir_keyup(struct ir_input_dev *ir);
160u32 ir_g_keycode_from_table(struct input_dev *input_dev, u32 scancode); 163u32 ir_g_keycode_from_table(struct input_dev *input_dev, u32 scancode);
161 164
162/* From ir-raw-event.c */ 165/* From ir-raw-event.c */
163 166
164struct ir_raw_event { 167struct ir_raw_event {
165 unsigned pulse:1; 168 union {
166 unsigned duration:31; 169 u32 duration;
170
171 struct {
172 u32 carrier;
173 u8 duty_cycle;
174 };
175 };
176
177 unsigned pulse:1;
178 unsigned reset:1;
179 unsigned timeout:1;
180 unsigned carrier_report:1;
167}; 181};
168 182
169#define IR_MAX_DURATION 0x7FFFFFFF /* a bit more than 2 seconds */ 183#define DEFINE_IR_RAW_EVENT(event) \
184 struct ir_raw_event event = { \
185 { .duration = 0 } , \
186 .pulse = 0, \
187 .reset = 0, \
188 .timeout = 0, \
189 .carrier_report = 0 }
190
191static inline void init_ir_raw_event(struct ir_raw_event *ev)
192{
193 memset(ev, 0, sizeof(*ev));
194}
195
196#define IR_MAX_DURATION 0xFFFFFFFF /* a bit more than 4 seconds */
170 197
171void ir_raw_event_handle(struct input_dev *input_dev); 198void ir_raw_event_handle(struct input_dev *input_dev);
172int ir_raw_event_store(struct input_dev *input_dev, struct ir_raw_event *ev); 199int ir_raw_event_store(struct input_dev *input_dev, struct ir_raw_event *ev);
173int ir_raw_event_store_edge(struct input_dev *input_dev, enum raw_event_type type); 200int ir_raw_event_store_edge(struct input_dev *input_dev, enum raw_event_type type);
174int ir_raw_event_store_with_filter(struct input_dev *input_dev, 201int ir_raw_event_store_with_filter(struct input_dev *input_dev,
175 struct ir_raw_event *ev); 202 struct ir_raw_event *ev);
176void ir_raw_event_set_idle(struct input_dev *input_dev, int idle); 203void ir_raw_event_set_idle(struct input_dev *input_dev, bool idle);
177 204
178static inline void ir_raw_event_reset(struct input_dev *input_dev) 205static inline void ir_raw_event_reset(struct input_dev *input_dev)
179{ 206{
180 struct ir_raw_event ev = { .pulse = false, .duration = 0 }; 207 DEFINE_IR_RAW_EVENT(ev);
208 ev.reset = true;
209
181 ir_raw_event_store(input_dev, &ev); 210 ir_raw_event_store(input_dev, &ev);
182 ir_raw_event_handle(input_dev); 211 ir_raw_event_handle(input_dev);
183} 212}