Пример #1
0
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);
}
Пример #2
0
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);
	}
}
Пример #3
0
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;
}
Пример #4
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;
}
Пример #5
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);
}
Пример #6
0
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);
}