~ubuntu-branches/ubuntu/saucy/linux-n900/saucy

« back to all changes in this revision

Viewing changes to drivers/media/IR/ir-core-priv.h

  • Committer: Bazaar Package Importer
  • Author(s): Mathieu Poirier
  • Date: 2011-02-18 09:43:31 UTC
  • Revision ID: james.westby@ubuntu.com-20110218094331-eyubsja4f9k0yhmq
Tags: 2.6.35-1.1
Initial release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Remote Controller core raw events header
 
3
 *
 
4
 * Copyright (C) 2010 by Mauro Carvalho Chehab <mchehab@redhat.com>
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or modify
 
7
 *  it under the terms of the GNU General Public License as published by
 
8
 *  the Free Software Foundation version 2 of the License.
 
9
 *
 
10
 *  This program is distributed in the hope that it will be useful,
 
11
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 *  GNU General Public License for more details.
 
14
 */
 
15
 
 
16
#ifndef _IR_RAW_EVENT
 
17
#define _IR_RAW_EVENT
 
18
 
 
19
#include <linux/slab.h>
 
20
#include <media/ir-core.h>
 
21
 
 
22
struct ir_raw_handler {
 
23
        struct list_head list;
 
24
 
 
25
        int (*decode)(struct input_dev *input_dev, struct ir_raw_event event);
 
26
        int (*raw_register)(struct input_dev *input_dev);
 
27
        int (*raw_unregister)(struct input_dev *input_dev);
 
28
};
 
29
 
 
30
struct ir_raw_event_ctrl {
 
31
        struct work_struct              rx_work;        /* for the rx decoding workqueue */
 
32
        struct kfifo                    kfifo;          /* fifo for the pulse/space durations */
 
33
        ktime_t                         last_event;     /* when last event occurred */
 
34
        enum raw_event_type             last_type;      /* last event type */
 
35
        struct input_dev                *input_dev;     /* pointer to the parent input_dev */
 
36
};
 
37
 
 
38
/* macros for IR decoders */
 
39
static inline bool geq_margin(unsigned d1, unsigned d2, unsigned margin)
 
40
{
 
41
        return d1 > (d2 - margin);
 
42
}
 
43
 
 
44
static inline bool eq_margin(unsigned d1, unsigned d2, unsigned margin)
 
45
{
 
46
        return ((d1 > (d2 - margin)) && (d1 < (d2 + margin)));
 
47
}
 
48
 
 
49
static inline bool is_transition(struct ir_raw_event *x, struct ir_raw_event *y)
 
50
{
 
51
        return x->pulse != y->pulse;
 
52
}
 
53
 
 
54
static inline void decrease_duration(struct ir_raw_event *ev, unsigned duration)
 
55
{
 
56
        if (duration > ev->duration)
 
57
                ev->duration = 0;
 
58
        else
 
59
                ev->duration -= duration;
 
60
}
 
61
 
 
62
#define TO_US(duration)                 (((duration) + 500) / 1000)
 
63
#define TO_STR(is_pulse)                ((is_pulse) ? "pulse" : "space")
 
64
#define IS_RESET(ev)                    (ev.duration == 0)
 
65
 
 
66
/*
 
67
 * Routines from ir-sysfs.c - Meant to be called only internally inside
 
68
 * ir-core
 
69
 */
 
70
 
 
71
int ir_register_class(struct input_dev *input_dev);
 
72
void ir_unregister_class(struct input_dev *input_dev);
 
73
 
 
74
/*
 
75
 * Routines from ir-raw-event.c to be used internally and by decoders
 
76
 */
 
77
int ir_raw_event_register(struct input_dev *input_dev);
 
78
void ir_raw_event_unregister(struct input_dev *input_dev);
 
79
int ir_raw_handler_register(struct ir_raw_handler *ir_raw_handler);
 
80
void ir_raw_handler_unregister(struct ir_raw_handler *ir_raw_handler);
 
81
void ir_raw_init(void);
 
82
 
 
83
 
 
84
/*
 
85
 * Decoder initialization code
 
86
 *
 
87
 * Those load logic are called during ir-core init, and automatically
 
88
 * loads the compiled decoders for their usage with IR raw events
 
89
 */
 
90
 
 
91
/* from ir-nec-decoder.c */
 
92
#ifdef CONFIG_IR_NEC_DECODER_MODULE
 
93
#define load_nec_decode()       request_module("ir-nec-decoder")
 
94
#else
 
95
#define load_nec_decode()       0
 
96
#endif
 
97
 
 
98
/* from ir-rc5-decoder.c */
 
99
#ifdef CONFIG_IR_RC5_DECODER_MODULE
 
100
#define load_rc5_decode()       request_module("ir-rc5-decoder")
 
101
#else
 
102
#define load_rc5_decode()       0
 
103
#endif
 
104
 
 
105
/* from ir-rc6-decoder.c */
 
106
#ifdef CONFIG_IR_RC6_DECODER_MODULE
 
107
#define load_rc6_decode()       request_module("ir-rc6-decoder")
 
108
#else
 
109
#define load_rc6_decode()       0
 
110
#endif
 
111
 
 
112
/* from ir-jvc-decoder.c */
 
113
#ifdef CONFIG_IR_JVC_DECODER_MODULE
 
114
#define load_jvc_decode()       request_module("ir-jvc-decoder")
 
115
#else
 
116
#define load_jvc_decode()       0
 
117
#endif
 
118
 
 
119
/* from ir-sony-decoder.c */
 
120
#ifdef CONFIG_IR_SONY_DECODER_MODULE
 
121
#define load_sony_decode()      request_module("ir-sony-decoder")
 
122
#else
 
123
#define load_sony_decode()      0
 
124
#endif
 
125
 
 
126
#endif /* _IR_RAW_EVENT */