diff options
author | Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> | 2013-11-26 05:10:10 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-12-12 18:00:56 -0500 |
commit | d8eec82c176a87aebc823ceed2b7656e43f88b49 (patch) | |
tree | f7ec501782638911ad48b3c3c4b14b02269420f3 | |
parent | 8bed576c1a81d620765ec96f7b4e80dedaef1bcf (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.c | 19 |
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 | */ |
92 | static 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 | |||
92 | static int h3100_irda_set_power(struct device *dev, unsigned int state) | 97 | static 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 | ||
108 | static int h3100_irda_startup(struct device *dev) | ||
109 | { | ||
110 | return gpio_request_array(h3100_irda_gpio, sizeof(h3100_irda_gpio)); | ||
111 | } | ||
112 | |||
113 | static void h3100_irda_shutdown(struct device *dev) | ||
114 | { | ||
115 | return gpio_free_array(h3100_irda_gpio, sizeof(h3100_irda_gpio)); | ||
116 | } | ||
117 | |||
103 | static struct irda_platform_data h3100_irda_data = { | 118 | static 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 | ||
108 | static struct gpio_default_state h3100_default_gpio[] = { | 125 | static 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" }, |