aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Eremin-Solenikov <dbaryshkov@gmail.com>2013-11-26 05:10:10 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2013-12-12 18:00:56 -0500
commitd8eec82c176a87aebc823ceed2b7656e43f88b49 (patch)
treef7ec501782638911ad48b3c3c4b14b02269420f3
parent8bed576c1a81d620765ec96f7b4e80dedaef1bcf (diff)
ARM: 7900/1: sa1100: h3100: refactor IrDA GPIO handling
As GPIOs are going to move to platform device, there is no guarantee that they will be available at init_machine time. Request and free all GPIOs from IrDA startup/shutdown callbacks and not at init_machine time. Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/mach-sa1100/h3100.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/arch/arm/mach-sa1100/h3100.c b/arch/arm/mach-sa1100/h3100.c
index 5b78c9f9a11d..daa27c474c13 100644
--- a/arch/arm/mach-sa1100/h3100.c
+++ b/arch/arm/mach-sa1100/h3100.c
@@ -89,6 +89,11 @@ static void __init h3100_map_io(void)
89/* 89/*
90 * This turns the IRDA power on or off on the Compaq H3100 90 * This turns the IRDA power on or off on the Compaq H3100
91 */ 91 */
92static struct gpio h3100_irda_gpio[] = {
93 { H3100_GPIO_IR_ON, GPIOF_OUT_INIT_LOW, "IrDA power" },
94 { H3100_GPIO_IR_FSEL, GPIOF_OUT_INIT_LOW, "IrDA fsel" },
95};
96
92static int h3100_irda_set_power(struct device *dev, unsigned int state) 97static int h3100_irda_set_power(struct device *dev, unsigned int state)
93{ 98{
94 gpio_set_value(H3100_GPIO_IR_ON, state); 99 gpio_set_value(H3100_GPIO_IR_ON, state);
@@ -100,14 +105,24 @@ static void h3100_irda_set_speed(struct device *dev, unsigned int speed)
100 gpio_set_value(H3100_GPIO_IR_FSEL, !(speed < 4000000)); 105 gpio_set_value(H3100_GPIO_IR_FSEL, !(speed < 4000000));
101} 106}
102 107
108static int h3100_irda_startup(struct device *dev)
109{
110 return gpio_request_array(h3100_irda_gpio, sizeof(h3100_irda_gpio));
111}
112
113static void h3100_irda_shutdown(struct device *dev)
114{
115 return gpio_free_array(h3100_irda_gpio, sizeof(h3100_irda_gpio));
116}
117
103static struct irda_platform_data h3100_irda_data = { 118static struct irda_platform_data h3100_irda_data = {
104 .set_power = h3100_irda_set_power, 119 .set_power = h3100_irda_set_power,
105 .set_speed = h3100_irda_set_speed, 120 .set_speed = h3100_irda_set_speed,
121 .startup = h3100_irda_startup,
122 .shutdown = h3100_irda_shutdown,
106}; 123};
107 124
108static struct gpio_default_state h3100_default_gpio[] = { 125static struct gpio_default_state h3100_default_gpio[] = {
109 { H3100_GPIO_IR_ON, GPIO_MODE_OUT0, "IrDA power" },
110 { H3100_GPIO_IR_FSEL, GPIO_MODE_OUT0, "IrDA fsel" },
111 { H3XXX_GPIO_COM_DCD, GPIO_MODE_IN, "COM DCD" }, 126 { H3XXX_GPIO_COM_DCD, GPIO_MODE_IN, "COM DCD" },
112 { H3XXX_GPIO_COM_CTS, GPIO_MODE_IN, "COM CTS" }, 127 { H3XXX_GPIO_COM_CTS, GPIO_MODE_IN, "COM CTS" },
113 { H3XXX_GPIO_COM_RTS, GPIO_MODE_OUT0, "COM RTS" }, 128 { H3XXX_GPIO_COM_RTS, GPIO_MODE_OUT0, "COM RTS" },