diff options
author | Samuel Ortiz <samuel@sortiz.org> | 2007-07-21 22:07:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-07-21 22:07:33 -0400 |
commit | e97e2ddf07d6b6c2d621ddaec277e19f86c0cdb1 (patch) | |
tree | 7c84ad5813f63e76891871b662537bd8fb00ddbe /drivers/net | |
parent | 22e1fb25e78fd47b1ef3af3b48a2b07efdd3f95f (diff) |
[IrDA]: EP7211 IR driver port to the latest SIR API
The EP7211 SIR driver was the only one left without a new SIR API port.
Signed-off-by: Samuel Ortiz <samuel@sortiz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/irda/Kconfig | 9 | ||||
-rw-r--r-- | drivers/net/irda/Makefile | 1 | ||||
-rw-r--r-- | drivers/net/irda/ep7211-sir.c | 89 |
3 files changed, 99 insertions, 0 deletions
diff --git a/drivers/net/irda/Kconfig b/drivers/net/irda/Kconfig index 829da9a1d11..266ba7d8f3d 100644 --- a/drivers/net/irda/Kconfig +++ b/drivers/net/irda/Kconfig | |||
@@ -155,6 +155,15 @@ config KINGSUN_DONGLE | |||
155 | To compile it as a module, choose M here: the module will be called | 155 | To compile it as a module, choose M here: the module will be called |
156 | kingsun-sir. | 156 | kingsun-sir. |
157 | 157 | ||
158 | config EP7211_DONGLE | ||
159 | tristate "EP7211 I/R support" | ||
160 | depends on IRTTY_SIR && ARCH_EP7211 && IRDA && EXPERIMENTAL | ||
161 | help | ||
162 | Say Y here if you want to build support for the Cirrus logic | ||
163 | EP7211 chipset's infrared module. | ||
164 | |||
165 | |||
166 | |||
158 | comment "Old SIR device drivers" | 167 | comment "Old SIR device drivers" |
159 | 168 | ||
160 | config IRPORT_SIR | 169 | config IRPORT_SIR |
diff --git a/drivers/net/irda/Makefile b/drivers/net/irda/Makefile index 233a2f92373..2808ef5c7b7 100644 --- a/drivers/net/irda/Makefile +++ b/drivers/net/irda/Makefile | |||
@@ -45,6 +45,7 @@ obj-$(CONFIG_MCP2120_DONGLE) += mcp2120-sir.o | |||
45 | obj-$(CONFIG_ACT200L_DONGLE) += act200l-sir.o | 45 | obj-$(CONFIG_ACT200L_DONGLE) += act200l-sir.o |
46 | obj-$(CONFIG_MA600_DONGLE) += ma600-sir.o | 46 | obj-$(CONFIG_MA600_DONGLE) += ma600-sir.o |
47 | obj-$(CONFIG_TOIM3232_DONGLE) += toim3232-sir.o | 47 | obj-$(CONFIG_TOIM3232_DONGLE) += toim3232-sir.o |
48 | obj-$(CONFIG_EP7211_DONGLE) += ep7211-sir.o | ||
48 | obj-$(CONFIG_KINGSUN_DONGLE) += kingsun-sir.o | 49 | obj-$(CONFIG_KINGSUN_DONGLE) += kingsun-sir.o |
49 | 50 | ||
50 | # The SIR helper module | 51 | # The SIR helper module |
diff --git a/drivers/net/irda/ep7211-sir.c b/drivers/net/irda/ep7211-sir.c new file mode 100644 index 00000000000..831572429bb --- /dev/null +++ b/drivers/net/irda/ep7211-sir.c | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * IR port driver for the Cirrus Logic EP7211 processor. | ||
3 | * | ||
4 | * Copyright 2001, Blue Mug Inc. All rights reserved. | ||
5 | * Copyright 2007, Samuel Ortiz <samuel@sortiz.org> | ||
6 | */ | ||
7 | #include <linux/module.h> | ||
8 | #include <linux/delay.h> | ||
9 | #include <linux/tty.h> | ||
10 | #include <linux/init.h> | ||
11 | #include <linux/spinlock.h> | ||
12 | |||
13 | #include <net/irda/irda.h> | ||
14 | #include <net/irda/irda_device.h> | ||
15 | |||
16 | #include <asm/io.h> | ||
17 | #include <asm/hardware.h> | ||
18 | |||
19 | #include "sir-dev.h" | ||
20 | |||
21 | #define MIN_DELAY 25 /* 15 us, but wait a little more to be sure */ | ||
22 | #define MAX_DELAY 10000 /* 1 ms */ | ||
23 | |||
24 | static int ep7211_open(struct sir_dev *dev); | ||
25 | static int ep7211_close(struct sir_dev *dev); | ||
26 | static int ep7211_change_speed(struct sir_dev *dev, unsigned speed); | ||
27 | static int ep7211_reset(struct sir_dev *dev); | ||
28 | |||
29 | static struct dongle_driver ep7211 = { | ||
30 | .owner = THIS_MODULE, | ||
31 | .driver_name = "EP7211 IR driver", | ||
32 | .type = IRDA_EP7211_DONGLE, | ||
33 | .open = ep7211_open, | ||
34 | .close = ep7211_close, | ||
35 | .reset = ep7211_reset, | ||
36 | .set_speed = ep7211_change_speed, | ||
37 | }; | ||
38 | |||
39 | static int __init ep7211_sir_init(void) | ||
40 | { | ||
41 | return irda_register_dongle(&ep7211); | ||
42 | } | ||
43 | |||
44 | static void __exit ep7211_sir_cleanup(void) | ||
45 | { | ||
46 | irda_unregister_dongle(&ep7211); | ||
47 | } | ||
48 | |||
49 | static int ep7211_open(struct sir_dev *dev) | ||
50 | { | ||
51 | unsigned int syscon; | ||
52 | |||
53 | /* Turn on the SIR encoder. */ | ||
54 | syscon = clps_readl(SYSCON1); | ||
55 | syscon |= SYSCON1_SIREN; | ||
56 | clps_writel(syscon, SYSCON1); | ||
57 | |||
58 | return 0; | ||
59 | } | ||
60 | |||
61 | static int ep7211_close(struct sir_dev *dev) | ||
62 | { | ||
63 | unsigned int syscon; | ||
64 | |||
65 | /* Turn off the SIR encoder. */ | ||
66 | syscon = clps_readl(SYSCON1); | ||
67 | syscon &= ~SYSCON1_SIREN; | ||
68 | clps_writel(syscon, SYSCON1); | ||
69 | |||
70 | return 0; | ||
71 | } | ||
72 | |||
73 | static int ep7211_change_speed(struct sir_dev *dev, unsigned speed) | ||
74 | { | ||
75 | return 0; | ||
76 | } | ||
77 | |||
78 | static int ep7211_reset(struct sir_dev *dev) | ||
79 | { | ||
80 | return 0; | ||
81 | } | ||
82 | |||
83 | MODULE_AUTHOR("Samuel Ortiz <samuel@sortiz.org>"); | ||
84 | MODULE_DESCRIPTION("EP7211 IR dongle driver"); | ||
85 | MODULE_LICENSE("GPL"); | ||
86 | MODULE_ALIAS("irda-dongle-13"); /* IRDA_EP7211_DONGLE */ | ||
87 | |||
88 | module_init(ep7211_sir_init); | ||
89 | module_exit(ep7211_sir_cleanup); | ||