[PATCH 2.6 IrDA] 4/11: tekram-sir: dongle api change
From: Jean Tourrilhes
Date: Fri Jan 23 2004 - 21:25:59 EST
ir262_dongles-4_tekram-sir-2.diff :
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<Patch from Martin Diehl>
* increase default write-delay to 150msec
* convert to de-virtualized sirdev helpers
diff -u -p linux/drivers/net/irda.d6/tekram-sir.c linux/drivers/net/irda/tekram-sir.c
--- linux/drivers/net/irda.d6/tekram-sir.c Wed Dec 17 18:58:30 2003
+++ linux/drivers/net/irda/tekram-sir.c Thu Jan 22 16:43:26 2004
@@ -34,7 +34,7 @@
MODULE_PARM(tekram_delay, "i");
MODULE_PARM_DESC(tekram_delay, "tekram dongle write complete delay");
-static int tekram_delay = 50; /* default is 50 ms */
+static int tekram_delay = 150; /* default is 150 ms */
static int tekram_open(struct sir_dev *);
static int tekram_close(struct sir_dev *);
@@ -61,8 +61,10 @@ static struct dongle_driver tekram = {
int __init tekram_sir_init(void)
{
- if (tekram_delay < 1 || tekram_delay>500)
+ if (tekram_delay < 1 || tekram_delay > 500)
tekram_delay = 200;
+ IRDA_DEBUG(1, "%s - using %d ms delay\n",
+ tekram.driver_name, tekram_delay);
return irda_register_dongle(&tekram);
}
@@ -77,7 +79,8 @@ static int tekram_open(struct sir_dev *d
IRDA_DEBUG(2, "%s()\n", __FUNCTION__);
- dev->set_dtr_rts(dev, TRUE, TRUE);
+ sirdev_set_dtr_rts(dev, TRUE, TRUE);
+
qos->baud_rate.bits &= IR_9600|IR_19200|IR_38400|IR_57600|IR_115200;
qos->min_turn_time.bits = 0x01; /* Needs at least 10 ms */
irda_qos_bits_to_value(qos);
@@ -92,7 +95,7 @@ static int tekram_close(struct sir_dev *
IRDA_DEBUG(2, "%s()\n", __FUNCTION__);
/* Power off dongle */
- dev->set_dtr_rts(dev, FALSE, FALSE);
+ sirdev_set_dtr_rts(dev, FALSE, FALSE);
return 0;
}
@@ -122,19 +125,20 @@ static int tekram_close(struct sir_dev *
static int tekram_change_speed(struct sir_dev *dev, unsigned speed)
{
+ unsigned state = dev->fsm.substate;
unsigned delay = 0;
- unsigned next_state = dev->fsm.substate;
u8 byte;
+ static int ret = 0;
IRDA_DEBUG(2, "%s()\n", __FUNCTION__);
- switch(dev->fsm.substate) {
-
+ switch(state) {
case SIRDEV_STATE_DONGLE_SPEED:
switch (speed) {
default:
speed = 9600;
+ ret = -EINVAL;
/* fall thru */
case 9600:
byte = TEKRAM_PW|TEKRAM_9600;
@@ -154,36 +158,34 @@ static int tekram_change_speed(struct si
}
/* Set DTR, Clear RTS */
- dev->set_dtr_rts(dev, TRUE, FALSE);
+ sirdev_set_dtr_rts(dev, TRUE, FALSE);
/* Wait at least 7us */
udelay(14);
/* Write control byte */
- dev->write(dev, &byte, 1);
+ sirdev_raw_write(dev, &byte, 1);
dev->speed = speed;
- next_state = TEKRAM_STATE_WAIT_SPEED;
- delay = tekram_delay; /* default: 50 ms */
+ state = TEKRAM_STATE_WAIT_SPEED;
+ delay = tekram_delay;
break;
case TEKRAM_STATE_WAIT_SPEED:
/* Set DTR, Set RTS */
- dev->set_dtr_rts(dev, TRUE, TRUE);
-
+ sirdev_set_dtr_rts(dev, TRUE, TRUE);
udelay(50);
-
- return 0;
+ break;
default:
- ERROR("%s - undefined state\n", __FUNCTION__);
- return -EINVAL;
+ ERROR("%s - undefined state %d\n", __FUNCTION__, state);
+ ret = -EINVAL;
+ break;
}
- dev->fsm.substate = next_state;
-
- return delay;
+ dev->fsm.substate = state;
+ return (delay > 0) ? delay : ret;
}
/*
@@ -200,43 +202,26 @@ static int tekram_change_speed(struct si
* operation
*/
-
-#define TEKRAM_STATE_WAIT_RESET (SIRDEV_STATE_DONGLE_RESET + 1)
-
static int tekram_reset(struct sir_dev *dev)
{
- unsigned delay = 0;
- unsigned next_state = dev->fsm.substate;
-
IRDA_DEBUG(2, "%s()\n", __FUNCTION__);
- switch(dev->fsm.substate) {
-
- case SIRDEV_STATE_DONGLE_RESET:
- /* Clear DTR, Set RTS */
- dev->set_dtr_rts(dev, FALSE, TRUE);
+ /* Clear DTR, Set RTS */
+ sirdev_set_dtr_rts(dev, FALSE, TRUE);
- next_state = TEKRAM_STATE_WAIT_RESET;
- delay = 1; /* Should sleep 1 ms */
- break;
+ /* Should sleep 1 ms */
+ set_current_state(TASK_UNINTERRUPTIBLE);
+ schedule_timeout(MSECS_TO_JIFFIES(1));
- case TEKRAM_STATE_WAIT_RESET:
- /* Set DTR, Set RTS */
- dev->set_dtr_rts(dev, TRUE, TRUE);
+ /* Set DTR, Set RTS */
+ sirdev_set_dtr_rts(dev, TRUE, TRUE);
- /* Wait at least 50 us */
- udelay(75);
+ /* Wait at least 50 us */
+ udelay(75);
- return 0;
+ dev->speed = 9600;
- default:
- ERROR("%s - undefined state\n", __FUNCTION__);
- return -EINVAL;
- }
-
- dev->fsm.substate = next_state;
-
- return delay;
+ return 0;
}
MODULE_AUTHOR("Dag Brattli <dagb@xxxxxxxxx>");
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/