void power_on_backlight(void) { msleep(20); lvds_port_enable(); msleep(50); //BL_EN: GPIOD_1(V_LED) #if (BL_CTL==BL_CTL_GPIO) WRITE_MPEG_REG(PERIPHS_PIN_MUX_0, READ_MPEG_REG(PERIPHS_PIN_MUX_0) & ~(1 << 19)); WRITE_MPEG_REG(PERIPHS_PIN_MUX_3, READ_MPEG_REG(PERIPHS_PIN_MUX_3) & ~((1 << 24)|(1 << 25))); WRITE_MPEG_REG(PERIPHS_PIN_MUX_7, READ_MPEG_REG(PERIPHS_PIN_MUX_7) & ~(1 << 17)); set_gpio_val(GPIOC_bank_bit0_15(9), GPIOC_bit_bit0_15(9), 1); //set GPIOC_9 as BL_EN low to power off backlight set_gpio_mode(GPIOC_bank_bit0_15(9), GPIOC_bit_bit0_15(9), GPIO_OUTPUT_MODE);//set CM_PWDN1 output #elif (BL_CTL==BL_CTL_PWM) int pwm_div=0; //pwm_freq=24M/(pwm_div+1)/PWM_MAX WRITE_MPEG_REG(PWM_PWM_D, (PWM_MAX<<16) | (0<<0)); //set pwm duty 100% WRITE_MPEG_REG(PWM_MISC_REG_CD, READ_MPEG_REG(PWM_MISC_REG_CD) | ((1 << 23) | (pwm_div<<16) | (1<<1))); //set pwm clk & enable pwm WRITE_MPEG_REG(PERIPHS_PIN_MUX_2, READ_MPEG_REG(PERIPHS_PIN_MUX_2) | (1<<3)); //enable pwm pinmux #endif msleep(100); printk("\n\npower_on_backlight.\n\n"); }
void mute_spk(struct snd_soc_codec* codec, int flag) { #ifdef _AML_M3_HW_DEBUG_ printk("***Entered %s:%s\n", __FILE__,__func__); #endif if(flag){ set_gpio_val(GPIOC_bank_bit0_15(4), GPIOC_bit_bit0_15(4), 1); // mute speak set_gpio_mode(GPIOC_bank_bit0_15(4), GPIOC_bit_bit0_15(4), GPIO_OUTPUT_MODE); }else{ set_gpio_val(GPIOC_bank_bit0_15(4), GPIOC_bit_bit0_15(4), 0); // unmute speak set_gpio_mode(GPIOC_bank_bit0_15(4), GPIOC_bit_bit0_15(4), GPIO_OUTPUT_MODE); } }
inline int get_key(void) { //return (((readl(P_RTC_ADDR1) >> 2) & 1) ? 0 : 1); #ifdef CONFIG_SWITCH_BOOT_MODE int val; SET_CBUS_REG_MASK(PAD_PULL_UP_REG2, (1<<14)); //enable internal pullup set_gpio_mode(GPIOC_bank_bit0_15(14), GPIOC_bit_bit0_15(14), GPIO_INPUT_MODE); val = get_gpio_val(GPIOC_bank_bit0_15(14), GPIOC_bit_bit0_15(14)); // printf("%s: get from gpio is %d.\n", __FUNCTION__, val); return !val; #else return (((readl(P_RTC_ADDR1) >> 2) & 1) ? 0 : 1); #endif }
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); }
void power_off_backlight(void) { //BL_EN: GPIOD_1(V_LED) #if (BL_CTL==BL_CTL_GPIO) WRITE_MPEG_REG(PERIPHS_PIN_MUX_0, READ_MPEG_REG(PERIPHS_PIN_MUX_0) & ~(1 << 19)); WRITE_MPEG_REG(PERIPHS_PIN_MUX_3, READ_MPEG_REG(PERIPHS_PIN_MUX_3) & ~((1 << 24)|(1 << 25))); WRITE_MPEG_REG(PERIPHS_PIN_MUX_7, READ_MPEG_REG(PERIPHS_PIN_MUX_7) & ~(1 << 17)); set_gpio_val(GPIOC_bank_bit0_15(9), GPIOC_bit_bit0_15(9), 0); //set GPIOC_9 as BL_EN low to power off backlight set_gpio_mode(GPIOC_bank_bit0_15(9), GPIOC_bit_bit0_15(9), GPIO_OUTPUT_MODE);//set CM_PWDN1 output #elif (BL_CTL==BL_CTL_PWM) WRITE_MPEG_REG(PWM_MISC_REG_CD, READ_MPEG_REG(PWM_MISC_REG_CD) & ~(1<<1)); //disable pwm #endif msleep(20); lvds_port_disable(); msleep(20); printk("\n\npower_off_backlight.\n\n"); }
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; }
unsigned gpio_bank; unsigned gpio_bit; int inverse_flag; } device_power_t; #define DEF_DEVICE_POWER(name_param, gpio_bank_param, gpio_bit_param, inverse_flag_param) \ { \ .name = (name_param), \ .gpio_bank = (gpio_bank_param), \ .gpio_bit = (gpio_bit_param), \ .inverse_flag = (inverse_flag_param), \ } static device_power_t devices_power[] = { DEF_DEVICE_POWER("VCCX2_EN", GPIOA_bank_bit0_27(26), GPIOA_bit_bit0_27(26), 1), DEF_DEVICE_POWER("VCCX3_EN", GPIOC_bank_bit0_15(2), GPIOC_bit_bit0_15(2), 0), DEF_DEVICE_POWER("LCD_POWER_EN", GPIOA_bank_bit0_27(27), GPIOA_bit_bit0_27(27), 1), DEF_DEVICE_POWER("BL_EN", GPIOD_bank_bit0_9(1), GPIOD_bit_bit0_9(1), 0), DEF_DEVICE_POWER("CARD_EN", GPIOCARD_bank_bit0_8(8), GPIOCARD_bit_bit0_8(8), 1), DEF_DEVICE_POWER("USB_PWR_CTRL", GPIOD_bank_bit0_9(9), GPIOD_bit_bit0_9(9), 0), DEF_DEVICE_POWER("SPK", GPIOC_bank_bit0_15(4), GPIOC_bit_bit0_15(4), 0), DEF_DEVICE_POWER("CAP_TP_EN", GPIOC_bank_bit0_15(3), GPIOC_bit_bit0_15(3), 0), DEF_DEVICE_POWER("WIFI_PWREN", GPIOC_bank_bit0_15(8), GPIOC_bit_bit0_15(8), 0), DEF_DEVICE_POWER("WL_RST_N", GPIOC_bank_bit0_15(7), GPIOC_bit_bit0_15(7), 0), DEF_DEVICE_POWER("BT_RST_N", GPIOC_bank_bit0_15(6), GPIOC_bit_bit0_15(6), 0), DEF_DEVICE_POWER("GPS_RSTN", GPIOC_bank_bit0_15(5), GPIOC_bit_bit0_15(5), 0), }; static int get_dev_power_state(char* info_buf) { int dev_num = sizeof(devices_power)/sizeof(device_power_t);
.name = "frontend0_demod_addr" }, [2] = { .start = (GPIOD_bank_bit0_9(8)<<16)|GPIOD_bit_bit0_9(8), //reset pin .end = (GPIOD_bank_bit0_9(8)<<16)|GPIOD_bit_bit0_9(8), .flags = IORESOURCE_MEM, .name = "frontend0_reset_pin" }, [3] = { .start = 0, //reset enable value .end = 0, .flags = IORESOURCE_MEM, .name = "frontend0_reset_value_enable" }, [4] = { .start = (GPIOC_bank_bit0_15(3)<<16)|GPIOC_bit_bit0_15(3), //power enable pin .end = (GPIOC_bank_bit0_15(3)<<16)|GPIOC_bit_bit0_15(3), .flags = IORESOURCE_MEM, .name = "frontend0_reset" // .name = "frontend0_power_pin" }, [5] = { .start = 0xc0, //is mxl101 .end = 0xc0, .flags = IORESOURCE_MEM, .name = "frontend0_tuner_addr" }, }; static struct platform_device mxl101_device = { .name = "mxl101",
typedef struct { char name[32]; unsigned bank; unsigned bit; gpio_mode_t mode; unsigned value; unsigned enable; } gpio_data_t; #define MAX_GPIO 3 static gpio_data_t gpio_data[MAX_GPIO] = { {"GPIOD6--HDMI", GPIOD_bank_bit0_9(6), GPIOD_bit_bit0_9(6), GPIO_OUTPUT_MODE, 1, 1}, {"GPIOD9--VCC5V", GPIOD_bank_bit0_9(9), GPIOD_bit_bit0_9(9), GPIO_OUTPUT_MODE, 1, 1}, {"GPIOX29--MUTE", GPIOX_bank_bit0_31(29), GPIOX_bit_bit0_31(29), GPIO_OUTPUT_MODE, 1, 1}, {"GPIOC7--SATA", GPIOC_bank_bit0_15(7), GPIOC_bit_bit0_15(7), GPIO_OUTPUT_MODE, 1, 1}, }; static void save_gpio(int port) { gpio_data[port].mode = get_gpio_mode(gpio_data[port].bank, gpio_data[port].bit); if (gpio_data[port].mode==GPIO_OUTPUT_MODE) { if (gpio_data[port].enable){ printk("change %s output %d to input\n", gpio_data[port].name, gpio_data[port].value); gpio_data[port].value = get_gpio_val(gpio_data[port].bank, gpio_data[port].bit); set_gpio_mode(gpio_data[port].bank, gpio_data[port].bit, GPIO_INPUT_MODE); } else{ printk("no change %s output %d\n", gpio_data[port].name, gpio_data[port].value); }