1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32#include <linux/module.h>
33#include <linux/delay.h>
34#include <linux/init.h>
35
36#include <net/irda/irda.h>
37
38#include "sir-dev.h"
39
40static int esi_open(struct sir_dev *);
41static int esi_close(struct sir_dev *);
42static int esi_change_speed(struct sir_dev *, unsigned);
43static int esi_reset(struct sir_dev *);
44
45static struct dongle_driver esi = {
46 .owner = THIS_MODULE,
47 .driver_name = "JetEye PC ESI-9680 PC",
48 .type = IRDA_ESI_DONGLE,
49 .open = esi_open,
50 .close = esi_close,
51 .reset = esi_reset,
52 .set_speed = esi_change_speed,
53};
54
55static int __init esi_sir_init(void)
56{
57 return irda_register_dongle(&esi);
58}
59
60static void __exit esi_sir_cleanup(void)
61{
62 irda_unregister_dongle(&esi);
63}
64
65static int esi_open(struct sir_dev *dev)
66{
67 struct qos_info *qos = &dev->qos;
68
69
70 sirdev_set_dtr_rts(dev, FALSE, TRUE);
71
72 qos->baud_rate.bits &= IR_9600|IR_19200|IR_115200;
73 qos->min_turn_time.bits = 0x01;
74 irda_qos_bits_to_value(qos);
75
76
77
78 return 0;
79}
80
81static int esi_close(struct sir_dev *dev)
82{
83
84 sirdev_set_dtr_rts(dev, FALSE, FALSE);
85
86 return 0;
87}
88
89
90
91
92
93
94
95
96static int esi_change_speed(struct sir_dev *dev, unsigned speed)
97{
98 int ret = 0;
99 int dtr, rts;
100
101 switch (speed) {
102 case 19200:
103 dtr = TRUE;
104 rts = FALSE;
105 break;
106 case 115200:
107 dtr = rts = TRUE;
108 break;
109 default:
110 ret = -EINVAL;
111 speed = 9600;
112
113 case 9600:
114 dtr = FALSE;
115 rts = TRUE;
116 break;
117 }
118
119
120 sirdev_set_dtr_rts(dev, dtr, rts);
121 dev->speed = speed;
122
123 return ret;
124}
125
126
127
128
129
130
131
132static int esi_reset(struct sir_dev *dev)
133{
134 sirdev_set_dtr_rts(dev, FALSE, FALSE);
135
136
137
138
139
140
141
142
143
144 sirdev_set_dtr_rts(dev, FALSE, TRUE);
145 dev->speed = 9600;
146
147 return 0;
148}
149
150MODULE_AUTHOR("Dag Brattli <dagb@cs.uit.no>");
151MODULE_DESCRIPTION("Extended Systems JetEye PC dongle driver");
152MODULE_LICENSE("GPL");
153MODULE_ALIAS("irda-dongle-1");
154
155module_init(esi_sir_init);
156module_exit(esi_sir_cleanup);
157
158