diff options
Diffstat (limited to 'drivers/net/irda')
-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 829da9a1d113..266ba7d8f3d1 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 233a2f923730..2808ef5c7b79 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 000000000000..831572429bb9 --- /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); | ||