1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | #include <mt-plat/mtk_boot.h>//liwy add for isink1 #include <linux/power_supply.h>//liwy add for isink1
int mt_brightness_set_pmic(enum mt65xx_led_pmic pmic_type, u32 level, u32 div) { #ifdef CONFIG_MTK_PMIC_CHIP_MT6358 printk("Isaac [%s], pmic_type = %d isink does not support this path\n", __func__, pmic_type); #else static bool first_time = true;
printk("Isaac [%s] pmic_type%d level%d\n", __func__, pmic_type, level); //dump_stack(); mutex_lock(&leds_pmic_mutex); if (pmic_type == MT65XX_LED_PMIC_NLED_ISINK0) { #if 0 /* button flag ==0, means this ISINK is not for button */ if ((button_flag_isink0 == 0) && (first_time == true)) { /* sw workround for sync leds status */ if (button_flag_isink1 == 0) pmic_set_register_value(PMIC_ISINK_CH1_EN, NLED_OFF); first_time = false; } pmic_set_register_value(PMIC_RG_DRV_128K_CK_PDN, 0x0); pmic_set_register_value(PMIC_RG_DRV_ISINK0_CK_PDN, 0); pmic_set_register_value(PMIC_ISINK_CH0_MODE, ISINK_PWM_MODE); /* 16mA */ pmic_set_register_value(PMIC_ISINK_CH0_STEP, ISINK_3); pmic_set_register_value(PMIC_ISINK_DIM0_DUTY, 255); /* 1KHz */ pmic_set_register_value(PMIC_ISINK_DIM0_FSEL, ISINK_128K_500HZ);
pmic_set_register_value(PMIC_ISINK_CH0_BIAS_EN, NLED_ON); pmic_set_register_value(PMIC_ISINK_CHOP0_EN, NLED_ON);
if (level) pmic_set_register_value(PMIC_ISINK_CH0_EN, NLED_ON); else pmic_set_register_value(PMIC_ISINK_CH0_EN, NLED_OFF); #endif mutex_unlock(&leds_pmic_mutex); return 0; } else if (pmic_type == MT65XX_LED_PMIC_NLED_ISINK1) { /* button flag ==0, means this ISINK is not for button*/ if ((button_flag_isink1 == 0) && (first_time == true)) { #if 0 /* sw workround for sync leds status */ if (button_flag_isink0 == 0) pmic_set_register_value(PMIC_ISINK_CH0_EN, NLED_OFF); #endif first_time = false; } //liwy add for isink1 start #ifdef SUPPORT_ISINK1_BREATH_MODE if (isink_flag == POWER_SUPPLY_CAPACITY_LEVEL_FULL) { #endif //liwy add for isink1 end /* Disable power down */ pmic_set_register_value(PMIC_RG_DRV_128K_CK_PDN, 0x0); pmic_set_register_value(PMIC_RG_DRV_ISINK1_CK_PDN, 0); pmic_set_register_value(PMIC_ISINK_CH1_MODE, ISINK_PWM_MODE); /* 16mA */ pmic_set_register_value(PMIC_ISINK_CH1_STEP, ISINK_3); pmic_set_register_value(PMIC_ISINK_DIM1_DUTY, 255); /* 1KHz */ pmic_set_register_value(PMIC_ISINK_DIM1_FSEL, ISINK_128K_500HZ);
pmic_set_register_value(PMIC_ISINK_CH1_BIAS_EN, NLED_ON); pmic_set_register_value(PMIC_ISINK_CHOP1_EN, NLED_ON); //liwy add for isink1 start #ifdef SUPPORT_ISINK1_BREATH_MODE } else { /* Disable power down */ pmic_set_register_value(PMIC_RG_DRV_128K_CK_PDN, 0x0); pmic_set_register_value(PMIC_RG_DRV_ISINK1_CK_PDN, 0); pmic_set_register_value(PMIC_ISINK_CH1_MODE, ISINK_BREATH_MODE); /* 16mA */ pmic_set_register_value(PMIC_ISINK_CH1_STEP, ISINK_3); pmic_set_register_value(PMIC_ISINK_BREATH1_TR1_SEL,0x04); pmic_set_register_value(PMIC_ISINK_BREATH1_TR2_SEL,0x04); pmic_set_register_value(PMIC_ISINK_BREATH1_TF1_SEL,0x04); pmic_set_register_value(PMIC_ISINK_BREATH1_TF2_SEL,0x04); pmic_set_register_value(PMIC_ISINK_BREATH1_TON_SEL,0x02); pmic_set_register_value(PMIC_ISINK_BREATH1_TOFF_SEL,0x03); pmic_set_register_value(PMIC_ISINK_DIM1_DUTY, 255); /* 1KHz */ pmic_set_register_value(PMIC_ISINK_DIM1_FSEL, ISINK_128K_500HZ);
pmic_set_register_value(PMIC_ISINK_CH1_BIAS_EN, NLED_ON); pmic_set_register_value(PMIC_ISINK_CHOP1_EN, NLED_ON); } #endif //liwy add for isink1 end if (level) pmic_set_register_value(PMIC_ISINK_CH1_EN, NLED_ON); else pmic_set_register_value(PMIC_ISINK_CH1_EN, NLED_OFF); mutex_unlock(&leds_pmic_mutex); return 0; } mutex_unlock(&leds_pmic_mutex); #endif return -1; } |