0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _RC_CORE
0009 #define _RC_CORE
0010
0011 #include <linux/spinlock.h>
0012 #include <linux/cdev.h>
0013 #include <linux/kfifo.h>
0014 #include <linux/time.h>
0015 #include <linux/timer.h>
0016 #include <media/rc-map.h>
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 enum rc_driver_type {
0028 RC_DRIVER_SCANCODE = 0,
0029 RC_DRIVER_IR_RAW,
0030 RC_DRIVER_IR_RAW_TX,
0031 };
0032
0033
0034
0035
0036
0037
0038 struct rc_scancode_filter {
0039 u32 data;
0040 u32 mask;
0041 };
0042
0043
0044
0045
0046
0047
0048
0049 enum rc_filter_type {
0050 RC_FILTER_NORMAL = 0,
0051 RC_FILTER_WAKEUP,
0052
0053 RC_FILTER_MAX
0054 };
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070 struct lirc_fh {
0071 struct list_head list;
0072 struct rc_dev *rc;
0073 int carrier_low;
0074 DECLARE_KFIFO_PTR(rawir, unsigned int);
0075 DECLARE_KFIFO_PTR(scancodes, struct lirc_scancode);
0076 wait_queue_head_t wait_poll;
0077 u8 send_mode;
0078 u8 rec_mode;
0079 };
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158 struct rc_dev {
0159 struct device dev;
0160 bool managed_alloc;
0161 const struct attribute_group *sysfs_groups[5];
0162 const char *device_name;
0163 const char *input_phys;
0164 struct input_id input_id;
0165 const char *driver_name;
0166 const char *map_name;
0167 struct rc_map rc_map;
0168 struct mutex lock;
0169 unsigned int minor;
0170 struct ir_raw_event_ctrl *raw;
0171 struct input_dev *input_dev;
0172 enum rc_driver_type driver_type;
0173 bool idle;
0174 bool encode_wakeup;
0175 u64 allowed_protocols;
0176 u64 enabled_protocols;
0177 u64 allowed_wakeup_protocols;
0178 enum rc_proto wakeup_protocol;
0179 struct rc_scancode_filter scancode_filter;
0180 struct rc_scancode_filter scancode_wakeup_filter;
0181 u32 scancode_mask;
0182 u32 users;
0183 void *priv;
0184 spinlock_t keylock;
0185 bool keypressed;
0186 unsigned long keyup_jiffies;
0187 struct timer_list timer_keyup;
0188 struct timer_list timer_repeat;
0189 u32 last_keycode;
0190 enum rc_proto last_protocol;
0191 u64 last_scancode;
0192 u8 last_toggle;
0193 u32 timeout;
0194 u32 min_timeout;
0195 u32 max_timeout;
0196 u32 rx_resolution;
0197 u32 tx_resolution;
0198 #ifdef CONFIG_LIRC
0199 struct device lirc_dev;
0200 struct cdev lirc_cdev;
0201 ktime_t gap_start;
0202 spinlock_t lirc_fh_lock;
0203 struct list_head lirc_fh;
0204 #endif
0205 bool registered;
0206 int (*change_protocol)(struct rc_dev *dev, u64 *rc_proto);
0207 int (*open)(struct rc_dev *dev);
0208 void (*close)(struct rc_dev *dev);
0209 int (*s_tx_mask)(struct rc_dev *dev, u32 mask);
0210 int (*s_tx_carrier)(struct rc_dev *dev, u32 carrier);
0211 int (*s_tx_duty_cycle)(struct rc_dev *dev, u32 duty_cycle);
0212 int (*s_rx_carrier_range)(struct rc_dev *dev, u32 min, u32 max);
0213 int (*tx_ir)(struct rc_dev *dev, unsigned *txbuf, unsigned n);
0214 void (*s_idle)(struct rc_dev *dev, bool enable);
0215 int (*s_wideband_receiver)(struct rc_dev *dev, int enable);
0216 int (*s_carrier_report) (struct rc_dev *dev, int enable);
0217 int (*s_filter)(struct rc_dev *dev,
0218 struct rc_scancode_filter *filter);
0219 int (*s_wakeup_filter)(struct rc_dev *dev,
0220 struct rc_scancode_filter *filter);
0221 int (*s_timeout)(struct rc_dev *dev,
0222 unsigned int timeout);
0223 };
0224
0225 #define to_rc_dev(d) container_of(d, struct rc_dev, dev)
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240 struct rc_dev *rc_allocate_device(enum rc_driver_type);
0241
0242
0243
0244
0245
0246
0247
0248
0249 struct rc_dev *devm_rc_allocate_device(struct device *dev, enum rc_driver_type);
0250
0251
0252
0253
0254
0255
0256 void rc_free_device(struct rc_dev *dev);
0257
0258
0259
0260
0261
0262
0263 int rc_register_device(struct rc_dev *dev);
0264
0265
0266
0267
0268
0269
0270
0271 int devm_rc_register_device(struct device *parent, struct rc_dev *dev);
0272
0273
0274
0275
0276
0277
0278 void rc_unregister_device(struct rc_dev *dev);
0279
0280 void rc_repeat(struct rc_dev *dev);
0281 void rc_keydown(struct rc_dev *dev, enum rc_proto protocol, u64 scancode,
0282 u8 toggle);
0283 void rc_keydown_notimeout(struct rc_dev *dev, enum rc_proto protocol,
0284 u64 scancode, u8 toggle);
0285 void rc_keyup(struct rc_dev *dev);
0286 u32 rc_g_keycode_from_table(struct rc_dev *dev, u64 scancode);
0287
0288
0289
0290
0291
0292
0293 struct ir_raw_event {
0294 union {
0295 u32 duration;
0296 u32 carrier;
0297 };
0298 u8 duty_cycle;
0299
0300 unsigned pulse:1;
0301 unsigned overflow:1;
0302 unsigned timeout:1;
0303 unsigned carrier_report:1;
0304 };
0305
0306 #define US_TO_NS(usec) ((usec) * 1000)
0307 #define MS_TO_US(msec) ((msec) * 1000)
0308 #define IR_MAX_DURATION MS_TO_US(500)
0309 #define IR_DEFAULT_TIMEOUT MS_TO_US(125)
0310 #define IR_MAX_TIMEOUT LIRC_VALUE_MASK
0311
0312 void ir_raw_event_handle(struct rc_dev *dev);
0313 int ir_raw_event_store(struct rc_dev *dev, struct ir_raw_event *ev);
0314 int ir_raw_event_store_edge(struct rc_dev *dev, bool pulse);
0315 int ir_raw_event_store_with_filter(struct rc_dev *dev,
0316 struct ir_raw_event *ev);
0317 int ir_raw_event_store_with_timeout(struct rc_dev *dev,
0318 struct ir_raw_event *ev);
0319 void ir_raw_event_set_idle(struct rc_dev *dev, bool idle);
0320 int ir_raw_encode_scancode(enum rc_proto protocol, u32 scancode,
0321 struct ir_raw_event *events, unsigned int max);
0322 int ir_raw_encode_carrier(enum rc_proto protocol);
0323
0324 static inline void ir_raw_event_overflow(struct rc_dev *dev)
0325 {
0326 ir_raw_event_store(dev, &((struct ir_raw_event) { .overflow = true }));
0327 dev->idle = true;
0328 ir_raw_event_handle(dev);
0329 }
0330
0331
0332 static inline u32 ir_extract_bits(u32 data, u32 mask)
0333 {
0334 u32 vbit = 1, value = 0;
0335
0336 do {
0337 if (mask & 1) {
0338 if (data & 1)
0339 value |= vbit;
0340 vbit <<= 1;
0341 }
0342 data >>= 1;
0343 } while (mask >>= 1);
0344
0345 return value;
0346 }
0347
0348
0349 static inline u32 ir_nec_bytes_to_scancode(u8 address, u8 not_address,
0350 u8 command, u8 not_command,
0351 enum rc_proto *protocol)
0352 {
0353 u32 scancode;
0354
0355 if ((command ^ not_command) != 0xff) {
0356
0357
0358
0359 scancode = not_address << 24 |
0360 address << 16 |
0361 not_command << 8 |
0362 command;
0363 *protocol = RC_PROTO_NEC32;
0364 } else if ((address ^ not_address) != 0xff) {
0365
0366 scancode = address << 16 |
0367 not_address << 8 |
0368 command;
0369 *protocol = RC_PROTO_NECX;
0370 } else {
0371
0372 scancode = address << 8 | command;
0373 *protocol = RC_PROTO_NEC;
0374 }
0375
0376 return scancode;
0377 }
0378
0379 #endif