static void
gpio_kpd_init(void)
{
	KPD_DBG("\n");

	socle_gpio_claim_lock();

	// normal mode
	socle_gpio_test_mode_en(PJ, 0);

	// single low edge trigger (row - PJ0, PJ1, PJ2, PJ3)
	socle_gpio_set_interrupt_sense_with_mask(PJ, 0x0, 0xf);
	socle_gpio_set_interrupt_both_edges_with_mask(PJ, 0x0, 0xf);
	socle_gpio_set_interrupt_event_with_mask(PJ, 0x0, 0xf);

	// set row as input (row - PJ0, PJ1, PJ2, PJ3)
	(void)socle_gpio_get_value_with_mask(PJ, 0xf);

	// write col pins as 0 (col - PJ4, PJ5, PJ6, PJ7)
	socle_gpio_set_value_with_mask(PJ, 0x0, 0xf0);

	// enable all interrupt (row - PJ0, PJ1, PJ2, PJ3)
	socle_gpio_set_interrupt_mask_with_mask(PJ, 0xf, 0xf);

	socle_gpio_release_lock();
}
static void
pdk_keypad_input_report_key(void *param)
{
	int row, col;

	KPD_DBG("\n");

	socle_gpio_claim_lock();

	// read col pins (col - PJ4, PJ5, PJ6, PJ7)
	tmp2 = socle_gpio_get_value_with_mask(PJ, 0xf0);

	socle_gpio_release_lock();

	KPD_DBG("tmp1 = 0x%x, tmp2 = 0x%x\n", tmp1, tmp2);

	row = kpd_value_convert(tmp1 & 0xf);
	col = kpd_value_convert((tmp2 & 0xf0) >> 4);

	KPD_DBG("row = %d, col = %d\n", row, col);

	pdk_keypad_report_key(row, col);

	mdelay(200);

	socle_gpio_claim_lock();

	// write col pins as 0 (col - PJ4, PJ5, PJ6, PJ7)
	socle_gpio_set_value_with_mask(PJ, 0x0, 0xf0);

	// enable all interrupt (row - PJ0, PJ1, PJ2, PJ3)
	socle_gpio_set_interrupt_mask_with_mask(PJ, 0xf, 0xf);

	socle_gpio_release_lock();
}
Exemplo n.º 3
0
static void
line_in_detection_isr (void *pparam)
{
	int plug = socle_gpio_get_value_with_mask(PF, 0x80);

	if (plug)
		printf("Line-in plug\n");
	else
		printf("Line-in unplug\n");
}
Exemplo n.º 4
0
static void
iPod_detection_isr (void *pparam)
{
	int plug = socle_gpio_get_value_with_mask(PA, 0x10);

	if (plug)
		printf("iPod plug\n");
	else
		printf("iPod unplug\n");
}
Exemplo n.º 5
0
static void
volume_tuner_isr (void *pparam)
{
	int clockwise = socle_gpio_get_value_with_mask(PF, 0x20);

	if (clockwise)
		vol++;
	else
		vol--;

	if (vol > MAX_VOLUME)
		vol = MAX_VOLUME;
	if (vol < 0)
		vol = 0;

	vol_change = 1;
	printf("volume_tuner_isr(): vol = %d\n", vol);
}