예제 #1
0
/*
 * 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;
}
예제 #2
0
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);
}
예제 #3
0
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));
}
예제 #4
0
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);
	}
}
예제 #5
0
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;
}
예제 #6
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;
}