static void s3c_cable_work(struct work_struct *work) { dev_dbg(dev, "%s\n", __func__); #ifdef __CHECK_BATTERY_V_F__ s3c_bat_check_v_f(); #endif /* __CHECK_BATTERY_V_F__ */ s3c_cable_check_status(); }
void s3c_udc_cable_disconnect(struct s3c_udc *dev) { if(dev->is_pm_lock != true) return; printk("[%s] \n",__FUNCTION__); s3c_cable_check_status(0); dev->is_pm_lock = false; }
void s3c_udc_cable_disconnect(struct s3c_udc *dev) { s3c_cable_check_status(0); }
static int __devinit s3c_bat_probe(struct platform_device *pdev) { int i; int ret = 0; dev = &pdev->dev; dev_info(dev, "%s\n", __func__); s3c_bat_info.present = 1; s3c_bat_info.polling = 1; s3c_bat_info.polling_interval = POLLING_INTERVAL; s3c_bat_info.device_state = 0; s3c_bat_info.bat_info.batt_vol_adc_aver = 0; #ifdef __TEST_MODE_INTERFACE__ s3c_bat_info.bat_info.batt_vol_aver = 0; s3c_bat_info.bat_info.batt_temp_aver = 0; s3c_bat_info.bat_info.batt_temp_adc_aver = 0; s3c_bat_info.bat_info.batt_v_f_adc = 0; s3c_bat_info.bat_info.batt_test_mode = 0; s3c_power_supplies_test = s3c_power_supplies; #endif /* __TEST_MODE_INTERFACE__ */ s3c_bat_info.bat_info.batt_id = 0; s3c_bat_info.bat_info.batt_vol = 0; s3c_bat_info.bat_info.batt_vol_adc = 0; s3c_bat_info.bat_info.batt_vol_adc_cal = 0; s3c_bat_info.bat_info.batt_temp = 0; s3c_bat_info.bat_info.batt_temp_adc = 0; s3c_bat_info.bat_info.batt_temp_adc_cal = 0; s3c_bat_info.bat_info.batt_current = 0; s3c_bat_info.bat_info.level = 100; s3c_bat_info.bat_info.charging_source = CHARGER_BATTERY; s3c_bat_info.bat_info.charging_enabled = 0; s3c_bat_info.bat_info.batt_health = POWER_SUPPLY_HEALTH_GOOD; s3c_bat_info.max_soc_value=96; memset(adc_sample, 0x00, sizeof adc_sample); batt_max = BATT_CAL + BATT_MAXIMUM; batt_full = BATT_CAL + BATT_FULL; batt_safe_rech = BATT_CAL + BATT_SAFE_RECHARGE; batt_almost = BATT_CAL + BATT_ALMOST_FULL; batt_high = BATT_CAL + BATT_HIGH; batt_medium = BATT_CAL + BATT_MED; batt_low = BATT_CAL + BATT_LOW; batt_critical = BATT_CAL + BATT_CRITICAL; batt_min = BATT_CAL + BATT_MINIMUM; batt_off = BATT_CAL + BATT_OFF; INIT_WORK(&bat_work, s3c_bat_work); INIT_WORK(&cable_work, s3c_cable_work); #ifdef COMPENSATE_BOOTING INIT_WORK(&compensate_boot_work, s3c_compensate_boot_work); batt_drv_wqueue = create_singlethread_workqueue("batt_drv_workqueue"); #endif /* COMPENSATE_BOOTING */ /* init power supplier framework */ for (i = 0; i < ARRAY_SIZE(s3c_power_supplies); i++) { ret = power_supply_register(&pdev->dev, &s3c_power_supplies[i]); if (ret) { dev_err(dev, "Failed to register" "power supply %d,%d\n", i, ret); goto __end__; } } /* create sec detail attributes */ s3c_bat_create_attrs(s3c_power_supplies[CHARGER_BATTERY].dev); #ifdef __TEST_DEVICE_DRIVER__ s3c_test_create_attrs(s3c_power_supplies[CHARGER_AC].dev); #endif /* __TEST_DEVICE_DRIVER__ */ /* Request IRQ */ set_irq_type(IRQ_TA_CONNECTED_N, IRQ_TYPE_EDGE_BOTH); ret = request_irq(IRQ_TA_CONNECTED_N, s3c_cable_changed_isr, IRQF_DISABLED, DRIVER_NAME, &s3c_power_supplies[CHARGER_BATTERY]); if(ret) goto __end__; set_irq_type(IRQ_TA_CHG_N, IRQ_TYPE_EDGE_BOTH); ret = request_irq(IRQ_TA_CHG_N, s3c_cable_charging_isr, IRQF_DISABLED, DRIVER_NAME, &s3c_power_supplies[CHARGER_BATTERY]); if (ret) goto __ta_connected_irq_failed__; if (s3c_bat_info.polling) { dev_dbg(dev, "%s: will poll for status\n", __func__); setup_timer(&polling_timer, polling_timer_func, 0); mod_timer(&polling_timer, jiffies + msecs_to_jiffies(s3c_bat_info.polling_interval)); } setup_timer(&cable_timer, cable_timer_func, 0); s3c_battery_initial = 1; force_update = 0; full_charge_flag = 0; s3c_bat_status_update( &s3c_power_supplies[CHARGER_BATTERY]); #ifdef __CHECK_BATTERY_V_F__ s3c_bat_check_v_f(); #endif /* __CHECK_BATTERY_V_F__ */ s3c_cable_check_status(); __end__: return ret; __ta_connected_irq_failed__: free_irq(IRQ_TA_CONNECTED_N, &s3c_power_supplies[CHARGER_BATTERY]); return ret; }