diff options
author | Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 2014-01-09 07:32:18 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2014-02-12 05:36:05 -0500 |
commit | 287d4d51e6bb1cd43cb77352bdec5bac1b2e1226 (patch) | |
tree | 1e49e1dd21eb6b766ea9602f502f6c9b49a31749 /arch/arm/mach-sa1100/collie.c | |
parent | 75916d5549e4c134f69068de175c90c170c17a7a (diff) |
ARM: 7936/1: sa1100: collie: add support for IrDA transceiver
Collie has onboard IrDA transceiver controlled via active-low gpio. Add
corresponding platform data.
Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-sa1100/collie.c')
-rw-r--r-- | arch/arm/mach-sa1100/collie.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c index 831a15824ec8..f9874ba60cc8 100644 --- a/arch/arm/mach-sa1100/collie.c +++ b/arch/arm/mach-sa1100/collie.c | |||
@@ -43,6 +43,7 @@ | |||
43 | #include <asm/mach/arch.h> | 43 | #include <asm/mach/arch.h> |
44 | #include <asm/mach/flash.h> | 44 | #include <asm/mach/flash.h> |
45 | #include <asm/mach/map.h> | 45 | #include <asm/mach/map.h> |
46 | #include <asm/mach/irda.h> | ||
46 | 47 | ||
47 | #include <asm/hardware/scoop.h> | 48 | #include <asm/hardware/scoop.h> |
48 | #include <asm/mach/sharpsl_param.h> | 49 | #include <asm/mach/sharpsl_param.h> |
@@ -96,6 +97,37 @@ static struct mcp_plat_data collie_mcp_data = { | |||
96 | .codec_pdata = &collie_ucb1x00_data, | 97 | .codec_pdata = &collie_ucb1x00_data, |
97 | }; | 98 | }; |
98 | 99 | ||
100 | static int collie_ir_startup(struct device *dev) | ||
101 | { | ||
102 | int rc = gpio_request(COLLIE_GPIO_IR_ON, "IrDA"); | ||
103 | if (rc) | ||
104 | return rc; | ||
105 | rc = gpio_direction_output(COLLIE_GPIO_IR_ON, 1); | ||
106 | |||
107 | if (!rc) | ||
108 | return 0; | ||
109 | |||
110 | gpio_free(COLLIE_GPIO_IR_ON); | ||
111 | return rc; | ||
112 | } | ||
113 | |||
114 | static void collie_ir_shutdown(struct device *dev) | ||
115 | { | ||
116 | gpio_free(COLLIE_GPIO_IR_ON); | ||
117 | } | ||
118 | |||
119 | static int collie_ir_set_power(struct device *dev, unsigned int state) | ||
120 | { | ||
121 | gpio_set_value(COLLIE_GPIO_IR_ON, !state); | ||
122 | return 0; | ||
123 | } | ||
124 | |||
125 | static struct irda_platform_data collie_ir_data = { | ||
126 | .startup = collie_ir_startup, | ||
127 | .shutdown = collie_ir_shutdown, | ||
128 | .set_power = collie_ir_set_power, | ||
129 | }; | ||
130 | |||
99 | /* | 131 | /* |
100 | * Collie AC IN | 132 | * Collie AC IN |
101 | */ | 133 | */ |
@@ -400,6 +432,7 @@ static void __init collie_init(void) | |||
400 | sa11x0_register_mtd(&collie_flash_data, collie_flash_resources, | 432 | sa11x0_register_mtd(&collie_flash_data, collie_flash_resources, |
401 | ARRAY_SIZE(collie_flash_resources)); | 433 | ARRAY_SIZE(collie_flash_resources)); |
402 | sa11x0_register_mcp(&collie_mcp_data); | 434 | sa11x0_register_mcp(&collie_mcp_data); |
435 | sa11x0_register_irda(&collie_ir_data); | ||
403 | 436 | ||
404 | sharpsl_save_param(); | 437 | sharpsl_save_param(); |
405 | } | 438 | } |