static void set_power_led_onoff(char *onoff)// 1:on; 0:off { /* GPIO AO_10 */ if (0 == strcmp(onoff, "powerkey led on")) { //led on set_gpio_val(GPIOAO_bank_bit0_11(10), GPIOAO_bit_bit0_11(10), 1); set_gpio_mode(GPIOAO_bank_bit0_11(10), GPIOAO_bit_bit0_11(10), GPIO_OUTPUT_MODE); } else { set_gpio_val(GPIOAO_bank_bit0_11(10), GPIOAO_bit_bit0_11(10), 0); set_gpio_mode(GPIOAO_bank_bit0_11(10), GPIOAO_bit_bit0_11(10), GPIO_OUTPUT_MODE); } }
static inline int key_input_init_func(void) { set_gpio_mode(GPIOAO_bank_bit0_11(3), GPIOAO_bit_bit0_11(3), GPIO_INPUT_MODE); // WRITE_AOBUS_REG(AO_RTC_ADDR0, (READ_AOBUS_REG(AO_RTC_ADDR0) &~(1<<11))); // WRITE_AOBUS_REG(AO_RTC_ADDR1, (READ_AOBUS_REG(AO_RTC_ADDR1) &~(1<<3))); return 0; }
static inline int key_scan(int *key_state_list) { int ret = 0; // GPIOAO_3 #ifdef CONFIG_SUSPEND if(suspend_state) { // forse power key down suspend_state--; key_state_list[0] = 1; } else #endif key_state_list[0] = get_gpio_val(GPIOAO_bank_bit0_11(3), GPIOAO_bit_bit0_11(3))?0:1; // key_state_list[0] = ((READ_AOBUS_REG(AO_RTC_ADDR1) >> 2) & 1) ? 0 : 1; return ret; }
static void __init power_hold(void) { printk(KERN_INFO "power hold set high!\n"); // set_gpio_val(GPIOAO_bank_bit0_11(6), GPIOAO_bit_bit0_11(6), 1); // set_gpio_mode(GPIOAO_bank_bit0_11(6), GPIOAO_bit_bit0_11(6), GPIO_OUTPUT_MODE); // VCC5V set_gpio_mode(GPIOD_bank_bit0_9(9), GPIOD_bit_bit0_9(9), GPIO_OUTPUT_MODE); set_gpio_val(GPIOD_bank_bit0_9(9), GPIOD_bit_bit0_9(9), 1); // hdmi power on set_gpio_mode(GPIOD_bank_bit0_9(6), GPIOD_bit_bit0_9(6), GPIO_OUTPUT_MODE); set_gpio_val(GPIOD_bank_bit0_9(6), GPIOD_bit_bit0_9(6), 1); // MUTE set_gpio_mode(GPIOX_bank_bit0_31(29), GPIOX_bit_bit0_31(29), GPIO_OUTPUT_MODE); set_gpio_val(GPIOX_bank_bit0_31(29), GPIOX_bit_bit0_31(29), 0); // PC Link // set_gpio_mode(GPIOC_bank_bit0_15(4), GPIOC_bit_bit0_15(4), GPIO_OUTPUT_MODE); // set_gpio_val(GPIOC_bank_bit0_15(4), GPIOC_bit_bit0_15(4), 1); // VCC, set to high when suspend set_gpio_mode(GPIOAO_bank_bit0_11(4), GPIOAO_bit_bit0_11(4), GPIO_OUTPUT_MODE); set_gpio_val(GPIOAO_bank_bit0_11(4), GPIOAO_bit_bit0_11(4), 0); set_gpio_mode(GPIOAO_bank_bit0_11(5), GPIOAO_bit_bit0_11(5), GPIO_OUTPUT_MODE); set_gpio_val(GPIOAO_bank_bit0_11(5), GPIOAO_bit_bit0_11(5), 0); // VCCK set_gpio_mode(GPIOAO_bank_bit0_11(6), GPIOAO_bit_bit0_11(6), GPIO_OUTPUT_MODE); set_gpio_val(GPIOAO_bank_bit0_11(6), GPIOAO_bit_bit0_11(6), 1); // VCCIO set_gpio_mode(GPIOAO_bank_bit0_11(2), GPIOAO_bit_bit0_11(2), GPIO_OUTPUT_MODE); set_gpio_val(GPIOAO_bank_bit0_11(2), GPIOAO_bit_bit0_11(2), 1); //init sata set_gpio_mode(GPIOC_bank_bit0_15(7), GPIOC_bit_bit0_15(7), GPIO_OUTPUT_MODE); set_gpio_val(GPIOC_bank_bit0_15(7), GPIOC_bit_bit0_15(7), 1); //VCCx2 power up printk(KERN_INFO "set_vccx2 power up\n"); // set_gpio_mode(GPIOA_bank_bit0_27(26), GPIOA_bit_bit0_27(26), GPIO_OUTPUT_MODE); // set_gpio_val(GPIOA_bank_bit0_27(26), GPIOA_bit_bit0_27(26), 0); }
static void power_off(void) { //Power hold down set_gpio_val(GPIOAO_bank_bit0_11(6), GPIOAO_bit_bit0_11(6), 0); set_gpio_mode(GPIOAO_bank_bit0_11(6), GPIOAO_bit_bit0_11(6), GPIO_OUTPUT_MODE); }
static inline int _gpio_setup_bank_bit(cmd_t *op) { switch (op->bank) { case 'a': //bank a op->bank = GPIOA_bank_bit0_27(0); if (op->bit < 28) { //bit0..27 op->bit = GPIOA_bit_bit0_27(op->bit); } else { return -1; } break; case 'b': //bank b op->bank = GPIOB_bank_bit0_23(0); if (op->bit < 24) { //bit0..23 op->bit = GPIOB_bit_bit0_23(op->bit); } else { return -1; } break; case 'c': //bank c op->bank = GPIOC_bank_bit0_15(0); if (op->bit < 16) { //bit0..15 op->bit = GPIOC_bit_bit0_15(op->bit); } else { return -1; } break; case 'd': //bank d op->bank = GPIOD_bank_bit0_9(0); if (op->bit < 10) { //bit0..9 op->bit = GPIOD_bit_bit0_9(op->bit); } else { return -1; } break; case 'x': //bank x if (op->bit < 32) { //bit0..31 ,bit no change . op->bank = GPIOX_bank_bit0_31(0); //bit 0..15 16..21 share one bank } else if (op->bit <36) { //bit 32..35 op->bank = GPIOX_bank_bit32_35(0); op->bit = GPIOX_bit_bit32_35(op->bit); } else { return -1; } break; case 'y': //bank y if (op->bit < 23) { //bit0..22 ,bit no change . op->bank = GPIOY_bank_bit0_22(0); //bit 0..15 16..21 share one bank } else { return -1; } break; case 'o': //bank ao if (op->bit < 12) { //bit0..11 ,bit no change . op->bank = GPIOAO_bank_bit0_11(0); //bit 0..11 op->bit = GPIOAO_bit_bit0_11(op->bit); } else { return -1; } break; /* FIXME AO/BOOT/CARD GPIO can not controle todo */ default: printk("GPIO, invalid selection.\n"); return -1; } return 0; }