static void bq27410_battery_work(struct work_struct *work) { struct bq27410_device_info *di = container_of(work, struct bq27410_device_info, work.work); static int flag = 0; if(flag == 0){ mutex_lock(&g_bq27410_mutex); bq27410_write_batt_insert(g_client); mutex_unlock(&g_bq27410_mutex); virtual_battery_enable = 0; flag = 1; } bq27410_battery_update_status(di); /* reschedule for the next time */ schedule_delayed_work(&di->work, di->interval); }
static void bq27410_battery_work(struct work_struct *work) { struct bq27410_device_info *di = container_of(work, struct bq27410_device_info, work.work); int ret = 0; u8 buf[2]; int battflags = 0; static int flag = 0; if(flag == 0){ #if 0 mutex_lock(&g_bq27410_mutex); bq27410_write_batt_insert(g_client); mutex_unlock(&g_bq27410_mutex); virtual_battery_enable = 0; flag = 1; #else mutex_lock(&g_bq27410_mutex); ret = bq27410_read(g_client,BQ27410_REG_FLAGS, buf, 2); if (ret < 0) { DBG("error reading flags\n"); return ret; } mutex_unlock(&g_bq27410_mutex); battflags = get_unaligned_le16(buf); if ((battflags & BQ27410_FLAG_BAT_DET)){ printk("27410: %s, battflags = 0x%x, set virtual_battery_enable = 0\n",__FUNCTION__,battflags); flag = 1; virtual_battery_enable = 0; } #endif } bq27410_battery_update_status(di); /* reschedule for the next time */ schedule_delayed_work(&di->work, di->interval); }