11.ISINK充电呼吸灯

 \kernel-4.14\drivers\misc\mediatek\include\mt-plat\mtk_boot.h

1
2
3
4
5
6
7

//liwy add for isink1 start
#define SUPPORT_ISINK1_BREATH_MODE
#ifdef SUPPORT_ISINK1_BREATH_MODE
//extern int g_battery_capacity;
extern int isink_flag;
#endif
//liwy add for isink1 end

 \kernel-4.14\drivers\misc\mediatek\include\mt-plat\mtk_battery.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

//liwy add for isink1 start
//#include "mtk_boot.h"

#ifdef SUPPORT_ISINK1_BREATH_MODE
enum mt65xx_led_pmic {
    MT65XX_LED_PMIC_LCD_ISINK = 0,
    MT65XX_LED_PMIC_NLED_ISINK_MIN = MT65XX_LED_PMIC_LCD_ISINK,
    MT65XX_LED_PMIC_NLED_ISINK0,
    MT65XX_LED_PMIC_NLED_ISINK1,
    MT65XX_LED_PMIC_NLED_ISINK2,
    MT65XX_LED_PMIC_NLED_ISINK3,
    MT65XX_LED_PMIC_NLED_ISINK_MAX,
};
extern int mt_brightness_set_pmic(enum mt65xx_led_pmic pmic_type, u32 level, u32 div);
#endif
//liwy add for isink1 end

 /kernel-4.14/drivers/misc/mediatek/pmic/mt6390/v1/pmic_chr_type_det_v2.c 

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

pmic_chrdet_init //pmic_register_interrupt_callback(INT_CHRDET_EDGE, chrdet_int_handler); pmic_enable_interrupt(INT_CHRDET_EDGE, 1, "PMIC");
    ->chrdet_int_handler
        ->pmic_set_register_value(PMIC_RG_USBDL_RST, 1);
        ->do_charger_detect()

            ->#include <mt-plat/mtk_battery.h>//liwy add for isink1
            ->mtk_pmic_enable_chr_type_det(pmic_get_register_value(PMIC_RGS_CHRDET))
            ->if (en) {
                printk("[mtk_pmic_enable_chr_type_det]: charger IN\n");
                g_chr_type = hw_charging_get_charger_type();
                chrdet_inform_psy_changed(g_chr_type, 1);
                //liwy add for isink1 start
                #ifdef SUPPORT_ISINK1_BREATH_MODE
                    mt_brightness_set_pmic(MT65XX_LED_PMIC_NLED_ISINK1, 0, 0);//liwy add for isink1
                    mdelay(200);
                    printk("Isaac [mtk_pmic_enable_chr_type_det] delay 200ms\n");
                    mt_brightness_set_pmic(MT65XX_LED_PMIC_NLED_ISINK1, 255, 0);//liwy add for isink1
                #endif
                //liwy add for isink1 end
            } else {
                printk("[mtk_pmic_enable_chr_type_det]: charger OUT\n");
                //liwy add for isink1 start
                #ifdef SUPPORT_ISINK1_BREATH_MODE
                    mt_brightness_set_pmic(MT65XX_LED_PMIC_NLED_ISINK1, 0, 0);//liwy add for isink1
                #endif
                //liwy add for isink1 end
                g_chr_type = CHARGER_UNKNOWN;
                chrdet_inform_psy_changed(g_chr_type, 0);
            }

 \kernel-4.14\drivers\power\supply\mediatek\battery\mtk_battery.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

#include <mt-plat/mtk_battery.h>
#include <mt-plat/mtk_boot.h>

//liwy add for isink1 start
#ifdef SUPPORT_ISINK1_BREATH_MODE
int isink_flag;
#endif
//liwy add for isink1 end
static int battery_get_property(struct power_supply *psy, enum power_supply_property psp, union power_supply_propval *val)
{
    switch (psp) {
    ... ...
    case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
        val->intval = check_cap_level(data->BAT_CAPACITY);
        //liwy add for isink1 start
        #ifdef SUPPORT_ISINK1_BREATH_MODE
            isink_flag = val->intval;
            printk("liwy [%s], isink_flag = %d\n", __func__, isink_flag);
        #endif
        //liwy add for isink1 end
        break;
    }
}

 /kernel-4.14/include/linux/power_supply.h

1
2
3
4
5
6
7
8

enum {
    POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN = 0,
    POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL,
    POWER_SUPPLY_CAPACITY_LEVEL_LOW,
    POWER_SUPPLY_CAPACITY_LEVEL_NORMAL,
    POWER_SUPPLY_CAPACITY_LEVEL_HIGH,
    POWER_SUPPLY_CAPACITY_LEVEL_FULL,
};

 /kernel-4.14/drivers/power/supply/mediatek/battery/mtk_battery.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

int check_cap_level(int uisoc)
{
    if (uisoc >= 100)
        return POWER_SUPPLY_CAPACITY_LEVEL_FULL;
    else if (uisoc >= 80 && uisoc < 100)
        return POWER_SUPPLY_CAPACITY_LEVEL_HIGH;
    else if (uisoc >= 20 && uisoc < 80)
        return POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
    else if (uisoc > 0 && uisoc < 20)
        return POWER_SUPPLY_CAPACITY_LEVEL_LOW;
    else if (uisoc == 0)
        return POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
    else
        return POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN;
}

 \kernel-4.14\drivers\misc\mediatek\leds\mt8168\mtk_leds.c

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;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值