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(); }
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"); }
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"); }
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); }