/* * helper for sa1100fb */ static void __h3600_lcd_power(int enable ) { assign_ipaqsa_egpio(IPAQ_EGPIO_LCD_POWER, enable); assign_ipaqsa_egpio(IPAQ_EGPIO_LCD_ENABLE, enable); return; }
static void h3600_pcmcia_hw_shutdown(struct soc_pcmcia_socket *skt) { soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* Disable CF bus: */ assign_ipaqsa_egpio(IPAQ_EGPIO_OPT_NVRAM_ON, 0); assign_ipaqsa_egpio(IPAQ_EGPIO_OPT_ON, 0); assign_ipaqsa_egpio(IPAQ_EGPIO_OPT_RESET, 1); }
static void h3600_pcmcia_socket_init(struct soc_pcmcia_socket *skt) { /* Enable CF bus: */ assign_ipaqsa_egpio(IPAQ_EGPIO_OPT_NVRAM_ON, 1); assign_ipaqsa_egpio(IPAQ_EGPIO_OPT_ON, 1); assign_ipaqsa_egpio(IPAQ_EGPIO_OPT_RESET, 0); msleep(10); soc_pcmcia_enable_irqs(skt, irqs, ARRAY_SIZE(irqs)); }
static void h3600_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt) { soc_pcmcia_disable_irqs(skt, irqs, ARRAY_SIZE(irqs)); /* * FIXME: This doesn't fit well. We don't have the mechanism in * the generic PCMCIA layer to deal with the idea of two sockets * on one bus. We rely on the cs.c behaviour shutting down * socket 0 then socket 1. */ if (skt->nr == 1) { assign_ipaqsa_egpio(IPAQ_EGPIO_OPT_ON, 0); assign_ipaqsa_egpio(IPAQ_EGPIO_OPT_NVRAM_ON, 0); /* hmm, does this suck power? */ assign_ipaqsa_egpio(IPAQ_EGPIO_OPT_RESET, 1); } }
static int h3600_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { if (state->Vcc != 0 && state->Vcc != 33 && state->Vcc != 50) { printk(KERN_ERR "h3600_pcmcia: unrecognized Vcc %u.%uV\n", state->Vcc / 10, state->Vcc % 10); return -1; } if (state->flags & SS_RESET) assign_ipaqsa_egpio(IPAQ_EGPIO_CARD_RESET, 1); else assign_ipaqsa_egpio(IPAQ_EGPIO_CARD_RESET, 0); /* Silently ignore Vpp, output enable, speaker enable. */ return 0; }
static int h3600_lcd_set_power( struct lcd_device *lm, int level ) { h3600_lcd_power = level; if (level < 1) { assign_ipaqsa_egpio(IPAQ_EGPIO_LCD_POWER, 1); } else { assign_ipaqsa_egpio(IPAQ_EGPIO_LCD_POWER, 0); } if (level < 4) { assign_ipaqsa_egpio(IPAQ_EGPIO_LCD_ENABLE, 1); } else { assign_ipaqsa_egpio(IPAQ_EGPIO_LCD_ENABLE, 0); } return 0; }