示例#1
0
int ds2746_blocking_notify(unsigned long val, void *v)
{
	int chg_ctl;

	if (val == DS2746_CHARGING_CONTROL){
		chg_ctl = *(int *) v;
		if (machine_is_passionc()){
			if (chg_ctl <= 2){
				gpio_direction_output(22, !(!!chg_ctl));/*PNC*/
				set_charger_ctrl(chg_ctl);
			}
			return 0;
		}else if (TOGGLE_CHARGER == chg_ctl || ENABLE_MIN_TAPER == chg_ctl || DISABLE_MIN_TAPER == chg_ctl) {
			if (0 == poweralg.charging_enable)
				return 0;
		} else if (poweralg.charge_state != CHARGE_STATE_PREDICTION) {
			/* only notify at changes */
			if (g_first_update_charger_ctl == 1) {
				printk(DRIVER_ZONE "first update charger control forcely.\n");
				g_first_update_charger_ctl = 0;
				poweralg.charging_enable = chg_ctl;
			} else if (poweralg.charging_enable == chg_ctl)
				return 0;
			else
				poweralg.charging_enable = chg_ctl;
		} else {
			poweralg.charging_enable = DISABLE;
			v = DISABLE;
			printk(DRIVER_ZONE "Charging disable due to PREDICTION state\n");
		}
	}
	return blocking_notifier_call_chain(&ds2746_notifier_list, val, v);
}
示例#2
0
static int cable_status_handler_func(struct notifier_block *nfb,
		unsigned long action, void *param)
{
	u32 ctl = (u32)action;
	pr_info("Switch charger set control%d\n", ctl);
	set_charger_ctrl(ctl);

	return NOTIFY_OK;
}