1/********************************************************************* 2 * 3 * Filename: esi.c 4 * Version: 1.5 5 * Description: Driver for the Extended Systems JetEye PC dongle 6 * Status: Experimental. 7 * Author: Dag Brattli <dagb@cs.uit.no> 8 * Created at: Sat Feb 21 18:54:38 1998 9 * Modified at: Fri Dec 17 09:14:04 1999 10 * Modified by: Dag Brattli <dagb@cs.uit.no> 11 * 12 * Copyright (c) 1999 Dag Brattli, <dagb@cs.uit.no>, 13 * Copyright (c) 1998 Thomas Davis, <ratbert@radiks.net>, 14 * All Rights Reserved. 15 * 16 * This program is free software; you can redistribute it and/or 17 * modify it under the terms of the GNU General Public License as 18 * published by the Free Software Foundation; either version 2 of 19 * the License, or (at your option) any later version. 20 * 21 * This program is distributed in the hope that it will be useful, 22 * but WITHOUT ANY WARRANTY; without even the implied warranty of 23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 24 * GNU General Public License for more details. 25 * 26 * You should have received a copy of the GNU General Public License 27 * along with this program; if not, write to the Free Software 28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 29 * MA 02111-1307 USA 30 * 31 ********************************************************************/ 32 33#include <linux/module.h> 34 35#include <linux/delay.h> 36#include <linux/tty.h> 37#include <linux/sched.h> 38#include <linux/init.h> 39 40#include <net/irda/irda.h> 41#include <net/irda/irmod.h> 42#include <net/irda/irda_device.h> 43 44static void esi_open(dongle_t *self, struct qos_info *qos); 45static void esi_close(dongle_t *self); 46static int esi_change_speed(struct irda_task *task); 47static int esi_reset(struct irda_task *task); 48 49static struct dongle_reg dongle = { 50 Q_NULL, 51 IRDA_ESI_DONGLE, 52 esi_open, 53 esi_close, 54 esi_reset, 55 esi_change_speed, 56}; 57 58int __init esi_init(void) 59{ 60 return irda_device_register_dongle(&dongle); 61} 62 63void esi_cleanup(void) 64{ 65 irda_device_unregister_dongle(&dongle); 66} 67 68static void esi_open(dongle_t *self, struct qos_info *qos) 69{ 70 qos->baud_rate.bits &= IR_9600|IR_19200|IR_115200; 71 qos->min_turn_time.bits = 0x01; /* Needs at least 10 ms */ 72 73 MOD_INC_USE_COUNT; 74} 75 76static void esi_close(dongle_t *dongle) 77{ 78 /* Power off dongle */ 79 dongle->set_dtr_rts(dongle->dev, FALSE, FALSE); 80 81 MOD_DEC_USE_COUNT; 82} 83 84/* 85 * Function esi_change_speed (task) 86 * 87 * Set the speed for the Extended Systems JetEye PC ESI-9680 type dongle 88 * 89 */ 90static int esi_change_speed(struct irda_task *task) 91{ 92 dongle_t *self = (dongle_t *) task->instance; 93 __u32 speed = (__u32) task->param; 94 int dtr, rts; 95 96 switch (speed) { 97 case 19200: 98 dtr = TRUE; 99 rts = FALSE; 100 break; 101 case 115200: 102 dtr = rts = TRUE; 103 break; 104 case 9600: 105 default: 106 dtr = FALSE; 107 rts = TRUE; 108 break; 109 } 110 111 /* Change speed of dongle */ 112 self->set_dtr_rts(self->dev, dtr, rts); 113 self->speed = speed; 114 115 irda_task_next_state(task, IRDA_TASK_DONE); 116 117 return 0; 118} 119 120/* 121 * Function esi_reset (task) 122 * 123 * Reset dongle; 124 * 125 */ 126static int esi_reset(struct irda_task *task) 127{ 128 dongle_t *self = (dongle_t *) task->instance; 129 130 self->set_dtr_rts(self->dev, FALSE, FALSE); 131 irda_task_next_state(task, IRDA_TASK_DONE); 132 133 return 0; 134} 135 136#ifdef MODULE 137MODULE_AUTHOR("Dag Brattli <dagb@cs.uit.no>"); 138MODULE_DESCRIPTION("Extended Systems JetEye PC dongle driver"); 139MODULE_LICENSE("GPL"); 140 141/* 142 * Function init_module (void) 143 * 144 * Initialize ESI module 145 * 146 */ 147int init_module(void) 148{ 149 return esi_init(); 150} 151 152/* 153 * Function cleanup_module (void) 154 * 155 * Cleanup ESI module 156 * 157 */ 158void cleanup_module(void) 159{ 160 esi_cleanup(); 161} 162#endif /* MODULE */ 163 164