]> git.hungrycats.org Git - linux/commitdiff
[IRDA]: Update dongle api.
authorJean Tourrilhes <jt@bougret.hpl.hp.com>
Fri, 23 Jan 2004 14:34:22 +0000 (06:34 -0800)
committerLinus Torvalds <torvalds@home.osdl.org>
Fri, 23 Jan 2004 14:34:22 +0000 (06:34 -0800)
From Martin Diehl.

* change dongle api such that raw r/w and modem line helpers are directly
  called, not virtual callbacks.

drivers/net/irda/sir-dev.h
drivers/net/irda/sir_core.c
drivers/net/irda/sir_dev.c
drivers/net/irda/sir_dongle.c
drivers/net/irda/sir_kthread.c

index 06e60e6aa41fc130b82a060595b2b28fbe3ce4b6..f0b8bc3637e5843790fb949ee3eeb5c6d8777abc 100644 (file)
@@ -121,15 +121,17 @@ extern int sirdev_set_dongle(struct sir_dev *dev, IRDA_DONGLE type);
 extern void sirdev_write_complete(struct sir_dev *dev);
 extern int sirdev_receive(struct sir_dev *dev, const unsigned char *cp, size_t count);
 
+/* low level helpers for SIR device/dongle setup */
+extern int sirdev_raw_write(struct sir_dev *dev, const char *buf, int len);
+extern int sirdev_raw_read(struct sir_dev *dev, char *buf, int len);
+extern int sirdev_set_dtr_rts(struct sir_dev *dev, int dtr, int rts);
+
 /* not exported */
 
 extern int sirdev_get_dongle(struct sir_dev *self, IRDA_DONGLE type);
 extern int sirdev_put_dongle(struct sir_dev *self);
 
-extern int sirdev_raw_write(struct sir_dev *dev, const char *buf, int len);
-extern int sirdev_raw_read(struct sir_dev *dev, char *buf, int len);
 extern void sirdev_enable_rx(struct sir_dev *dev);
-
 extern int sirdev_schedule_request(struct sir_dev *dev, int state, unsigned param);
 extern int __init irda_thread_create(void);
 extern void __exit irda_thread_join(void);
@@ -195,10 +197,6 @@ struct sir_dev {
        const struct sir_driver * drv;
        void *priv;
 
-       /* dongle callbacks to the SIR device */
-       int (*read)(struct sir_dev *, char *buf, int len);
-       int (*write)(struct sir_dev *, const char *buf, int len);
-       int (*set_dtr_rts)(struct sir_dev *, int dtr, int rts);
 };
 
 #endif /* IRDA_SIR_H */
index 29a7716ba9dfd0261babb78bd40104570c3b97bb..a49f910c835b6adec764bdb372dfe7cbe793baf9 100644 (file)
@@ -37,6 +37,10 @@ EXPORT_SYMBOL(sirdev_set_dongle);
 EXPORT_SYMBOL(sirdev_write_complete);
 EXPORT_SYMBOL(sirdev_receive);
 
+EXPORT_SYMBOL(sirdev_raw_write);
+EXPORT_SYMBOL(sirdev_raw_read);
+EXPORT_SYMBOL(sirdev_set_dtr_rts);
+
 static int __init sir_core_init(void)
 {
        return irda_thread_create();
index 42eed5f658b651083abec2a1e713362d37086bbe..1c887279f1caea89ccd16e9f109bab66604edc81 100644 (file)
@@ -117,6 +117,14 @@ int sirdev_raw_read(struct sir_dev *dev, char *buf, int len)
        return count;
 }
 
+int sirdev_set_dtr_rts(struct sir_dev *dev, int dtr, int rts)
+{
+       int ret = -ENXIO;
+       if (dev->drv->set_dtr_rts != 0)
+               ret =  dev->drv->set_dtr_rts(dev, dtr, rts);
+       return ret;
+}
+       
 /**********************************************************************/
 
 /* called from client driver - likely with bh-context - to indicate
index 75d602fee2bbc648d19ad7801eca226b6d8fcc81..c5b76746e72b07f34db645adcde01a3550f68ca5 100644 (file)
@@ -102,12 +102,6 @@ int sirdev_get_dongle(struct sir_dev *dev, IRDA_DONGLE type)
                err = -ESTALE;
                goto out_unlock;        /* rmmod already pending */
        }
-
-       /* Initialize dongle driver callbacks */
-       dev->read        = sirdev_raw_read;
-       dev->write       = sirdev_raw_write;
-       dev->set_dtr_rts = dev->drv->set_dtr_rts;
-
        dev->dongle_drv = drv;
 
        if (!drv->open  ||  (err=drv->open(dev))!=0)
index 51148178ac707a43d81fe35dc9a0456a27493818..69d6ee5d28da88bc499ff6567ff9700da10c00a1 100644 (file)
@@ -311,15 +311,9 @@ static void irda_config_fsm(void *data)
                        break;
 
                case SIRDEV_STATE_SET_DTR_RTS:
-                       if (dev->drv->set_dtr_rts) {
-                               int     dtr, rts;
-
-                               dtr = (fsm->param&0x02) ? TRUE : FALSE;
-                               rts = (fsm->param&0x01) ? TRUE : FALSE;
-                               ret = dev->drv->set_dtr_rts(dev,dtr,rts);
-                       }
-                       else
-                               ret = -EINVAL;
+                       ret = sirdev_set_dtr_rts(dev,
+                               (fsm->param&0x02) ? TRUE : FALSE,
+                               (fsm->param&0x01) ? TRUE : FALSE);
                        next_state = SIRDEV_STATE_DONE;
                        break;