diff options
Diffstat (limited to 'include/media/ir-core.h')
-rw-r--r-- | include/media/ir-core.h | 41 |
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 | */ |
64 | struct ir_dev_props { | 65 | struct 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 | ||
89 | struct ir_input_dev { | 91 | struct ir_input_dev { |
@@ -157,27 +159,54 @@ void ir_input_unregister(struct input_dev *input_dev); | |||
157 | 159 | ||
158 | void ir_repeat(struct input_dev *dev); | 160 | void ir_repeat(struct input_dev *dev); |
159 | void ir_keydown(struct input_dev *dev, int scancode, u8 toggle); | 161 | void ir_keydown(struct input_dev *dev, int scancode, u8 toggle); |
162 | void ir_keyup(struct ir_input_dev *ir); | ||
160 | u32 ir_g_keycode_from_table(struct input_dev *input_dev, u32 scancode); | 163 | u32 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 | ||
164 | struct ir_raw_event { | 167 | struct 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 | |||
191 | static 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 | ||
171 | void ir_raw_event_handle(struct input_dev *input_dev); | 198 | void ir_raw_event_handle(struct input_dev *input_dev); |
172 | int ir_raw_event_store(struct input_dev *input_dev, struct ir_raw_event *ev); | 199 | int ir_raw_event_store(struct input_dev *input_dev, struct ir_raw_event *ev); |
173 | int ir_raw_event_store_edge(struct input_dev *input_dev, enum raw_event_type type); | 200 | int ir_raw_event_store_edge(struct input_dev *input_dev, enum raw_event_type type); |
174 | int ir_raw_event_store_with_filter(struct input_dev *input_dev, | 201 | int ir_raw_event_store_with_filter(struct input_dev *input_dev, |
175 | struct ir_raw_event *ev); | 202 | struct ir_raw_event *ev); |
176 | void ir_raw_event_set_idle(struct input_dev *input_dev, int idle); | 203 | void ir_raw_event_set_idle(struct input_dev *input_dev, bool idle); |
177 | 204 | ||
178 | static inline void ir_raw_event_reset(struct input_dev *input_dev) | 205 | static 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 | } |