static void omap_init_kp(void) { if (machine_is_omap_h2() || machine_is_omap_h3()) { omap_cfg_reg(F18_1610_KBC0); omap_cfg_reg(D20_1610_KBC1); omap_cfg_reg(D19_1610_KBC2); omap_cfg_reg(E18_1610_KBC3); omap_cfg_reg(C21_1610_KBC4); omap_cfg_reg(G18_1610_KBR0); omap_cfg_reg(F19_1610_KBR1); omap_cfg_reg(H14_1610_KBR2); omap_cfg_reg(E20_1610_KBR3); omap_cfg_reg(E19_1610_KBR4); omap_cfg_reg(N19_1610_KBR5); } else if (machine_is_omap_perseus2()) { omap_cfg_reg(E2_730_KBR0); omap_cfg_reg(J7_730_KBR1); omap_cfg_reg(E1_730_KBR2); omap_cfg_reg(F3_730_KBR3); omap_cfg_reg(D2_730_KBR4); omap_cfg_reg(C2_730_KBC0); omap_cfg_reg(D3_730_KBC1); omap_cfg_reg(E4_730_KBC2); omap_cfg_reg(F4_730_KBC3); omap_cfg_reg(E3_730_KBC4); } (void) platform_device_register(&omap_kp_device); }
static void omap_init_kp(void) { /* 2430 and 34xx keypad is on TWL4030 */ if (cpu_is_omap2430() || cpu_is_omap34xx()) return; if (machine_is_omap_h2() || machine_is_omap_h3()) { omap_cfg_reg(F18_1610_KBC0); omap_cfg_reg(D20_1610_KBC1); omap_cfg_reg(D19_1610_KBC2); omap_cfg_reg(E18_1610_KBC3); omap_cfg_reg(C21_1610_KBC4); omap_cfg_reg(G18_1610_KBR0); omap_cfg_reg(F19_1610_KBR1); omap_cfg_reg(H14_1610_KBR2); omap_cfg_reg(E20_1610_KBR3); omap_cfg_reg(E19_1610_KBR4); omap_cfg_reg(N19_1610_KBR5); } else if (machine_is_omap_perseus2() || machine_is_omap_fsample()) { omap_cfg_reg(E2_7XX_KBR0); omap_cfg_reg(J7_7XX_KBR1); omap_cfg_reg(E1_7XX_KBR2); omap_cfg_reg(F3_7XX_KBR3); omap_cfg_reg(D2_7XX_KBR4); omap_cfg_reg(C2_7XX_KBC0); omap_cfg_reg(D3_7XX_KBC1); omap_cfg_reg(E4_7XX_KBC2); omap_cfg_reg(F4_7XX_KBC3); omap_cfg_reg(E3_7XX_KBC4); } else if (machine_is_omap_h4()) { omap_cfg_reg(T19_24XX_KBR0); omap_cfg_reg(R19_24XX_KBR1); omap_cfg_reg(V18_24XX_KBR2); omap_cfg_reg(M21_24XX_KBR3); omap_cfg_reg(E5__24XX_KBR4); if (omap_has_menelaus()) { omap_cfg_reg(B3__24XX_KBR5); omap_cfg_reg(AA4_24XX_KBC2); omap_cfg_reg(B13_24XX_KBC6); } else { omap_cfg_reg(M18_24XX_KBR5); omap_cfg_reg(H19_24XX_KBC2); omap_cfg_reg(N19_24XX_KBC6); } omap_cfg_reg(R20_24XX_KBC0); omap_cfg_reg(M14_24XX_KBC1); omap_cfg_reg(V17_24XX_KBC3); omap_cfg_reg(P21_24XX_KBC4); omap_cfg_reg(L14_24XX_KBC5); } }
static int __init omap_leds_init(void) { if (machine_is_omap_innovator()) leds_event = innovator_leds_event; else if (machine_is_omap_h2() || machine_is_omap_perseus2()) { leds_event = h2p2_dbg_leds_event; } leds_event(led_start); return 0; }
static int __init omap_leds_init(void) { if (!cpu_class_is_omap1()) return -ENODEV; if (machine_is_omap_innovator()) leds_event = innovator_leds_event; else if (machine_is_omap_h2() || machine_is_omap_h3() || machine_is_omap_perseus2()) leds_event = h2p2_dbg_leds_event; else if (machine_is_omap_osk()) leds_event = osk_leds_event; else return -1; if (machine_is_omap_h2() || machine_is_omap_h3() #ifdef CONFIG_OMAP_OSK_MISTRAL || machine_is_omap_osk() #endif ) { /* LED1/LED2 pins can be used as GPIO (as done here), or by * the LPG (works even in deep sleep!), to drive a bicolor * LED on the H2 sample board, and another on the H2/P2 * "surfer" expansion board. * * The same pins drive a LED on the OSK Mistral board, but * that's a different kind of LED (just one color at a time). */ omap_cfg_reg(P18_1610_GPIO3); if (gpio_request(3, "LED red") == 0) gpio_direction_output(3, 1); else printk(KERN_WARNING "LED: can't get GPIO3/red?\n"); omap_cfg_reg(MPUIO4); if (gpio_request(OMAP_MPUIO(4), "LED green") == 0) gpio_direction_output(OMAP_MPUIO(4), 1); else printk(KERN_WARNING "LED: can't get MPUIO4/green?\n"); } leds_event(led_start); return 0; }
static void h2p2_dbg_leds_event(led_event_t evt) { unsigned long flags; spin_lock_irqsave(&lock, flags); if (!(led_state & LED_STATE_ENABLED) && evt != led_start) goto done; switch (evt) { case led_start: if (fpga) led_state |= LED_STATE_ENABLED; break; case led_stop: case led_halted: if (!(machine_is_omap_perseus2() || machine_is_omap_h4())) { gpio_set_value(GPIO_TIMER, 0); gpio_set_value(GPIO_IDLE, 0); } __raw_writew(~0, &fpga->leds); led_state &= ~LED_STATE_ENABLED; goto done; case led_claim: led_state |= LED_STATE_CLAIMED; hw_led_state = 0; break; case led_release: led_state &= ~LED_STATE_CLAIMED; break; #ifdef CONFIG_LEDS_TIMER case led_timer: led_state ^= LED_TIMER_ON; if (machine_is_omap_perseus2() || machine_is_omap_h4()) hw_led_state ^= H2P2_DBG_FPGA_P2_LED_TIMER; else { gpio_set_value(GPIO_TIMER, led_state & LED_TIMER_ON); goto done; } break; #endif #ifdef CONFIG_LEDS_CPU case led_idle_start: if (machine_is_omap_perseus2() || machine_is_omap_h4()) hw_led_state &= ~H2P2_DBG_FPGA_P2_LED_IDLE; else { gpio_set_value(GPIO_IDLE, 1); goto done; } break; case led_idle_end: if (machine_is_omap_perseus2() || machine_is_omap_h4()) hw_led_state |= H2P2_DBG_FPGA_P2_LED_IDLE; else { gpio_set_value(GPIO_IDLE, 0); goto done; } break; #endif case led_green_on: hw_led_state |= H2P2_DBG_FPGA_LED_GREEN; break; case led_green_off: hw_led_state &= ~H2P2_DBG_FPGA_LED_GREEN; break; case led_amber_on: hw_led_state |= H2P2_DBG_FPGA_LED_AMBER; break; case led_amber_off: hw_led_state &= ~H2P2_DBG_FPGA_LED_AMBER; break; case led_red_on: hw_led_state |= H2P2_DBG_FPGA_LED_RED; break; case led_red_off: hw_led_state &= ~H2P2_DBG_FPGA_LED_RED; break; case led_blue_on: hw_led_state |= H2P2_DBG_FPGA_LED_BLUE; break; case led_blue_off: hw_led_state &= ~H2P2_DBG_FPGA_LED_BLUE; break; default: break; } if (led_state & LED_STATE_ENABLED) __raw_writew(~hw_led_state, &fpga->leds); done: spin_unlock_irqrestore(&lock, flags); }
void h2p2_dbg_leds_event(led_event_t evt) { unsigned long flags; static struct h2p2_dbg_fpga __iomem *fpga; static u16 led_state, hw_led_state; local_irq_save(flags); if (!(led_state & LED_STATE_ENABLED) && evt != led_start) goto done; switch (evt) { case led_start: if (!fpga) fpga = ioremap(H2P2_DBG_FPGA_START, H2P2_DBG_FPGA_SIZE); if (fpga) { led_state |= LED_STATE_ENABLED; __raw_writew(~0, &fpga->leds); } break; case led_stop: case led_halted: /* all leds off during suspend or shutdown */ if (! machine_is_omap_perseus2()) { gpio_set_value(GPIO_TIMER, 0); gpio_set_value(GPIO_IDLE, 0); } __raw_writew(~0, &fpga->leds); led_state &= ~LED_STATE_ENABLED; if (evt == led_halted) { iounmap(fpga); fpga = NULL; } goto done; case led_claim: led_state |= LED_STATE_CLAIMED; hw_led_state = 0; break; case led_release: led_state &= ~LED_STATE_CLAIMED; break; #ifdef CONFIG_LEDS_TIMER case led_timer: led_state ^= LED_TIMER_ON; if (machine_is_omap_perseus2()) hw_led_state ^= H2P2_DBG_FPGA_P2_LED_TIMER; else { gpio_set_value(GPIO_TIMER, led_state & LED_TIMER_ON); goto done; } break; #endif #ifdef CONFIG_LEDS_CPU case led_idle_start: if (machine_is_omap_perseus2()) hw_led_state |= H2P2_DBG_FPGA_P2_LED_IDLE; else { gpio_set_value(GPIO_IDLE, 1); goto done; } break; case led_idle_end: if (machine_is_omap_perseus2()) hw_led_state &= ~H2P2_DBG_FPGA_P2_LED_IDLE; else { gpio_set_value(GPIO_IDLE, 0); goto done; } break; #endif case led_green_on: hw_led_state |= H2P2_DBG_FPGA_LED_GREEN; break; case led_green_off: hw_led_state &= ~H2P2_DBG_FPGA_LED_GREEN; break; case led_amber_on: hw_led_state |= H2P2_DBG_FPGA_LED_AMBER; break; case led_amber_off: hw_led_state &= ~H2P2_DBG_FPGA_LED_AMBER; break; case led_red_on: hw_led_state |= H2P2_DBG_FPGA_LED_RED; break; case led_red_off: hw_led_state &= ~H2P2_DBG_FPGA_LED_RED; break; case led_blue_on: hw_led_state |= H2P2_DBG_FPGA_LED_BLUE; break; case led_blue_off: hw_led_state &= ~H2P2_DBG_FPGA_LED_BLUE; break; default: break; } /* * Actually burn the LEDs */ if (led_state & LED_STATE_ENABLED) __raw_writew(~hw_led_state, &fpga->leds); done: local_irq_restore(flags); }