static int assabet_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned int mask; switch (state->Vcc) { case 0: mask = 0; break; case 50: printk(KERN_WARNING "%s(): CS asked for 5V, applying 3.3V...\n", __func__); case 33: /* Can only apply 3.3V to the CF slot. */ mask = ASSABET_BCR_CF_PWR; break; default: printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __func__, state->Vcc); return -1; } /* Silently ignore Vpp, output enable, speaker enable. */ if (state->flags & SS_RESET) mask |= ASSABET_BCR_CF_RST; ASSABET_BCR_frob(ASSABET_BCR_CF_RST | ASSABET_BCR_CF_PWR, mask); return 0; }
static int assabet_irda_set_power(struct device *dev, unsigned int state) { static unsigned int bcr_state[4] = { ASSABET_BCR_IRDA_MD0, ASSABET_BCR_IRDA_MD1|ASSABET_BCR_IRDA_MD0, ASSABET_BCR_IRDA_MD1, 0 }; if (state < 4) ASSABET_BCR_frob(ASSABET_BCR_IRDA_MD1 | ASSABET_BCR_IRDA_MD0, bcr_state[state]); return 0; }
static int assabet_pcmcia_configure_socket(struct soc_pcmcia_socket *skt, const socket_state_t *state) { unsigned int mask; switch (state->Vcc) { case 0: mask = 0; break; case 50: printk(KERN_WARNING "%s(): CS asked for 5V, applying 3.3V...\n", __func__); case 33: mask = ASSABET_BCR_CF_PWR; break; default: printk(KERN_ERR "%s(): unrecognized Vcc %u\n", __func__, state->Vcc); return -1; } if (state->flags & SS_RESET) mask |= ASSABET_BCR_CF_RST; if (!(state->flags & SS_OUTPUT_ENA)) mask |= ASSABET_BCR_CF_BUS_OFF; ASSABET_BCR_frob(ASSABET_BCR_CF_RST | ASSABET_BCR_CF_PWR | ASSABET_BCR_CF_BUS_OFF, mask); return 0; }
void assabet_leds_event(led_event_t evt) { unsigned long flags; local_irq_save(flags); switch (evt) { case led_start: hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; led_state = LED_STATE_ENABLED; break; case led_stop: led_state &= ~LED_STATE_ENABLED; hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; ASSABET_BCR_frob(ASSABET_BCR_LED_MASK, hw_led_state); break; case led_claim: led_state |= LED_STATE_CLAIMED; hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; break; case led_release: led_state &= ~LED_STATE_CLAIMED; hw_led_state = ASSABET_BCR_LED_RED | ASSABET_BCR_LED_GREEN; break; #ifdef CONFIG_LEDS_TIMER case led_timer: if (!(led_state & LED_STATE_CLAIMED)) hw_led_state ^= ASSABET_BCR_LED_GREEN; break; #endif #ifdef CONFIG_LEDS_CPU case led_idle_start: if (!(led_state & LED_STATE_CLAIMED)) hw_led_state |= ASSABET_BCR_LED_RED; break; case led_idle_end: if (!(led_state & LED_STATE_CLAIMED)) hw_led_state &= ~ASSABET_BCR_LED_RED; break; #endif case led_halted: break; case led_green_on: if (led_state & LED_STATE_CLAIMED) hw_led_state &= ~ASSABET_BCR_LED_GREEN; break; case led_green_off: if (led_state & LED_STATE_CLAIMED) hw_led_state |= ASSABET_BCR_LED_GREEN; break; case led_amber_on: break; case led_amber_off: break; case led_red_on: if (led_state & LED_STATE_CLAIMED) hw_led_state &= ~ASSABET_BCR_LED_RED; break; case led_red_off: if (led_state & LED_STATE_CLAIMED) hw_led_state |= ASSABET_BCR_LED_RED; break; default: break; } if (led_state & LED_STATE_ENABLED) ASSABET_BCR_frob(ASSABET_BCR_LED_MASK, hw_led_state); local_irq_restore(flags); }