Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
esi-sir.c
Go to the documentation of this file.
1 /*********************************************************************
2  *
3  * Filename: esi.c
4  * Version: 1.6
5  * Description: Driver for the Extended Systems JetEye PC dongle
6  * Status: Experimental.
7  * Author: Dag Brattli <[email protected]>
8  * Created at: Sat Feb 21 18:54:38 1998
9  * Modified at: Sun Oct 27 22:01:04 2002
10  * Modified by: Martin Diehl <[email protected]>
11  *
12  * Copyright (c) 1999 Dag Brattli, <[email protected]>,
13  * Copyright (c) 1998 Thomas Davis, <[email protected]>,
14  * Copyright (c) 2002 Martin Diehl, <[email protected]>,
15  * All Rights Reserved.
16  *
17  * This program is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU General Public License as
19  * published by the Free Software Foundation; either version 2 of
20  * the License, or (at your option) any later version.
21  *
22  * This program is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25  * GNU General Public License for more details.
26  *
27  * You should have received a copy of the GNU General Public License
28  * along with this program; if not, write to the Free Software
29  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
30  * MA 02111-1307 USA
31  *
32  ********************************************************************/
33 
34 #include <linux/module.h>
35 #include <linux/delay.h>
36 #include <linux/init.h>
37 
38 #include <net/irda/irda.h>
39 
40 #include "sir-dev.h"
41 
42 static int esi_open(struct sir_dev *);
43 static int esi_close(struct sir_dev *);
44 static int esi_change_speed(struct sir_dev *, unsigned);
45 static int esi_reset(struct sir_dev *);
46 
47 static struct dongle_driver esi = {
48  .owner = THIS_MODULE,
49  .driver_name = "JetEye PC ESI-9680 PC",
50  .type = IRDA_ESI_DONGLE,
51  .open = esi_open,
52  .close = esi_close,
53  .reset = esi_reset,
54  .set_speed = esi_change_speed,
55 };
56 
57 static int __init esi_sir_init(void)
58 {
59  return irda_register_dongle(&esi);
60 }
61 
62 static void __exit esi_sir_cleanup(void)
63 {
65 }
66 
67 static int esi_open(struct sir_dev *dev)
68 {
69  struct qos_info *qos = &dev->qos;
70 
71  /* Power up and set dongle to 9600 baud */
73 
75  qos->min_turn_time.bits = 0x01; /* Needs at least 10 ms */
77 
78  /* irda thread waits 50 msec for power settling */
79 
80  return 0;
81 }
82 
83 static int esi_close(struct sir_dev *dev)
84 {
85  /* Power off dongle */
87 
88  return 0;
89 }
90 
91 /*
92  * Function esi_change_speed (task)
93  *
94  * Set the speed for the Extended Systems JetEye PC ESI-9680 type dongle
95  * Apparently (see old esi-driver) no delays are needed here...
96  *
97  */
98 static int esi_change_speed(struct sir_dev *dev, unsigned speed)
99 {
100  int ret = 0;
101  int dtr, rts;
102 
103  switch (speed) {
104  case 19200:
105  dtr = TRUE;
106  rts = FALSE;
107  break;
108  case 115200:
109  dtr = rts = TRUE;
110  break;
111  default:
112  ret = -EINVAL;
113  speed = 9600;
114  /* fall through */
115  case 9600:
116  dtr = FALSE;
117  rts = TRUE;
118  break;
119  }
120 
121  /* Change speed of dongle */
122  sirdev_set_dtr_rts(dev, dtr, rts);
123  dev->speed = speed;
124 
125  return ret;
126 }
127 
128 /*
129  * Function esi_reset (task)
130  *
131  * Reset dongle;
132  *
133  */
134 static int esi_reset(struct sir_dev *dev)
135 {
137 
138  /* Hm, the old esi-driver left the dongle unpowered relying on
139  * the following speed change to repower. This might work for
140  * the esi because we only need the modem lines. However, now the
141  * general rule is reset must bring the dongle to some working
142  * well-known state because speed change might write to registers.
143  * The old esi-driver didn't any delay here - let's hope it' fine.
144  */
145 
147  dev->speed = 9600;
148 
149  return 0;
150 }
151 
152 MODULE_AUTHOR("Dag Brattli <[email protected]>");
153 MODULE_DESCRIPTION("Extended Systems JetEye PC dongle driver");
154 MODULE_LICENSE("GPL");
155 MODULE_ALIAS("irda-dongle-1"); /* IRDA_ESI_DONGLE */
156 
157 module_init(esi_sir_init);
158 module_exit(esi_sir_cleanup);
159