From 9f25b56562038496ed7e567490978b26d15eeab9 Mon Sep 17 00:00:00 2001 From: Jean Tourrilhes Date: Fri, 23 Jan 2004 06:35:14 -0800 Subject: [PATCH] [IRDA]: Update actisys-sir driver. From Martin Diehl. * convert to de-virtualized sirdev helpers * improve error path during speed change --- drivers/net/irda/actisys-sir.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/drivers/net/irda/actisys-sir.c b/drivers/net/irda/actisys-sir.c index aeb164929e95a..39c583a04814b 100644 --- a/drivers/net/irda/actisys-sir.c +++ b/drivers/net/irda/actisys-sir.c @@ -65,7 +65,7 @@ static int actisys_reset(struct sir_dev *); /* These are the baudrates supported, in the order available */ /* Note : the 220L doesn't support 38400, but we will fix that below */ -static __u32 baud_rates[] = { 9600, 19200, 57600, 115200, 38400 }; +static unsigned baud_rates[] = { 9600, 19200, 57600, 115200, 38400 }; #define MAX_SPEEDS (sizeof(baud_rates)/sizeof(baud_rates[0])) @@ -118,7 +118,7 @@ static int actisys_open(struct sir_dev *dev) { struct qos_info *qos = &dev->qos; - dev->set_dtr_rts(dev, TRUE, TRUE); + sirdev_set_dtr_rts(dev, TRUE, TRUE); /* Set the speeds we can accept */ qos->baud_rate.bits &= IR_9600|IR_19200|IR_38400|IR_57600|IR_115200; @@ -130,13 +130,15 @@ static int actisys_open(struct sir_dev *dev) qos->min_turn_time.bits = 0x7f; /* Needs 0.01 ms */ irda_qos_bits_to_value(qos); + /* irda thread waits 50 msec for power settling */ + return 0; } static int actisys_close(struct sir_dev *dev) { /* Power off the dongle */ - dev->set_dtr_rts(dev, FALSE, FALSE); + sirdev_set_dtr_rts(dev, FALSE, FALSE); return 0; } @@ -174,23 +176,25 @@ static int actisys_change_speed(struct sir_dev *dev, unsigned speed) * Now, we can set the speed requested. Send RTS pulses until we * reach the target speed */ - for (i=0; ispeed = baud_rates[i]; + dev->speed = speed; break; } /* Set RTS low for 10 us */ - dev->set_dtr_rts(dev, TRUE, FALSE); + sirdev_set_dtr_rts(dev, TRUE, FALSE); udelay(MIN_DELAY); /* Set RTS high for 10 us */ - dev->set_dtr_rts(dev, TRUE, TRUE); + sirdev_set_dtr_rts(dev, TRUE, TRUE); udelay(MIN_DELAY); } /* Check if life is sweet... */ - if (i >= MAX_SPEEDS) - ret = -1; /* This should not happen */ + if (i >= MAX_SPEEDS) { + actisys_reset(dev); + ret = -EINVAL; /* This should not happen */ + } /* Basta lavoro, on se casse d'ici... */ return ret; @@ -221,11 +225,11 @@ static int actisys_change_speed(struct sir_dev *dev, unsigned speed) static int actisys_reset(struct sir_dev *dev) { /* Reset the dongle : set DTR low for 10 us */ - dev->set_dtr_rts(dev, FALSE, TRUE); + sirdev_set_dtr_rts(dev, FALSE, TRUE); udelay(MIN_DELAY); /* Go back to normal mode */ - dev->set_dtr_rts(dev, TRUE, TRUE); + sirdev_set_dtr_rts(dev, TRUE, TRUE); dev->speed = 9600; /* That's the default */ -- 2.53.0