ARM: 7936/1: sa1100: collie: add support for IrDA transceiver
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Thu, 9 Jan 2014 12:32:18 +0000 (13:32 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Wed, 12 Feb 2014 10:36:05 +0000 (10:36 +0000)
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>
arch/arm/mach-sa1100/collie.c
arch/arm/mach-sa1100/include/mach/collie.h

index 831a15824ec8c5eeed1f4b215a13f2bdcfb3f9c7..f9874ba60cc84a6347f0f6bf7b18d1434c886c9f 100644 (file)
@@ -43,6 +43,7 @@
 #include <asm/mach/arch.h>
 #include <asm/mach/flash.h>
 #include <asm/mach/map.h>
+#include <asm/mach/irda.h>
 
 #include <asm/hardware/scoop.h>
 #include <asm/mach/sharpsl_param.h>
@@ -96,6 +97,37 @@ static struct mcp_plat_data collie_mcp_data = {
        .codec_pdata    = &collie_ucb1x00_data,
 };
 
+static int collie_ir_startup(struct device *dev)
+{
+       int rc = gpio_request(COLLIE_GPIO_IR_ON, "IrDA");
+       if (rc)
+               return rc;
+       rc = gpio_direction_output(COLLIE_GPIO_IR_ON, 1);
+
+       if (!rc)
+               return 0;
+
+       gpio_free(COLLIE_GPIO_IR_ON);
+       return rc;
+}
+
+static void collie_ir_shutdown(struct device *dev)
+{
+       gpio_free(COLLIE_GPIO_IR_ON);
+}
+
+static int collie_ir_set_power(struct device *dev, unsigned int state)
+{
+       gpio_set_value(COLLIE_GPIO_IR_ON, !state);
+       return 0;
+}
+
+static struct irda_platform_data collie_ir_data = {
+       .startup = collie_ir_startup,
+       .shutdown = collie_ir_shutdown,
+       .set_power = collie_ir_set_power,
+};
+
 /*
  * Collie AC IN
  */
@@ -400,6 +432,7 @@ static void __init collie_init(void)
        sa11x0_register_mtd(&collie_flash_data, collie_flash_resources,
                            ARRAY_SIZE(collie_flash_resources));
        sa11x0_register_mcp(&collie_mcp_data);
+       sa11x0_register_irda(&collie_ir_data);
 
        sharpsl_save_param();
 }
index f33679d2d3ee0a218d280972c5f409f0b561d41b..0ef22f9cda95b41d865ba4b65a8a70de490cc74d 100644 (file)
@@ -78,7 +78,7 @@ extern void locomolcd_power(int on);
 #define COLLIE_TC35143_GPIO_VERSION0    UCB_IO_0
 #define COLLIE_TC35143_GPIO_TBL_CHK     UCB_IO_1
 #define COLLIE_TC35143_GPIO_VPEN_ON     UCB_IO_2
-#define COLLIE_TC35143_GPIO_IR_ON       UCB_IO_3
+#define COLLIE_GPIO_IR_ON              (COLLIE_TC35143_GPIO_BASE + 3)
 #define COLLIE_TC35143_GPIO_AMP_ON      UCB_IO_4
 #define COLLIE_TC35143_GPIO_VERSION1    UCB_IO_5
 #define COLLIE_TC35143_GPIO_FS8KLPF     UCB_IO_5