static void mtk_cl_bcct_set_bcct_limit(void) { // TODO: optimize int i = 0; int min_limit = 65535; for (; i < MAX_NUM_INSTANCE_MTK_COOLER_BCCT; i++) { unsigned long curr_state; MTK_CL_BCCT_GET_CURR_STATE(curr_state, cl_bcct_state[i]); if (1 == curr_state) { int limit; MTK_CL_BCCT_GET_LIMIT(limit, cl_bcct_state[i]); if ((min_limit > limit) && (limit > 0)) min_limit = limit; } } if (min_limit != cl_bcct_cur_limit) { cl_bcct_cur_limit = min_limit; #if 1 if (65535 <= cl_bcct_cur_limit) { set_bat_charging_current_limit(-1); mtk_cooler_bcct_dprintk_always("mtk_cl_bcct_set_bcct_limit() limit=-1\n"); } else { set_bat_charging_current_limit(cl_bcct_cur_limit); mtk_cooler_bcct_dprintk_always("mtk_cl_bcct_set_bcct_limit() limit=%d\n", cl_bcct_cur_limit); } mtk_cooler_bcct_dprintk_always("mtk_cl_bcct_set_bcct_limit() real limit=%d\n", get_bat_charging_current_level()); #endif } }
static int __init mtk_cooler_bcct_init(void) { int err = 0; int i; for (i = MAX_NUM_INSTANCE_MTK_COOLER_BCCT; i-- > 0; ) { cl_bcct_dev[i] = NULL; cl_bcct_state[i] = 0; } //cl_bcct_dev = NULL; mtk_cooler_bcct_dprintk("init\n"); err = mtk_cooler_bcct_register_ltf(); if (err) goto err_unreg; /* create a proc file */ { struct proc_dir_entry *entry = NULL; struct proc_dir_entry *dir_entry = NULL; dir_entry = mtk_thermal_get_proc_drv_therm_dir_entry(); if (!dir_entry) { mtk_cooler_bcct_dprintk("[%s]: mkdir /proc/driver/thermal failed\n", __func__); } entry = proc_create("clbcct", S_IRUGO | S_IWUSR | S_IWGRP, dir_entry, &_cl_bcct_fops); if (!entry) { mtk_cooler_bcct_dprintk_always("%s clbcct creation failed\n", __func__); } else { #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0) proc_set_user(entry, 0, 1000); #else entry->gid = 1000; #endif } } return 0; err_unreg: mtk_cooler_bcct_unregister_ltf(); return err; }