diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-04-08 14:10:27 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-05-19 11:57:04 -0400 |
commit | 3f113e36106f133752de47208816b28aa8e60f88 (patch) | |
tree | dd089c1f3ec2f179338f3f4383e81b643312789c /include/media | |
parent | 724e2495502a98aaa3f93c404472a991da8ff857 (diff) |
V4L/DVB: ir-core: move subsystem internal calls to ir-core-priv.h
ir-core.h has the kABI to be used by the bridge drivers, when needing to register
IR protocols and pass IR events. However, the same file also contains IR subsystem
internal calls, meant to be used inside ir-core and between ir-core and the raw
decoders.
Better to move those functions to an internal header, for some reasons:
1) Header will be a little more cleaner;
2) It avoids the need of recompile everything (bridge/hardware drivers, etc),
just because a new decoder were added, or some other internal change were needed;
3) Better organize the ir-core API, splitting the functions that are internal to
IR core and the ancillary drivers (decoders, lirc_dev) from the features that
should be exported to IR subsystem clients.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'include/media')
-rw-r--r-- | include/media/ir-core.h | 87 |
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 | ||
34 | enum 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 | ||
68 | struct 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 | |||
76 | struct ir_input_dev { | 61 | struct 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 | ||
95 | struct ir_raw_handler { | 80 | enum 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 | |||
107 | u32 ir_g_keycode_from_table(struct input_dev *input_dev, | ||
108 | u32 scancode); | ||
109 | void ir_repeat(struct input_dev *dev); | ||
110 | void ir_keydown(struct input_dev *dev, int scancode, u8 toggle); | ||
111 | int __ir_input_register(struct input_dev *dev, | 90 | int __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 | ||
144 | void ir_input_unregister(struct input_dev *input_dev); | 123 | void ir_input_unregister(struct input_dev *input_dev); |
145 | 124 | ||
146 | /* Routines from ir-sysfs.c */ | 125 | void ir_repeat(struct input_dev *dev); |
126 | void ir_keydown(struct input_dev *dev, int scancode, u8 toggle); | ||
147 | 127 | ||
148 | int ir_register_class(struct input_dev *input_dev); | 128 | /* From ir-raw-event.c */ |
149 | void ir_unregister_class(struct input_dev *input_dev); | ||
150 | 129 | ||
151 | /* Routines from ir-raw-event.c */ | ||
152 | int ir_raw_event_register(struct input_dev *input_dev); | ||
153 | void ir_raw_event_unregister(struct input_dev *input_dev); | ||
154 | void ir_raw_event_handle(struct input_dev *input_dev); | 130 | void ir_raw_event_handle(struct input_dev *input_dev); |
155 | int ir_raw_event_store(struct input_dev *input_dev, s64 duration); | 131 | 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); | 132 | 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) | 133 | |
158 | { | ||
159 | ir_raw_event_store(input_dev, 0); | ||
160 | ir_raw_event_handle(input_dev); | ||
161 | } | ||
162 | int ir_raw_handler_register(struct ir_raw_handler *ir_raw_handler); | ||
163 | void ir_raw_handler_unregister(struct ir_raw_handler *ir_raw_handler); | ||
164 | void 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 */ |