mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-31 12:10:52 -04:00
ARM: 5814/1: SA1100: h3100/h3600: convert all users of assign_h3600_egpio to gpiolib
Use of gpio_request/gpio_free in some callbacks may look ugly, but corresponding drivers (sa1100_serial and sa1100_fb) don't provide (yet) init/exit hooks and registering these gpios in *_mach_init is also not possible, because htc-gpio driver starts a bit later... Signed-off-by: Dmitry Artamonow <[email protected]> Signed-off-by: Russell King <[email protected]>
This commit is contained in:
parent
2eec62d7db
commit
22f9740552
2 changed files with 126 additions and 18 deletions
|
|
@ -47,9 +47,33 @@ static int h3600_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
|
|||
goto err02;
|
||||
irqs[0].irq = gpio_to_irq(H3XXX_GPIO_PCMCIA_CD0);
|
||||
|
||||
err = soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
|
||||
err = gpio_request(H3XXX_EGPIO_OPT_NVRAM_ON, "OPT NVRAM ON");
|
||||
if (err)
|
||||
goto err02;
|
||||
err = gpio_direction_output(H3XXX_EGPIO_OPT_NVRAM_ON, 0);
|
||||
if (err)
|
||||
goto err03;
|
||||
err = gpio_request(H3XXX_EGPIO_OPT_ON, "OPT ON");
|
||||
if (err)
|
||||
goto err03;
|
||||
err = gpio_direction_output(H3XXX_EGPIO_OPT_ON, 0);
|
||||
if (err)
|
||||
goto err04;
|
||||
err = gpio_request(H3XXX_EGPIO_OPT_RESET, "OPT RESET");
|
||||
if (err)
|
||||
goto err04;
|
||||
err = gpio_direction_output(H3XXX_EGPIO_OPT_RESET, 0);
|
||||
if (err)
|
||||
goto err05;
|
||||
err = gpio_request(H3XXX_EGPIO_CARD_RESET, "PCMCIA CARD RESET");
|
||||
if (err)
|
||||
goto err05;
|
||||
err = gpio_direction_output(H3XXX_EGPIO_CARD_RESET, 0);
|
||||
if (err)
|
||||
goto err06;
|
||||
err = soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
|
||||
if (err)
|
||||
goto err06;
|
||||
break;
|
||||
case 1:
|
||||
err = gpio_request(H3XXX_GPIO_PCMCIA_IRQ1, "PCMCIA IRQ1");
|
||||
|
|
@ -75,6 +99,10 @@ static int h3600_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
|
|||
}
|
||||
return 0;
|
||||
|
||||
err06: gpio_free(H3XXX_EGPIO_CARD_RESET);
|
||||
err05: gpio_free(H3XXX_EGPIO_OPT_RESET);
|
||||
err04: gpio_free(H3XXX_EGPIO_OPT_ON);
|
||||
err03: gpio_free(H3XXX_EGPIO_OPT_NVRAM_ON);
|
||||
err02: gpio_free(H3XXX_GPIO_PCMCIA_CD0);
|
||||
err01: gpio_free(H3XXX_GPIO_PCMCIA_IRQ0);
|
||||
err00: return err;
|
||||
|
|
@ -88,12 +116,17 @@ static void h3600_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt)
|
|||
{
|
||||
soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
|
||||
|
||||
/* Disable CF bus: */
|
||||
assign_h3600_egpio(IPAQ_EGPIO_OPT_NVRAM_ON, 0);
|
||||
assign_h3600_egpio(IPAQ_EGPIO_OPT_ON, 0);
|
||||
assign_h3600_egpio(IPAQ_EGPIO_OPT_RESET, 1);
|
||||
switch (skt->nr) {
|
||||
case 0:
|
||||
/* Disable CF bus: */
|
||||
gpio_set_value(H3XXX_EGPIO_OPT_NVRAM_ON, 0);
|
||||
gpio_set_value(H3XXX_EGPIO_OPT_ON, 0);
|
||||
gpio_set_value(H3XXX_EGPIO_OPT_RESET, 1);
|
||||
|
||||
gpio_free(H3XXX_EGPIO_CARD_RESET);
|
||||
gpio_free(H3XXX_EGPIO_OPT_RESET);
|
||||
gpio_free(H3XXX_EGPIO_OPT_ON);
|
||||
gpio_free(H3XXX_EGPIO_OPT_NVRAM_ON);
|
||||
gpio_free(H3XXX_GPIO_PCMCIA_CD0);
|
||||
gpio_free(H3XXX_GPIO_PCMCIA_IRQ0);
|
||||
break;
|
||||
|
|
@ -139,7 +172,7 @@ h3600_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_
|
|||
return -1;
|
||||
}
|
||||
|
||||
assign_h3600_egpio(IPAQ_EGPIO_CARD_RESET, !!(state->flags & SS_RESET));
|
||||
gpio_set_value(H3XXX_EGPIO_CARD_RESET, !!(state->flags & SS_RESET));
|
||||
|
||||
/* Silently ignore Vpp, output enable, speaker enable. */
|
||||
|
||||
|
|
@ -149,9 +182,9 @@ h3600_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_
|
|||
static void h3600_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
|
||||
{
|
||||
/* Enable CF bus: */
|
||||
assign_h3600_egpio(IPAQ_EGPIO_OPT_NVRAM_ON, 1);
|
||||
assign_h3600_egpio(IPAQ_EGPIO_OPT_ON, 1);
|
||||
assign_h3600_egpio(IPAQ_EGPIO_OPT_RESET, 0);
|
||||
gpio_set_value(H3XXX_EGPIO_OPT_NVRAM_ON, 1);
|
||||
gpio_set_value(H3XXX_EGPIO_OPT_ON, 1);
|
||||
gpio_set_value(H3XXX_EGPIO_OPT_RESET, 0);
|
||||
|
||||
msleep(10);
|
||||
|
||||
|
|
@ -169,10 +202,10 @@ static void h3600_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
|
|||
* socket 0 then socket 1.
|
||||
*/
|
||||
if (skt->nr == 1) {
|
||||
assign_h3600_egpio(IPAQ_EGPIO_OPT_ON, 0);
|
||||
assign_h3600_egpio(IPAQ_EGPIO_OPT_NVRAM_ON, 0);
|
||||
gpio_set_value(H3XXX_EGPIO_OPT_ON, 0);
|
||||
gpio_set_value(H3XXX_EGPIO_OPT_NVRAM_ON, 0);
|
||||
/* hmm, does this suck power? */
|
||||
assign_h3600_egpio(IPAQ_EGPIO_OPT_RESET, 1);
|
||||
gpio_set_value(H3XXX_EGPIO_OPT_RESET, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue