Searched refs:di (Results 1 - 200 of 288) sorted by relevance

12

/linux-4.1.27/drivers/power/
H A Dds2760_battery.c123 static int ds2760_battery_read_status(struct ds2760_device_info *di) ds2760_battery_read_status() argument
127 if (di->update_time && time_before(jiffies, di->update_time + ds2760_battery_read_status()
133 if (di->update_time == 0) { ds2760_battery_read_status()
141 ret = w1_ds2760_read(di->w1_dev, di->raw + start, start, count); ds2760_battery_read_status()
143 dev_warn(di->dev, "call to w1_ds2760_read failed (0x%p)\n", ds2760_battery_read_status()
144 di->w1_dev); ds2760_battery_read_status()
148 di->update_time = jiffies; ds2760_battery_read_status()
152 di->voltage_raw = (di->raw[DS2760_VOLTAGE_MSB] << 3) | ds2760_battery_read_status()
153 (di->raw[DS2760_VOLTAGE_LSB] >> 5); ds2760_battery_read_status()
154 di->voltage_uV = di->voltage_raw * 4880; ds2760_battery_read_status()
158 di->current_raw = ds2760_battery_read_status()
159 (((signed char)di->raw[DS2760_CURRENT_MSB]) << 5) | ds2760_battery_read_status()
160 (di->raw[DS2760_CURRENT_LSB] >> 3); ds2760_battery_read_status()
161 di->current_uA = di->current_raw * 625; ds2760_battery_read_status()
164 di->accum_current_raw = ds2760_battery_read_status()
165 (((signed char)di->raw[DS2760_CURRENT_ACCUM_MSB]) << 8) | ds2760_battery_read_status()
166 di->raw[DS2760_CURRENT_ACCUM_LSB]; ds2760_battery_read_status()
167 di->accum_current_uAh = di->accum_current_raw * 250; ds2760_battery_read_status()
172 di->temp_raw = (((signed char)di->raw[DS2760_TEMP_MSB]) << 3) | ds2760_battery_read_status()
173 (di->raw[DS2760_TEMP_LSB] >> 5); ds2760_battery_read_status()
174 di->temp_C = di->temp_raw + (di->temp_raw / 4); ds2760_battery_read_status()
178 if (di->raw[DS2760_RATED_CAPACITY] < ARRAY_SIZE(rated_capacities)) ds2760_battery_read_status()
179 di->rated_capacity = rated_capacities[ ds2760_battery_read_status()
180 (unsigned int)di->raw[DS2760_RATED_CAPACITY]]; ds2760_battery_read_status()
182 di->rated_capacity = di->raw[DS2760_RATED_CAPACITY] * 10; ds2760_battery_read_status()
184 di->rated_capacity *= 1000; /* convert to µAh */ ds2760_battery_read_status()
187 di->full_active_uAh = di->raw[DS2760_ACTIVE_FULL] << 8 | ds2760_battery_read_status()
188 di->raw[DS2760_ACTIVE_FULL + 1]; ds2760_battery_read_status()
193 if (di->full_active_uAh == 0) ds2760_battery_read_status()
194 di->full_active_uAh = di->rated_capacity / 1000L; ds2760_battery_read_status()
196 scale[0] = di->full_active_uAh; ds2760_battery_read_status()
198 scale[i] = scale[i - 1] + di->raw[DS2760_ACTIVE_FULL + 1 + i]; ds2760_battery_read_status()
200 di->full_active_uAh = battery_interpolate(scale, di->temp_C / 10); ds2760_battery_read_status()
201 di->full_active_uAh *= 1000; /* convert to µAh */ ds2760_battery_read_status()
204 scale[4] = di->raw[DS2760_ACTIVE_EMPTY + 4]; ds2760_battery_read_status()
206 scale[i] = scale[i + 1] + di->raw[DS2760_ACTIVE_EMPTY + i]; ds2760_battery_read_status()
208 di->empty_uAh = battery_interpolate(scale, di->temp_C / 10); ds2760_battery_read_status()
209 di->empty_uAh *= 1000; /* convert to µAh */ ds2760_battery_read_status()
211 if (di->full_active_uAh == di->empty_uAh) ds2760_battery_read_status()
212 di->rem_capacity = 0; ds2760_battery_read_status()
216 di->rem_capacity = ((di->accum_current_uAh - di->empty_uAh) * 100L) / ds2760_battery_read_status()
217 (di->full_active_uAh - di->empty_uAh); ds2760_battery_read_status()
219 if (di->rem_capacity < 0) ds2760_battery_read_status()
220 di->rem_capacity = 0; ds2760_battery_read_status()
221 if (di->rem_capacity > 100) ds2760_battery_read_status()
222 di->rem_capacity = 100; ds2760_battery_read_status()
224 if (di->current_uA < -100L) ds2760_battery_read_status()
225 di->life_sec = -((di->accum_current_uAh - di->empty_uAh) * 36L) ds2760_battery_read_status()
226 / (di->current_uA / 100L); ds2760_battery_read_status()
228 di->life_sec = 0; ds2760_battery_read_status()
233 static void ds2760_battery_set_current_accum(struct ds2760_device_info *di, ds2760_battery_set_current_accum() argument
245 if (w1_ds2760_write(di->w1_dev, acr, DS2760_CURRENT_ACCUM_MSB, 2) < 2) ds2760_battery_set_current_accum()
246 dev_warn(di->dev, "ACR write failed\n"); ds2760_battery_set_current_accum()
249 static void ds2760_battery_update_status(struct ds2760_device_info *di) ds2760_battery_update_status() argument
251 int old_charge_status = di->charge_status; ds2760_battery_update_status()
253 ds2760_battery_read_status(di); ds2760_battery_update_status()
255 if (di->charge_status == POWER_SUPPLY_STATUS_UNKNOWN) ds2760_battery_update_status()
256 di->full_counter = 0; ds2760_battery_update_status()
258 if (power_supply_am_i_supplied(di->bat)) { ds2760_battery_update_status()
259 if (di->current_uA > 10000) { ds2760_battery_update_status()
260 di->charge_status = POWER_SUPPLY_STATUS_CHARGING; ds2760_battery_update_status()
261 di->full_counter = 0; ds2760_battery_update_status()
262 } else if (di->current_uA < -5000) { ds2760_battery_update_status()
263 if (di->charge_status != POWER_SUPPLY_STATUS_NOT_CHARGING) ds2760_battery_update_status()
264 dev_notice(di->dev, "not enough power to " ds2760_battery_update_status()
266 di->charge_status = POWER_SUPPLY_STATUS_NOT_CHARGING; ds2760_battery_update_status()
267 di->full_counter = 0; ds2760_battery_update_status()
268 } else if (di->current_uA < 10000 && ds2760_battery_update_status()
269 di->charge_status != POWER_SUPPLY_STATUS_FULL) { ds2760_battery_update_status()
275 di->full_counter++; ds2760_battery_update_status()
277 if (di->full_counter < 2) { ds2760_battery_update_status()
278 di->charge_status = POWER_SUPPLY_STATUS_CHARGING; ds2760_battery_update_status()
280 di->charge_status = POWER_SUPPLY_STATUS_FULL; ds2760_battery_update_status()
281 ds2760_battery_set_current_accum(di, ds2760_battery_update_status()
282 di->full_active_uAh); ds2760_battery_update_status()
286 di->charge_status = POWER_SUPPLY_STATUS_DISCHARGING; ds2760_battery_update_status()
287 di->full_counter = 0; ds2760_battery_update_status()
290 if (di->charge_status != old_charge_status) ds2760_battery_update_status()
291 power_supply_changed(di->bat); ds2760_battery_update_status()
294 static void ds2760_battery_write_status(struct ds2760_device_info *di, ds2760_battery_write_status() argument
297 if (status == di->raw[DS2760_STATUS_REG]) ds2760_battery_write_status()
300 w1_ds2760_write(di->w1_dev, &status, DS2760_STATUS_WRITE_REG, 1); ds2760_battery_write_status()
301 w1_ds2760_store_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK1); ds2760_battery_write_status()
302 w1_ds2760_recall_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK1); ds2760_battery_write_status()
305 static void ds2760_battery_write_rated_capacity(struct ds2760_device_info *di, ds2760_battery_write_rated_capacity() argument
308 if (rated_capacity == di->raw[DS2760_RATED_CAPACITY]) ds2760_battery_write_rated_capacity()
311 w1_ds2760_write(di->w1_dev, &rated_capacity, DS2760_RATED_CAPACITY, 1); ds2760_battery_write_rated_capacity()
312 w1_ds2760_store_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK1); ds2760_battery_write_rated_capacity()
313 w1_ds2760_recall_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK1); ds2760_battery_write_rated_capacity()
316 static void ds2760_battery_write_active_full(struct ds2760_device_info *di, ds2760_battery_write_active_full() argument
324 if (tmp[0] == di->raw[DS2760_ACTIVE_FULL] && ds2760_battery_write_active_full()
325 tmp[1] == di->raw[DS2760_ACTIVE_FULL + 1]) ds2760_battery_write_active_full()
328 w1_ds2760_write(di->w1_dev, tmp, DS2760_ACTIVE_FULL, sizeof(tmp)); ds2760_battery_write_active_full()
329 w1_ds2760_store_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK0); ds2760_battery_write_active_full()
330 w1_ds2760_recall_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK0); ds2760_battery_write_active_full()
332 /* Write to the di->raw[] buffer directly - the DS2760_ACTIVE_FULL ds2760_battery_write_active_full()
334 di->raw[DS2760_ACTIVE_FULL] = tmp[0]; ds2760_battery_write_active_full()
335 di->raw[DS2760_ACTIVE_FULL + 1] = tmp[1]; ds2760_battery_write_active_full()
340 struct ds2760_device_info *di = container_of(work, ds2760_battery_work() local
344 dev_dbg(di->dev, "%s\n", __func__); ds2760_battery_work()
346 ds2760_battery_update_status(di); ds2760_battery_work()
347 queue_delayed_work(di->monitor_wqueue, &di->monitor_work, interval); ds2760_battery_work()
352 struct ds2760_device_info *di = power_supply_get_drvdata(psy); ds2760_battery_external_power_changed() local
354 dev_dbg(di->dev, "%s\n", __func__); ds2760_battery_external_power_changed()
356 mod_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ/10); ds2760_battery_external_power_changed()
363 struct ds2760_device_info *di = container_of(work, ds2760_battery_set_charged_work() local
366 dev_dbg(di->dev, "%s\n", __func__); ds2760_battery_set_charged_work()
368 ds2760_battery_read_status(di); ds2760_battery_set_charged_work()
378 if (!power_supply_am_i_supplied(di->bat)) ds2760_battery_set_charged_work()
381 bias = (signed char) di->current_raw + ds2760_battery_set_charged_work()
382 (signed char) di->raw[DS2760_CURRENT_OFFSET_BIAS]; ds2760_battery_set_charged_work()
384 dev_dbg(di->dev, "%s: bias = %d\n", __func__, bias); ds2760_battery_set_charged_work()
386 w1_ds2760_write(di->w1_dev, &bias, DS2760_CURRENT_OFFSET_BIAS, 1); ds2760_battery_set_charged_work()
387 w1_ds2760_store_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK1); ds2760_battery_set_charged_work()
388 w1_ds2760_recall_eeprom(di->w1_dev, DS2760_EEPROM_BLOCK1); ds2760_battery_set_charged_work()
390 /* Write to the di->raw[] buffer directly - the CURRENT_OFFSET_BIAS ds2760_battery_set_charged_work()
392 di->raw[DS2760_CURRENT_OFFSET_BIAS] = bias; ds2760_battery_set_charged_work()
397 struct ds2760_device_info *di = power_supply_get_drvdata(psy); ds2760_battery_set_charged() local
401 mod_delayed_work(di->monitor_wqueue, &di->set_charged_work, HZ * 20); ds2760_battery_set_charged()
408 struct ds2760_device_info *di = power_supply_get_drvdata(psy); ds2760_battery_get_property() local
412 val->intval = di->charge_status; ds2760_battery_get_property()
418 ds2760_battery_read_status(di); ds2760_battery_get_property()
422 val->intval = di->voltage_uV; ds2760_battery_get_property()
425 val->intval = di->current_uA; ds2760_battery_get_property()
428 val->intval = di->rated_capacity; ds2760_battery_get_property()
431 val->intval = di->full_active_uAh; ds2760_battery_get_property()
434 val->intval = di->empty_uAh; ds2760_battery_get_property()
437 val->intval = di->accum_current_uAh; ds2760_battery_get_property()
440 val->intval = di->temp_C; ds2760_battery_get_property()
443 val->intval = di->life_sec; ds2760_battery_get_property()
446 val->intval = di->rem_capacity; ds2760_battery_get_property()
459 struct ds2760_device_info *di = power_supply_get_drvdata(psy); ds2760_battery_set_property() local
464 ds2760_battery_write_active_full(di, val->intval / 1000L); ds2760_battery_set_property()
469 ds2760_battery_set_current_accum(di, val->intval); ds2760_battery_set_property()
512 struct ds2760_device_info *di; ds2760_battery_probe() local
514 di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL); ds2760_battery_probe()
515 if (!di) { ds2760_battery_probe()
520 platform_set_drvdata(pdev, di); ds2760_battery_probe()
522 di->dev = &pdev->dev; ds2760_battery_probe()
523 di->w1_dev = pdev->dev.parent; ds2760_battery_probe()
524 di->bat_desc.name = dev_name(&pdev->dev); ds2760_battery_probe()
525 di->bat_desc.type = POWER_SUPPLY_TYPE_BATTERY; ds2760_battery_probe()
526 di->bat_desc.properties = ds2760_battery_props; ds2760_battery_probe()
527 di->bat_desc.num_properties = ARRAY_SIZE(ds2760_battery_props); ds2760_battery_probe()
528 di->bat_desc.get_property = ds2760_battery_get_property; ds2760_battery_probe()
529 di->bat_desc.set_property = ds2760_battery_set_property; ds2760_battery_probe()
530 di->bat_desc.property_is_writeable = ds2760_battery_probe()
532 di->bat_desc.set_charged = ds2760_battery_set_charged; ds2760_battery_probe()
533 di->bat_desc.external_power_changed = ds2760_battery_probe()
536 psy_cfg.drv_data = di; ds2760_battery_probe()
538 di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN; ds2760_battery_probe()
541 ds2760_battery_read_status(di); ds2760_battery_probe()
542 status = di->raw[DS2760_STATUS_REG]; ds2760_battery_probe()
548 ds2760_battery_write_status(di, status); ds2760_battery_probe()
552 ds2760_battery_write_rated_capacity(di, rated_capacity); ds2760_battery_probe()
557 ds2760_battery_set_current_accum(di, current_accum); ds2760_battery_probe()
559 di->bat = power_supply_register(&pdev->dev, &di->bat_desc, &psy_cfg); ds2760_battery_probe()
560 if (IS_ERR(di->bat)) { ds2760_battery_probe()
561 dev_err(di->dev, "failed to register battery\n"); ds2760_battery_probe()
562 retval = PTR_ERR(di->bat); ds2760_battery_probe()
566 INIT_DELAYED_WORK(&di->monitor_work, ds2760_battery_work); ds2760_battery_probe()
567 INIT_DELAYED_WORK(&di->set_charged_work, ds2760_battery_probe()
569 di->monitor_wqueue = create_singlethread_workqueue(dev_name(&pdev->dev)); ds2760_battery_probe()
570 if (!di->monitor_wqueue) { ds2760_battery_probe()
574 queue_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ * 1); ds2760_battery_probe()
579 power_supply_unregister(di->bat); ds2760_battery_probe()
588 struct ds2760_device_info *di = platform_get_drvdata(pdev); ds2760_battery_remove() local
590 cancel_delayed_work_sync(&di->monitor_work); ds2760_battery_remove()
591 cancel_delayed_work_sync(&di->set_charged_work); ds2760_battery_remove()
592 destroy_workqueue(di->monitor_wqueue); ds2760_battery_remove()
593 power_supply_unregister(di->bat); ds2760_battery_remove()
603 struct ds2760_device_info *di = platform_get_drvdata(pdev); ds2760_battery_suspend() local
605 di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN; ds2760_battery_suspend()
612 struct ds2760_device_info *di = platform_get_drvdata(pdev); ds2760_battery_resume() local
614 di->charge_status = POWER_SUPPLY_STATUS_UNKNOWN; ds2760_battery_resume()
615 power_supply_changed(di->bat); ds2760_battery_resume()
617 mod_delayed_work(di->monitor_wqueue, &di->monitor_work, HZ); ds2760_battery_resume()
H A Dabx500_chargalg.c294 struct abx500_chargalg *di = container_of(timer, struct abx500_chargalg, abx500_chargalg_safety_timer_expired() local
296 dev_err(di->dev, "Safety timer expired\n"); abx500_chargalg_safety_timer_expired()
297 di->events.safety_timer_expired = true; abx500_chargalg_safety_timer_expired()
300 queue_work(di->chargalg_wq, &di->chargalg_work); abx500_chargalg_safety_timer_expired()
317 struct abx500_chargalg *di = container_of(timer, struct abx500_chargalg, abx500_chargalg_maintenance_timer_expired() local
320 dev_dbg(di->dev, "Maintenance timer expired\n"); abx500_chargalg_maintenance_timer_expired()
321 di->events.maintenance_timer_expired = true; abx500_chargalg_maintenance_timer_expired()
324 queue_work(di->chargalg_wq, &di->chargalg_work); abx500_chargalg_maintenance_timer_expired()
331 * @di: pointer to the abx500_chargalg structure
335 static void abx500_chargalg_state_to(struct abx500_chargalg *di, abx500_chargalg_state_to() argument
338 dev_dbg(di->dev, abx500_chargalg_state_to()
340 di->charge_state == state ? "NO" : "YES", abx500_chargalg_state_to()
341 di->charge_state, abx500_chargalg_state_to()
342 states[di->charge_state], abx500_chargalg_state_to()
346 di->charge_state = state; abx500_chargalg_state_to()
349 static int abx500_chargalg_check_charger_enable(struct abx500_chargalg *di) abx500_chargalg_check_charger_enable() argument
351 switch (di->charge_state) { abx500_chargalg_check_charger_enable()
360 if (di->chg_info.charger_type & USB_CHG) { abx500_chargalg_check_charger_enable()
361 return di->usb_chg->ops.check_enable(di->usb_chg, abx500_chargalg_check_charger_enable()
362 di->bm->bat_type[di->bm->batt_id].normal_vol_lvl, abx500_chargalg_check_charger_enable()
363 di->bm->bat_type[di->bm->batt_id].normal_cur_lvl); abx500_chargalg_check_charger_enable()
364 } else if ((di->chg_info.charger_type & AC_CHG) && abx500_chargalg_check_charger_enable()
365 !(di->ac_chg->external)) { abx500_chargalg_check_charger_enable()
366 return di->ac_chg->ops.check_enable(di->ac_chg, abx500_chargalg_check_charger_enable()
367 di->bm->bat_type[di->bm->batt_id].normal_vol_lvl, abx500_chargalg_check_charger_enable()
368 di->bm->bat_type[di->bm->batt_id].normal_cur_lvl); abx500_chargalg_check_charger_enable()
375 * @di: pointer to the abx500_chargalg structure
380 static int abx500_chargalg_check_charger_connection(struct abx500_chargalg *di) abx500_chargalg_check_charger_connection() argument
382 if (di->chg_info.conn_chg != di->chg_info.prev_conn_chg || abx500_chargalg_check_charger_connection()
383 di->susp_status.suspended_change) { abx500_chargalg_check_charger_connection()
388 if ((di->chg_info.conn_chg & AC_CHG) && abx500_chargalg_check_charger_connection()
389 !di->susp_status.ac_suspended) { abx500_chargalg_check_charger_connection()
390 dev_dbg(di->dev, "Charging source is AC\n"); abx500_chargalg_check_charger_connection()
391 if (di->chg_info.charger_type != AC_CHG) { abx500_chargalg_check_charger_connection()
392 di->chg_info.charger_type = AC_CHG; abx500_chargalg_check_charger_connection()
393 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_check_charger_connection()
395 } else if ((di->chg_info.conn_chg & USB_CHG) && abx500_chargalg_check_charger_connection()
396 !di->susp_status.usb_suspended) { abx500_chargalg_check_charger_connection()
397 dev_dbg(di->dev, "Charging source is USB\n"); abx500_chargalg_check_charger_connection()
398 di->chg_info.charger_type = USB_CHG; abx500_chargalg_check_charger_connection()
399 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_check_charger_connection()
400 } else if (di->chg_info.conn_chg && abx500_chargalg_check_charger_connection()
401 (di->susp_status.ac_suspended || abx500_chargalg_check_charger_connection()
402 di->susp_status.usb_suspended)) { abx500_chargalg_check_charger_connection()
403 dev_dbg(di->dev, "Charging is suspended\n"); abx500_chargalg_check_charger_connection()
404 di->chg_info.charger_type = NO_CHG; abx500_chargalg_check_charger_connection()
405 abx500_chargalg_state_to(di, STATE_SUSPENDED_INIT); abx500_chargalg_check_charger_connection()
407 dev_dbg(di->dev, "Charging source is OFF\n"); abx500_chargalg_check_charger_connection()
408 di->chg_info.charger_type = NO_CHG; abx500_chargalg_check_charger_connection()
409 abx500_chargalg_state_to(di, STATE_HANDHELD_INIT); abx500_chargalg_check_charger_connection()
411 di->chg_info.prev_conn_chg = di->chg_info.conn_chg; abx500_chargalg_check_charger_connection()
412 di->susp_status.suspended_change = false; abx500_chargalg_check_charger_connection()
414 return di->chg_info.conn_chg; abx500_chargalg_check_charger_connection()
420 * @di: pointer to the abx500_chargalg structure
426 (struct abx500_chargalg *di) abx500_chargalg_check_current_step_status()
428 if (di->curr_status.curr_step_change) abx500_chargalg_check_current_step_status()
429 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_check_current_step_status()
430 di->curr_status.curr_step_change = false; abx500_chargalg_check_current_step_status()
435 * @di: pointer to the abx500_chargalg structure
440 static void abx500_chargalg_start_safety_timer(struct abx500_chargalg *di) abx500_chargalg_start_safety_timer() argument
445 switch (di->chg_info.charger_type) { abx500_chargalg_start_safety_timer()
447 timer_expiration = di->bm->main_safety_tmr_h; abx500_chargalg_start_safety_timer()
451 timer_expiration = di->bm->usb_safety_tmr_h; abx500_chargalg_start_safety_timer()
455 dev_err(di->dev, "Unknown charger to charge from\n"); abx500_chargalg_start_safety_timer()
459 di->events.safety_timer_expired = false; abx500_chargalg_start_safety_timer()
460 hrtimer_set_expires_range(&di->safety_timer, abx500_chargalg_start_safety_timer()
463 hrtimer_start_expires(&di->safety_timer, HRTIMER_MODE_REL); abx500_chargalg_start_safety_timer()
468 * @di: pointer to the abx500_chargalg structure
472 static void abx500_chargalg_stop_safety_timer(struct abx500_chargalg *di) abx500_chargalg_stop_safety_timer() argument
474 if (hrtimer_try_to_cancel(&di->safety_timer) >= 0) abx500_chargalg_stop_safety_timer()
475 di->events.safety_timer_expired = false; abx500_chargalg_stop_safety_timer()
480 * @di: pointer to the abx500_chargalg structure
487 static void abx500_chargalg_start_maintenance_timer(struct abx500_chargalg *di, abx500_chargalg_start_maintenance_timer() argument
490 hrtimer_set_expires_range(&di->maintenance_timer, abx500_chargalg_start_maintenance_timer()
493 di->events.maintenance_timer_expired = false; abx500_chargalg_start_maintenance_timer()
494 hrtimer_start_expires(&di->maintenance_timer, HRTIMER_MODE_REL); abx500_chargalg_start_maintenance_timer()
499 * @di: pointer to the abx500_chargalg structure
504 static void abx500_chargalg_stop_maintenance_timer(struct abx500_chargalg *di) abx500_chargalg_stop_maintenance_timer() argument
506 if (hrtimer_try_to_cancel(&di->maintenance_timer) >= 0) abx500_chargalg_stop_maintenance_timer()
507 di->events.maintenance_timer_expired = false; abx500_chargalg_stop_maintenance_timer()
512 * @di: pointer to the abx500_chargalg structure
517 static int abx500_chargalg_kick_watchdog(struct abx500_chargalg *di) abx500_chargalg_kick_watchdog() argument
520 if (di->ac_chg && di->ac_chg->ops.kick_wd && abx500_chargalg_kick_watchdog()
521 di->chg_info.online_chg & AC_CHG) { abx500_chargalg_kick_watchdog()
527 if (di->ac_chg->external && abx500_chargalg_kick_watchdog()
528 di->usb_chg && di->usb_chg->ops.kick_wd) abx500_chargalg_kick_watchdog()
529 di->usb_chg->ops.kick_wd(di->usb_chg); abx500_chargalg_kick_watchdog()
531 return di->ac_chg->ops.kick_wd(di->ac_chg); abx500_chargalg_kick_watchdog()
533 else if (di->usb_chg && di->usb_chg->ops.kick_wd && abx500_chargalg_kick_watchdog()
534 di->chg_info.online_chg & USB_CHG) abx500_chargalg_kick_watchdog()
535 return di->usb_chg->ops.kick_wd(di->usb_chg); abx500_chargalg_kick_watchdog()
542 * @di: pointer to the abx500_chargalg structure
550 static int abx500_chargalg_ac_en(struct abx500_chargalg *di, int enable, abx500_chargalg_ac_en() argument
555 if (!di->ac_chg || !di->ac_chg->ops.enable) abx500_chargalg_ac_en()
559 if (di->ac_chg->max_out_volt) abx500_chargalg_ac_en()
560 vset = min(vset, di->ac_chg->max_out_volt); abx500_chargalg_ac_en()
561 if (di->ac_chg->max_out_curr) abx500_chargalg_ac_en()
562 iset = min(iset, di->ac_chg->max_out_curr); abx500_chargalg_ac_en()
564 di->chg_info.ac_iset = iset; abx500_chargalg_ac_en()
565 di->chg_info.ac_vset = vset; abx500_chargalg_ac_en()
568 if (enable && di->ac_chg->external && abx500_chargalg_ac_en()
571 0, di->dev); abx500_chargalg_ac_en()
575 return di->ac_chg->ops.enable(di->ac_chg, enable, vset, iset); abx500_chargalg_ac_en()
580 * @di: pointer to the abx500_chargalg structure
588 static int abx500_chargalg_usb_en(struct abx500_chargalg *di, int enable, abx500_chargalg_usb_en() argument
591 if (!di->usb_chg || !di->usb_chg->ops.enable) abx500_chargalg_usb_en()
595 if (di->usb_chg->max_out_volt) abx500_chargalg_usb_en()
596 vset = min(vset, di->usb_chg->max_out_volt); abx500_chargalg_usb_en()
597 if (di->usb_chg->max_out_curr) abx500_chargalg_usb_en()
598 iset = min(iset, di->usb_chg->max_out_curr); abx500_chargalg_usb_en()
600 di->chg_info.usb_iset = iset; abx500_chargalg_usb_en()
601 di->chg_info.usb_vset = vset; abx500_chargalg_usb_en()
603 return di->usb_chg->ops.enable(di->usb_chg, enable, vset, iset); abx500_chargalg_usb_en()
608 * @di: pointer to the abx500_chargalg structure
613 static int ab8540_chargalg_usb_pp_en(struct abx500_chargalg *di, bool enable) ab8540_chargalg_usb_pp_en() argument
615 if (!di->usb_chg || !di->usb_chg->ops.pp_enable) ab8540_chargalg_usb_pp_en()
618 return di->usb_chg->ops.pp_enable(di->usb_chg, enable); ab8540_chargalg_usb_pp_en()
623 * @di: pointer to the abx500_chargalg structure
628 static int ab8540_chargalg_usb_pre_chg_en(struct abx500_chargalg *di, ab8540_chargalg_usb_pre_chg_en() argument
631 if (!di->usb_chg || !di->usb_chg->ops.pre_chg_enable) ab8540_chargalg_usb_pre_chg_en()
634 return di->usb_chg->ops.pre_chg_enable(di->usb_chg, enable); ab8540_chargalg_usb_pre_chg_en()
639 * @di: pointer to the abx500_chargalg structure
645 static int abx500_chargalg_update_chg_curr(struct abx500_chargalg *di, abx500_chargalg_update_chg_curr() argument
649 if (di->ac_chg && di->ac_chg->ops.update_curr && abx500_chargalg_update_chg_curr()
650 di->chg_info.charger_type & AC_CHG) { abx500_chargalg_update_chg_curr()
655 if (di->ac_chg->max_out_curr) abx500_chargalg_update_chg_curr()
656 iset = min(iset, di->ac_chg->max_out_curr); abx500_chargalg_update_chg_curr()
658 di->chg_info.ac_iset = iset; abx500_chargalg_update_chg_curr()
660 return di->ac_chg->ops.update_curr(di->ac_chg, iset); abx500_chargalg_update_chg_curr()
661 } else if (di->usb_chg && di->usb_chg->ops.update_curr && abx500_chargalg_update_chg_curr()
662 di->chg_info.charger_type & USB_CHG) { abx500_chargalg_update_chg_curr()
667 if (di->usb_chg->max_out_curr) abx500_chargalg_update_chg_curr()
668 iset = min(iset, di->usb_chg->max_out_curr); abx500_chargalg_update_chg_curr()
670 di->chg_info.usb_iset = iset; abx500_chargalg_update_chg_curr()
672 return di->usb_chg->ops.update_curr(di->usb_chg, iset); abx500_chargalg_update_chg_curr()
680 * @di: pointer to the abx500_chargalg structure
686 static void abx500_chargalg_stop_charging(struct abx500_chargalg *di) abx500_chargalg_stop_charging() argument
688 abx500_chargalg_ac_en(di, false, 0, 0); abx500_chargalg_stop_charging()
689 abx500_chargalg_usb_en(di, false, 0, 0); abx500_chargalg_stop_charging()
690 abx500_chargalg_stop_safety_timer(di); abx500_chargalg_stop_charging()
691 abx500_chargalg_stop_maintenance_timer(di); abx500_chargalg_stop_charging()
692 di->charge_status = POWER_SUPPLY_STATUS_NOT_CHARGING; abx500_chargalg_stop_charging()
693 di->maintenance_chg = false; abx500_chargalg_stop_charging()
694 cancel_delayed_work(&di->chargalg_wd_work); abx500_chargalg_stop_charging()
695 power_supply_changed(di->chargalg_psy); abx500_chargalg_stop_charging()
700 * @di: pointer to the abx500_chargalg structure
706 static void abx500_chargalg_hold_charging(struct abx500_chargalg *di) abx500_chargalg_hold_charging() argument
708 abx500_chargalg_ac_en(di, false, 0, 0); abx500_chargalg_hold_charging()
709 abx500_chargalg_usb_en(di, false, 0, 0); abx500_chargalg_hold_charging()
710 abx500_chargalg_stop_safety_timer(di); abx500_chargalg_hold_charging()
711 abx500_chargalg_stop_maintenance_timer(di); abx500_chargalg_hold_charging()
712 di->charge_status = POWER_SUPPLY_STATUS_CHARGING; abx500_chargalg_hold_charging()
713 di->maintenance_chg = false; abx500_chargalg_hold_charging()
714 cancel_delayed_work(&di->chargalg_wd_work); abx500_chargalg_hold_charging()
715 power_supply_changed(di->chargalg_psy); abx500_chargalg_hold_charging()
720 * @di: pointer to the abx500_chargalg structure
727 static void abx500_chargalg_start_charging(struct abx500_chargalg *di, abx500_chargalg_start_charging() argument
730 switch (di->chg_info.charger_type) { abx500_chargalg_start_charging()
732 dev_dbg(di->dev, abx500_chargalg_start_charging()
734 abx500_chargalg_usb_en(di, false, 0, 0); abx500_chargalg_start_charging()
735 abx500_chargalg_ac_en(di, true, vset, iset); abx500_chargalg_start_charging()
739 dev_dbg(di->dev, abx500_chargalg_start_charging()
741 abx500_chargalg_ac_en(di, false, 0, 0); abx500_chargalg_start_charging()
742 abx500_chargalg_usb_en(di, true, vset, iset); abx500_chargalg_start_charging()
746 dev_err(di->dev, "Unknown charger to charge from\n"); abx500_chargalg_start_charging()
753 * @di: pointer to the abx500_chargalg structure
758 static void abx500_chargalg_check_temp(struct abx500_chargalg *di) abx500_chargalg_check_temp() argument
760 if (di->batt_data.temp > (di->bm->temp_low + di->t_hyst_norm) && abx500_chargalg_check_temp()
761 di->batt_data.temp < (di->bm->temp_high - di->t_hyst_norm)) { abx500_chargalg_check_temp()
763 di->events.btemp_underover = false; abx500_chargalg_check_temp()
764 di->events.btemp_lowhigh = false; abx500_chargalg_check_temp()
765 di->t_hyst_norm = 0; abx500_chargalg_check_temp()
766 di->t_hyst_lowhigh = 0; abx500_chargalg_check_temp()
768 if (((di->batt_data.temp >= di->bm->temp_high) && abx500_chargalg_check_temp()
769 (di->batt_data.temp < abx500_chargalg_check_temp()
770 (di->bm->temp_over - di->t_hyst_lowhigh))) || abx500_chargalg_check_temp()
771 ((di->batt_data.temp > abx500_chargalg_check_temp()
772 (di->bm->temp_under + di->t_hyst_lowhigh)) && abx500_chargalg_check_temp()
773 (di->batt_data.temp <= di->bm->temp_low))) { abx500_chargalg_check_temp()
775 di->events.btemp_underover = false; abx500_chargalg_check_temp()
776 di->events.btemp_lowhigh = true; abx500_chargalg_check_temp()
777 di->t_hyst_norm = di->bm->temp_hysteresis; abx500_chargalg_check_temp()
778 di->t_hyst_lowhigh = 0; abx500_chargalg_check_temp()
779 } else if (di->batt_data.temp <= di->bm->temp_under || abx500_chargalg_check_temp()
780 di->batt_data.temp >= di->bm->temp_over) { abx500_chargalg_check_temp()
782 di->events.btemp_underover = true; abx500_chargalg_check_temp()
783 di->events.btemp_lowhigh = false; abx500_chargalg_check_temp()
784 di->t_hyst_norm = 0; abx500_chargalg_check_temp()
785 di->t_hyst_lowhigh = di->bm->temp_hysteresis; abx500_chargalg_check_temp()
788 dev_dbg(di->dev, "Within hysteresis limit temp: %d " abx500_chargalg_check_temp()
790 di->batt_data.temp, di->t_hyst_lowhigh, abx500_chargalg_check_temp()
791 di->t_hyst_norm); abx500_chargalg_check_temp()
798 * @di: pointer to the abx500_chargalg structure
802 static void abx500_chargalg_check_charger_voltage(struct abx500_chargalg *di) abx500_chargalg_check_charger_voltage() argument
804 if (di->chg_info.usb_volt > di->bm->chg_params->usb_volt_max) abx500_chargalg_check_charger_voltage()
805 di->chg_info.usb_chg_ok = false; abx500_chargalg_check_charger_voltage()
807 di->chg_info.usb_chg_ok = true; abx500_chargalg_check_charger_voltage()
809 if (di->chg_info.ac_volt > di->bm->chg_params->ac_volt_max) abx500_chargalg_check_charger_voltage()
810 di->chg_info.ac_chg_ok = false; abx500_chargalg_check_charger_voltage()
812 di->chg_info.ac_chg_ok = true; abx500_chargalg_check_charger_voltage()
818 * @di: pointer to the abx500_chargalg structure
824 static void abx500_chargalg_end_of_charge(struct abx500_chargalg *di) abx500_chargalg_end_of_charge() argument
826 if (di->charge_status == POWER_SUPPLY_STATUS_CHARGING && abx500_chargalg_end_of_charge()
827 di->charge_state == STATE_NORMAL && abx500_chargalg_end_of_charge()
828 !di->maintenance_chg && (di->batt_data.volt >= abx500_chargalg_end_of_charge()
829 di->bm->bat_type[di->bm->batt_id].termination_vol || abx500_chargalg_end_of_charge()
830 di->events.usb_cv_active || di->events.ac_cv_active) && abx500_chargalg_end_of_charge()
831 di->batt_data.avg_curr < abx500_chargalg_end_of_charge()
832 di->bm->bat_type[di->bm->batt_id].termination_curr && abx500_chargalg_end_of_charge()
833 di->batt_data.avg_curr > 0) { abx500_chargalg_end_of_charge()
834 if (++di->eoc_cnt >= EOC_COND_CNT) { abx500_chargalg_end_of_charge()
835 di->eoc_cnt = 0; abx500_chargalg_end_of_charge()
836 if ((di->chg_info.charger_type & USB_CHG) && abx500_chargalg_end_of_charge()
837 (di->usb_chg->power_path)) abx500_chargalg_end_of_charge()
838 ab8540_chargalg_usb_pp_en(di, true); abx500_chargalg_end_of_charge()
839 di->charge_status = POWER_SUPPLY_STATUS_FULL; abx500_chargalg_end_of_charge()
840 di->maintenance_chg = true; abx500_chargalg_end_of_charge()
841 dev_dbg(di->dev, "EOC reached!\n"); abx500_chargalg_end_of_charge()
842 power_supply_changed(di->chargalg_psy); abx500_chargalg_end_of_charge()
844 dev_dbg(di->dev, abx500_chargalg_end_of_charge()
847 di->eoc_cnt, abx500_chargalg_end_of_charge()
851 di->eoc_cnt = 0; abx500_chargalg_end_of_charge()
855 static void init_maxim_chg_curr(struct abx500_chargalg *di) init_maxim_chg_curr() argument
857 di->ccm.original_iset = init_maxim_chg_curr()
858 di->bm->bat_type[di->bm->batt_id].normal_cur_lvl; init_maxim_chg_curr()
859 di->ccm.current_iset = init_maxim_chg_curr()
860 di->bm->bat_type[di->bm->batt_id].normal_cur_lvl; init_maxim_chg_curr()
861 di->ccm.test_delta_i = di->bm->maxi->charger_curr_step; init_maxim_chg_curr()
862 di->ccm.max_current = di->bm->maxi->chg_curr; init_maxim_chg_curr()
863 di->ccm.condition_cnt = di->bm->maxi->wait_cycles; init_maxim_chg_curr()
864 di->ccm.level = 0; init_maxim_chg_curr()
870 * @di pointer to the abx500_chargalg structure
876 static enum maxim_ret abx500_chargalg_chg_curr_maxim(struct abx500_chargalg *di) abx500_chargalg_chg_curr_maxim() argument
880 if (!di->bm->maxi->ena_maxi) abx500_chargalg_chg_curr_maxim()
883 delta_i = di->ccm.original_iset - di->batt_data.inst_curr; abx500_chargalg_chg_curr_maxim()
885 if (di->events.vbus_collapsed) { abx500_chargalg_chg_curr_maxim()
886 dev_dbg(di->dev, "Charger voltage has collapsed %d\n", abx500_chargalg_chg_curr_maxim()
887 di->ccm.wait_cnt); abx500_chargalg_chg_curr_maxim()
888 if (di->ccm.wait_cnt == 0) { abx500_chargalg_chg_curr_maxim()
889 dev_dbg(di->dev, "lowering current\n"); abx500_chargalg_chg_curr_maxim()
890 di->ccm.wait_cnt++; abx500_chargalg_chg_curr_maxim()
891 di->ccm.condition_cnt = di->bm->maxi->wait_cycles; abx500_chargalg_chg_curr_maxim()
892 di->ccm.max_current = abx500_chargalg_chg_curr_maxim()
893 di->ccm.current_iset - di->ccm.test_delta_i; abx500_chargalg_chg_curr_maxim()
894 di->ccm.current_iset = di->ccm.max_current; abx500_chargalg_chg_curr_maxim()
895 di->ccm.level--; abx500_chargalg_chg_curr_maxim()
898 dev_dbg(di->dev, "waiting\n"); abx500_chargalg_chg_curr_maxim()
900 di->ccm.wait_cnt = (di->ccm.wait_cnt + 1) % 3; abx500_chargalg_chg_curr_maxim()
905 di->ccm.wait_cnt = 0; abx500_chargalg_chg_curr_maxim()
907 if ((di->batt_data.inst_curr > di->ccm.original_iset)) { abx500_chargalg_chg_curr_maxim()
908 dev_dbg(di->dev, " Maximization Ibat (%dmA) too high" abx500_chargalg_chg_curr_maxim()
910 di->batt_data.inst_curr, di->ccm.original_iset, abx500_chargalg_chg_curr_maxim()
911 di->ccm.current_iset); abx500_chargalg_chg_curr_maxim()
913 if (di->ccm.current_iset == di->ccm.original_iset) abx500_chargalg_chg_curr_maxim()
916 di->ccm.condition_cnt = di->bm->maxi->wait_cycles; abx500_chargalg_chg_curr_maxim()
917 di->ccm.current_iset = di->ccm.original_iset; abx500_chargalg_chg_curr_maxim()
918 di->ccm.level = 0; abx500_chargalg_chg_curr_maxim()
923 if (delta_i > di->ccm.test_delta_i && abx500_chargalg_chg_curr_maxim()
924 (di->ccm.current_iset + di->ccm.test_delta_i) < abx500_chargalg_chg_curr_maxim()
925 di->ccm.max_current) { abx500_chargalg_chg_curr_maxim()
926 if (di->ccm.condition_cnt-- == 0) { abx500_chargalg_chg_curr_maxim()
928 di->ccm.condition_cnt = di->bm->maxi->wait_cycles; abx500_chargalg_chg_curr_maxim()
929 di->ccm.current_iset += di->ccm.test_delta_i; abx500_chargalg_chg_curr_maxim()
930 di->ccm.level++; abx500_chargalg_chg_curr_maxim()
931 dev_dbg(di->dev, " Maximization needed, increase" abx500_chargalg_chg_curr_maxim()
934 di->ccm.test_delta_i, abx500_chargalg_chg_curr_maxim()
935 di->ccm.current_iset, abx500_chargalg_chg_curr_maxim()
936 di->ccm.original_iset, abx500_chargalg_chg_curr_maxim()
937 di->ccm.level); abx500_chargalg_chg_curr_maxim()
943 di->ccm.condition_cnt = di->bm->maxi->wait_cycles; abx500_chargalg_chg_curr_maxim()
948 static void handle_maxim_chg_curr(struct abx500_chargalg *di) handle_maxim_chg_curr() argument
953 ret = abx500_chargalg_chg_curr_maxim(di); handle_maxim_chg_curr()
956 result = abx500_chargalg_update_chg_curr(di, handle_maxim_chg_curr()
957 di->ccm.current_iset); handle_maxim_chg_curr()
959 dev_err(di->dev, "failed to set chg curr\n"); handle_maxim_chg_curr()
962 result = abx500_chargalg_update_chg_curr(di, handle_maxim_chg_curr()
963 di->bm->bat_type[di->bm->batt_id].normal_cur_lvl); handle_maxim_chg_curr()
965 dev_err(di->dev, "failed to set chg curr\n"); handle_maxim_chg_curr()
979 struct abx500_chargalg *di; abx500_chargalg_get_ext_psy_data() local
987 di = power_supply_get_drvdata(psy); abx500_chargalg_get_ext_psy_data()
1002 di->batt_data.percent = ret.intval; abx500_chargalg_get_ext_psy_data()
1014 if (!di->ac_chg && abx500_chargalg_get_ext_psy_data()
1016 di->ac_chg = psy_to_ux500_charger(ext); abx500_chargalg_get_ext_psy_data()
1017 else if (!di->usb_chg && abx500_chargalg_get_ext_psy_data()
1019 di->usb_chg = psy_to_ux500_charger(ext); abx500_chargalg_get_ext_psy_data()
1029 di->events.batt_rem = false; abx500_chargalg_get_ext_psy_data()
1032 di->events.batt_rem = true; abx500_chargalg_get_ext_psy_data()
1037 (di->chg_info.conn_chg & AC_CHG)) { abx500_chargalg_get_ext_psy_data()
1038 di->chg_info.prev_conn_chg = abx500_chargalg_get_ext_psy_data()
1039 di->chg_info.conn_chg; abx500_chargalg_get_ext_psy_data()
1040 di->chg_info.conn_chg &= ~AC_CHG; abx500_chargalg_get_ext_psy_data()
1044 !(di->chg_info.conn_chg & AC_CHG)) { abx500_chargalg_get_ext_psy_data()
1045 di->chg_info.prev_conn_chg = abx500_chargalg_get_ext_psy_data()
1046 di->chg_info.conn_chg; abx500_chargalg_get_ext_psy_data()
1047 di->chg_info.conn_chg |= AC_CHG; abx500_chargalg_get_ext_psy_data()
1053 (di->chg_info.conn_chg & USB_CHG)) { abx500_chargalg_get_ext_psy_data()
1054 di->chg_info.prev_conn_chg = abx500_chargalg_get_ext_psy_data()
1055 di->chg_info.conn_chg; abx500_chargalg_get_ext_psy_data()
1056 di->chg_info.conn_chg &= ~USB_CHG; abx500_chargalg_get_ext_psy_data()
1060 !(di->chg_info.conn_chg & USB_CHG)) { abx500_chargalg_get_ext_psy_data()
1061 di->chg_info.prev_conn_chg = abx500_chargalg_get_ext_psy_data()
1062 di->chg_info.conn_chg; abx500_chargalg_get_ext_psy_data()
1063 di->chg_info.conn_chg |= USB_CHG; abx500_chargalg_get_ext_psy_data()
1078 (di->chg_info.online_chg & AC_CHG)) { abx500_chargalg_get_ext_psy_data()
1079 di->chg_info.prev_online_chg = abx500_chargalg_get_ext_psy_data()
1080 di->chg_info.online_chg; abx500_chargalg_get_ext_psy_data()
1081 di->chg_info.online_chg &= ~AC_CHG; abx500_chargalg_get_ext_psy_data()
1085 !(di->chg_info.online_chg & AC_CHG)) { abx500_chargalg_get_ext_psy_data()
1086 di->chg_info.prev_online_chg = abx500_chargalg_get_ext_psy_data()
1087 di->chg_info.online_chg; abx500_chargalg_get_ext_psy_data()
1088 di->chg_info.online_chg |= AC_CHG; abx500_chargalg_get_ext_psy_data()
1089 queue_delayed_work(di->chargalg_wq, abx500_chargalg_get_ext_psy_data()
1090 &di->chargalg_wd_work, 0); abx500_chargalg_get_ext_psy_data()
1096 (di->chg_info.online_chg & USB_CHG)) { abx500_chargalg_get_ext_psy_data()
1097 di->chg_info.prev_online_chg = abx500_chargalg_get_ext_psy_data()
1098 di->chg_info.online_chg; abx500_chargalg_get_ext_psy_data()
1099 di->chg_info.online_chg &= ~USB_CHG; abx500_chargalg_get_ext_psy_data()
1103 !(di->chg_info.online_chg & USB_CHG)) { abx500_chargalg_get_ext_psy_data()
1104 di->chg_info.prev_online_chg = abx500_chargalg_get_ext_psy_data()
1105 di->chg_info.online_chg; abx500_chargalg_get_ext_psy_data()
1106 di->chg_info.online_chg |= USB_CHG; abx500_chargalg_get_ext_psy_data()
1107 queue_delayed_work(di->chargalg_wq, abx500_chargalg_get_ext_psy_data()
1108 &di->chargalg_wd_work, 0); abx500_chargalg_get_ext_psy_data()
1123 di->events.mainextchnotok = true; abx500_chargalg_get_ext_psy_data()
1124 di->events.main_thermal_prot = false; abx500_chargalg_get_ext_psy_data()
1125 di->events.main_ovv = false; abx500_chargalg_get_ext_psy_data()
1126 di->events.ac_wd_expired = false; abx500_chargalg_get_ext_psy_data()
1129 di->events.ac_wd_expired = true; abx500_chargalg_get_ext_psy_data()
1130 di->events.mainextchnotok = false; abx500_chargalg_get_ext_psy_data()
1131 di->events.main_ovv = false; abx500_chargalg_get_ext_psy_data()
1132 di->events.main_thermal_prot = false; abx500_chargalg_get_ext_psy_data()
1136 di->events.main_thermal_prot = true; abx500_chargalg_get_ext_psy_data()
1137 di->events.mainextchnotok = false; abx500_chargalg_get_ext_psy_data()
1138 di->events.main_ovv = false; abx500_chargalg_get_ext_psy_data()
1139 di->events.ac_wd_expired = false; abx500_chargalg_get_ext_psy_data()
1142 di->events.main_ovv = true; abx500_chargalg_get_ext_psy_data()
1143 di->events.mainextchnotok = false; abx500_chargalg_get_ext_psy_data()
1144 di->events.main_thermal_prot = false; abx500_chargalg_get_ext_psy_data()
1145 di->events.ac_wd_expired = false; abx500_chargalg_get_ext_psy_data()
1148 di->events.main_thermal_prot = false; abx500_chargalg_get_ext_psy_data()
1149 di->events.mainextchnotok = false; abx500_chargalg_get_ext_psy_data()
1150 di->events.main_ovv = false; abx500_chargalg_get_ext_psy_data()
1151 di->events.ac_wd_expired = false; abx500_chargalg_get_ext_psy_data()
1161 di->events.usbchargernotok = true; abx500_chargalg_get_ext_psy_data()
1162 di->events.usb_thermal_prot = false; abx500_chargalg_get_ext_psy_data()
1163 di->events.vbus_ovv = false; abx500_chargalg_get_ext_psy_data()
1164 di->events.usb_wd_expired = false; abx500_chargalg_get_ext_psy_data()
1167 di->events.usb_wd_expired = true; abx500_chargalg_get_ext_psy_data()
1168 di->events.usbchargernotok = false; abx500_chargalg_get_ext_psy_data()
1169 di->events.usb_thermal_prot = false; abx500_chargalg_get_ext_psy_data()
1170 di->events.vbus_ovv = false; abx500_chargalg_get_ext_psy_data()
1174 di->events.usb_thermal_prot = true; abx500_chargalg_get_ext_psy_data()
1175 di->events.usbchargernotok = false; abx500_chargalg_get_ext_psy_data()
1176 di->events.vbus_ovv = false; abx500_chargalg_get_ext_psy_data()
1177 di->events.usb_wd_expired = false; abx500_chargalg_get_ext_psy_data()
1180 di->events.vbus_ovv = true; abx500_chargalg_get_ext_psy_data()
1181 di->events.usbchargernotok = false; abx500_chargalg_get_ext_psy_data()
1182 di->events.usb_thermal_prot = false; abx500_chargalg_get_ext_psy_data()
1183 di->events.usb_wd_expired = false; abx500_chargalg_get_ext_psy_data()
1186 di->events.usbchargernotok = false; abx500_chargalg_get_ext_psy_data()
1187 di->events.usb_thermal_prot = false; abx500_chargalg_get_ext_psy_data()
1188 di->events.vbus_ovv = false; abx500_chargalg_get_ext_psy_data()
1189 di->events.usb_wd_expired = false; abx500_chargalg_get_ext_psy_data()
1202 di->batt_data.volt = ret.intval / 1000; abx500_chargalg_get_ext_psy_data()
1205 di->chg_info.ac_volt = ret.intval / 1000; abx500_chargalg_get_ext_psy_data()
1208 di->chg_info.usb_volt = ret.intval / 1000; abx500_chargalg_get_ext_psy_data()
1221 di->events.ac_cv_active = true; abx500_chargalg_get_ext_psy_data()
1223 di->events.ac_cv_active = false; abx500_chargalg_get_ext_psy_data()
1230 di->events.usb_cv_active = true; abx500_chargalg_get_ext_psy_data()
1232 di->events.usb_cv_active = false; abx500_chargalg_get_ext_psy_data()
1244 di->events.batt_unknown = false; abx500_chargalg_get_ext_psy_data()
1246 di->events.batt_unknown = true; abx500_chargalg_get_ext_psy_data()
1255 di->batt_data.temp = ret.intval / 10; abx500_chargalg_get_ext_psy_data()
1261 di->chg_info.ac_curr = abx500_chargalg_get_ext_psy_data()
1265 di->chg_info.usb_curr = abx500_chargalg_get_ext_psy_data()
1269 di->batt_data.inst_curr = ret.intval / 1000; abx500_chargalg_get_ext_psy_data()
1279 di->batt_data.avg_curr = ret.intval / 1000; abx500_chargalg_get_ext_psy_data()
1283 di->events.vbus_collapsed = true; abx500_chargalg_get_ext_psy_data()
1285 di->events.vbus_collapsed = false; abx500_chargalg_get_ext_psy_data()
1293 di->batt_data.percent = ret.intval; abx500_chargalg_get_ext_psy_data()
1313 struct abx500_chargalg *di = power_supply_get_drvdata(psy); abx500_chargalg_external_power_changed() local
1319 queue_work(di->chargalg_wq, &di->chargalg_work); abx500_chargalg_external_power_changed()
1324 * @di: pointer to the abx500_chargalg structure
1330 static void abx500_chargalg_algorithm(struct abx500_chargalg *di) abx500_chargalg_algorithm() argument
1338 di->chargalg_psy, abx500_chargalg_get_ext_psy_data); abx500_chargalg_algorithm()
1340 abx500_chargalg_end_of_charge(di); abx500_chargalg_algorithm()
1341 abx500_chargalg_check_temp(di); abx500_chargalg_algorithm()
1342 abx500_chargalg_check_charger_voltage(di); abx500_chargalg_algorithm()
1344 charger_status = abx500_chargalg_check_charger_connection(di); abx500_chargalg_algorithm()
1345 abx500_chargalg_check_current_step_status(di); abx500_chargalg_algorithm()
1347 if (is_ab8500(di->parent)) { abx500_chargalg_algorithm()
1348 ret = abx500_chargalg_check_charger_enable(di); abx500_chargalg_algorithm()
1350 dev_err(di->dev, "Checking charger is enabled error" abx500_chargalg_algorithm()
1360 (di->events.batt_unknown && !di->bm->chg_unknown_bat)) { abx500_chargalg_algorithm()
1361 if (di->charge_state != STATE_HANDHELD) { abx500_chargalg_algorithm()
1362 di->events.safety_timer_expired = false; abx500_chargalg_algorithm()
1363 abx500_chargalg_state_to(di, STATE_HANDHELD_INIT); abx500_chargalg_algorithm()
1368 else if (di->charge_state == STATE_SUSPENDED_INIT || abx500_chargalg_algorithm()
1369 di->charge_state == STATE_SUSPENDED) { abx500_chargalg_algorithm()
1374 else if (di->events.safety_timer_expired) { abx500_chargalg_algorithm()
1375 if (di->charge_state != STATE_SAFETY_TIMER_EXPIRED) abx500_chargalg_algorithm()
1376 abx500_chargalg_state_to(di, abx500_chargalg_algorithm()
1385 else if (di->events.batt_rem) { abx500_chargalg_algorithm()
1386 if (di->charge_state != STATE_BATT_REMOVED) abx500_chargalg_algorithm()
1387 abx500_chargalg_state_to(di, STATE_BATT_REMOVED_INIT); abx500_chargalg_algorithm()
1390 else if (di->events.mainextchnotok || di->events.usbchargernotok) { abx500_chargalg_algorithm()
1395 if (di->charge_state != STATE_CHG_NOT_OK && abx500_chargalg_algorithm()
1396 !di->events.vbus_collapsed) abx500_chargalg_algorithm()
1397 abx500_chargalg_state_to(di, STATE_CHG_NOT_OK_INIT); abx500_chargalg_algorithm()
1400 else if (di->events.vbus_ovv || abx500_chargalg_algorithm()
1401 di->events.main_ovv || abx500_chargalg_algorithm()
1402 di->events.batt_ovv || abx500_chargalg_algorithm()
1403 !di->chg_info.usb_chg_ok || abx500_chargalg_algorithm()
1404 !di->chg_info.ac_chg_ok) { abx500_chargalg_algorithm()
1405 if (di->charge_state != STATE_OVV_PROTECT) abx500_chargalg_algorithm()
1406 abx500_chargalg_state_to(di, STATE_OVV_PROTECT_INIT); abx500_chargalg_algorithm()
1409 else if (di->events.main_thermal_prot || abx500_chargalg_algorithm()
1410 di->events.usb_thermal_prot) { abx500_chargalg_algorithm()
1411 if (di->charge_state != STATE_HW_TEMP_PROTECT) abx500_chargalg_algorithm()
1412 abx500_chargalg_state_to(di, abx500_chargalg_algorithm()
1416 else if (di->events.btemp_underover) { abx500_chargalg_algorithm()
1417 if (di->charge_state != STATE_TEMP_UNDEROVER) abx500_chargalg_algorithm()
1418 abx500_chargalg_state_to(di, abx500_chargalg_algorithm()
1422 else if (di->events.ac_wd_expired || abx500_chargalg_algorithm()
1423 di->events.usb_wd_expired) { abx500_chargalg_algorithm()
1424 if (di->charge_state != STATE_WD_EXPIRED) abx500_chargalg_algorithm()
1425 abx500_chargalg_state_to(di, STATE_WD_EXPIRED_INIT); abx500_chargalg_algorithm()
1428 else if (di->events.btemp_lowhigh) { abx500_chargalg_algorithm()
1429 if (di->charge_state != STATE_TEMP_LOWHIGH) abx500_chargalg_algorithm()
1430 abx500_chargalg_state_to(di, STATE_TEMP_LOWHIGH_INIT); abx500_chargalg_algorithm()
1433 dev_dbg(di->dev, abx500_chargalg_algorithm()
1438 di->batt_data.volt, abx500_chargalg_algorithm()
1439 di->batt_data.avg_curr, abx500_chargalg_algorithm()
1440 di->batt_data.inst_curr, abx500_chargalg_algorithm()
1441 di->batt_data.temp, abx500_chargalg_algorithm()
1442 di->batt_data.percent, abx500_chargalg_algorithm()
1443 di->maintenance_chg, abx500_chargalg_algorithm()
1444 states[di->charge_state], abx500_chargalg_algorithm()
1445 di->chg_info.charger_type, abx500_chargalg_algorithm()
1446 di->charge_status, abx500_chargalg_algorithm()
1447 di->chg_info.conn_chg & AC_CHG, abx500_chargalg_algorithm()
1448 di->chg_info.conn_chg & USB_CHG, abx500_chargalg_algorithm()
1449 di->chg_info.online_chg & AC_CHG, abx500_chargalg_algorithm()
1450 di->chg_info.online_chg & USB_CHG, abx500_chargalg_algorithm()
1451 di->events.ac_cv_active, abx500_chargalg_algorithm()
1452 di->events.usb_cv_active, abx500_chargalg_algorithm()
1453 di->chg_info.ac_curr, abx500_chargalg_algorithm()
1454 di->chg_info.usb_curr, abx500_chargalg_algorithm()
1455 di->chg_info.ac_vset, abx500_chargalg_algorithm()
1456 di->chg_info.ac_iset, abx500_chargalg_algorithm()
1457 di->chg_info.usb_vset, abx500_chargalg_algorithm()
1458 di->chg_info.usb_iset); abx500_chargalg_algorithm()
1460 switch (di->charge_state) { abx500_chargalg_algorithm()
1462 abx500_chargalg_stop_charging(di); abx500_chargalg_algorithm()
1463 di->charge_status = POWER_SUPPLY_STATUS_DISCHARGING; abx500_chargalg_algorithm()
1464 abx500_chargalg_state_to(di, STATE_HANDHELD); abx500_chargalg_algorithm()
1471 if (di->susp_status.ac_suspended) abx500_chargalg_algorithm()
1472 abx500_chargalg_ac_en(di, false, 0, 0); abx500_chargalg_algorithm()
1473 if (di->susp_status.usb_suspended) abx500_chargalg_algorithm()
1474 abx500_chargalg_usb_en(di, false, 0, 0); abx500_chargalg_algorithm()
1475 abx500_chargalg_stop_safety_timer(di); abx500_chargalg_algorithm()
1476 abx500_chargalg_stop_maintenance_timer(di); abx500_chargalg_algorithm()
1477 di->charge_status = POWER_SUPPLY_STATUS_NOT_CHARGING; abx500_chargalg_algorithm()
1478 di->maintenance_chg = false; abx500_chargalg_algorithm()
1479 abx500_chargalg_state_to(di, STATE_SUSPENDED); abx500_chargalg_algorithm()
1480 power_supply_changed(di->chargalg_psy); abx500_chargalg_algorithm()
1488 abx500_chargalg_stop_charging(di); abx500_chargalg_algorithm()
1489 abx500_chargalg_state_to(di, STATE_BATT_REMOVED); abx500_chargalg_algorithm()
1493 if (!di->events.batt_rem) abx500_chargalg_algorithm()
1494 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1498 abx500_chargalg_stop_charging(di); abx500_chargalg_algorithm()
1499 abx500_chargalg_state_to(di, STATE_HW_TEMP_PROTECT); abx500_chargalg_algorithm()
1503 if (!di->events.main_thermal_prot && abx500_chargalg_algorithm()
1504 !di->events.usb_thermal_prot) abx500_chargalg_algorithm()
1505 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1509 abx500_chargalg_stop_charging(di); abx500_chargalg_algorithm()
1510 abx500_chargalg_state_to(di, STATE_OVV_PROTECT); abx500_chargalg_algorithm()
1514 if (!di->events.vbus_ovv && abx500_chargalg_algorithm()
1515 !di->events.main_ovv && abx500_chargalg_algorithm()
1516 !di->events.batt_ovv && abx500_chargalg_algorithm()
1517 di->chg_info.usb_chg_ok && abx500_chargalg_algorithm()
1518 di->chg_info.ac_chg_ok) abx500_chargalg_algorithm()
1519 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1523 abx500_chargalg_stop_charging(di); abx500_chargalg_algorithm()
1524 abx500_chargalg_state_to(di, STATE_CHG_NOT_OK); abx500_chargalg_algorithm()
1528 if (!di->events.mainextchnotok && abx500_chargalg_algorithm()
1529 !di->events.usbchargernotok) abx500_chargalg_algorithm()
1530 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1534 abx500_chargalg_stop_charging(di); abx500_chargalg_algorithm()
1535 abx500_chargalg_state_to(di, STATE_SAFETY_TIMER_EXPIRED); abx500_chargalg_algorithm()
1543 if ((di->chg_info.charger_type & USB_CHG) && abx500_chargalg_algorithm()
1544 di->usb_chg->power_path) { abx500_chargalg_algorithm()
1545 if (di->batt_data.volt > abx500_chargalg_algorithm()
1546 (di->bm->fg_params->lowbat_threshold + abx500_chargalg_algorithm()
1548 ab8540_chargalg_usb_pre_chg_en(di, false); abx500_chargalg_algorithm()
1549 ab8540_chargalg_usb_pp_en(di, false); abx500_chargalg_algorithm()
1551 ab8540_chargalg_usb_pp_en(di, true); abx500_chargalg_algorithm()
1552 ab8540_chargalg_usb_pre_chg_en(di, true); abx500_chargalg_algorithm()
1553 abx500_chargalg_state_to(di, abx500_chargalg_algorithm()
1559 if (di->curr_status.curr_step == CHARGALG_CURR_STEP_LOW) abx500_chargalg_algorithm()
1560 abx500_chargalg_stop_charging(di); abx500_chargalg_algorithm()
1562 curr_step_lvl = di->bm->bat_type[ abx500_chargalg_algorithm()
1563 di->bm->batt_id].normal_cur_lvl abx500_chargalg_algorithm()
1564 * di->curr_status.curr_step abx500_chargalg_algorithm()
1566 abx500_chargalg_start_charging(di, abx500_chargalg_algorithm()
1567 di->bm->bat_type[di->bm->batt_id] abx500_chargalg_algorithm()
1571 abx500_chargalg_state_to(di, STATE_NORMAL); abx500_chargalg_algorithm()
1572 abx500_chargalg_start_safety_timer(di); abx500_chargalg_algorithm()
1573 abx500_chargalg_stop_maintenance_timer(di); abx500_chargalg_algorithm()
1574 init_maxim_chg_curr(di); abx500_chargalg_algorithm()
1575 di->charge_status = POWER_SUPPLY_STATUS_CHARGING; abx500_chargalg_algorithm()
1576 di->eoc_cnt = 0; abx500_chargalg_algorithm()
1577 di->maintenance_chg = false; abx500_chargalg_algorithm()
1578 power_supply_changed(di->chargalg_psy); abx500_chargalg_algorithm()
1583 if (di->batt_data.volt > abx500_chargalg_algorithm()
1584 (di->bm->fg_params->lowbat_threshold + abx500_chargalg_algorithm()
1586 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1590 handle_maxim_chg_curr(di); abx500_chargalg_algorithm()
1591 if (di->charge_status == POWER_SUPPLY_STATUS_FULL && abx500_chargalg_algorithm()
1592 di->maintenance_chg) { abx500_chargalg_algorithm()
1593 if (di->bm->no_maintenance) abx500_chargalg_algorithm()
1594 abx500_chargalg_state_to(di, abx500_chargalg_algorithm()
1597 abx500_chargalg_state_to(di, abx500_chargalg_algorithm()
1604 abx500_chargalg_hold_charging(di); abx500_chargalg_algorithm()
1605 abx500_chargalg_state_to(di, STATE_WAIT_FOR_RECHARGE); abx500_chargalg_algorithm()
1609 if (di->batt_data.percent <= abx500_chargalg_algorithm()
1610 di->bm->bat_type[di->bm->batt_id]. abx500_chargalg_algorithm()
1612 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1616 abx500_chargalg_stop_safety_timer(di); abx500_chargalg_algorithm()
1617 abx500_chargalg_start_maintenance_timer(di, abx500_chargalg_algorithm()
1618 di->bm->bat_type[ abx500_chargalg_algorithm()
1619 di->bm->batt_id].maint_a_chg_timer_h); abx500_chargalg_algorithm()
1620 abx500_chargalg_start_charging(di, abx500_chargalg_algorithm()
1621 di->bm->bat_type[ abx500_chargalg_algorithm()
1622 di->bm->batt_id].maint_a_vol_lvl, abx500_chargalg_algorithm()
1623 di->bm->bat_type[ abx500_chargalg_algorithm()
1624 di->bm->batt_id].maint_a_cur_lvl); abx500_chargalg_algorithm()
1625 abx500_chargalg_state_to(di, STATE_MAINTENANCE_A); abx500_chargalg_algorithm()
1626 power_supply_changed(di->chargalg_psy); abx500_chargalg_algorithm()
1630 if (di->events.maintenance_timer_expired) { abx500_chargalg_algorithm()
1631 abx500_chargalg_stop_maintenance_timer(di); abx500_chargalg_algorithm()
1632 abx500_chargalg_state_to(di, STATE_MAINTENANCE_B_INIT); abx500_chargalg_algorithm()
1637 abx500_chargalg_start_maintenance_timer(di, abx500_chargalg_algorithm()
1638 di->bm->bat_type[ abx500_chargalg_algorithm()
1639 di->bm->batt_id].maint_b_chg_timer_h); abx500_chargalg_algorithm()
1640 abx500_chargalg_start_charging(di, abx500_chargalg_algorithm()
1641 di->bm->bat_type[ abx500_chargalg_algorithm()
1642 di->bm->batt_id].maint_b_vol_lvl, abx500_chargalg_algorithm()
1643 di->bm->bat_type[ abx500_chargalg_algorithm()
1644 di->bm->batt_id].maint_b_cur_lvl); abx500_chargalg_algorithm()
1645 abx500_chargalg_state_to(di, STATE_MAINTENANCE_B); abx500_chargalg_algorithm()
1646 power_supply_changed(di->chargalg_psy); abx500_chargalg_algorithm()
1650 if (di->events.maintenance_timer_expired) { abx500_chargalg_algorithm()
1651 abx500_chargalg_stop_maintenance_timer(di); abx500_chargalg_algorithm()
1652 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1657 abx500_chargalg_start_charging(di, abx500_chargalg_algorithm()
1658 di->bm->bat_type[ abx500_chargalg_algorithm()
1659 di->bm->batt_id].low_high_vol_lvl, abx500_chargalg_algorithm()
1660 di->bm->bat_type[ abx500_chargalg_algorithm()
1661 di->bm->batt_id].low_high_cur_lvl); abx500_chargalg_algorithm()
1662 abx500_chargalg_stop_maintenance_timer(di); abx500_chargalg_algorithm()
1663 di->charge_status = POWER_SUPPLY_STATUS_CHARGING; abx500_chargalg_algorithm()
1664 abx500_chargalg_state_to(di, STATE_TEMP_LOWHIGH); abx500_chargalg_algorithm()
1665 power_supply_changed(di->chargalg_psy); abx500_chargalg_algorithm()
1669 if (!di->events.btemp_lowhigh) abx500_chargalg_algorithm()
1670 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1674 abx500_chargalg_stop_charging(di); abx500_chargalg_algorithm()
1675 abx500_chargalg_state_to(di, STATE_WD_EXPIRED); abx500_chargalg_algorithm()
1679 if (!di->events.ac_wd_expired && abx500_chargalg_algorithm()
1680 !di->events.usb_wd_expired) abx500_chargalg_algorithm()
1681 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1685 abx500_chargalg_stop_charging(di); abx500_chargalg_algorithm()
1686 abx500_chargalg_state_to(di, STATE_TEMP_UNDEROVER); abx500_chargalg_algorithm()
1690 if (!di->events.btemp_underover) abx500_chargalg_algorithm()
1691 abx500_chargalg_state_to(di, STATE_NORMAL_INIT); abx500_chargalg_algorithm()
1696 if (di->charge_state == STATE_NORMAL_INIT || abx500_chargalg_algorithm()
1697 di->charge_state == STATE_MAINTENANCE_A_INIT || abx500_chargalg_algorithm()
1698 di->charge_state == STATE_MAINTENANCE_B_INIT) abx500_chargalg_algorithm()
1699 queue_work(di->chargalg_wq, &di->chargalg_work); abx500_chargalg_algorithm()
1710 struct abx500_chargalg *di = container_of(work, abx500_chargalg_periodic_work() local
1713 abx500_chargalg_algorithm(di); abx500_chargalg_periodic_work()
1719 if (di->chg_info.conn_chg) abx500_chargalg_periodic_work()
1720 queue_delayed_work(di->chargalg_wq, abx500_chargalg_periodic_work()
1721 &di->chargalg_periodic_work, abx500_chargalg_periodic_work()
1722 di->bm->interval_charging * HZ); abx500_chargalg_periodic_work()
1724 queue_delayed_work(di->chargalg_wq, abx500_chargalg_periodic_work()
1725 &di->chargalg_periodic_work, abx500_chargalg_periodic_work()
1726 di->bm->interval_not_charging * HZ); abx500_chargalg_periodic_work()
1738 struct abx500_chargalg *di = container_of(work, abx500_chargalg_wd_work() local
1741 dev_dbg(di->dev, "abx500_chargalg_wd_work\n"); abx500_chargalg_wd_work()
1743 ret = abx500_chargalg_kick_watchdog(di); abx500_chargalg_wd_work()
1745 dev_err(di->dev, "failed to kick watchdog\n"); abx500_chargalg_wd_work()
1747 queue_delayed_work(di->chargalg_wq, abx500_chargalg_wd_work()
1748 &di->chargalg_wd_work, CHG_WD_INTERVAL); abx500_chargalg_wd_work()
1759 struct abx500_chargalg *di = container_of(work, abx500_chargalg_work() local
1762 abx500_chargalg_algorithm(di); abx500_chargalg_work()
1781 struct abx500_chargalg *di = power_supply_get_drvdata(psy); abx500_chargalg_get_property() local
1785 val->intval = di->charge_status; abx500_chargalg_get_property()
1788 if (di->events.batt_ovv) { abx500_chargalg_get_property()
1790 } else if (di->events.btemp_underover) { abx500_chargalg_get_property()
1791 if (di->batt_data.temp <= di->bm->temp_under) abx500_chargalg_get_property()
1795 } else if (di->charge_state == STATE_SAFETY_TIMER_EXPIRED || abx500_chargalg_get_property()
1796 di->charge_state == STATE_SAFETY_TIMER_EXPIRED_INIT) { abx500_chargalg_get_property()
1810 static ssize_t abx500_chargalg_curr_step_show(struct abx500_chargalg *di, abx500_chargalg_curr_step_show() argument
1813 return sprintf(buf, "%d\n", di->curr_status.curr_step); abx500_chargalg_curr_step_show()
1816 static ssize_t abx500_chargalg_curr_step_store(struct abx500_chargalg *di, abx500_chargalg_curr_step_store() argument
1826 di->curr_status.curr_step = param; abx500_chargalg_curr_step_store()
1827 if (di->curr_status.curr_step >= CHARGALG_CURR_STEP_LOW && abx500_chargalg_curr_step_store()
1828 di->curr_status.curr_step <= CHARGALG_CURR_STEP_HIGH) { abx500_chargalg_curr_step_store()
1829 di->curr_status.curr_step_change = true; abx500_chargalg_curr_step_store()
1830 queue_work(di->chargalg_wq, &di->chargalg_work); abx500_chargalg_curr_step_store()
1832 dev_info(di->dev, "Wrong current step\n" abx500_chargalg_curr_step_store()
1841 static ssize_t abx500_chargalg_en_show(struct abx500_chargalg *di, abx500_chargalg_en_show() argument
1845 di->susp_status.ac_suspended && abx500_chargalg_en_show()
1846 di->susp_status.usb_suspended); abx500_chargalg_en_show()
1849 static ssize_t abx500_chargalg_en_store(struct abx500_chargalg *di, abx500_chargalg_en_store() argument
1864 di->susp_status.ac_suspended = true; abx500_chargalg_en_store()
1865 di->susp_status.usb_suspended = true; abx500_chargalg_en_store()
1866 di->susp_status.suspended_change = true; abx500_chargalg_en_store()
1868 queue_work(di->chargalg_wq, abx500_chargalg_en_store()
1869 &di->chargalg_work); abx500_chargalg_en_store()
1873 di->susp_status.ac_suspended = false; abx500_chargalg_en_store()
1874 di->susp_status.suspended_change = true; abx500_chargalg_en_store()
1876 queue_work(di->chargalg_wq, abx500_chargalg_en_store()
1877 &di->chargalg_work); abx500_chargalg_en_store()
1881 di->susp_status.usb_suspended = false; abx500_chargalg_en_store()
1882 di->susp_status.suspended_change = true; abx500_chargalg_en_store()
1884 queue_work(di->chargalg_wq, abx500_chargalg_en_store()
1885 &di->chargalg_work); abx500_chargalg_en_store()
1888 dev_info(di->dev, "Wrong input\n" abx500_chargalg_en_store()
1910 struct abx500_chargalg *di = container_of(kobj, abx500_chargalg_sysfs_show() local
1916 return entry->show(di, buf); abx500_chargalg_sysfs_show()
1925 struct abx500_chargalg *di = container_of(kobj, abx500_chargalg_sysfs_charger() local
1931 return entry->store(di, buf, length); abx500_chargalg_sysfs_charger()
1952 * @di: pointer to the struct abx500_chargalg
1956 static void abx500_chargalg_sysfs_exit(struct abx500_chargalg *di) abx500_chargalg_sysfs_exit() argument
1958 kobject_del(&di->chargalg_kobject); abx500_chargalg_sysfs_exit()
1963 * @di: pointer to the struct abx500_chargalg
1968 static int abx500_chargalg_sysfs_init(struct abx500_chargalg *di) abx500_chargalg_sysfs_init() argument
1972 ret = kobject_init_and_add(&di->chargalg_kobject, abx500_chargalg_sysfs_init()
1976 dev_err(di->dev, "failed to create sysfs entry\n"); abx500_chargalg_sysfs_init()
1985 struct abx500_chargalg *di = platform_get_drvdata(pdev); abx500_chargalg_resume() local
1988 if (di->chg_info.online_chg) abx500_chargalg_resume()
1989 queue_delayed_work(di->chargalg_wq, &di->chargalg_wd_work, 0); abx500_chargalg_resume()
1995 queue_delayed_work(di->chargalg_wq, &di->chargalg_periodic_work, 0); abx500_chargalg_resume()
2003 struct abx500_chargalg *di = platform_get_drvdata(pdev); abx500_chargalg_suspend() local
2005 if (di->chg_info.online_chg) abx500_chargalg_suspend()
2006 cancel_delayed_work_sync(&di->chargalg_wd_work); abx500_chargalg_suspend()
2008 cancel_delayed_work_sync(&di->chargalg_periodic_work); abx500_chargalg_suspend()
2019 struct abx500_chargalg *di = platform_get_drvdata(pdev); abx500_chargalg_remove() local
2022 abx500_chargalg_sysfs_exit(di); abx500_chargalg_remove()
2024 hrtimer_cancel(&di->safety_timer); abx500_chargalg_remove()
2025 hrtimer_cancel(&di->maintenance_timer); abx500_chargalg_remove()
2027 cancel_delayed_work_sync(&di->chargalg_periodic_work); abx500_chargalg_remove()
2028 cancel_delayed_work_sync(&di->chargalg_wd_work); abx500_chargalg_remove()
2029 cancel_work_sync(&di->chargalg_work); abx500_chargalg_remove()
2032 destroy_workqueue(di->chargalg_wq); abx500_chargalg_remove()
2034 power_supply_unregister(di->chargalg_psy); abx500_chargalg_remove()
2057 struct abx500_chargalg *di; abx500_chargalg_probe() local
2060 di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL); abx500_chargalg_probe()
2061 if (!di) { abx500_chargalg_probe()
2070 di->bm = plat; abx500_chargalg_probe()
2073 ret = ab8500_bm_of_probe(&pdev->dev, np, di->bm); abx500_chargalg_probe()
2081 di->dev = &pdev->dev; abx500_chargalg_probe()
2082 di->parent = dev_get_drvdata(pdev->dev.parent); abx500_chargalg_probe()
2086 psy_cfg.drv_data = di; abx500_chargalg_probe()
2089 hrtimer_init(&di->safety_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS); abx500_chargalg_probe()
2090 di->safety_timer.function = abx500_chargalg_safety_timer_expired; abx500_chargalg_probe()
2093 hrtimer_init(&di->maintenance_timer, CLOCK_REALTIME, HRTIMER_MODE_ABS); abx500_chargalg_probe()
2094 di->maintenance_timer.function = abx500_chargalg_probe()
2098 di->chargalg_wq = abx500_chargalg_probe()
2100 if (di->chargalg_wq == NULL) { abx500_chargalg_probe()
2101 dev_err(di->dev, "failed to create work queue\n"); abx500_chargalg_probe()
2106 INIT_DEFERRABLE_WORK(&di->chargalg_periodic_work, abx500_chargalg_probe()
2108 INIT_DEFERRABLE_WORK(&di->chargalg_wd_work, abx500_chargalg_probe()
2112 INIT_WORK(&di->chargalg_work, abx500_chargalg_work); abx500_chargalg_probe()
2115 di->chg_info.prev_conn_chg = -1; abx500_chargalg_probe()
2118 di->chargalg_psy = power_supply_register(di->dev, &abx500_chargalg_desc, abx500_chargalg_probe()
2120 if (IS_ERR(di->chargalg_psy)) { abx500_chargalg_probe()
2121 dev_err(di->dev, "failed to register chargalg psy\n"); abx500_chargalg_probe()
2122 ret = PTR_ERR(di->chargalg_psy); abx500_chargalg_probe()
2126 platform_set_drvdata(pdev, di); abx500_chargalg_probe()
2129 ret = abx500_chargalg_sysfs_init(di); abx500_chargalg_probe()
2131 dev_err(di->dev, "failed to create sysfs entry\n"); abx500_chargalg_probe()
2134 di->curr_status.curr_step = CHARGALG_CURR_STEP_HIGH; abx500_chargalg_probe()
2137 queue_delayed_work(di->chargalg_wq, &di->chargalg_periodic_work, 0); abx500_chargalg_probe()
2139 dev_info(di->dev, "probe success\n"); abx500_chargalg_probe()
2143 power_supply_unregister(di->chargalg_psy); abx500_chargalg_probe()
2145 destroy_workqueue(di->chargalg_wq); abx500_chargalg_probe()
425 abx500_chargalg_check_current_step_status(struct abx500_chargalg *di) abx500_chargalg_check_current_step_status() argument
H A Dab8500_charger.c344 static void ab8500_enable_disable_sw_fallback(struct ab8500_charger *di, ab8500_enable_disable_sw_fallback() argument
353 dev_dbg(di->dev, "SW Fallback: %d\n", fallback); ab8500_enable_disable_sw_fallback()
355 if (is_ab8500(di->parent)) { ab8500_enable_disable_sw_fallback()
366 ret = abx500_get_register_interruptible(di->dev, bank, reg, &val); ab8500_enable_disable_sw_fallback()
368 dev_err(di->dev, "%d read failed\n", __LINE__); ab8500_enable_disable_sw_fallback()
372 if (is_ab8500(di->parent)) { ab8500_enable_disable_sw_fallback()
374 ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x2); ab8500_enable_disable_sw_fallback()
376 dev_err(di->dev, "%d write failed\n", __LINE__); ab8500_enable_disable_sw_fallback()
387 ret = abx500_set_register_interruptible(di->dev, bank, reg, val); ab8500_enable_disable_sw_fallback()
389 dev_err(di->dev, "%d write failed\n", __LINE__); ab8500_enable_disable_sw_fallback()
393 if (is_ab8500(di->parent)) { ab8500_enable_disable_sw_fallback()
395 ret = abx500_set_register_interruptible(di->dev, 0x11, 0x00, 0x0); ab8500_enable_disable_sw_fallback()
397 dev_err(di->dev, "%d write failed\n", __LINE__); ab8500_enable_disable_sw_fallback()
405 * @di: pointer to the ab8500_charger structure
409 static void ab8500_power_supply_changed(struct ab8500_charger *di, ab8500_power_supply_changed() argument
412 if (di->autopower_cfg) { ab8500_power_supply_changed()
413 if (!di->usb.charger_connected && ab8500_power_supply_changed()
414 !di->ac.charger_connected && ab8500_power_supply_changed()
415 di->autopower) { ab8500_power_supply_changed()
416 di->autopower = false; ab8500_power_supply_changed()
417 ab8500_enable_disable_sw_fallback(di, false); ab8500_power_supply_changed()
418 } else if (!di->autopower && ab8500_power_supply_changed()
419 (di->ac.charger_connected || ab8500_power_supply_changed()
420 di->usb.charger_connected)) { ab8500_power_supply_changed()
421 di->autopower = true; ab8500_power_supply_changed()
422 ab8500_enable_disable_sw_fallback(di, true); ab8500_power_supply_changed()
428 static void ab8500_charger_set_usb_connected(struct ab8500_charger *di, ab8500_charger_set_usb_connected() argument
431 if (connected != di->usb.charger_connected) { ab8500_charger_set_usb_connected()
432 dev_dbg(di->dev, "USB connected:%i\n", connected); ab8500_charger_set_usb_connected()
433 di->usb.charger_connected = connected; ab8500_charger_set_usb_connected()
436 di->flags.vbus_drop_end = false; ab8500_charger_set_usb_connected()
438 sysfs_notify(&di->usb_chg.psy->dev.kobj, NULL, "present"); ab8500_charger_set_usb_connected()
441 mutex_lock(&di->charger_attached_mutex); ab8500_charger_set_usb_connected()
442 mutex_unlock(&di->charger_attached_mutex); ab8500_charger_set_usb_connected()
444 if (is_ab8500(di->parent)) ab8500_charger_set_usb_connected()
445 queue_delayed_work(di->charger_wq, ab8500_charger_set_usb_connected()
446 &di->usb_charger_attached_work, ab8500_charger_set_usb_connected()
449 cancel_delayed_work_sync(&di->usb_charger_attached_work); ab8500_charger_set_usb_connected()
450 mutex_lock(&di->charger_attached_mutex); ab8500_charger_set_usb_connected()
451 mutex_unlock(&di->charger_attached_mutex); ab8500_charger_set_usb_connected()
458 * @di: pointer to the ab8500_charger structure
462 static int ab8500_charger_get_ac_voltage(struct ab8500_charger *di) ab8500_charger_get_ac_voltage() argument
467 if (di->ac.charger_connected) { ab8500_charger_get_ac_voltage()
468 vch = ab8500_gpadc_convert(di->gpadc, MAIN_CHARGER_V); ab8500_charger_get_ac_voltage()
470 dev_err(di->dev, "%s gpadc conv failed,\n", __func__); ab8500_charger_get_ac_voltage()
479 * @di: pointer to the ab8500_charger structure
483 static int ab8500_charger_ac_cv(struct ab8500_charger *di) ab8500_charger_ac_cv() argument
489 if (di->ac.charger_online) { ab8500_charger_ac_cv()
490 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_ac_cv()
493 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_ac_cv()
508 * @di: pointer to the ab8500_charger structure
513 static int ab8500_charger_get_vbus_voltage(struct ab8500_charger *di) ab8500_charger_get_vbus_voltage() argument
518 if (di->usb.charger_connected) { ab8500_charger_get_vbus_voltage()
519 vch = ab8500_gpadc_convert(di->gpadc, VBUS_V); ab8500_charger_get_vbus_voltage()
521 dev_err(di->dev, "%s gpadc conv failed\n", __func__); ab8500_charger_get_vbus_voltage()
530 * @di: pointer to the ab8500_charger structure
535 static int ab8500_charger_get_usb_current(struct ab8500_charger *di) ab8500_charger_get_usb_current() argument
540 if (di->usb.charger_online) { ab8500_charger_get_usb_current()
541 ich = ab8500_gpadc_convert(di->gpadc, USB_CHARGER_C); ab8500_charger_get_usb_current()
543 dev_err(di->dev, "%s gpadc conv failed\n", __func__); ab8500_charger_get_usb_current()
552 * @di: pointer to the ab8500_charger structure
557 static int ab8500_charger_get_ac_current(struct ab8500_charger *di) ab8500_charger_get_ac_current() argument
562 if (di->ac.charger_online) { ab8500_charger_get_ac_current()
563 ich = ab8500_gpadc_convert(di->gpadc, MAIN_CHARGER_C); ab8500_charger_get_ac_current()
565 dev_err(di->dev, "%s gpadc conv failed\n", __func__); ab8500_charger_get_ac_current()
574 * @di: pointer to the ab8500_charger structure
578 static int ab8500_charger_usb_cv(struct ab8500_charger *di) ab8500_charger_usb_cv() argument
584 if (di->usb.charger_online) { ab8500_charger_usb_cv()
585 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_usb_cv()
588 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_usb_cv()
605 * @di: pointer to the ab8500_charger structure
620 static int ab8500_charger_detect_chargers(struct ab8500_charger *di, bool probe) ab8500_charger_detect_chargers() argument
627 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_detect_chargers()
630 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_detect_chargers()
648 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_detect_chargers()
651 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_detect_chargers()
654 dev_dbg(di->dev, ab8500_charger_detect_chargers()
665 * @di: pointer to the ab8500_charger structure
672 static int ab8500_charger_max_usb_curr(struct ab8500_charger *di, ab8500_charger_max_usb_curr() argument
677 di->usb_device_is_unrecognised = false; ab8500_charger_max_usb_curr()
690 dev_dbg(di->dev, "USB Type - Standard host is " ab8500_charger_max_usb_curr()
692 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; ab8500_charger_max_usb_curr()
693 di->is_aca_rid = 0; ab8500_charger_max_usb_curr()
696 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; ab8500_charger_max_usb_curr()
697 di->is_aca_rid = 0; ab8500_charger_max_usb_curr()
700 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; ab8500_charger_max_usb_curr()
701 di->is_aca_rid = 0; ab8500_charger_max_usb_curr()
704 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P9; ab8500_charger_max_usb_curr()
705 di->is_aca_rid = 0; ab8500_charger_max_usb_curr()
712 dev_dbg(di->dev, "USB_STAT_ACA_RID_A detected\n"); ab8500_charger_max_usb_curr()
713 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; ab8500_charger_max_usb_curr()
714 di->is_aca_rid = 1; ab8500_charger_max_usb_curr()
721 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_1P3; ab8500_charger_max_usb_curr()
722 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status, ab8500_charger_max_usb_curr()
723 di->max_usb_in_curr.usb_type_max); ab8500_charger_max_usb_curr()
724 di->is_aca_rid = 1; ab8500_charger_max_usb_curr()
727 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; ab8500_charger_max_usb_curr()
728 di->is_aca_rid = 0; ab8500_charger_max_usb_curr()
731 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_1P5; ab8500_charger_max_usb_curr()
732 di->is_aca_rid = 0; ab8500_charger_max_usb_curr()
736 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_1P5; ab8500_charger_max_usb_curr()
737 di->is_aca_rid = 1; ab8500_charger_max_usb_curr()
740 if (di->vbus_detected) { ab8500_charger_max_usb_curr()
741 di->usb_device_is_unrecognised = true; ab8500_charger_max_usb_curr()
742 dev_dbg(di->dev, "USB Type - Legacy charger.\n"); ab8500_charger_max_usb_curr()
743 di->max_usb_in_curr.usb_type_max = ab8500_charger_max_usb_curr()
748 dev_err(di->dev, "USB Type - Charging not allowed\n"); ab8500_charger_max_usb_curr()
749 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P05; ab8500_charger_max_usb_curr()
753 if (is_ab8500(di->parent)) { ab8500_charger_max_usb_curr()
754 di->flags.vbus_collapse = true; ab8500_charger_max_usb_curr()
755 dev_err(di->dev, "USB Type - USB_STAT_RESERVED " ab8500_charger_max_usb_curr()
760 dev_dbg(di->dev, "USB Type - Charging not allowed\n"); ab8500_charger_max_usb_curr()
761 di->max_usb_in_curr.usb_type_max = ab8500_charger_max_usb_curr()
763 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", ab8500_charger_max_usb_curr()
765 di->max_usb_in_curr.usb_type_max); ab8500_charger_max_usb_curr()
773 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; ab8500_charger_max_usb_curr()
774 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", link_status, ab8500_charger_max_usb_curr()
775 di->max_usb_in_curr.usb_type_max); ab8500_charger_max_usb_curr()
778 dev_err(di->dev, "USB Type invalid - try charging anyway\n"); ab8500_charger_max_usb_curr()
779 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; ab8500_charger_max_usb_curr()
783 dev_err(di->dev, "USB Type - Unknown\n"); ab8500_charger_max_usb_curr()
784 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P05; ab8500_charger_max_usb_curr()
789 di->max_usb_in_curr.set_max = di->max_usb_in_curr.usb_type_max; ab8500_charger_max_usb_curr()
790 dev_dbg(di->dev, "USB Type - 0x%02x MaxCurr: %d", ab8500_charger_max_usb_curr()
791 link_status, di->max_usb_in_curr.set_max); ab8500_charger_max_usb_curr()
798 * @di: pointer to the ab8500_charger structure
803 static int ab8500_charger_read_usb_type(struct ab8500_charger *di) ab8500_charger_read_usb_type() argument
808 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_read_usb_type()
811 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_read_usb_type()
814 if (is_ab8500(di->parent)) ab8500_charger_read_usb_type()
815 ret = abx500_get_register_interruptible(di->dev, AB8500_USB, ab8500_charger_read_usb_type()
818 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_read_usb_type()
821 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_read_usb_type()
826 if (is_ab8500(di->parent)) ab8500_charger_read_usb_type()
830 ret = ab8500_charger_max_usb_curr(di, ab8500_charger_read_usb_type()
838 * @di: pointer to the ab8500_charger structure
843 static int ab8500_charger_detect_usb_type(struct ab8500_charger *di) ab8500_charger_detect_usb_type() argument
855 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_detect_usb_type()
858 dev_dbg(di->dev, "%s AB8500_IT_SOURCE21_REG %x\n", ab8500_charger_detect_usb_type()
861 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_detect_usb_type()
865 if (is_ab8500(di->parent)) ab8500_charger_detect_usb_type()
866 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_detect_usb_type()
869 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_detect_usb_type()
872 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_detect_usb_type()
875 dev_dbg(di->dev, "%s AB8500_USB_LINE_STAT_REG %x\n", __func__, ab8500_charger_detect_usb_type()
884 if (is_ab8500(di->parent)) ab8500_charger_detect_usb_type()
893 ret = ab8500_charger_max_usb_curr(di, ab8500_charger_detect_usb_type()
1005 static int ab8500_current_to_regval(struct ab8500_charger *di, int curr) ab8500_current_to_regval() argument
1009 if (curr < di->bm->chg_output_curr[0]) ab8500_current_to_regval()
1012 for (i = 0; i < di->bm->n_chg_out_curr; i++) { ab8500_current_to_regval()
1013 if (curr < di->bm->chg_output_curr[i]) ab8500_current_to_regval()
1018 i = di->bm->n_chg_out_curr - 1; ab8500_current_to_regval()
1019 if (curr == di->bm->chg_output_curr[i]) ab8500_current_to_regval()
1025 static int ab8500_vbus_in_curr_to_regval(struct ab8500_charger *di, int curr) ab8500_vbus_in_curr_to_regval() argument
1029 if (curr < di->bm->chg_input_curr[0]) ab8500_vbus_in_curr_to_regval()
1032 for (i = 0; i < di->bm->n_chg_in_curr; i++) { ab8500_vbus_in_curr_to_regval()
1033 if (curr < di->bm->chg_input_curr[i]) ab8500_vbus_in_curr_to_regval()
1038 i = di->bm->n_chg_in_curr - 1; ab8500_vbus_in_curr_to_regval()
1039 if (curr == di->bm->chg_input_curr[i]) ab8500_vbus_in_curr_to_regval()
1047 * @di: pointer to the ab8500_charger structre
1054 static int ab8500_charger_get_usb_cur(struct ab8500_charger *di) ab8500_charger_get_usb_cur() argument
1057 switch (di->usb_state.usb_current) { ab8500_charger_get_usb_cur()
1059 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P09; ab8500_charger_get_usb_cur()
1062 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P19; ab8500_charger_get_usb_cur()
1065 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P29; ab8500_charger_get_usb_cur()
1068 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P38; ab8500_charger_get_usb_cur()
1071 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P5; ab8500_charger_get_usb_cur()
1074 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P05; ab8500_charger_get_usb_cur()
1078 di->max_usb_in_curr.set_max = di->max_usb_in_curr.usb_type_max; ab8500_charger_get_usb_cur()
1084 * @di: pointer to the ab8500_charger structure
1091 static bool ab8500_charger_check_continue_stepping(struct ab8500_charger *di, ab8500_charger_check_continue_stepping() argument
1095 return !di->flags.vbus_drop_end; ab8500_charger_check_continue_stepping()
1102 * @di: pointer to the ab8500_charger structure
1113 static int ab8500_charger_set_current(struct ab8500_charger *di, ab8500_charger_set_current() argument
1122 atomic_inc(&di->current_stepping_sessions); ab8500_charger_set_current()
1124 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_set_current()
1127 dev_err(di->dev, "%s read failed\n", __func__); ab8500_charger_set_current()
1135 curr_index = ab8500_current_to_regval(di, ich); ab8500_charger_set_current()
1137 if (!di->ac.charger_connected) ab8500_charger_set_current()
1141 if (is_ab8540(di->parent)) ab8500_charger_set_current()
1146 curr_index = ab8500_vbus_in_curr_to_regval(di, ich); ab8500_charger_set_current()
1149 if (!di->usb.charger_connected) ab8500_charger_set_current()
1155 curr_index = ab8500_current_to_regval(di, ich); ab8500_charger_set_current()
1160 if (!di->usb.charger_connected && !di->ac.charger_connected) ab8500_charger_set_current()
1165 dev_err(di->dev, "%s current register not valid\n", __func__); ab8500_charger_set_current()
1171 dev_err(di->dev, "requested current limit out-of-range\n"); ab8500_charger_set_current()
1178 dev_dbg(di->dev, "%s current not changed for reg: 0x%02x\n", ab8500_charger_set_current()
1184 dev_dbg(di->dev, "%s set charger current: %d mA for reg: 0x%02x\n", ab8500_charger_set_current()
1188 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_set_current()
1191 dev_err(di->dev, "%s write failed\n", __func__); ab8500_charger_set_current()
1194 dev_dbg(di->dev, "curr change_1 to: %x for 0x%02x\n", ab8500_charger_set_current()
1196 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_set_current()
1199 dev_err(di->dev, "%s write failed\n", __func__); ab8500_charger_set_current()
1208 dev_dbg(di->dev, "curr change_2 to: %x for 0x%02x\n", ab8500_charger_set_current()
1210 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_set_current()
1213 dev_err(di->dev, "%s write failed\n", __func__); ab8500_charger_set_current()
1219 allow = ab8500_charger_check_continue_stepping(di, reg); ab8500_charger_set_current()
1224 atomic_dec(&di->current_stepping_sessions); ab8500_charger_set_current()
1231 * @di: pointer to the ab8500_charger structure
1237 static int ab8500_charger_set_vbus_in_curr(struct ab8500_charger *di, ab8500_charger_set_vbus_in_curr() argument
1244 min_value = min(di->bm->chg_params->usb_curr_max, ich_in); ab8500_charger_set_vbus_in_curr()
1245 if (di->max_usb_in_curr.set_max > 0) ab8500_charger_set_vbus_in_curr()
1246 min_value = min(di->max_usb_in_curr.set_max, min_value); ab8500_charger_set_vbus_in_curr()
1248 if (di->usb_state.usb_current >= 0) ab8500_charger_set_vbus_in_curr()
1249 min_value = min(di->usb_state.usb_current, min_value); ab8500_charger_set_vbus_in_curr()
1253 if (di->vbat < VBAT_TRESH_IP_CUR_RED) ab8500_charger_set_vbus_in_curr()
1257 if (di->vbat < VBAT_TRESH_IP_CUR_RED) ab8500_charger_set_vbus_in_curr()
1264 dev_info(di->dev, "VBUS input current limit set to %d mA\n", min_value); ab8500_charger_set_vbus_in_curr()
1266 mutex_lock(&di->usb_ipt_crnt_lock); ab8500_charger_set_vbus_in_curr()
1267 ret = ab8500_charger_set_current(di, min_value, ab8500_charger_set_vbus_in_curr()
1269 mutex_unlock(&di->usb_ipt_crnt_lock); ab8500_charger_set_vbus_in_curr()
1276 * @di: pointer to the ab8500_charger structure
1282 static int ab8500_charger_set_main_in_curr(struct ab8500_charger *di, ab8500_charger_set_main_in_curr() argument
1285 return ab8500_charger_set_current(di, ich_in, ab8500_charger_set_main_in_curr()
1291 * @di: pointer to the ab8500_charger structure
1297 static int ab8500_charger_set_output_curr(struct ab8500_charger *di, ab8500_charger_set_output_curr() argument
1300 return ab8500_charger_set_current(di, ich_out, ab8500_charger_set_output_curr()
1306 * @di: pointer to the ab8500_charger structure
1312 static int ab8500_charger_led_en(struct ab8500_charger *di, int on) ab8500_charger_led_en() argument
1318 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_led_en()
1322 dev_err(di->dev, "Power ON LED failed\n"); ab8500_charger_led_en()
1326 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_led_en()
1330 dev_err(di->dev, "Set LED PWM duty cycle failed\n"); ab8500_charger_led_en()
1335 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_led_en()
1339 dev_err(di->dev, "Power-off LED failed\n"); ab8500_charger_led_en()
1349 * @di: pointer to the ab8500_charger structure
1366 struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger); ab8500_charger_ac_en() local
1370 if (!di->ac.charger_connected) { ab8500_charger_ac_en()
1371 dev_err(di->dev, "AC charger not connected\n"); ab8500_charger_ac_en()
1376 dev_dbg(di->dev, "Enable AC: %dmV %dmA\n", vset, iset); ab8500_charger_ac_en()
1388 if (!di->vddadc_en_ac) { ab8500_charger_ac_en()
1389 ret = regulator_enable(di->regu); ab8500_charger_ac_en()
1391 dev_warn(di->dev, ab8500_charger_ac_en()
1394 di->vddadc_en_ac = true; ab8500_charger_ac_en()
1399 curr_index = ab8500_current_to_regval(di, iset); ab8500_charger_ac_en()
1400 input_curr_index = ab8500_current_to_regval(di, ab8500_charger_ac_en()
1401 di->bm->chg_params->ac_curr_max); ab8500_charger_ac_en()
1403 dev_err(di->dev, ab8500_charger_ac_en()
1410 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_ac_en()
1413 dev_err(di->dev, "%s write failed\n", __func__); ab8500_charger_ac_en()
1417 ret = ab8500_charger_set_main_in_curr(di, ab8500_charger_ac_en()
1418 di->bm->chg_params->ac_curr_max); ab8500_charger_ac_en()
1420 dev_err(di->dev, "%s Failed to set MainChInputCurr\n", ab8500_charger_ac_en()
1425 ret = ab8500_charger_set_output_curr(di, iset); ab8500_charger_ac_en()
1427 dev_err(di->dev, "%s " ab8500_charger_ac_en()
1434 if (!di->bm->enable_overshoot) ab8500_charger_ac_en()
1438 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_ac_en()
1441 dev_err(di->dev, "%s write failed\n", __func__); ab8500_charger_ac_en()
1446 ret = ab8500_charger_led_en(di, true); ab8500_charger_ac_en()
1448 dev_err(di->dev, "failed to enable LED\n"); ab8500_charger_ac_en()
1450 di->ac.charger_online = 1; ab8500_charger_ac_en()
1453 if (is_ab8500_1p1_or_earlier(di->parent)) { ab8500_charger_ac_en()
1464 if (di->ac_conn) { ab8500_charger_ac_en()
1465 queue_delayed_work(di->charger_wq, ab8500_charger_ac_en()
1466 &di->kick_wd_work, ab8500_charger_ac_en()
1477 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_ac_en()
1481 dev_err(di->dev, ab8500_charger_ac_en()
1486 ret = ab8500_charger_set_output_curr(di, 0); ab8500_charger_ac_en()
1488 dev_err(di->dev, "%s " ab8500_charger_ac_en()
1494 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_ac_en()
1498 dev_err(di->dev, ab8500_charger_ac_en()
1504 ret = ab8500_charger_led_en(di, false); ab8500_charger_ac_en()
1506 dev_err(di->dev, "failed to disable LED\n"); ab8500_charger_ac_en()
1508 di->ac.charger_online = 0; ab8500_charger_ac_en()
1509 di->ac.wd_expired = false; ab8500_charger_ac_en()
1512 if (di->vddadc_en_ac) { ab8500_charger_ac_en()
1513 regulator_disable(di->regu); ab8500_charger_ac_en()
1514 di->vddadc_en_ac = false; ab8500_charger_ac_en()
1517 dev_dbg(di->dev, "%s Disabled AC charging\n", __func__); ab8500_charger_ac_en()
1519 ab8500_power_supply_changed(di, di->ac_chg.psy); ab8500_charger_ac_en()
1526 * @di: pointer to the ab8500_charger structure
1542 struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger); ab8500_charger_usb_en() local
1546 if (!di->usb.charger_connected) { ab8500_charger_usb_en()
1547 dev_err(di->dev, "USB charger not connected\n"); ab8500_charger_usb_en()
1561 if (!di->vddadc_en_usb) { ab8500_charger_usb_en()
1562 ret = regulator_enable(di->regu); ab8500_charger_usb_en()
1564 dev_warn(di->dev, ab8500_charger_usb_en()
1567 di->vddadc_en_usb = true; ab8500_charger_usb_en()
1571 dev_dbg(di->dev, "Enable USB: %dmV %dmA\n", vset, ich_out); ab8500_charger_usb_en()
1575 curr_index = ab8500_current_to_regval(di, ich_out); ab8500_charger_usb_en()
1577 dev_err(di->dev, ab8500_charger_usb_en()
1584 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_usb_en()
1587 dev_err(di->dev, "%s write failed\n", __func__); ab8500_charger_usb_en()
1591 if (!di->bm->enable_overshoot) ab8500_charger_usb_en()
1595 dev_dbg(di->dev, ab8500_charger_usb_en()
1597 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_usb_en()
1600 dev_err(di->dev, "%s write failed\n", __func__); ab8500_charger_usb_en()
1605 ret = ab8500_charger_led_en(di, true); ab8500_charger_usb_en()
1607 dev_err(di->dev, "failed to enable LED\n"); ab8500_charger_usb_en()
1609 di->usb.charger_online = 1; ab8500_charger_usb_en()
1612 ret = ab8500_charger_set_vbus_in_curr(di, ab8500_charger_usb_en()
1613 di->max_usb_in_curr.usb_type_max); ab8500_charger_usb_en()
1615 dev_err(di->dev, "setting USBChInputCurr failed\n"); ab8500_charger_usb_en()
1620 ret = ab8500_charger_set_output_curr(di, ich_out); ab8500_charger_usb_en()
1622 dev_err(di->dev, "%s " ab8500_charger_usb_en()
1628 queue_delayed_work(di->charger_wq, &di->check_vbat_work, HZ); ab8500_charger_usb_en()
1632 dev_dbg(di->dev, "%s Disabled USB charging\n", __func__); ab8500_charger_usb_en()
1633 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_usb_en()
1637 dev_err(di->dev, ab8500_charger_usb_en()
1642 ret = ab8500_charger_led_en(di, false); ab8500_charger_usb_en()
1644 dev_err(di->dev, "failed to disable LED\n"); ab8500_charger_usb_en()
1646 ret = ab8500_charger_set_vbus_in_curr(di, 0); ab8500_charger_usb_en()
1648 dev_err(di->dev, "setting USBChInputCurr failed\n"); ab8500_charger_usb_en()
1653 ret = ab8500_charger_set_output_curr(di, 0); ab8500_charger_usb_en()
1655 dev_err(di->dev, "%s " ab8500_charger_usb_en()
1660 di->usb.charger_online = 0; ab8500_charger_usb_en()
1661 di->usb.wd_expired = false; ab8500_charger_usb_en()
1664 if (di->vddadc_en_usb) { ab8500_charger_usb_en()
1665 regulator_disable(di->regu); ab8500_charger_usb_en()
1666 di->vddadc_en_usb = false; ab8500_charger_usb_en()
1669 dev_dbg(di->dev, "%s Disabled USB charging\n", __func__); ab8500_charger_usb_en()
1672 cancel_delayed_work(&di->check_vbat_work); ab8500_charger_usb_en()
1675 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_usb_en()
1718 struct ab8500_charger *di = to_ab8500_charger_usb_device_info(charger); ab8500_charger_usb_check_enable() local
1720 if (!di->usb.charger_connected) ab8500_charger_usb_check_enable()
1723 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_usb_check_enable()
1726 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); ab8500_charger_usb_check_enable()
1729 dev_dbg(di->dev, "USB charger ctrl: 0x%02x\n", usbch_ctrl1); ab8500_charger_usb_check_enable()
1732 dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n"); ab8500_charger_usb_check_enable()
1734 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_usb_check_enable()
1738 dev_err(di->dev, "ab8500 write failed %d\n", __LINE__); ab8500_charger_usb_check_enable()
1742 ret = ab8500_charger_usb_en(&di->usb_chg, true, vset, iset); ab8500_charger_usb_check_enable()
1744 dev_err(di->dev, "Failed to enable VBUS charger %d\n", ab8500_charger_usb_check_enable()
1767 struct ab8500_charger *di = to_ab8500_charger_ac_device_info(charger); ab8500_charger_ac_check_enable() local
1769 if (!di->ac.charger_connected) ab8500_charger_ac_check_enable()
1772 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_ac_check_enable()
1775 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); ab8500_charger_ac_check_enable()
1778 dev_dbg(di->dev, "AC charger ctrl: 0x%02x\n", mainch_ctrl1); ab8500_charger_ac_check_enable()
1781 dev_info(di->dev, "Charging has been disabled abnormally and will be re-enabled\n"); ab8500_charger_ac_check_enable()
1783 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_ac_check_enable()
1788 dev_err(di->dev, "ab8500 write failed %d\n", __LINE__); ab8500_charger_ac_check_enable()
1792 ret = ab8500_charger_ac_en(&di->usb_chg, true, vset, iset); ab8500_charger_ac_check_enable()
1794 dev_err(di->dev, "failed to enable AC charger %d\n", ab8500_charger_ac_check_enable()
1804 * @di: pointer to the ab8500_charger structure
1812 struct ab8500_charger *di; ab8500_charger_watchdog_kick() local
1815 di = to_ab8500_charger_ac_device_info(charger); ab8500_charger_watchdog_kick()
1817 di = to_ab8500_charger_usb_device_info(charger); ab8500_charger_watchdog_kick()
1821 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_watchdog_kick()
1824 dev_err(di->dev, "Failed to kick WD!\n"); ab8500_charger_watchdog_kick()
1831 * @di: pointer to the ab8500_charger structure
1840 struct ab8500_charger *di; ab8500_charger_update_charger_current() local
1843 di = to_ab8500_charger_ac_device_info(charger); ab8500_charger_update_charger_current()
1845 di = to_ab8500_charger_usb_device_info(charger); ab8500_charger_update_charger_current()
1849 ret = ab8500_charger_set_output_curr(di, ich_out); ab8500_charger_update_charger_current()
1851 dev_err(di->dev, "%s " ab8500_charger_update_charger_current()
1858 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_update_charger_current()
1861 dev_err(di->dev, "%s write failed\n", __func__); ab8500_charger_update_charger_current()
1880 struct ab8500_charger *di; ab8540_charger_power_path_enable() local
1883 di = to_ab8500_charger_usb_device_info(charger); ab8540_charger_power_path_enable()
1887 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8540_charger_power_path_enable()
1891 dev_err(di->dev, "%s write failed\n", __func__); ab8540_charger_power_path_enable()
1911 struct ab8500_charger *di; ab8540_charger_usb_pre_chg_enable() local
1914 di = to_ab8500_charger_usb_device_info(charger); ab8540_charger_usb_pre_chg_enable()
1918 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8540_charger_usb_pre_chg_enable()
1922 dev_err(di->dev, "%s write failed\n", __func__); ab8540_charger_usb_pre_chg_enable()
1933 struct ab8500_charger *di; ab8500_charger_get_ext_psy_data() local
1942 di = to_ab8500_charger_usb_device_info(usb_chg); ab8500_charger_get_ext_psy_data()
1967 di->vbat = ret.intval / 1000; ab8500_charger_get_ext_psy_data()
1992 struct ab8500_charger *di = container_of(work, ab8500_charger_check_vbat_work() local
1996 di->usb_chg.psy, ab8500_charger_get_ext_psy_data); ab8500_charger_check_vbat_work()
1999 if (di->old_vbat == 0) ab8500_charger_check_vbat_work()
2000 di->old_vbat = di->vbat; ab8500_charger_check_vbat_work()
2002 if (!((di->old_vbat <= VBAT_TRESH_IP_CUR_RED && ab8500_charger_check_vbat_work()
2003 di->vbat <= VBAT_TRESH_IP_CUR_RED) || ab8500_charger_check_vbat_work()
2004 (di->old_vbat > VBAT_TRESH_IP_CUR_RED && ab8500_charger_check_vbat_work()
2005 di->vbat > VBAT_TRESH_IP_CUR_RED))) { ab8500_charger_check_vbat_work()
2007 dev_dbg(di->dev, "Vbat did cross threshold, curr: %d, new: %d," ab8500_charger_check_vbat_work()
2008 " old: %d\n", di->max_usb_in_curr.usb_type_max, ab8500_charger_check_vbat_work()
2009 di->vbat, di->old_vbat); ab8500_charger_check_vbat_work()
2010 ab8500_charger_set_vbus_in_curr(di, ab8500_charger_check_vbat_work()
2011 di->max_usb_in_curr.usb_type_max); ab8500_charger_check_vbat_work()
2012 power_supply_changed(di->usb_chg.psy); ab8500_charger_check_vbat_work()
2015 di->old_vbat = di->vbat; ab8500_charger_check_vbat_work()
2021 if (di->vbat < (VBAT_TRESH_IP_CUR_RED + 100) && ab8500_charger_check_vbat_work()
2022 (di->vbat > (VBAT_TRESH_IP_CUR_RED - 100))) ab8500_charger_check_vbat_work()
2025 queue_delayed_work(di->charger_wq, &di->check_vbat_work, t * HZ); ab8500_charger_check_vbat_work()
2039 struct ab8500_charger *di = container_of(work, ab8500_charger_check_hw_failure_work() local
2043 if (di->flags.mainextchnotok) { ab8500_charger_check_hw_failure_work()
2044 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_check_hw_failure_work()
2047 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_check_hw_failure_work()
2051 di->flags.mainextchnotok = false; ab8500_charger_check_hw_failure_work()
2052 ab8500_power_supply_changed(di, di->ac_chg.psy); ab8500_charger_check_hw_failure_work()
2055 if (di->flags.vbus_ovv) { ab8500_charger_check_hw_failure_work()
2056 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_check_hw_failure_work()
2060 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_check_hw_failure_work()
2064 di->flags.vbus_ovv = false; ab8500_charger_check_hw_failure_work()
2065 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_check_hw_failure_work()
2069 if (di->flags.mainextchnotok || di->flags.vbus_ovv) { ab8500_charger_check_hw_failure_work()
2070 queue_delayed_work(di->charger_wq, ab8500_charger_check_hw_failure_work()
2071 &di->check_hw_failure_work, round_jiffies(HZ)); ab8500_charger_check_hw_failure_work()
2093 struct ab8500_charger *di = container_of(work, ab8500_charger_kick_watchdog_work() local
2096 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_kick_watchdog_work()
2099 dev_err(di->dev, "Failed to kick WD!\n"); ab8500_charger_kick_watchdog_work()
2102 queue_delayed_work(di->charger_wq, ab8500_charger_kick_watchdog_work()
2103 &di->kick_wd_work, round_jiffies(WD_KICK_INTERVAL)); ab8500_charger_kick_watchdog_work()
2116 struct ab8500_charger *di = container_of(work, ab8500_charger_ac_work() local
2124 ret = ab8500_charger_detect_chargers(di, false); ab8500_charger_ac_work()
2129 di->ac.charger_connected = 1; ab8500_charger_ac_work()
2130 di->ac_conn = true; ab8500_charger_ac_work()
2132 di->ac.charger_connected = 0; ab8500_charger_ac_work()
2135 ab8500_power_supply_changed(di, di->ac_chg.psy); ab8500_charger_ac_work()
2136 sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present"); ab8500_charger_ac_work()
2141 struct ab8500_charger *di = container_of(work, ab8500_charger_usb_attached_work() local
2149 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_usb_attached_work()
2154 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); ab8500_charger_usb_attached_work()
2163 ab8500_charger_usb_en(&di->usb_chg, 0, 0, 0); ab8500_charger_usb_attached_work()
2165 mutex_lock(&di->charger_attached_mutex); ab8500_charger_usb_attached_work()
2166 mutex_unlock(&di->charger_attached_mutex); ab8500_charger_usb_attached_work()
2171 queue_delayed_work(di->charger_wq, ab8500_charger_usb_attached_work()
2172 &di->usb_charger_attached_work, ab8500_charger_usb_attached_work()
2179 struct ab8500_charger *di = container_of(work, ab8500_charger_ac_attached_work() local
2188 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_ac_attached_work()
2193 dev_err(di->dev, "ab8500 read failed %d\n", __LINE__); ab8500_charger_ac_attached_work()
2203 ab8500_charger_ac_en(&di->ac_chg, 0, 0, 0); ab8500_charger_ac_attached_work()
2204 queue_work(di->charger_wq, &di->ac_work); ab8500_charger_ac_attached_work()
2206 mutex_lock(&di->charger_attached_mutex); ab8500_charger_ac_attached_work()
2207 mutex_unlock(&di->charger_attached_mutex); ab8500_charger_ac_attached_work()
2212 queue_delayed_work(di->charger_wq, ab8500_charger_ac_attached_work()
2213 &di->ac_charger_attached_work, ab8500_charger_ac_attached_work()
2227 struct ab8500_charger *di = container_of(work, ab8500_charger_detect_usb_type_work() local
2235 ret = ab8500_charger_detect_chargers(di, false); ab8500_charger_detect_usb_type_work()
2240 dev_dbg(di->dev, "%s di->vbus_detected = false\n", __func__); ab8500_charger_detect_usb_type_work()
2241 di->vbus_detected = false; ab8500_charger_detect_usb_type_work()
2242 ab8500_charger_set_usb_connected(di, false); ab8500_charger_detect_usb_type_work()
2243 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_detect_usb_type_work()
2245 dev_dbg(di->dev, "%s di->vbus_detected = true\n", __func__); ab8500_charger_detect_usb_type_work()
2246 di->vbus_detected = true; ab8500_charger_detect_usb_type_work()
2248 if (is_ab8500_1p1_or_earlier(di->parent)) { ab8500_charger_detect_usb_type_work()
2249 ret = ab8500_charger_detect_usb_type(di); ab8500_charger_detect_usb_type_work()
2251 ab8500_charger_set_usb_connected(di, true); ab8500_charger_detect_usb_type_work()
2252 ab8500_power_supply_changed(di, ab8500_charger_detect_usb_type_work()
2253 di->usb_chg.psy); ab8500_charger_detect_usb_type_work()
2263 if (di->vbus_detected_start) { ab8500_charger_detect_usb_type_work()
2264 di->vbus_detected_start = false; ab8500_charger_detect_usb_type_work()
2265 ret = ab8500_charger_detect_usb_type(di); ab8500_charger_detect_usb_type_work()
2267 ab8500_charger_set_usb_connected(di, ab8500_charger_detect_usb_type_work()
2269 ab8500_power_supply_changed(di, ab8500_charger_detect_usb_type_work()
2270 di->usb_chg.psy); ab8500_charger_detect_usb_type_work()
2285 struct ab8500_charger *di = ab8500_charger_usb_link_attach_work() local
2290 if (!di->usb.charger_online) { ab8500_charger_usb_link_attach_work()
2291 ret = ab8500_charger_set_vbus_in_curr(di, ab8500_charger_usb_link_attach_work()
2292 di->max_usb_in_curr.usb_type_max); ab8500_charger_usb_link_attach_work()
2297 ab8500_charger_set_usb_connected(di, true); ab8500_charger_usb_link_attach_work()
2298 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_usb_link_attach_work()
2314 struct ab8500_charger *di = container_of(work, ab8500_charger_usb_link_status_work() local
2322 detected_chargers = ab8500_charger_detect_chargers(di, false); ab8500_charger_usb_link_status_work()
2332 if (is_ab8500(di->parent)) ab8500_charger_usb_link_status_work()
2333 ret = abx500_get_register_interruptible(di->dev, AB8500_USB, ab8500_charger_usb_link_status_work()
2336 ret = abx500_get_register_interruptible(di->dev, AB8500_USB, ab8500_charger_usb_link_status_work()
2340 dev_dbg(di->dev, "UsbLineStatus register = 0x%02x\n", val); ab8500_charger_usb_link_status_work()
2342 dev_dbg(di->dev, "Error reading USB link status\n"); ab8500_charger_usb_link_status_work()
2344 if (is_ab8500(di->parent)) ab8500_charger_usb_link_status_work()
2352 di->invalid_charger_detect_state == 0) { ab8500_charger_usb_link_status_work()
2353 dev_dbg(di->dev, ab8500_charger_usb_link_status_work()
2356 abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_usb_link_status_work()
2360 abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_usb_link_status_work()
2363 di->invalid_charger_detect_state = 1; ab8500_charger_usb_link_status_work()
2368 if (di->invalid_charger_detect_state == 1) { ab8500_charger_usb_link_status_work()
2369 dev_dbg(di->dev, ab8500_charger_usb_link_status_work()
2372 abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_usb_link_status_work()
2376 if (is_ab8500(di->parent)) ab8500_charger_usb_link_status_work()
2377 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_usb_link_status_work()
2381 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_usb_link_status_work()
2385 dev_dbg(di->dev, "USB link status= 0x%02x\n", ab8500_charger_usb_link_status_work()
2387 di->invalid_charger_detect_state = 2; ab8500_charger_usb_link_status_work()
2390 di->invalid_charger_detect_state = 0; ab8500_charger_usb_link_status_work()
2394 di->vbus_detected = false; ab8500_charger_usb_link_status_work()
2395 ab8500_charger_set_usb_connected(di, false); ab8500_charger_usb_link_status_work()
2396 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_usb_link_status_work()
2400 dev_dbg(di->dev,"%s di->vbus_detected = true\n",__func__); ab8500_charger_usb_link_status_work()
2401 di->vbus_detected = true; ab8500_charger_usb_link_status_work()
2402 ret = ab8500_charger_read_usb_type(di); ab8500_charger_usb_link_status_work()
2406 ab8500_charger_set_usb_connected(di, false); ab8500_charger_usb_link_status_work()
2407 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_usb_link_status_work()
2412 if (di->usb_device_is_unrecognised) { ab8500_charger_usb_link_status_work()
2413 dev_dbg(di->dev, ab8500_charger_usb_link_status_work()
2418 queue_delayed_work(di->charger_wq, ab8500_charger_usb_link_status_work()
2419 &di->attach_work, ab8500_charger_usb_link_status_work()
2421 } else if (di->is_aca_rid == 1) { ab8500_charger_usb_link_status_work()
2423 di->is_aca_rid++; ab8500_charger_usb_link_status_work()
2424 dev_dbg(di->dev, ab8500_charger_usb_link_status_work()
2427 queue_delayed_work(di->charger_wq, ab8500_charger_usb_link_status_work()
2428 &di->attach_work, ab8500_charger_usb_link_status_work()
2431 queue_delayed_work(di->charger_wq, ab8500_charger_usb_link_status_work()
2432 &di->attach_work, ab8500_charger_usb_link_status_work()
2442 struct ab8500_charger *di = container_of(work, ab8500_charger_usb_state_changed_work() local
2445 if (!di->vbus_detected) { ab8500_charger_usb_state_changed_work()
2446 dev_dbg(di->dev, ab8500_charger_usb_state_changed_work()
2447 "%s !di->vbus_detected\n", ab8500_charger_usb_state_changed_work()
2452 spin_lock_irqsave(&di->usb_state.usb_lock, flags); ab8500_charger_usb_state_changed_work()
2453 di->usb_state.state = di->usb_state.state_tmp; ab8500_charger_usb_state_changed_work()
2454 di->usb_state.usb_current = di->usb_state.usb_current_tmp; ab8500_charger_usb_state_changed_work()
2455 spin_unlock_irqrestore(&di->usb_state.usb_lock, flags); ab8500_charger_usb_state_changed_work()
2457 dev_dbg(di->dev, "%s USB state: 0x%02x mA: %d\n", ab8500_charger_usb_state_changed_work()
2458 __func__, di->usb_state.state, di->usb_state.usb_current); ab8500_charger_usb_state_changed_work()
2460 switch (di->usb_state.state) { ab8500_charger_usb_state_changed_work()
2465 ab8500_charger_set_usb_connected(di, false); ab8500_charger_usb_state_changed_work()
2466 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_usb_state_changed_work()
2481 if (!ab8500_charger_get_usb_cur(di)) { ab8500_charger_usb_state_changed_work()
2483 ret = ab8500_charger_set_vbus_in_curr(di, ab8500_charger_usb_state_changed_work()
2484 di->max_usb_in_curr.usb_type_max); ab8500_charger_usb_state_changed_work()
2488 ab8500_charger_set_usb_connected(di, true); ab8500_charger_usb_state_changed_work()
2489 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_usb_state_changed_work()
2510 struct ab8500_charger *di = container_of(work, ab8500_charger_check_usbchargernotok_work() local
2514 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_check_usbchargernotok_work()
2517 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_check_usbchargernotok_work()
2520 prev_status = di->flags.usbchargernotok; ab8500_charger_check_usbchargernotok_work()
2523 di->flags.usbchargernotok = true; ab8500_charger_check_usbchargernotok_work()
2525 queue_delayed_work(di->charger_wq, ab8500_charger_check_usbchargernotok_work()
2526 &di->check_usbchgnotok_work, HZ); ab8500_charger_check_usbchargernotok_work()
2528 di->flags.usbchargernotok = false; ab8500_charger_check_usbchargernotok_work()
2529 di->flags.vbus_collapse = false; ab8500_charger_check_usbchargernotok_work()
2532 if (prev_status != di->flags.usbchargernotok) ab8500_charger_check_usbchargernotok_work()
2533 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_check_usbchargernotok_work()
2548 struct ab8500_charger *di = container_of(work, ab8500_charger_check_main_thermal_prot_work() local
2552 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_check_main_thermal_prot_work()
2555 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_check_main_thermal_prot_work()
2559 di->flags.main_thermal_prot = true; ab8500_charger_check_main_thermal_prot_work()
2561 di->flags.main_thermal_prot = false; ab8500_charger_check_main_thermal_prot_work()
2563 ab8500_power_supply_changed(di, di->ac_chg.psy); ab8500_charger_check_main_thermal_prot_work()
2578 struct ab8500_charger *di = container_of(work, ab8500_charger_check_usb_thermal_prot_work() local
2582 ret = abx500_get_register_interruptible(di->dev, ab8500_charger_check_usb_thermal_prot_work()
2585 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_charger_check_usb_thermal_prot_work()
2589 di->flags.usb_thermal_prot = true; ab8500_charger_check_usb_thermal_prot_work()
2591 di->flags.usb_thermal_prot = false; ab8500_charger_check_usb_thermal_prot_work()
2593 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_check_usb_thermal_prot_work()
2605 struct ab8500_charger *di = _di; ab8500_charger_mainchunplugdet_handler() local
2607 dev_dbg(di->dev, "Main charger unplugged\n"); ab8500_charger_mainchunplugdet_handler()
2608 queue_work(di->charger_wq, &di->ac_work); ab8500_charger_mainchunplugdet_handler()
2610 cancel_delayed_work_sync(&di->ac_charger_attached_work); ab8500_charger_mainchunplugdet_handler()
2611 mutex_lock(&di->charger_attached_mutex); ab8500_charger_mainchunplugdet_handler()
2612 mutex_unlock(&di->charger_attached_mutex); ab8500_charger_mainchunplugdet_handler()
2626 struct ab8500_charger *di = _di; ab8500_charger_mainchplugdet_handler() local
2628 dev_dbg(di->dev, "Main charger plugged\n"); ab8500_charger_mainchplugdet_handler()
2629 queue_work(di->charger_wq, &di->ac_work); ab8500_charger_mainchplugdet_handler()
2631 mutex_lock(&di->charger_attached_mutex); ab8500_charger_mainchplugdet_handler()
2632 mutex_unlock(&di->charger_attached_mutex); ab8500_charger_mainchplugdet_handler()
2634 if (is_ab8500(di->parent)) ab8500_charger_mainchplugdet_handler()
2635 queue_delayed_work(di->charger_wq, ab8500_charger_mainchplugdet_handler()
2636 &di->ac_charger_attached_work, ab8500_charger_mainchplugdet_handler()
2650 struct ab8500_charger *di = _di; ab8500_charger_mainextchnotok_handler() local
2652 dev_dbg(di->dev, "Main charger not ok\n"); ab8500_charger_mainextchnotok_handler()
2653 di->flags.mainextchnotok = true; ab8500_charger_mainextchnotok_handler()
2654 ab8500_power_supply_changed(di, di->ac_chg.psy); ab8500_charger_mainextchnotok_handler()
2657 queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0); ab8500_charger_mainextchnotok_handler()
2672 struct ab8500_charger *di = _di; ab8500_charger_mainchthprotr_handler() local
2674 dev_dbg(di->dev, ab8500_charger_mainchthprotr_handler()
2676 queue_work(di->charger_wq, &di->check_main_thermal_prot_work); ab8500_charger_mainchthprotr_handler()
2691 struct ab8500_charger *di = _di; ab8500_charger_mainchthprotf_handler() local
2693 dev_dbg(di->dev, ab8500_charger_mainchthprotf_handler()
2695 queue_work(di->charger_wq, &di->check_main_thermal_prot_work); ab8500_charger_mainchthprotf_handler()
2702 struct ab8500_charger *di = container_of(work, ab8500_charger_vbus_drop_end_work() local
2707 di->flags.vbus_drop_end = false; ab8500_charger_vbus_drop_end_work()
2710 abx500_set_register_interruptible(di->dev, ab8500_charger_vbus_drop_end_work()
2713 if (is_ab8540(di->parent)) ab8500_charger_vbus_drop_end_work()
2714 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_vbus_drop_end_work()
2717 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_vbus_drop_end_work()
2720 dev_err(di->dev, "%s read failed\n", __func__); ab8500_charger_vbus_drop_end_work()
2724 if (is_ab8540(di->parent)) ab8500_charger_vbus_drop_end_work()
2725 curr = di->bm->chg_input_curr[ ab8500_charger_vbus_drop_end_work()
2728 curr = di->bm->chg_input_curr[ ab8500_charger_vbus_drop_end_work()
2731 if (di->max_usb_in_curr.calculated_max != curr) { ab8500_charger_vbus_drop_end_work()
2733 di->max_usb_in_curr.calculated_max = curr; ab8500_charger_vbus_drop_end_work()
2734 dev_dbg(di->dev, ab8500_charger_vbus_drop_end_work()
2736 di->max_usb_in_curr.calculated_max); ab8500_charger_vbus_drop_end_work()
2742 di->max_usb_in_curr.set_max = ab8500_charger_vbus_drop_end_work()
2743 di->max_usb_in_curr.calculated_max; ab8500_charger_vbus_drop_end_work()
2744 dev_dbg(di->dev, ab8500_charger_vbus_drop_end_work()
2746 di->max_usb_in_curr.set_max); ab8500_charger_vbus_drop_end_work()
2749 if (di->usb.charger_connected) ab8500_charger_vbus_drop_end_work()
2750 ab8500_charger_set_vbus_in_curr(di, ab8500_charger_vbus_drop_end_work()
2751 di->max_usb_in_curr.usb_type_max); ab8500_charger_vbus_drop_end_work()
2763 struct ab8500_charger *di = _di; ab8500_charger_vbusdetf_handler() local
2765 di->vbus_detected = false; ab8500_charger_vbusdetf_handler()
2766 dev_dbg(di->dev, "VBUS falling detected\n"); ab8500_charger_vbusdetf_handler()
2767 queue_work(di->charger_wq, &di->detect_usb_type_work); ab8500_charger_vbusdetf_handler()
2781 struct ab8500_charger *di = _di; ab8500_charger_vbusdetr_handler() local
2783 di->vbus_detected = true; ab8500_charger_vbusdetr_handler()
2784 dev_dbg(di->dev, "VBUS rising detected\n"); ab8500_charger_vbusdetr_handler()
2786 queue_work(di->charger_wq, &di->detect_usb_type_work); ab8500_charger_vbusdetr_handler()
2800 struct ab8500_charger *di = _di; ab8500_charger_usblinkstatus_handler() local
2802 dev_dbg(di->dev, "USB link status changed\n"); ab8500_charger_usblinkstatus_handler()
2804 queue_work(di->charger_wq, &di->usb_link_status_work); ab8500_charger_usblinkstatus_handler()
2819 struct ab8500_charger *di = _di; ab8500_charger_usbchthprotr_handler() local
2821 dev_dbg(di->dev, ab8500_charger_usbchthprotr_handler()
2823 queue_work(di->charger_wq, &di->check_usb_thermal_prot_work); ab8500_charger_usbchthprotr_handler()
2838 struct ab8500_charger *di = _di; ab8500_charger_usbchthprotf_handler() local
2840 dev_dbg(di->dev, ab8500_charger_usbchthprotf_handler()
2842 queue_work(di->charger_wq, &di->check_usb_thermal_prot_work); ab8500_charger_usbchthprotf_handler()
2856 struct ab8500_charger *di = _di; ab8500_charger_usbchargernotokr_handler() local
2858 dev_dbg(di->dev, "Not allowed USB charger detected\n"); ab8500_charger_usbchargernotokr_handler()
2859 queue_delayed_work(di->charger_wq, &di->check_usbchgnotok_work, 0); ab8500_charger_usbchargernotokr_handler()
2873 struct ab8500_charger *di = _di; ab8500_charger_chwdexp_handler() local
2875 dev_dbg(di->dev, "Charger watchdog expired\n"); ab8500_charger_chwdexp_handler()
2881 if (di->ac.charger_online) { ab8500_charger_chwdexp_handler()
2882 di->ac.wd_expired = true; ab8500_charger_chwdexp_handler()
2883 ab8500_power_supply_changed(di, di->ac_chg.psy); ab8500_charger_chwdexp_handler()
2885 if (di->usb.charger_online) { ab8500_charger_chwdexp_handler()
2886 di->usb.wd_expired = true; ab8500_charger_chwdexp_handler()
2887 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_chwdexp_handler()
2902 struct ab8500_charger *di = _di; ab8500_charger_vbuschdropend_handler() local
2904 dev_dbg(di->dev, "VBUS charger drop ended\n"); ab8500_charger_vbuschdropend_handler()
2905 di->flags.vbus_drop_end = true; ab8500_charger_vbuschdropend_handler()
2911 queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work, ab8500_charger_vbuschdropend_handler()
2926 struct ab8500_charger *di = _di; ab8500_charger_vbusovv_handler() local
2928 dev_dbg(di->dev, "VBUS overvoltage detected\n"); ab8500_charger_vbusovv_handler()
2929 di->flags.vbus_ovv = true; ab8500_charger_vbusovv_handler()
2930 ab8500_power_supply_changed(di, di->usb_chg.psy); ab8500_charger_vbusovv_handler()
2933 queue_delayed_work(di->charger_wq, &di->check_hw_failure_work, 0); ab8500_charger_vbusovv_handler()
2956 struct ab8500_charger *di; ab8500_charger_ac_get_property() local
2959 di = to_ab8500_charger_ac_device_info(psy_to_ux500_charger(psy)); ab8500_charger_ac_get_property()
2963 if (di->flags.mainextchnotok) ab8500_charger_ac_get_property()
2965 else if (di->ac.wd_expired || di->usb.wd_expired) ab8500_charger_ac_get_property()
2967 else if (di->flags.main_thermal_prot) ab8500_charger_ac_get_property()
2973 val->intval = di->ac.charger_online; ab8500_charger_ac_get_property()
2976 val->intval = di->ac.charger_connected; ab8500_charger_ac_get_property()
2979 ret = ab8500_charger_get_ac_voltage(di); ab8500_charger_ac_get_property()
2981 di->ac.charger_voltage = ret; ab8500_charger_ac_get_property()
2983 val->intval = di->ac.charger_voltage * 1000; ab8500_charger_ac_get_property()
2990 di->ac.cv_active = ab8500_charger_ac_cv(di); ab8500_charger_ac_get_property()
2991 val->intval = di->ac.cv_active; ab8500_charger_ac_get_property()
2994 ret = ab8500_charger_get_ac_current(di); ab8500_charger_ac_get_property()
2996 di->ac.charger_current = ret; ab8500_charger_ac_get_property()
2997 val->intval = di->ac.charger_current * 1000; ab8500_charger_ac_get_property()
3023 struct ab8500_charger *di; ab8500_charger_usb_get_property() local
3026 di = to_ab8500_charger_usb_device_info(psy_to_ux500_charger(psy)); ab8500_charger_usb_get_property()
3030 if (di->flags.usbchargernotok) ab8500_charger_usb_get_property()
3032 else if (di->ac.wd_expired || di->usb.wd_expired) ab8500_charger_usb_get_property()
3034 else if (di->flags.usb_thermal_prot) ab8500_charger_usb_get_property()
3036 else if (di->flags.vbus_ovv) ab8500_charger_usb_get_property()
3042 val->intval = di->usb.charger_online; ab8500_charger_usb_get_property()
3045 val->intval = di->usb.charger_connected; ab8500_charger_usb_get_property()
3048 ret = ab8500_charger_get_vbus_voltage(di); ab8500_charger_usb_get_property()
3050 di->usb.charger_voltage = ret; ab8500_charger_usb_get_property()
3051 val->intval = di->usb.charger_voltage * 1000; ab8500_charger_usb_get_property()
3058 di->usb.cv_active = ab8500_charger_usb_cv(di); ab8500_charger_usb_get_property()
3059 val->intval = di->usb.cv_active; ab8500_charger_usb_get_property()
3062 ret = ab8500_charger_get_usb_current(di); ab8500_charger_usb_get_property()
3064 di->usb.charger_current = ret; ab8500_charger_usb_get_property()
3065 val->intval = di->usb.charger_current * 1000; ab8500_charger_usb_get_property()
3072 if (di->flags.vbus_collapse) ab8500_charger_usb_get_property()
3085 * @di: pointer to the ab8500_charger structure
3090 static int ab8500_charger_init_hw_registers(struct ab8500_charger *di) ab8500_charger_init_hw_registers() argument
3096 if (!is_ab8500_1p1_or_earlier(di->parent)) { ab8500_charger_init_hw_registers()
3097 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3101 dev_err(di->dev, ab8500_charger_init_hw_registers()
3106 if (is_ab8540(di->parent)) ab8500_charger_init_hw_registers()
3107 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3111 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3115 dev_err(di->dev, ab8500_charger_init_hw_registers()
3121 if (is_ab9540_2p0(di->parent) || is_ab9540_3p0(di->parent) ab8500_charger_init_hw_registers()
3122 || is_ab8505_2p0(di->parent) || is_ab8540(di->parent)) ab8500_charger_init_hw_registers()
3123 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3132 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3137 dev_err(di->dev, ab8500_charger_init_hw_registers()
3143 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3146 dev_err(di->dev, "failed to enable main WD in OTP\n"); ab8500_charger_init_hw_registers()
3151 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3155 dev_err(di->dev, "faile to enable main watchdog\n"); ab8500_charger_init_hw_registers()
3168 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3173 dev_err(di->dev, "failed to kick main watchdog\n"); ab8500_charger_init_hw_registers()
3178 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3182 dev_err(di->dev, "failed to disable main watchdog\n"); ab8500_charger_init_hw_registers()
3187 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_init_hw_registers()
3190 dev_err(di->dev, "failed to set charger watchdog timeout\n"); ab8500_charger_init_hw_registers()
3194 ret = ab8500_charger_led_en(di, false); ab8500_charger_init_hw_registers()
3196 dev_err(di->dev, "failed to disable LED\n"); ab8500_charger_init_hw_registers()
3201 if (di->bm->bkup_bat_v > BUP_VCH_SEL_3P1V) ab8500_charger_init_hw_registers()
3203 if (di->bm->bkup_bat_v == BUP_VCH_SEL_3P3V) ab8500_charger_init_hw_registers()
3206 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3209 (di->bm->bkup_bat_v & 0x3) | di->bm->bkup_bat_i); ab8500_charger_init_hw_registers()
3211 dev_err(di->dev, "failed to setup backup battery charging\n"); ab8500_charger_init_hw_registers()
3214 if (is_ab8540(di->parent)) { ab8500_charger_init_hw_registers()
3215 ret = abx500_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3220 dev_err(di->dev, ab8500_charger_init_hw_registers()
3227 abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3231 dev_err(di->dev, "%s mask and set failed\n", __func__); ab8500_charger_init_hw_registers()
3233 if (is_ab8540(di->parent)) { ab8500_charger_init_hw_registers()
3234 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3238 dev_err(di->dev, ab8500_charger_init_hw_registers()
3242 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_init_hw_registers()
3246 dev_err(di->dev, ab8500_charger_init_hw_registers()
3279 struct ab8500_charger *di = ab8500_charger_usb_notifier_call() local
3284 if (!di) ab8500_charger_usb_notifier_call()
3288 dev_dbg(di->dev, "not a standard host, returning\n"); ab8500_charger_usb_notifier_call()
3295 if ((di->usb_state.usb_current == 2) && (mA > 2)) ab8500_charger_usb_notifier_call()
3306 dev_dbg(di->dev, "%s usb_state: 0x%02x mA: %d\n", ab8500_charger_usb_notifier_call()
3309 spin_lock(&di->usb_state.usb_lock); ab8500_charger_usb_notifier_call()
3310 di->usb_state.state_tmp = bm_usb_state; ab8500_charger_usb_notifier_call()
3311 di->usb_state.usb_current_tmp = mA; ab8500_charger_usb_notifier_call()
3312 spin_unlock(&di->usb_state.usb_lock); ab8500_charger_usb_notifier_call()
3318 queue_delayed_work(di->charger_wq, &di->usb_state_changed_work, HZ/2); ab8500_charger_usb_notifier_call()
3327 struct ab8500_charger *di = platform_get_drvdata(pdev); ab8500_charger_resume() local
3338 if (di->ac_conn && is_ab8500_1p1_or_earlier(di->parent)) { ab8500_charger_resume()
3339 ret = abx500_set_register_interruptible(di->dev, AB8500_CHARGER, ab8500_charger_resume()
3342 dev_err(di->dev, "Failed to kick WD!\n"); ab8500_charger_resume()
3345 queue_delayed_work(di->charger_wq, &di->kick_wd_work, ab8500_charger_resume()
3350 if (di->flags.mainextchnotok || di->flags.vbus_ovv) { ab8500_charger_resume()
3351 queue_delayed_work(di->charger_wq, ab8500_charger_resume()
3352 &di->check_hw_failure_work, 0); ab8500_charger_resume()
3355 if (di->flags.vbus_drop_end) ab8500_charger_resume()
3356 queue_delayed_work(di->charger_wq, &di->vbus_drop_end_work, 0); ab8500_charger_resume()
3364 struct ab8500_charger *di = platform_get_drvdata(pdev); ab8500_charger_suspend() local
3367 cancel_delayed_work(&di->check_hw_failure_work); ab8500_charger_suspend()
3368 cancel_delayed_work(&di->vbus_drop_end_work); ab8500_charger_suspend()
3370 flush_delayed_work(&di->attach_work); ab8500_charger_suspend()
3371 flush_delayed_work(&di->usb_charger_attached_work); ab8500_charger_suspend()
3372 flush_delayed_work(&di->ac_charger_attached_work); ab8500_charger_suspend()
3373 flush_delayed_work(&di->check_usbchgnotok_work); ab8500_charger_suspend()
3374 flush_delayed_work(&di->check_vbat_work); ab8500_charger_suspend()
3375 flush_delayed_work(&di->kick_wd_work); ab8500_charger_suspend()
3377 flush_work(&di->usb_link_status_work); ab8500_charger_suspend()
3378 flush_work(&di->ac_work); ab8500_charger_suspend()
3379 flush_work(&di->detect_usb_type_work); ab8500_charger_suspend()
3381 if (atomic_read(&di->current_stepping_sessions)) ab8500_charger_suspend()
3397 struct ab8500_charger *di = platform_get_drvdata(pdev); ab8500_charger_remove() local
3401 ab8500_charger_ac_en(&di->ac_chg, false, 0, 0); ab8500_charger_remove()
3404 ab8500_charger_usb_en(&di->usb_chg, false, 0, 0); ab8500_charger_remove()
3409 free_irq(irq, di); ab8500_charger_remove()
3413 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_charger_remove()
3416 dev_err(di->dev, "%s mask and set failed\n", __func__); ab8500_charger_remove()
3418 usb_unregister_notifier(di->usb_phy, &di->nb); ab8500_charger_remove()
3419 usb_put_phy(di->usb_phy); ab8500_charger_remove()
3422 destroy_workqueue(di->charger_wq); ab8500_charger_remove()
3425 if (!di->ac_chg.enabled) ab8500_charger_remove()
3430 if (di->usb_chg.enabled) ab8500_charger_remove()
3431 power_supply_unregister(di->usb_chg.psy); ab8500_charger_remove()
3433 if (di->ac_chg.enabled && !di->ac_chg.external) ab8500_charger_remove()
3434 power_supply_unregister(di->ac_chg.psy); ab8500_charger_remove()
3466 struct ab8500_charger *di; ab8500_charger_probe() local
3469 di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL); ab8500_charger_probe()
3470 if (!di) { ab8500_charger_probe()
3479 di->bm = plat; ab8500_charger_probe()
3482 ret = ab8500_bm_of_probe(&pdev->dev, np, di->bm); ab8500_charger_probe()
3487 di->autopower_cfg = of_property_read_bool(np, "autopower_cfg"); ab8500_charger_probe()
3489 di->autopower_cfg = false; ab8500_charger_probe()
3492 di->dev = &pdev->dev; ab8500_charger_probe()
3493 di->parent = dev_get_drvdata(pdev->dev.parent); ab8500_charger_probe()
3494 di->gpadc = ab8500_gpadc_get("ab8500-gpadc.0"); ab8500_charger_probe()
3497 spin_lock_init(&di->usb_state.usb_lock); ab8500_charger_probe()
3498 mutex_init(&di->usb_ipt_crnt_lock); ab8500_charger_probe()
3500 di->autopower = false; ab8500_charger_probe()
3501 di->invalid_charger_detect_state = 0; ab8500_charger_probe()
3506 ac_psy_cfg.drv_data = &di->ac_chg; ab8500_charger_probe()
3509 usb_psy_cfg.drv_data = &di->usb_chg; ab8500_charger_probe()
3513 di->ac_chg.ops.enable = &ab8500_charger_ac_en; ab8500_charger_probe()
3514 di->ac_chg.ops.check_enable = &ab8500_charger_ac_check_enable; ab8500_charger_probe()
3515 di->ac_chg.ops.kick_wd = &ab8500_charger_watchdog_kick; ab8500_charger_probe()
3516 di->ac_chg.ops.update_curr = &ab8500_charger_update_charger_current; ab8500_charger_probe()
3517 di->ac_chg.max_out_volt = ab8500_charger_voltage_map[ ab8500_charger_probe()
3519 di->ac_chg.max_out_curr = ab8500_charger_probe()
3520 di->bm->chg_output_curr[di->bm->n_chg_out_curr - 1]; ab8500_charger_probe()
3521 di->ac_chg.wdt_refresh = CHG_WD_INTERVAL; ab8500_charger_probe()
3522 di->ac_chg.enabled = di->bm->ac_enabled; ab8500_charger_probe()
3523 di->ac_chg.external = false; ab8500_charger_probe()
3526 if (!di->ac_chg.enabled) ab8500_charger_probe()
3532 di->usb_chg.ops.enable = &ab8500_charger_usb_en; ab8500_charger_probe()
3533 di->usb_chg.ops.check_enable = &ab8500_charger_usb_check_enable; ab8500_charger_probe()
3534 di->usb_chg.ops.kick_wd = &ab8500_charger_watchdog_kick; ab8500_charger_probe()
3535 di->usb_chg.ops.update_curr = &ab8500_charger_update_charger_current; ab8500_charger_probe()
3536 di->usb_chg.ops.pp_enable = &ab8540_charger_power_path_enable; ab8500_charger_probe()
3537 di->usb_chg.ops.pre_chg_enable = &ab8540_charger_usb_pre_chg_enable; ab8500_charger_probe()
3538 di->usb_chg.max_out_volt = ab8500_charger_voltage_map[ ab8500_charger_probe()
3540 di->usb_chg.max_out_curr = ab8500_charger_probe()
3541 di->bm->chg_output_curr[di->bm->n_chg_out_curr - 1]; ab8500_charger_probe()
3542 di->usb_chg.wdt_refresh = CHG_WD_INTERVAL; ab8500_charger_probe()
3543 di->usb_chg.enabled = di->bm->usb_enabled; ab8500_charger_probe()
3544 di->usb_chg.external = false; ab8500_charger_probe()
3545 di->usb_chg.power_path = di->bm->usb_power_path; ab8500_charger_probe()
3546 di->usb_state.usb_current = -1; ab8500_charger_probe()
3549 di->charger_wq = ab8500_charger_probe()
3551 if (di->charger_wq == NULL) { ab8500_charger_probe()
3552 dev_err(di->dev, "failed to create work queue\n"); ab8500_charger_probe()
3556 mutex_init(&di->charger_attached_mutex); ab8500_charger_probe()
3559 INIT_DEFERRABLE_WORK(&di->check_hw_failure_work, ab8500_charger_probe()
3561 INIT_DEFERRABLE_WORK(&di->check_usbchgnotok_work, ab8500_charger_probe()
3564 INIT_DELAYED_WORK(&di->ac_charger_attached_work, ab8500_charger_probe()
3566 INIT_DELAYED_WORK(&di->usb_charger_attached_work, ab8500_charger_probe()
3578 INIT_DEFERRABLE_WORK(&di->kick_wd_work, ab8500_charger_probe()
3581 INIT_DEFERRABLE_WORK(&di->check_vbat_work, ab8500_charger_probe()
3584 INIT_DELAYED_WORK(&di->attach_work, ab8500_charger_probe()
3587 INIT_DELAYED_WORK(&di->usb_state_changed_work, ab8500_charger_probe()
3590 INIT_DELAYED_WORK(&di->vbus_drop_end_work, ab8500_charger_probe()
3594 INIT_WORK(&di->usb_link_status_work, ab8500_charger_probe()
3596 INIT_WORK(&di->ac_work, ab8500_charger_ac_work); ab8500_charger_probe()
3597 INIT_WORK(&di->detect_usb_type_work, ab8500_charger_probe()
3601 INIT_WORK(&di->check_main_thermal_prot_work, ab8500_charger_probe()
3603 INIT_WORK(&di->check_usb_thermal_prot_work, ab8500_charger_probe()
3611 di->regu = devm_regulator_get(di->dev, "vddadc"); ab8500_charger_probe()
3612 if (IS_ERR(di->regu)) { ab8500_charger_probe()
3613 ret = PTR_ERR(di->regu); ab8500_charger_probe()
3614 dev_err(di->dev, "failed to get vddadc regulator\n"); ab8500_charger_probe()
3620 ret = ab8500_charger_init_hw_registers(di); ab8500_charger_probe()
3622 dev_err(di->dev, "failed to initialize ABB registers\n"); ab8500_charger_probe()
3627 if (di->ac_chg.enabled) { ab8500_charger_probe()
3628 di->ac_chg.psy = power_supply_register(di->dev, ab8500_charger_probe()
3631 if (IS_ERR(di->ac_chg.psy)) { ab8500_charger_probe()
3632 dev_err(di->dev, "failed to register AC charger\n"); ab8500_charger_probe()
3633 ret = PTR_ERR(di->ac_chg.psy); ab8500_charger_probe()
3639 if (di->usb_chg.enabled) { ab8500_charger_probe()
3640 di->usb_chg.psy = power_supply_register(di->dev, ab8500_charger_probe()
3643 if (IS_ERR(di->usb_chg.psy)) { ab8500_charger_probe()
3644 dev_err(di->dev, "failed to register USB charger\n"); ab8500_charger_probe()
3645 ret = PTR_ERR(di->usb_chg.psy); ab8500_charger_probe()
3650 di->usb_phy = usb_get_phy(USB_PHY_TYPE_USB2); ab8500_charger_probe()
3651 if (IS_ERR_OR_NULL(di->usb_phy)) { ab8500_charger_probe()
3652 dev_err(di->dev, "failed to get usb transceiver\n"); ab8500_charger_probe()
3656 di->nb.notifier_call = ab8500_charger_usb_notifier_call; ab8500_charger_probe()
3657 ret = usb_register_notifier(di->usb_phy, &di->nb); ab8500_charger_probe()
3659 dev_err(di->dev, "failed to register usb notifier\n"); ab8500_charger_probe()
3664 charger_status = ab8500_charger_detect_chargers(di, true); ab8500_charger_probe()
3666 di->ac.charger_connected = 1; ab8500_charger_probe()
3667 di->ac_conn = true; ab8500_charger_probe()
3668 ab8500_power_supply_changed(di, di->ac_chg.psy); ab8500_charger_probe()
3669 sysfs_notify(&di->ac_chg.psy->dev.kobj, NULL, "present"); ab8500_charger_probe()
3673 di->vbus_detected = true; ab8500_charger_probe()
3674 di->vbus_detected_start = true; ab8500_charger_probe()
3675 queue_work(di->charger_wq, ab8500_charger_probe()
3676 &di->detect_usb_type_work); ab8500_charger_probe()
3684 ab8500_charger_irq[i].name, di); ab8500_charger_probe()
3687 dev_err(di->dev, "failed to request %s IRQ %d: %d\n" ab8500_charger_probe()
3691 dev_dbg(di->dev, "Requested %s IRQ %d: %d\n", ab8500_charger_probe()
3695 platform_set_drvdata(pdev, di); ab8500_charger_probe()
3697 mutex_lock(&di->charger_attached_mutex); ab8500_charger_probe()
3699 ch_stat = ab8500_charger_detect_chargers(di, false); ab8500_charger_probe()
3702 if (is_ab8500(di->parent)) ab8500_charger_probe()
3703 queue_delayed_work(di->charger_wq, ab8500_charger_probe()
3704 &di->ac_charger_attached_work, ab8500_charger_probe()
3708 if (is_ab8500(di->parent)) ab8500_charger_probe()
3709 queue_delayed_work(di->charger_wq, ab8500_charger_probe()
3710 &di->usb_charger_attached_work, ab8500_charger_probe()
3714 mutex_unlock(&di->charger_attached_mutex); ab8500_charger_probe()
3719 usb_unregister_notifier(di->usb_phy, &di->nb); ab8500_charger_probe()
3724 free_irq(irq, di); ab8500_charger_probe()
3727 usb_put_phy(di->usb_phy); ab8500_charger_probe()
3729 if (di->usb_chg.enabled) ab8500_charger_probe()
3730 power_supply_unregister(di->usb_chg.psy); ab8500_charger_probe()
3732 if (di->ac_chg.enabled) ab8500_charger_probe()
3733 power_supply_unregister(di->ac_chg.psy); ab8500_charger_probe()
3735 destroy_workqueue(di->charger_wq); ab8500_charger_probe()
H A Dab8500_fg.c361 * @di: pointer to the ab8500_fg structure
366 static int ab8500_fg_is_low_curr(struct ab8500_fg *di, int curr) ab8500_fg_is_low_curr() argument
371 if (curr > -di->bm->fg_params->high_curr_threshold) ab8500_fg_is_low_curr()
379 * @di: pointer to the ab8500_fg structure
385 static int ab8500_fg_add_cap_sample(struct ab8500_fg *di, int sample) ab8500_fg_add_cap_sample() argument
388 struct ab8500_fg_avg_cap *avg = &di->avg_cap; ab8500_fg_add_cap_sample()
417 * @di: pointer to the ab8500_fg structure
421 static void ab8500_fg_clear_cap_samples(struct ab8500_fg *di) ab8500_fg_clear_cap_samples() argument
424 struct ab8500_fg_avg_cap *avg = &di->avg_cap; ab8500_fg_clear_cap_samples()
439 * @di: pointer to the ab8500_fg structure
444 static void ab8500_fg_fill_cap_sample(struct ab8500_fg *di, int sample) ab8500_fg_fill_cap_sample() argument
448 struct ab8500_fg_avg_cap *avg = &di->avg_cap; ab8500_fg_fill_cap_sample()
465 * @di: pointer to the ab8500_fg structure
471 static int ab8500_fg_coulomb_counter(struct ab8500_fg *di, bool enable) ab8500_fg_coulomb_counter() argument
474 mutex_lock(&di->cc_lock); ab8500_fg_coulomb_counter()
478 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_coulomb_counter()
484 ret = abx500_set_register_interruptible(di->dev, ab8500_fg_coulomb_counter()
486 di->fg_samples); ab8500_fg_coulomb_counter()
491 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_coulomb_counter()
497 di->flags.fg_enabled = true; ab8500_fg_coulomb_counter()
500 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_fg_coulomb_counter()
506 ret = abx500_set_register_interruptible(di->dev, ab8500_fg_coulomb_counter()
512 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_coulomb_counter()
517 di->flags.fg_enabled = false; ab8500_fg_coulomb_counter()
520 dev_dbg(di->dev, " CC enabled: %d Samples: %d\n", ab8500_fg_coulomb_counter()
521 enable, di->fg_samples); ab8500_fg_coulomb_counter()
523 mutex_unlock(&di->cc_lock); ab8500_fg_coulomb_counter()
527 dev_err(di->dev, "%s Enabling coulomb counter failed\n", __func__); ab8500_fg_coulomb_counter()
528 mutex_unlock(&di->cc_lock); ab8500_fg_coulomb_counter()
534 * @di: pointer to the ab8500_fg structure
540 int ab8500_fg_inst_curr_start(struct ab8500_fg *di) ab8500_fg_inst_curr_start() argument
545 mutex_lock(&di->cc_lock); ab8500_fg_inst_curr_start()
547 di->nbr_cceoc_irq_cnt = 0; ab8500_fg_inst_curr_start()
548 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_inst_curr_start()
554 dev_dbg(di->dev, "%s Enable FG\n", __func__); ab8500_fg_inst_curr_start()
555 di->turn_off_fg = true; ab8500_fg_inst_curr_start()
558 ret = abx500_set_register_interruptible(di->dev, ab8500_fg_inst_curr_start()
565 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_inst_curr_start()
571 di->turn_off_fg = false; ab8500_fg_inst_curr_start()
575 reinit_completion(&di->ab8500_fg_started); ab8500_fg_inst_curr_start()
576 reinit_completion(&di->ab8500_fg_complete); ab8500_fg_inst_curr_start()
577 enable_irq(di->irq); ab8500_fg_inst_curr_start()
582 mutex_unlock(&di->cc_lock); ab8500_fg_inst_curr_start()
588 * @di: pointer to the ab8500_fg structure
592 int ab8500_fg_inst_curr_started(struct ab8500_fg *di) ab8500_fg_inst_curr_started() argument
594 return completion_done(&di->ab8500_fg_started); ab8500_fg_inst_curr_started()
599 * @di: pointer to the ab8500_fg structure
603 int ab8500_fg_inst_curr_done(struct ab8500_fg *di) ab8500_fg_inst_curr_done() argument
605 return completion_done(&di->ab8500_fg_complete); ab8500_fg_inst_curr_done()
610 * @di: pointer to the ab8500_fg structure
617 int ab8500_fg_inst_curr_finalize(struct ab8500_fg *di, int *res) ab8500_fg_inst_curr_finalize() argument
624 if (!completion_done(&di->ab8500_fg_complete)) { ab8500_fg_inst_curr_finalize()
626 &di->ab8500_fg_complete, ab8500_fg_inst_curr_finalize()
628 dev_dbg(di->dev, "Finalize time: %d ms\n", ab8500_fg_inst_curr_finalize()
632 disable_irq(di->irq); ab8500_fg_inst_curr_finalize()
633 di->nbr_cceoc_irq_cnt = 0; ab8500_fg_inst_curr_finalize()
634 dev_err(di->dev, "completion timed out [%d]\n", ab8500_fg_inst_curr_finalize()
640 disable_irq(di->irq); ab8500_fg_inst_curr_finalize()
641 di->nbr_cceoc_irq_cnt = 0; ab8500_fg_inst_curr_finalize()
643 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_fg_inst_curr_finalize()
651 ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE, ab8500_fg_inst_curr_finalize()
656 ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE, ab8500_fg_inst_curr_finalize()
680 (1000 * di->bm->fg_res); ab8500_fg_inst_curr_finalize()
682 if (di->turn_off_fg) { ab8500_fg_inst_curr_finalize()
683 dev_dbg(di->dev, "%s Disable FG\n", __func__); ab8500_fg_inst_curr_finalize()
686 ret = abx500_set_register_interruptible(di->dev, ab8500_fg_inst_curr_finalize()
692 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_inst_curr_finalize()
697 mutex_unlock(&di->cc_lock); ab8500_fg_inst_curr_finalize()
702 mutex_unlock(&di->cc_lock); ab8500_fg_inst_curr_finalize()
708 * @di: pointer to the ab8500_fg structure
713 int ab8500_fg_inst_curr_blocking(struct ab8500_fg *di) ab8500_fg_inst_curr_blocking() argument
719 ret = ab8500_fg_inst_curr_start(di); ab8500_fg_inst_curr_blocking()
721 dev_err(di->dev, "Failed to initialize fg_inst\n"); ab8500_fg_inst_curr_blocking()
726 if (!completion_done(&di->ab8500_fg_started)) { ab8500_fg_inst_curr_blocking()
728 &di->ab8500_fg_started, ab8500_fg_inst_curr_blocking()
730 dev_dbg(di->dev, "Start time: %d ms\n", ab8500_fg_inst_curr_blocking()
734 dev_err(di->dev, "completion timed out [%d]\n", ab8500_fg_inst_curr_blocking()
740 ret = ab8500_fg_inst_curr_finalize(di, &res); ab8500_fg_inst_curr_blocking()
742 dev_err(di->dev, "Failed to finalize fg_inst\n"); ab8500_fg_inst_curr_blocking()
746 dev_dbg(di->dev, "%s instant current: %d", __func__, res); ab8500_fg_inst_curr_blocking()
749 disable_irq(di->irq); ab8500_fg_inst_curr_blocking()
750 mutex_unlock(&di->cc_lock); ab8500_fg_inst_curr_blocking()
767 struct ab8500_fg *di = container_of(work, ab8500_fg_acc_cur_work() local
770 mutex_lock(&di->cc_lock); ab8500_fg_acc_cur_work()
771 ret = abx500_set_register_interruptible(di->dev, AB8500_GAS_GAUGE, ab8500_fg_acc_cur_work()
776 ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE, ab8500_fg_acc_cur_work()
781 ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE, ab8500_fg_acc_cur_work()
786 ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE, ab8500_fg_acc_cur_work()
803 di->accu_charge = (val * QLSB_NANO_AMP_HOURS_X10) / ab8500_fg_acc_cur_work()
804 (100 * di->bm->fg_res); ab8500_fg_acc_cur_work()
812 di->avg_curr = (val * QLSB_NANO_AMP_HOURS_X10 * 36) / ab8500_fg_acc_cur_work()
813 (1000 * di->bm->fg_res * (di->fg_samples / 4)); ab8500_fg_acc_cur_work()
815 di->flags.conv_done = true; ab8500_fg_acc_cur_work()
817 mutex_unlock(&di->cc_lock); ab8500_fg_acc_cur_work()
819 queue_work(di->fg_wq, &di->fg_work); ab8500_fg_acc_cur_work()
821 dev_dbg(di->dev, "fg_res: %d, fg_samples: %d, gasg: %d, accu_charge: %d \n", ab8500_fg_acc_cur_work()
822 di->bm->fg_res, di->fg_samples, val, di->accu_charge); ab8500_fg_acc_cur_work()
825 dev_err(di->dev, ab8500_fg_acc_cur_work()
827 mutex_unlock(&di->cc_lock); ab8500_fg_acc_cur_work()
828 queue_work(di->fg_wq, &di->fg_work); ab8500_fg_acc_cur_work()
833 * @di: pointer to the ab8500_fg structure
837 static int ab8500_fg_bat_voltage(struct ab8500_fg *di) ab8500_fg_bat_voltage() argument
842 vbat = ab8500_gpadc_convert(di->gpadc, MAIN_BAT_V); ab8500_fg_bat_voltage()
844 dev_err(di->dev, ab8500_fg_bat_voltage()
856 * @di: pointer to the ab8500_fg structure
861 static int ab8500_fg_volt_to_capacity(struct ab8500_fg *di, int voltage) ab8500_fg_volt_to_capacity() argument
867 tbl = di->bm->bat_type[di->bm->batt_id].v_to_cap_tbl, ab8500_fg_volt_to_capacity()
868 tbl_size = di->bm->bat_type[di->bm->batt_id].n_v_cap_tbl_elements; ab8500_fg_volt_to_capacity()
887 dev_dbg(di->dev, "%s Vbat: %d, Cap: %d per mille", ab8500_fg_volt_to_capacity()
895 * @di: pointer to the ab8500_fg structure
900 static int ab8500_fg_uncomp_volt_to_capacity(struct ab8500_fg *di) ab8500_fg_uncomp_volt_to_capacity() argument
902 di->vbat = ab8500_fg_bat_voltage(di); ab8500_fg_uncomp_volt_to_capacity()
903 return ab8500_fg_volt_to_capacity(di, di->vbat); ab8500_fg_uncomp_volt_to_capacity()
908 * @di: pointer to the ab8500_fg structure
913 static int ab8500_fg_battery_resistance(struct ab8500_fg *di) ab8500_fg_battery_resistance() argument
919 tbl = di->bm->bat_type[di->bm->batt_id].batres_tbl; ab8500_fg_battery_resistance()
920 tbl_size = di->bm->bat_type[di->bm->batt_id].n_batres_tbl_elements; ab8500_fg_battery_resistance()
923 if (di->bat_temp / 10 > tbl[i].temp) ab8500_fg_battery_resistance()
928 resist = interpolate(di->bat_temp / 10, ab8500_fg_battery_resistance()
939 dev_dbg(di->dev, "%s Temp: %d battery internal resistance: %d" ab8500_fg_battery_resistance()
941 __func__, di->bat_temp, resist, di->bm->fg_res / 10, ab8500_fg_battery_resistance()
942 (di->bm->fg_res / 10) + resist); ab8500_fg_battery_resistance()
945 resist += di->bm->fg_res / 10; ab8500_fg_battery_resistance()
952 * @di: pointer to the ab8500_fg structure
957 static int ab8500_fg_load_comp_volt_to_capacity(struct ab8500_fg *di) ab8500_fg_load_comp_volt_to_capacity() argument
963 ab8500_fg_inst_curr_start(di); ab8500_fg_load_comp_volt_to_capacity()
966 vbat += ab8500_fg_bat_voltage(di); ab8500_fg_load_comp_volt_to_capacity()
969 } while (!ab8500_fg_inst_curr_done(di)); ab8500_fg_load_comp_volt_to_capacity()
971 ab8500_fg_inst_curr_finalize(di, &di->inst_curr); ab8500_fg_load_comp_volt_to_capacity()
973 di->vbat = vbat / i; ab8500_fg_load_comp_volt_to_capacity()
974 res = ab8500_fg_battery_resistance(di); ab8500_fg_load_comp_volt_to_capacity()
977 vbat_comp = di->vbat - (di->inst_curr * res) / 1000; ab8500_fg_load_comp_volt_to_capacity()
979 dev_dbg(di->dev, "%s Measured Vbat: %dmV,Compensated Vbat %dmV, " ab8500_fg_load_comp_volt_to_capacity()
981 __func__, di->vbat, vbat_comp, res, di->inst_curr, i); ab8500_fg_load_comp_volt_to_capacity()
983 return ab8500_fg_volt_to_capacity(di, vbat_comp); ab8500_fg_load_comp_volt_to_capacity()
988 * @di: pointer to the ab8500_fg structure
993 static int ab8500_fg_convert_mah_to_permille(struct ab8500_fg *di, int cap_mah) ab8500_fg_convert_mah_to_permille() argument
995 return (cap_mah * 1000) / di->bat_cap.max_mah_design; ab8500_fg_convert_mah_to_permille()
1000 * @di: pointer to the ab8500_fg structure
1005 static int ab8500_fg_convert_permille_to_mah(struct ab8500_fg *di, int cap_pm) ab8500_fg_convert_permille_to_mah() argument
1007 return cap_pm * di->bat_cap.max_mah_design / 1000; ab8500_fg_convert_permille_to_mah()
1012 * @di: pointer to the ab8500_fg structure
1017 static int ab8500_fg_convert_mah_to_uwh(struct ab8500_fg *di, int cap_mah) ab8500_fg_convert_mah_to_uwh() argument
1022 div_res = ((u64) cap_mah) * ((u64) di->vbat_nom); ab8500_fg_convert_mah_to_uwh()
1034 * @di: pointer to the ab8500_fg structure
1039 static int ab8500_fg_calc_cap_charging(struct ab8500_fg *di) ab8500_fg_calc_cap_charging() argument
1041 dev_dbg(di->dev, "%s cap_mah %d accu_charge %d\n", ab8500_fg_calc_cap_charging()
1043 di->bat_cap.mah, ab8500_fg_calc_cap_charging()
1044 di->accu_charge); ab8500_fg_calc_cap_charging()
1047 if (di->bat_cap.mah + di->accu_charge > 0) ab8500_fg_calc_cap_charging()
1048 di->bat_cap.mah += di->accu_charge; ab8500_fg_calc_cap_charging()
1050 di->bat_cap.mah = 0; ab8500_fg_calc_cap_charging()
1055 if (di->bat_cap.mah >= di->bat_cap.max_mah_design || ab8500_fg_calc_cap_charging()
1056 di->flags.force_full) { ab8500_fg_calc_cap_charging()
1057 di->bat_cap.mah = di->bat_cap.max_mah_design; ab8500_fg_calc_cap_charging()
1060 ab8500_fg_fill_cap_sample(di, di->bat_cap.mah); ab8500_fg_calc_cap_charging()
1061 di->bat_cap.permille = ab8500_fg_calc_cap_charging()
1062 ab8500_fg_convert_mah_to_permille(di, di->bat_cap.mah); ab8500_fg_calc_cap_charging()
1065 di->vbat = ab8500_fg_bat_voltage(di); ab8500_fg_calc_cap_charging()
1066 di->inst_curr = ab8500_fg_inst_curr_blocking(di); ab8500_fg_calc_cap_charging()
1068 return di->bat_cap.mah; ab8500_fg_calc_cap_charging()
1073 * @di: pointer to the ab8500_fg structure
1080 static int ab8500_fg_calc_cap_discharge_voltage(struct ab8500_fg *di, bool comp) ab8500_fg_calc_cap_discharge_voltage() argument
1085 permille = ab8500_fg_load_comp_volt_to_capacity(di); ab8500_fg_calc_cap_discharge_voltage()
1087 permille = ab8500_fg_uncomp_volt_to_capacity(di); ab8500_fg_calc_cap_discharge_voltage()
1089 mah = ab8500_fg_convert_permille_to_mah(di, permille); ab8500_fg_calc_cap_discharge_voltage()
1091 di->bat_cap.mah = ab8500_fg_add_cap_sample(di, mah); ab8500_fg_calc_cap_discharge_voltage()
1092 di->bat_cap.permille = ab8500_fg_calc_cap_discharge_voltage()
1093 ab8500_fg_convert_mah_to_permille(di, di->bat_cap.mah); ab8500_fg_calc_cap_discharge_voltage()
1095 return di->bat_cap.mah; ab8500_fg_calc_cap_discharge_voltage()
1100 * @di: pointer to the ab8500_fg structure
1106 static int ab8500_fg_calc_cap_discharge_fg(struct ab8500_fg *di) ab8500_fg_calc_cap_discharge_fg() argument
1110 dev_dbg(di->dev, "%s cap_mah %d accu_charge %d\n", ab8500_fg_calc_cap_discharge_fg()
1112 di->bat_cap.mah, ab8500_fg_calc_cap_discharge_fg()
1113 di->accu_charge); ab8500_fg_calc_cap_discharge_fg()
1116 if (di->bat_cap.mah + di->accu_charge > 0) ab8500_fg_calc_cap_discharge_fg()
1117 di->bat_cap.mah += di->accu_charge; ab8500_fg_calc_cap_discharge_fg()
1119 di->bat_cap.mah = 0; ab8500_fg_calc_cap_discharge_fg()
1121 if (di->bat_cap.mah >= di->bat_cap.max_mah_design) ab8500_fg_calc_cap_discharge_fg()
1122 di->bat_cap.mah = di->bat_cap.max_mah_design; ab8500_fg_calc_cap_discharge_fg()
1128 permille = ab8500_fg_convert_mah_to_permille(di, di->bat_cap.mah); ab8500_fg_calc_cap_discharge_fg()
1129 permille_volt = ab8500_fg_uncomp_volt_to_capacity(di); ab8500_fg_calc_cap_discharge_fg()
1132 di->bat_cap.permille = permille_volt; ab8500_fg_calc_cap_discharge_fg()
1133 di->bat_cap.mah = ab8500_fg_convert_permille_to_mah(di, ab8500_fg_calc_cap_discharge_fg()
1134 di->bat_cap.permille); ab8500_fg_calc_cap_discharge_fg()
1136 dev_dbg(di->dev, "%s voltage based: perm %d perm_volt %d\n", ab8500_fg_calc_cap_discharge_fg()
1141 ab8500_fg_fill_cap_sample(di, di->bat_cap.mah); ab8500_fg_calc_cap_discharge_fg()
1143 ab8500_fg_fill_cap_sample(di, di->bat_cap.mah); ab8500_fg_calc_cap_discharge_fg()
1144 di->bat_cap.permille = ab8500_fg_calc_cap_discharge_fg()
1145 ab8500_fg_convert_mah_to_permille(di, di->bat_cap.mah); ab8500_fg_calc_cap_discharge_fg()
1148 return di->bat_cap.mah; ab8500_fg_calc_cap_discharge_fg()
1153 * @di: pointer to the ab8500_fg structure
1157 static int ab8500_fg_capacity_level(struct ab8500_fg *di) ab8500_fg_capacity_level() argument
1161 percent = DIV_ROUND_CLOSEST(di->bat_cap.permille, 10); ab8500_fg_capacity_level()
1163 if (percent <= di->bm->cap_levels->critical || ab8500_fg_capacity_level()
1164 di->flags.low_bat) ab8500_fg_capacity_level()
1166 else if (percent <= di->bm->cap_levels->low) ab8500_fg_capacity_level()
1168 else if (percent <= di->bm->cap_levels->normal) ab8500_fg_capacity_level()
1170 else if (percent <= di->bm->cap_levels->high) ab8500_fg_capacity_level()
1180 * @di: pointer to the ab8500_fg structure
1186 static int ab8500_fg_calculate_scaled_capacity(struct ab8500_fg *di) ab8500_fg_calculate_scaled_capacity() argument
1188 struct ab8500_fg_cap_scaling *cs = &di->bat_cap.cap_scale; ab8500_fg_calculate_scaled_capacity()
1189 int capacity = di->bat_cap.prev_percent; ab8500_fg_calculate_scaled_capacity()
1198 if (di->flags.fully_charged) { ab8500_fg_calculate_scaled_capacity()
1201 max(capacity, di->bm->fg_params->maint_thres); ab8500_fg_calculate_scaled_capacity()
1202 dev_dbg(di->dev, "Scale cap with %d/%d\n", ab8500_fg_calculate_scaled_capacity()
1210 DIV_ROUND_CLOSEST(di->bat_cap.prev_percent * ab8500_fg_calculate_scaled_capacity()
1214 if (di->flags.charging) { ab8500_fg_calculate_scaled_capacity()
1217 dev_dbg(di->dev, "Cap to stop scale lowered %d%%\n", ab8500_fg_calculate_scaled_capacity()
1219 } else if (!di->flags.fully_charged) { ab8500_fg_calculate_scaled_capacity()
1220 if (di->bat_cap.prev_percent >= ab8500_fg_calculate_scaled_capacity()
1222 dev_dbg(di->dev, "Disabling scaled capacity\n"); ab8500_fg_calculate_scaled_capacity()
1224 capacity = di->bat_cap.prev_percent; ab8500_fg_calculate_scaled_capacity()
1226 dev_dbg(di->dev, ab8500_fg_calculate_scaled_capacity()
1239 * @di: pointer to the ab8500_fg structure
1244 static void ab8500_fg_update_cap_scalers(struct ab8500_fg *di) ab8500_fg_update_cap_scalers() argument
1246 struct ab8500_fg_cap_scaling *cs = &di->bat_cap.cap_scale; ab8500_fg_update_cap_scalers()
1250 if (di->flags.charging) { ab8500_fg_update_cap_scalers()
1251 di->bat_cap.cap_scale.disable_cap_level = ab8500_fg_update_cap_scalers()
1252 di->bat_cap.cap_scale.scaled_cap; ab8500_fg_update_cap_scalers()
1253 dev_dbg(di->dev, "Cap to stop scale at charge %d%%\n", ab8500_fg_update_cap_scalers()
1254 di->bat_cap.cap_scale.disable_cap_level); ab8500_fg_update_cap_scalers()
1258 cs->cap_to_scale[1] = di->bat_cap.prev_percent; ab8500_fg_update_cap_scalers()
1262 max(di->bat_cap.prev_percent, ab8500_fg_update_cap_scalers()
1263 di->bm->fg_params->maint_thres); ab8500_fg_update_cap_scalers()
1266 dev_dbg(di->dev, "Cap to scale at discharge %d/%d\n", ab8500_fg_update_cap_scalers()
1273 * @di: pointer to the ab8500_fg structure
1279 static void ab8500_fg_check_capacity_limits(struct ab8500_fg *di, bool init) ab8500_fg_check_capacity_limits() argument
1282 int percent = DIV_ROUND_CLOSEST(di->bat_cap.permille, 10); ab8500_fg_check_capacity_limits()
1284 di->bat_cap.level = ab8500_fg_capacity_level(di); ab8500_fg_check_capacity_limits()
1286 if (di->bat_cap.level != di->bat_cap.prev_level) { ab8500_fg_check_capacity_limits()
1291 if (!(!di->flags.charging && di->bat_cap.level > ab8500_fg_check_capacity_limits()
1292 di->bat_cap.prev_level) || init) { ab8500_fg_check_capacity_limits()
1293 dev_dbg(di->dev, "level changed from %d to %d\n", ab8500_fg_check_capacity_limits()
1294 di->bat_cap.prev_level, ab8500_fg_check_capacity_limits()
1295 di->bat_cap.level); ab8500_fg_check_capacity_limits()
1296 di->bat_cap.prev_level = di->bat_cap.level; ab8500_fg_check_capacity_limits()
1299 dev_dbg(di->dev, "level not allowed to go up " ab8500_fg_check_capacity_limits()
1301 di->bat_cap.prev_level, ab8500_fg_check_capacity_limits()
1302 di->bat_cap.level); ab8500_fg_check_capacity_limits()
1310 if (di->flags.low_bat) { ab8500_fg_check_capacity_limits()
1311 dev_dbg(di->dev, "Battery low, set capacity to 0\n"); ab8500_fg_check_capacity_limits()
1312 di->bat_cap.prev_percent = 0; ab8500_fg_check_capacity_limits()
1313 di->bat_cap.permille = 0; ab8500_fg_check_capacity_limits()
1315 di->bat_cap.prev_mah = 0; ab8500_fg_check_capacity_limits()
1316 di->bat_cap.mah = 0; ab8500_fg_check_capacity_limits()
1318 } else if (di->flags.fully_charged) { ab8500_fg_check_capacity_limits()
1323 if (di->flags.force_full) { ab8500_fg_check_capacity_limits()
1324 di->bat_cap.prev_percent = percent; ab8500_fg_check_capacity_limits()
1325 di->bat_cap.prev_mah = di->bat_cap.mah; ab8500_fg_check_capacity_limits()
1329 if (!di->bat_cap.cap_scale.enable && ab8500_fg_check_capacity_limits()
1330 di->bm->capacity_scaling) { ab8500_fg_check_capacity_limits()
1331 di->bat_cap.cap_scale.enable = true; ab8500_fg_check_capacity_limits()
1332 di->bat_cap.cap_scale.cap_to_scale[0] = 100; ab8500_fg_check_capacity_limits()
1333 di->bat_cap.cap_scale.cap_to_scale[1] = ab8500_fg_check_capacity_limits()
1334 di->bat_cap.prev_percent; ab8500_fg_check_capacity_limits()
1335 di->bat_cap.cap_scale.disable_cap_level = 100; ab8500_fg_check_capacity_limits()
1337 } else if (di->bat_cap.prev_percent != percent) { ab8500_fg_check_capacity_limits()
1338 dev_dbg(di->dev, ab8500_fg_check_capacity_limits()
1342 di->bat_cap.prev_percent = percent; ab8500_fg_check_capacity_limits()
1343 di->bat_cap.prev_mah = di->bat_cap.mah; ab8500_fg_check_capacity_limits()
1347 } else if (di->bat_cap.prev_percent != percent) { ab8500_fg_check_capacity_limits()
1354 di->bat_cap.prev_percent = 1; ab8500_fg_check_capacity_limits()
1358 } else if (!(!di->flags.charging && ab8500_fg_check_capacity_limits()
1359 percent > di->bat_cap.prev_percent) || init) { ab8500_fg_check_capacity_limits()
1364 dev_dbg(di->dev, ab8500_fg_check_capacity_limits()
1366 di->bat_cap.prev_percent, ab8500_fg_check_capacity_limits()
1368 di->bat_cap.permille); ab8500_fg_check_capacity_limits()
1369 di->bat_cap.prev_percent = percent; ab8500_fg_check_capacity_limits()
1370 di->bat_cap.prev_mah = di->bat_cap.mah; ab8500_fg_check_capacity_limits()
1374 dev_dbg(di->dev, "capacity not allowed to go up since " ab8500_fg_check_capacity_limits()
1376 di->bat_cap.prev_percent, ab8500_fg_check_capacity_limits()
1378 di->bat_cap.permille); ab8500_fg_check_capacity_limits()
1383 if (di->bm->capacity_scaling) { ab8500_fg_check_capacity_limits()
1384 di->bat_cap.cap_scale.scaled_cap = ab8500_fg_check_capacity_limits()
1385 ab8500_fg_calculate_scaled_capacity(di); ab8500_fg_check_capacity_limits()
1387 dev_info(di->dev, "capacity=%d (%d)\n", ab8500_fg_check_capacity_limits()
1388 di->bat_cap.prev_percent, ab8500_fg_check_capacity_limits()
1389 di->bat_cap.cap_scale.scaled_cap); ab8500_fg_check_capacity_limits()
1391 power_supply_changed(di->fg_psy); ab8500_fg_check_capacity_limits()
1392 if (di->flags.fully_charged && di->flags.force_full) { ab8500_fg_check_capacity_limits()
1393 dev_dbg(di->dev, "Battery full, notifying.\n"); ab8500_fg_check_capacity_limits()
1394 di->flags.force_full = false; ab8500_fg_check_capacity_limits()
1395 sysfs_notify(&di->fg_kobject, NULL, "charge_full"); ab8500_fg_check_capacity_limits()
1397 sysfs_notify(&di->fg_kobject, NULL, "charge_now"); ab8500_fg_check_capacity_limits()
1401 static void ab8500_fg_charge_state_to(struct ab8500_fg *di, ab8500_fg_charge_state_to() argument
1404 dev_dbg(di->dev, "Charge state from %d [%s] to %d [%s]\n", ab8500_fg_charge_state_to()
1405 di->charge_state, ab8500_fg_charge_state_to()
1406 charge_state[di->charge_state], ab8500_fg_charge_state_to()
1410 di->charge_state = new_state; ab8500_fg_charge_state_to()
1413 static void ab8500_fg_discharge_state_to(struct ab8500_fg *di, ab8500_fg_discharge_state_to() argument
1416 dev_dbg(di->dev, "Disharge state from %d [%s] to %d [%s]\n", ab8500_fg_discharge_state_to()
1417 di->discharge_state, ab8500_fg_discharge_state_to()
1418 discharge_state[di->discharge_state], ab8500_fg_discharge_state_to()
1422 di->discharge_state = new_state; ab8500_fg_discharge_state_to()
1427 * @di: pointer to the ab8500_fg structure
1431 static void ab8500_fg_algorithm_charging(struct ab8500_fg *di) ab8500_fg_algorithm_charging() argument
1437 if (di->discharge_state != AB8500_FG_DISCHARGE_INIT_RECOVERY) ab8500_fg_algorithm_charging()
1438 ab8500_fg_discharge_state_to(di, ab8500_fg_algorithm_charging()
1441 switch (di->charge_state) { ab8500_fg_algorithm_charging()
1443 di->fg_samples = SEC_TO_SAMPLE( ab8500_fg_algorithm_charging()
1444 di->bm->fg_params->accu_charging); ab8500_fg_algorithm_charging()
1446 ab8500_fg_coulomb_counter(di, true); ab8500_fg_algorithm_charging()
1447 ab8500_fg_charge_state_to(di, AB8500_FG_CHARGE_READOUT); ab8500_fg_algorithm_charging()
1455 mutex_lock(&di->cc_lock); ab8500_fg_algorithm_charging()
1456 if (!di->flags.conv_done && !di->flags.force_full) { ab8500_fg_algorithm_charging()
1458 mutex_unlock(&di->cc_lock); ab8500_fg_algorithm_charging()
1459 dev_dbg(di->dev, "%s CC conv not done\n", ab8500_fg_algorithm_charging()
1464 di->flags.conv_done = false; ab8500_fg_algorithm_charging()
1465 mutex_unlock(&di->cc_lock); ab8500_fg_algorithm_charging()
1467 ab8500_fg_calc_cap_charging(di); ab8500_fg_algorithm_charging()
1476 ab8500_fg_check_capacity_limits(di, false); ab8500_fg_algorithm_charging()
1479 static void force_capacity(struct ab8500_fg *di) force_capacity() argument
1483 ab8500_fg_clear_cap_samples(di); force_capacity()
1484 cap = di->bat_cap.user_mah; force_capacity()
1485 if (cap > di->bat_cap.max_mah_design) { force_capacity()
1486 dev_dbg(di->dev, "Remaining cap %d can't be bigger than total" force_capacity()
1487 " %d\n", cap, di->bat_cap.max_mah_design); force_capacity()
1488 cap = di->bat_cap.max_mah_design; force_capacity()
1490 ab8500_fg_fill_cap_sample(di, di->bat_cap.user_mah); force_capacity()
1491 di->bat_cap.permille = ab8500_fg_convert_mah_to_permille(di, cap); force_capacity()
1492 di->bat_cap.mah = cap; force_capacity()
1493 ab8500_fg_check_capacity_limits(di, true); force_capacity()
1496 static bool check_sysfs_capacity(struct ab8500_fg *di) check_sysfs_capacity() argument
1501 cap = di->bat_cap.user_mah; check_sysfs_capacity()
1503 cap_permille = ab8500_fg_convert_mah_to_permille(di, check_sysfs_capacity()
1504 di->bat_cap.user_mah); check_sysfs_capacity()
1506 lower = di->bat_cap.permille - di->bm->fg_params->user_cap_limit * 10; check_sysfs_capacity()
1507 upper = di->bat_cap.permille + di->bm->fg_params->user_cap_limit * 10; check_sysfs_capacity()
1515 dev_dbg(di->dev, "Capacity limits:" check_sysfs_capacity()
1517 lower, cap_permille, upper, cap, di->bat_cap.mah); check_sysfs_capacity()
1521 dev_dbg(di->dev, "OK! Using users cap %d uAh now\n", cap); check_sysfs_capacity()
1522 force_capacity(di); check_sysfs_capacity()
1525 dev_dbg(di->dev, "Capacity from user out of limits, ignoring"); check_sysfs_capacity()
1531 * @di: pointer to the ab8500_fg structure
1535 static void ab8500_fg_algorithm_discharging(struct ab8500_fg *di) ab8500_fg_algorithm_discharging() argument
1540 if (di->charge_state != AB8500_FG_CHARGE_INIT) ab8500_fg_algorithm_discharging()
1541 ab8500_fg_charge_state_to(di, AB8500_FG_CHARGE_INIT); ab8500_fg_algorithm_discharging()
1543 switch (di->discharge_state) { ab8500_fg_algorithm_discharging()
1546 di->init_cnt = 0; ab8500_fg_algorithm_discharging()
1547 di->fg_samples = SEC_TO_SAMPLE(di->bm->fg_params->init_timer); ab8500_fg_algorithm_discharging()
1548 ab8500_fg_coulomb_counter(di, true); ab8500_fg_algorithm_discharging()
1549 ab8500_fg_discharge_state_to(di, ab8500_fg_algorithm_discharging()
1560 sleep_time = di->bm->fg_params->init_timer; ab8500_fg_algorithm_discharging()
1563 if (di->init_cnt > di->bm->fg_params->init_discard_time) { ab8500_fg_algorithm_discharging()
1564 ab8500_fg_calc_cap_discharge_voltage(di, true); ab8500_fg_algorithm_discharging()
1566 ab8500_fg_check_capacity_limits(di, true); ab8500_fg_algorithm_discharging()
1569 di->init_cnt += sleep_time; ab8500_fg_algorithm_discharging()
1570 if (di->init_cnt > di->bm->fg_params->init_total_time) ab8500_fg_algorithm_discharging()
1571 ab8500_fg_discharge_state_to(di, ab8500_fg_algorithm_discharging()
1577 di->recovery_cnt = 0; ab8500_fg_algorithm_discharging()
1578 di->recovery_needed = true; ab8500_fg_algorithm_discharging()
1579 ab8500_fg_discharge_state_to(di, ab8500_fg_algorithm_discharging()
1585 sleep_time = di->bm->fg_params->recovery_sleep_timer; ab8500_fg_algorithm_discharging()
1593 di->inst_curr = ab8500_fg_inst_curr_blocking(di); ab8500_fg_algorithm_discharging()
1595 if (ab8500_fg_is_low_curr(di, di->inst_curr)) { ab8500_fg_algorithm_discharging()
1596 if (di->recovery_cnt > ab8500_fg_algorithm_discharging()
1597 di->bm->fg_params->recovery_total_time) { ab8500_fg_algorithm_discharging()
1598 di->fg_samples = SEC_TO_SAMPLE( ab8500_fg_algorithm_discharging()
1599 di->bm->fg_params->accu_high_curr); ab8500_fg_algorithm_discharging()
1600 ab8500_fg_coulomb_counter(di, true); ab8500_fg_algorithm_discharging()
1601 ab8500_fg_discharge_state_to(di, ab8500_fg_algorithm_discharging()
1603 di->recovery_needed = false; ab8500_fg_algorithm_discharging()
1605 queue_delayed_work(di->fg_wq, ab8500_fg_algorithm_discharging()
1606 &di->fg_periodic_work, ab8500_fg_algorithm_discharging()
1609 di->recovery_cnt += sleep_time; ab8500_fg_algorithm_discharging()
1611 di->fg_samples = SEC_TO_SAMPLE( ab8500_fg_algorithm_discharging()
1612 di->bm->fg_params->accu_high_curr); ab8500_fg_algorithm_discharging()
1613 ab8500_fg_coulomb_counter(di, true); ab8500_fg_algorithm_discharging()
1614 ab8500_fg_discharge_state_to(di, ab8500_fg_algorithm_discharging()
1620 di->fg_samples = SEC_TO_SAMPLE( ab8500_fg_algorithm_discharging()
1621 di->bm->fg_params->accu_high_curr); ab8500_fg_algorithm_discharging()
1622 ab8500_fg_coulomb_counter(di, true); ab8500_fg_algorithm_discharging()
1623 ab8500_fg_discharge_state_to(di, ab8500_fg_algorithm_discharging()
1628 di->inst_curr = ab8500_fg_inst_curr_blocking(di); ab8500_fg_algorithm_discharging()
1630 if (ab8500_fg_is_low_curr(di, di->inst_curr)) { ab8500_fg_algorithm_discharging()
1632 if (di->high_curr_mode) { ab8500_fg_algorithm_discharging()
1633 di->high_curr_mode = false; ab8500_fg_algorithm_discharging()
1634 di->high_curr_cnt = 0; ab8500_fg_algorithm_discharging()
1637 if (di->recovery_needed) { ab8500_fg_algorithm_discharging()
1638 ab8500_fg_discharge_state_to(di, ab8500_fg_algorithm_discharging()
1641 queue_delayed_work(di->fg_wq, ab8500_fg_algorithm_discharging()
1642 &di->fg_periodic_work, 0); ab8500_fg_algorithm_discharging()
1647 ab8500_fg_calc_cap_discharge_voltage(di, true); ab8500_fg_algorithm_discharging()
1649 mutex_lock(&di->cc_lock); ab8500_fg_algorithm_discharging()
1650 if (!di->flags.conv_done) { ab8500_fg_algorithm_discharging()
1652 mutex_unlock(&di->cc_lock); ab8500_fg_algorithm_discharging()
1653 dev_dbg(di->dev, "%s CC conv not done\n", ab8500_fg_algorithm_discharging()
1658 di->flags.conv_done = false; ab8500_fg_algorithm_discharging()
1659 mutex_unlock(&di->cc_lock); ab8500_fg_algorithm_discharging()
1662 if (!di->high_curr_mode) { ab8500_fg_algorithm_discharging()
1663 di->high_curr_mode = true; ab8500_fg_algorithm_discharging()
1664 di->high_curr_cnt = 0; ab8500_fg_algorithm_discharging()
1667 di->high_curr_cnt += ab8500_fg_algorithm_discharging()
1668 di->bm->fg_params->accu_high_curr; ab8500_fg_algorithm_discharging()
1669 if (di->high_curr_cnt > ab8500_fg_algorithm_discharging()
1670 di->bm->fg_params->high_curr_time) ab8500_fg_algorithm_discharging()
1671 di->recovery_needed = true; ab8500_fg_algorithm_discharging()
1673 ab8500_fg_calc_cap_discharge_fg(di); ab8500_fg_algorithm_discharging()
1676 ab8500_fg_check_capacity_limits(di, false); ab8500_fg_algorithm_discharging()
1681 ab8500_fg_calc_cap_discharge_voltage(di, true); ab8500_fg_algorithm_discharging()
1683 di->fg_samples = SEC_TO_SAMPLE( ab8500_fg_algorithm_discharging()
1684 di->bm->fg_params->accu_high_curr); ab8500_fg_algorithm_discharging()
1685 ab8500_fg_coulomb_counter(di, true); ab8500_fg_algorithm_discharging()
1686 ab8500_fg_discharge_state_to(di, ab8500_fg_algorithm_discharging()
1689 ab8500_fg_check_capacity_limits(di, false); ab8500_fg_algorithm_discharging()
1700 * @di: pointer to the ab8500_fg structure
1703 static void ab8500_fg_algorithm_calibrate(struct ab8500_fg *di) ab8500_fg_algorithm_calibrate() argument
1707 switch (di->calib_state) { ab8500_fg_algorithm_calibrate()
1709 dev_dbg(di->dev, "Calibration ongoing...\n"); ab8500_fg_algorithm_calibrate()
1711 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_fg_algorithm_calibrate()
1717 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_fg_algorithm_calibrate()
1722 di->calib_state = AB8500_FG_CALIB_WAIT; ab8500_fg_algorithm_calibrate()
1725 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_fg_algorithm_calibrate()
1730 di->flags.calibrate = false; ab8500_fg_algorithm_calibrate()
1731 dev_dbg(di->dev, "Calibration done...\n"); ab8500_fg_algorithm_calibrate()
1732 queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); ab8500_fg_algorithm_calibrate()
1735 dev_dbg(di->dev, "Calibration WFI\n"); ab8500_fg_algorithm_calibrate()
1742 dev_err(di->dev, "failed to calibrate the CC\n"); ab8500_fg_algorithm_calibrate()
1743 di->flags.calibrate = false; ab8500_fg_algorithm_calibrate()
1744 di->calib_state = AB8500_FG_CALIB_INIT; ab8500_fg_algorithm_calibrate()
1745 queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); ab8500_fg_algorithm_calibrate()
1750 * @di: pointer to the ab8500_fg structure
1754 static void ab8500_fg_algorithm(struct ab8500_fg *di) ab8500_fg_algorithm() argument
1756 if (di->flags.calibrate) ab8500_fg_algorithm()
1757 ab8500_fg_algorithm_calibrate(di); ab8500_fg_algorithm()
1759 if (di->flags.charging) ab8500_fg_algorithm()
1760 ab8500_fg_algorithm_charging(di); ab8500_fg_algorithm()
1762 ab8500_fg_algorithm_discharging(di); ab8500_fg_algorithm()
1765 dev_dbg(di->dev, "[FG_DATA] %d %d %d %d %d %d %d %d %d %d " ab8500_fg_algorithm()
1767 di->bat_cap.max_mah_design, ab8500_fg_algorithm()
1768 di->bat_cap.max_mah, ab8500_fg_algorithm()
1769 di->bat_cap.mah, ab8500_fg_algorithm()
1770 di->bat_cap.permille, ab8500_fg_algorithm()
1771 di->bat_cap.level, ab8500_fg_algorithm()
1772 di->bat_cap.prev_mah, ab8500_fg_algorithm()
1773 di->bat_cap.prev_percent, ab8500_fg_algorithm()
1774 di->bat_cap.prev_level, ab8500_fg_algorithm()
1775 di->vbat, ab8500_fg_algorithm()
1776 di->inst_curr, ab8500_fg_algorithm()
1777 di->avg_curr, ab8500_fg_algorithm()
1778 di->accu_charge, ab8500_fg_algorithm()
1779 di->flags.charging, ab8500_fg_algorithm()
1780 di->charge_state, ab8500_fg_algorithm()
1781 di->discharge_state, ab8500_fg_algorithm()
1782 di->high_curr_mode, ab8500_fg_algorithm()
1783 di->recovery_needed); ab8500_fg_algorithm()
1794 struct ab8500_fg *di = container_of(work, struct ab8500_fg, ab8500_fg_periodic_work() local
1797 if (di->init_capacity) { ab8500_fg_periodic_work()
1799 ab8500_fg_calc_cap_discharge_voltage(di, true); ab8500_fg_periodic_work()
1800 ab8500_fg_check_capacity_limits(di, true); ab8500_fg_periodic_work()
1801 di->init_capacity = false; ab8500_fg_periodic_work()
1803 queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); ab8500_fg_periodic_work()
1804 } else if (di->flags.user_cap) { ab8500_fg_periodic_work()
1805 if (check_sysfs_capacity(di)) { ab8500_fg_periodic_work()
1806 ab8500_fg_check_capacity_limits(di, true); ab8500_fg_periodic_work()
1807 if (di->flags.charging) ab8500_fg_periodic_work()
1808 ab8500_fg_charge_state_to(di, ab8500_fg_periodic_work()
1811 ab8500_fg_discharge_state_to(di, ab8500_fg_periodic_work()
1814 di->flags.user_cap = false; ab8500_fg_periodic_work()
1815 queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); ab8500_fg_periodic_work()
1817 ab8500_fg_algorithm(di); ab8500_fg_periodic_work()
1832 struct ab8500_fg *di = container_of(work, struct ab8500_fg, ab8500_fg_check_hw_failure_work() local
1839 ret = abx500_get_register_interruptible(di->dev, ab8500_fg_check_hw_failure_work()
1843 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_fg_check_hw_failure_work()
1847 if (!di->flags.bat_ovv) { ab8500_fg_check_hw_failure_work()
1848 dev_dbg(di->dev, "Battery OVV\n"); ab8500_fg_check_hw_failure_work()
1849 di->flags.bat_ovv = true; ab8500_fg_check_hw_failure_work()
1850 power_supply_changed(di->fg_psy); ab8500_fg_check_hw_failure_work()
1853 queue_delayed_work(di->fg_wq, &di->fg_check_hw_failure_work, ab8500_fg_check_hw_failure_work()
1856 dev_dbg(di->dev, "Battery recovered from OVV\n"); ab8500_fg_check_hw_failure_work()
1857 di->flags.bat_ovv = false; ab8500_fg_check_hw_failure_work()
1858 power_supply_changed(di->fg_psy); ab8500_fg_check_hw_failure_work()
1872 struct ab8500_fg *di = container_of(work, struct ab8500_fg, ab8500_fg_low_bat_work() local
1875 vbat = ab8500_fg_bat_voltage(di); ab8500_fg_low_bat_work()
1878 if (vbat < di->bm->fg_params->lowbat_threshold) { ab8500_fg_low_bat_work()
1880 if (di->low_bat_cnt < 1) { ab8500_fg_low_bat_work()
1881 di->flags.low_bat = true; ab8500_fg_low_bat_work()
1882 dev_warn(di->dev, "Shut down pending...\n"); ab8500_fg_low_bat_work()
1889 di->low_bat_cnt--; ab8500_fg_low_bat_work()
1890 dev_warn(di->dev, "Battery voltage still LOW\n"); ab8500_fg_low_bat_work()
1891 queue_delayed_work(di->fg_wq, &di->fg_low_bat_work, ab8500_fg_low_bat_work()
1895 di->flags.low_bat_delay = false; ab8500_fg_low_bat_work()
1896 di->low_bat_cnt = 10; ab8500_fg_low_bat_work()
1897 dev_warn(di->dev, "Battery voltage OK again\n"); ab8500_fg_low_bat_work()
1901 ab8500_fg_check_capacity_limits(di, false); ab8500_fg_low_bat_work()
1907 * @di: pointer to the ab8500_fg structure
1914 static int ab8500_fg_battok_calc(struct ab8500_fg *di, int target) ab8500_fg_battok_calc() argument
1926 * @di: pointer to the ab8500_fg structure
1930 static int ab8500_fg_battok_init_hw_register(struct ab8500_fg *di) ab8500_fg_battok_init_hw_register() argument
1940 sel0 = di->bm->fg_params->battok_falling_th_sel0; ab8500_fg_battok_init_hw_register()
1941 sel1 = di->bm->fg_params->battok_raising_th_sel1; ab8500_fg_battok_init_hw_register()
1943 cbp_sel0 = ab8500_fg_battok_calc(di, sel0); ab8500_fg_battok_init_hw_register()
1944 cbp_sel1 = ab8500_fg_battok_calc(di, sel1); ab8500_fg_battok_init_hw_register()
1949 dev_warn(di->dev, "Invalid voltage step:%d, using %d %d\n", ab8500_fg_battok_init_hw_register()
1955 dev_warn(di->dev, "Invalid voltage step:%d, using %d %d\n", ab8500_fg_battok_init_hw_register()
1960 dev_dbg(di->dev, "using: %x %d %d\n", new_val, cbp_sel0, cbp_sel1); ab8500_fg_battok_init_hw_register()
1961 ret = abx500_set_register_interruptible(di->dev, AB8500_SYS_CTRL2_BLOCK, ab8500_fg_battok_init_hw_register()
1974 struct ab8500_fg *di = container_of(work, struct ab8500_fg, fg_work); ab8500_fg_instant_work() local
1976 ab8500_fg_algorithm(di); ab8500_fg_instant_work()
1988 struct ab8500_fg *di = _di; ab8500_fg_cc_data_end_handler() local
1989 if (!di->nbr_cceoc_irq_cnt) { ab8500_fg_cc_data_end_handler()
1990 di->nbr_cceoc_irq_cnt++; ab8500_fg_cc_data_end_handler()
1991 complete(&di->ab8500_fg_started); ab8500_fg_cc_data_end_handler()
1993 di->nbr_cceoc_irq_cnt = 0; ab8500_fg_cc_data_end_handler()
1994 complete(&di->ab8500_fg_complete); ab8500_fg_cc_data_end_handler()
2008 struct ab8500_fg *di = _di; ab8500_fg_cc_int_calib_handler() local
2009 di->calib_state = AB8500_FG_CALIB_END; ab8500_fg_cc_int_calib_handler()
2010 queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); ab8500_fg_cc_int_calib_handler()
2023 struct ab8500_fg *di = _di; ab8500_fg_cc_convend_handler() local
2025 queue_work(di->fg_wq, &di->fg_acc_cur_work); ab8500_fg_cc_convend_handler()
2039 struct ab8500_fg *di = _di; ab8500_fg_batt_ovv_handler() local
2041 dev_dbg(di->dev, "Battery OVV\n"); ab8500_fg_batt_ovv_handler()
2044 queue_delayed_work(di->fg_wq, &di->fg_check_hw_failure_work, 0); ab8500_fg_batt_ovv_handler()
2058 struct ab8500_fg *di = _di; ab8500_fg_lowbatf_handler() local
2061 if (!di->flags.low_bat_delay) { ab8500_fg_lowbatf_handler()
2062 dev_warn(di->dev, "Battery voltage is below LOW threshold\n"); ab8500_fg_lowbatf_handler()
2063 di->flags.low_bat_delay = true; ab8500_fg_lowbatf_handler()
2068 queue_delayed_work(di->fg_wq, &di->fg_low_bat_work, ab8500_fg_lowbatf_handler()
2096 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8500_fg_get_property() local
2107 if (di->flags.bat_ovv) ab8500_fg_get_property()
2110 val->intval = di->vbat * 1000; ab8500_fg_get_property()
2113 val->intval = di->inst_curr * 1000; ab8500_fg_get_property()
2116 val->intval = di->avg_curr * 1000; ab8500_fg_get_property()
2119 val->intval = ab8500_fg_convert_mah_to_uwh(di, ab8500_fg_get_property()
2120 di->bat_cap.max_mah_design); ab8500_fg_get_property()
2123 val->intval = ab8500_fg_convert_mah_to_uwh(di, ab8500_fg_get_property()
2124 di->bat_cap.max_mah); ab8500_fg_get_property()
2127 if (di->flags.batt_unknown && !di->bm->chg_unknown_bat && ab8500_fg_get_property()
2128 di->flags.batt_id_received) ab8500_fg_get_property()
2129 val->intval = ab8500_fg_convert_mah_to_uwh(di, ab8500_fg_get_property()
2130 di->bat_cap.max_mah); ab8500_fg_get_property()
2132 val->intval = ab8500_fg_convert_mah_to_uwh(di, ab8500_fg_get_property()
2133 di->bat_cap.prev_mah); ab8500_fg_get_property()
2136 val->intval = di->bat_cap.max_mah_design; ab8500_fg_get_property()
2139 val->intval = di->bat_cap.max_mah; ab8500_fg_get_property()
2142 if (di->flags.batt_unknown && !di->bm->chg_unknown_bat && ab8500_fg_get_property()
2143 di->flags.batt_id_received) ab8500_fg_get_property()
2144 val->intval = di->bat_cap.max_mah; ab8500_fg_get_property()
2146 val->intval = di->bat_cap.prev_mah; ab8500_fg_get_property()
2149 if (di->flags.batt_unknown && !di->bm->chg_unknown_bat && ab8500_fg_get_property()
2150 di->flags.batt_id_received) ab8500_fg_get_property()
2153 val->intval = di->bat_cap.prev_percent; ab8500_fg_get_property()
2156 if (di->flags.batt_unknown && !di->bm->chg_unknown_bat && ab8500_fg_get_property()
2157 di->flags.batt_id_received) ab8500_fg_get_property()
2160 val->intval = di->bat_cap.prev_level; ab8500_fg_get_property()
2172 struct ab8500_fg *di; ab8500_fg_get_ext_psy_data() local
2179 di = power_supply_get_drvdata(psy); ab8500_fg_get_ext_psy_data()
2209 if (!di->flags.charging) ab8500_fg_get_ext_psy_data()
2211 di->flags.charging = false; ab8500_fg_get_ext_psy_data()
2212 di->flags.fully_charged = false; ab8500_fg_get_ext_psy_data()
2213 if (di->bm->capacity_scaling) ab8500_fg_get_ext_psy_data()
2214 ab8500_fg_update_cap_scalers(di); ab8500_fg_get_ext_psy_data()
2215 queue_work(di->fg_wq, &di->fg_work); ab8500_fg_get_ext_psy_data()
2218 if (di->flags.fully_charged) ab8500_fg_get_ext_psy_data()
2220 di->flags.fully_charged = true; ab8500_fg_get_ext_psy_data()
2221 di->flags.force_full = true; ab8500_fg_get_ext_psy_data()
2223 di->bat_cap.max_mah = di->bat_cap.mah; ab8500_fg_get_ext_psy_data()
2224 queue_work(di->fg_wq, &di->fg_work); ab8500_fg_get_ext_psy_data()
2227 if (di->flags.charging && ab8500_fg_get_ext_psy_data()
2228 !di->flags.fully_charged) ab8500_fg_get_ext_psy_data()
2230 di->flags.charging = true; ab8500_fg_get_ext_psy_data()
2231 di->flags.fully_charged = false; ab8500_fg_get_ext_psy_data()
2232 if (di->bm->capacity_scaling) ab8500_fg_get_ext_psy_data()
2233 ab8500_fg_update_cap_scalers(di); ab8500_fg_get_ext_psy_data()
2234 queue_work(di->fg_wq, &di->fg_work); ab8500_fg_get_ext_psy_data()
2244 if (!di->flags.batt_id_received && ab8500_fg_get_ext_psy_data()
2245 di->bm->batt_id != BATTERY_UNKNOWN) { ab8500_fg_get_ext_psy_data()
2248 b = &(di->bm->bat_type[di->bm->batt_id]); ab8500_fg_get_ext_psy_data()
2250 di->flags.batt_id_received = true; ab8500_fg_get_ext_psy_data()
2252 di->bat_cap.max_mah_design = ab8500_fg_get_ext_psy_data()
2256 di->bat_cap.max_mah = ab8500_fg_get_ext_psy_data()
2257 di->bat_cap.max_mah_design; ab8500_fg_get_ext_psy_data()
2259 di->vbat_nom = b->nominal_voltage; ab8500_fg_get_ext_psy_data()
2263 di->flags.batt_unknown = false; ab8500_fg_get_ext_psy_data()
2265 di->flags.batt_unknown = true; ab8500_fg_get_ext_psy_data()
2274 if (di->flags.batt_id_received) ab8500_fg_get_ext_psy_data()
2275 di->bat_temp = ret.intval; ab8500_fg_get_ext_psy_data()
2290 * @di: pointer to the ab8500_fg structure
2294 static int ab8500_fg_init_hw_registers(struct ab8500_fg *di) ab8500_fg_init_hw_registers() argument
2299 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_fg_init_hw_registers()
2305 dev_err(di->dev, "failed to set BATT_OVV\n"); ab8500_fg_init_hw_registers()
2310 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_fg_init_hw_registers()
2316 dev_err(di->dev, "failed to enable BATT_OVV\n"); ab8500_fg_init_hw_registers()
2321 ret = abx500_set_register_interruptible(di->dev, ab8500_fg_init_hw_registers()
2325 di->bm->fg_params->lowbat_threshold) << 1 | ab8500_fg_init_hw_registers()
2328 dev_err(di->dev, "%s write failed\n", __func__); ab8500_fg_init_hw_registers()
2333 ret = ab8500_fg_battok_init_hw_register(di); ab8500_fg_init_hw_registers()
2335 dev_err(di->dev, "BattOk init write failed.\n"); ab8500_fg_init_hw_registers()
2339 if (((is_ab8505(di->parent) || is_ab9540(di->parent)) && ab8500_fg_init_hw_registers()
2340 abx500_get_chip_id(di->dev) >= AB8500_CUT2P0) ab8500_fg_init_hw_registers()
2341 || is_ab8540(di->parent)) { ab8500_fg_init_hw_registers()
2342 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_init_hw_registers()
2343 AB8505_RTC_PCUT_MAX_TIME_REG, di->bm->fg_params->pcut_max_time); ab8500_fg_init_hw_registers()
2346 dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_MAX_TIME_REG\n", __func__); ab8500_fg_init_hw_registers()
2350 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_init_hw_registers()
2351 AB8505_RTC_PCUT_FLAG_TIME_REG, di->bm->fg_params->pcut_flag_time); ab8500_fg_init_hw_registers()
2354 dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_FLAG_TIME_REG\n", __func__); ab8500_fg_init_hw_registers()
2358 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_init_hw_registers()
2359 AB8505_RTC_PCUT_RESTART_REG, di->bm->fg_params->pcut_max_restart); ab8500_fg_init_hw_registers()
2362 dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_RESTART_REG\n", __func__); ab8500_fg_init_hw_registers()
2366 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_init_hw_registers()
2367 AB8505_RTC_PCUT_DEBOUNCE_REG, di->bm->fg_params->pcut_debounce_time); ab8500_fg_init_hw_registers()
2370 dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_DEBOUNCE_REG\n", __func__); ab8500_fg_init_hw_registers()
2374 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8500_fg_init_hw_registers()
2375 AB8505_RTC_PCUT_CTL_STATUS_REG, di->bm->fg_params->pcut_enable); ab8500_fg_init_hw_registers()
2378 dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_CTL_STATUS_REG\n", __func__); ab8500_fg_init_hw_registers()
2397 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8500_fg_external_power_changed() local
2400 di->fg_psy, ab8500_fg_get_ext_psy_data); ab8500_fg_external_power_changed()
2413 struct ab8500_fg *di = container_of(work, struct ab8500_fg, ab8500_fg_reinit_work() local
2416 if (di->flags.calibrate == false) { ab8500_fg_reinit_work()
2417 dev_dbg(di->dev, "Resetting FG state machine to init.\n"); ab8500_fg_reinit_work()
2418 ab8500_fg_clear_cap_samples(di); ab8500_fg_reinit_work()
2419 ab8500_fg_calc_cap_discharge_voltage(di, true); ab8500_fg_reinit_work()
2420 ab8500_fg_charge_state_to(di, AB8500_FG_CHARGE_INIT); ab8500_fg_reinit_work()
2421 ab8500_fg_discharge_state_to(di, AB8500_FG_DISCHARGE_INIT); ab8500_fg_reinit_work()
2422 queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); ab8500_fg_reinit_work()
2425 dev_err(di->dev, "Residual offset calibration ongoing " ab8500_fg_reinit_work()
2428 queue_delayed_work(di->fg_wq, &di->fg_reinit_work, ab8500_fg_reinit_work()
2441 static ssize_t charge_full_show(struct ab8500_fg *di, char *buf) charge_full_show() argument
2443 return sprintf(buf, "%d\n", di->bat_cap.max_mah); charge_full_show()
2446 static ssize_t charge_full_store(struct ab8500_fg *di, const char *buf, charge_full_store() argument
2454 dev_dbg(di->dev, "Ret %zd charge_full %lu", ret, charge_full); charge_full_store()
2457 di->bat_cap.max_mah = (int) charge_full; charge_full_store()
2463 static ssize_t charge_now_show(struct ab8500_fg *di, char *buf) charge_now_show() argument
2465 return sprintf(buf, "%d\n", di->bat_cap.prev_mah); charge_now_show()
2468 static ssize_t charge_now_store(struct ab8500_fg *di, const char *buf, charge_now_store() argument
2476 dev_dbg(di->dev, "Ret %zd charge_now %lu was %d", charge_now_store()
2477 ret, charge_now, di->bat_cap.prev_mah); charge_now_store()
2480 di->bat_cap.user_mah = (int) charge_now; charge_now_store()
2481 di->flags.user_cap = true; charge_now_store()
2483 queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); charge_now_store()
2498 struct ab8500_fg *di; ab8500_fg_show() local
2501 di = container_of(kobj, struct ab8500_fg, fg_kobject); ab8500_fg_show()
2506 return entry->show(di, buf); ab8500_fg_show()
2513 struct ab8500_fg *di; ab8500_fg_store() local
2516 di = container_of(kobj, struct ab8500_fg, fg_kobject); ab8500_fg_store()
2521 return entry->store(di, buf, count); ab8500_fg_store()
2542 * @di: pointer to the struct ab8500_chargalg
2546 static void ab8500_fg_sysfs_exit(struct ab8500_fg *di) ab8500_fg_sysfs_exit() argument
2548 kobject_del(&di->fg_kobject); ab8500_fg_sysfs_exit()
2553 * @di: pointer to the struct ab8500_chargalg
2558 static int ab8500_fg_sysfs_init(struct ab8500_fg *di) ab8500_fg_sysfs_init() argument
2562 ret = kobject_init_and_add(&di->fg_kobject, ab8500_fg_sysfs_init()
2566 dev_err(di->dev, "failed to create sysfs entry\n"); ab8500_fg_sysfs_init()
2578 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_flagtime_read() local
2580 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_flagtime_read()
2601 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_flagtime_write() local
2610 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_flagtime_write()
2627 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_maxtime_read() local
2629 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_maxtime_read()
2651 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_maxtime_write() local
2659 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_maxtime_write()
2676 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_restart_read() local
2678 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_restart_read()
2699 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_restart_write() local
2707 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_restart_write()
2725 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_timer_read() local
2727 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_timer_read()
2748 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_restart_counter_read() local
2750 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_restart_counter_read()
2771 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_read() local
2773 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_read()
2792 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_write() local
2800 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_write()
2818 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_flag_read() local
2820 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_flag_read()
2841 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_debounce_read() local
2843 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_debounce_read()
2864 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_debounce_write() local
2872 ret = abx500_set_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_debounce_write()
2889 struct ab8500_fg *di = power_supply_get_drvdata(psy); ab8505_powercut_enable_status_read() local
2891 ret = abx500_get_register_interruptible(di->dev, AB8500_RTC, ab8505_powercut_enable_status_read()
2924 static int ab8500_fg_sysfs_psy_create_attrs(struct ab8500_fg *di) ab8500_fg_sysfs_psy_create_attrs() argument
2928 if (((is_ab8505(di->parent) || is_ab9540(di->parent)) && ab8500_fg_sysfs_psy_create_attrs()
2929 abx500_get_chip_id(di->dev) >= AB8500_CUT2P0) ab8500_fg_sysfs_psy_create_attrs()
2930 || is_ab8540(di->parent)) { ab8500_fg_sysfs_psy_create_attrs()
2932 if (device_create_file(&di->fg_psy->dev, ab8500_fg_sysfs_psy_create_attrs()
2938 dev_err(&di->fg_psy->dev, "Failed creating sysfs psy attrs for ab8505.\n"); ab8500_fg_sysfs_psy_create_attrs()
2940 device_remove_file(&di->fg_psy->dev, ab8500_fg_sysfs_psy_create_attrs()
2946 static void ab8500_fg_sysfs_psy_remove_attrs(struct ab8500_fg *di) ab8500_fg_sysfs_psy_remove_attrs() argument
2950 if (((is_ab8505(di->parent) || is_ab9540(di->parent)) && ab8500_fg_sysfs_psy_remove_attrs()
2951 abx500_get_chip_id(di->dev) >= AB8500_CUT2P0) ab8500_fg_sysfs_psy_remove_attrs()
2952 || is_ab8540(di->parent)) { ab8500_fg_sysfs_psy_remove_attrs()
2954 (void)device_remove_file(&di->fg_psy->dev, ab8500_fg_sysfs_psy_remove_attrs()
2964 struct ab8500_fg *di = platform_get_drvdata(pdev); ab8500_fg_resume() local
2970 if (!di->flags.charging) { ab8500_fg_resume()
2971 ab8500_fg_discharge_state_to(di, AB8500_FG_DISCHARGE_WAKEUP); ab8500_fg_resume()
2972 queue_work(di->fg_wq, &di->fg_work); ab8500_fg_resume()
2981 struct ab8500_fg *di = platform_get_drvdata(pdev); ab8500_fg_suspend() local
2983 flush_delayed_work(&di->fg_periodic_work); ab8500_fg_suspend()
2984 flush_work(&di->fg_work); ab8500_fg_suspend()
2985 flush_work(&di->fg_acc_cur_work); ab8500_fg_suspend()
2986 flush_delayed_work(&di->fg_reinit_work); ab8500_fg_suspend()
2987 flush_delayed_work(&di->fg_low_bat_work); ab8500_fg_suspend()
2988 flush_delayed_work(&di->fg_check_hw_failure_work); ab8500_fg_suspend()
2994 if (di->flags.fg_enabled && !di->flags.charging) ab8500_fg_suspend()
2995 ab8500_fg_coulomb_counter(di, false); ab8500_fg_suspend()
3007 struct ab8500_fg *di = platform_get_drvdata(pdev); ab8500_fg_remove() local
3009 list_del(&di->node); ab8500_fg_remove()
3012 ret = ab8500_fg_coulomb_counter(di, false); ab8500_fg_remove()
3014 dev_err(di->dev, "failed to disable coulomb counter\n"); ab8500_fg_remove()
3016 destroy_workqueue(di->fg_wq); ab8500_fg_remove()
3017 ab8500_fg_sysfs_exit(di); ab8500_fg_remove()
3020 ab8500_fg_sysfs_psy_remove_attrs(di); ab8500_fg_remove()
3021 power_supply_unregister(di->fg_psy); ab8500_fg_remove()
3056 struct ab8500_fg *di; ab8500_fg_probe() local
3060 di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL); ab8500_fg_probe()
3061 if (!di) { ab8500_fg_probe()
3070 di->bm = plat; ab8500_fg_probe()
3073 ret = ab8500_bm_of_probe(&pdev->dev, np, di->bm); ab8500_fg_probe()
3080 mutex_init(&di->cc_lock); ab8500_fg_probe()
3083 di->dev = &pdev->dev; ab8500_fg_probe()
3084 di->parent = dev_get_drvdata(pdev->dev.parent); ab8500_fg_probe()
3085 di->gpadc = ab8500_gpadc_get("ab8500-gpadc.0"); ab8500_fg_probe()
3089 psy_cfg.drv_data = di; ab8500_fg_probe()
3091 di->bat_cap.max_mah_design = MILLI_TO_MICRO * ab8500_fg_probe()
3092 di->bm->bat_type[di->bm->batt_id].charge_full_design; ab8500_fg_probe()
3094 di->bat_cap.max_mah = di->bat_cap.max_mah_design; ab8500_fg_probe()
3096 di->vbat_nom = di->bm->bat_type[di->bm->batt_id].nominal_voltage; ab8500_fg_probe()
3098 di->init_capacity = true; ab8500_fg_probe()
3100 ab8500_fg_charge_state_to(di, AB8500_FG_CHARGE_INIT); ab8500_fg_probe()
3101 ab8500_fg_discharge_state_to(di, AB8500_FG_DISCHARGE_INIT); ab8500_fg_probe()
3104 di->fg_wq = create_singlethread_workqueue("ab8500_fg_wq"); ab8500_fg_probe()
3105 if (di->fg_wq == NULL) { ab8500_fg_probe()
3106 dev_err(di->dev, "failed to create work queue\n"); ab8500_fg_probe()
3111 INIT_WORK(&di->fg_work, ab8500_fg_instant_work); ab8500_fg_probe()
3114 INIT_WORK(&di->fg_acc_cur_work, ab8500_fg_acc_cur_work); ab8500_fg_probe()
3117 INIT_DEFERRABLE_WORK(&di->fg_reinit_work, ab8500_fg_probe()
3121 INIT_DEFERRABLE_WORK(&di->fg_periodic_work, ab8500_fg_probe()
3125 INIT_DEFERRABLE_WORK(&di->fg_low_bat_work, ab8500_fg_probe()
3129 INIT_DEFERRABLE_WORK(&di->fg_check_hw_failure_work, ab8500_fg_probe()
3133 di->flags.low_bat = false; ab8500_fg_probe()
3136 di->low_bat_cnt = 10; ab8500_fg_probe()
3139 ret = ab8500_fg_init_hw_registers(di); ab8500_fg_probe()
3141 dev_err(di->dev, "failed to initialize registers\n"); ab8500_fg_probe()
3146 di->flags.batt_unknown = true; ab8500_fg_probe()
3147 di->flags.batt_id_received = false; ab8500_fg_probe()
3150 di->fg_psy = power_supply_register(di->dev, &ab8500_fg_desc, &psy_cfg); ab8500_fg_probe()
3151 if (IS_ERR(di->fg_psy)) { ab8500_fg_probe()
3152 dev_err(di->dev, "failed to register FG psy\n"); ab8500_fg_probe()
3153 ret = PTR_ERR(di->fg_psy); ab8500_fg_probe()
3157 di->fg_samples = SEC_TO_SAMPLE(di->bm->fg_params->init_timer); ab8500_fg_probe()
3158 ab8500_fg_coulomb_counter(di, true); ab8500_fg_probe()
3164 init_completion(&di->ab8500_fg_started); ab8500_fg_probe()
3165 init_completion(&di->ab8500_fg_complete); ab8500_fg_probe()
3172 ab8500_fg_irq_th[i].name, di); ab8500_fg_probe()
3175 dev_err(di->dev, "failed to request %s IRQ %d: %d\n", ab8500_fg_probe()
3179 dev_dbg(di->dev, "Requested %s IRQ %d: %d\n", ab8500_fg_probe()
3187 ab8500_fg_irq_bh[0].name, di); ab8500_fg_probe()
3190 dev_err(di->dev, "failed to request %s IRQ %d: %d\n", ab8500_fg_probe()
3194 dev_dbg(di->dev, "Requested %s IRQ %d: %d\n", ab8500_fg_probe()
3197 di->irq = platform_get_irq_byname(pdev, "CCEOC"); ab8500_fg_probe()
3198 disable_irq(di->irq); ab8500_fg_probe()
3199 di->nbr_cceoc_irq_cnt = 0; ab8500_fg_probe()
3201 platform_set_drvdata(pdev, di); ab8500_fg_probe()
3203 ret = ab8500_fg_sysfs_init(di); ab8500_fg_probe()
3205 dev_err(di->dev, "failed to create sysfs entry\n"); ab8500_fg_probe()
3209 ret = ab8500_fg_sysfs_psy_create_attrs(di); ab8500_fg_probe()
3211 dev_err(di->dev, "failed to create FG psy\n"); ab8500_fg_probe()
3212 ab8500_fg_sysfs_exit(di); ab8500_fg_probe()
3217 di->flags.calibrate = true; ab8500_fg_probe()
3218 di->calib_state = AB8500_FG_CALIB_INIT; ab8500_fg_probe()
3221 di->bat_temp = 210; ab8500_fg_probe()
3224 queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); ab8500_fg_probe()
3226 list_add_tail(&di->node, &ab8500_fg_list); ab8500_fg_probe()
3231 power_supply_unregister(di->fg_psy); ab8500_fg_probe()
3236 free_irq(irq, di); ab8500_fg_probe()
3239 free_irq(irq, di); ab8500_fg_probe()
3241 destroy_workqueue(di->fg_wq); ab8500_fg_probe()
H A Dab8500_btemp.c135 * @di: pointer to the ab8500_btemp structure
143 static int ab8500_btemp_batctrl_volt_to_res(struct ab8500_btemp *di, ab8500_btemp_batctrl_volt_to_res() argument
148 if (is_ab8500_1p1_or_earlier(di->parent)) { ab8500_btemp_batctrl_volt_to_res()
156 if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL) { ab8500_btemp_batctrl_volt_to_res()
162 - di->bm->gnd_lift_resistance * inst_curr) ab8500_btemp_batctrl_volt_to_res()
163 / di->curr_source; ab8500_btemp_batctrl_volt_to_res()
177 * @di: pointer to the ab8500_btemp structure
181 static int ab8500_btemp_read_batctrl_voltage(struct ab8500_btemp *di) ab8500_btemp_read_batctrl_voltage() argument
186 vbtemp = ab8500_gpadc_convert(di->gpadc, BAT_CTRL); ab8500_btemp_read_batctrl_voltage()
188 dev_err(di->dev, ab8500_btemp_read_batctrl_voltage()
199 * @di: pointer to the ab8500_btemp structure
204 static int ab8500_btemp_curr_source_enable(struct ab8500_btemp *di, ab8500_btemp_curr_source_enable() argument
214 if (is_ab8500_1p1_or_earlier(di->parent)) ab8500_btemp_curr_source_enable()
218 if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && enable) { ab8500_btemp_curr_source_enable()
220 if (is_ab8540(di->parent)) { ab8500_btemp_curr_source_enable()
221 if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_60UA) ab8500_btemp_curr_source_enable()
225 } else if (is_ab9540(di->parent) || is_ab8505(di->parent)) { ab8500_btemp_curr_source_enable()
226 if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_16UA) ab8500_btemp_curr_source_enable()
231 if (di->curr_source == BTEMP_BATCTRL_CURR_SRC_7UA) ab8500_btemp_curr_source_enable()
237 dev_dbg(di->dev, "Set BATCTRL %duA\n", di->curr_source); ab8500_btemp_curr_source_enable()
239 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_btemp_curr_source_enable()
243 dev_err(di->dev, "%s failed setting cmp_force\n", ab8500_btemp_curr_source_enable()
255 ret = abx500_set_register_interruptible(di->dev, ab8500_btemp_curr_source_enable()
259 dev_err(di->dev, "%s failed enabling current source\n", ab8500_btemp_curr_source_enable()
263 } else if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && !enable) { ab8500_btemp_curr_source_enable()
264 dev_dbg(di->dev, "Disable BATCTRL curr source\n"); ab8500_btemp_curr_source_enable()
266 if (is_ab8540(di->parent)) { ab8500_btemp_curr_source_enable()
269 di->dev, ab8500_btemp_curr_source_enable()
273 } else if (is_ab9540(di->parent) || is_ab8505(di->parent)) { ab8500_btemp_curr_source_enable()
276 di->dev, ab8500_btemp_curr_source_enable()
283 di->dev, ab8500_btemp_curr_source_enable()
290 dev_err(di->dev, "%s failed disabling current source\n", ab8500_btemp_curr_source_enable()
296 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_btemp_curr_source_enable()
301 dev_err(di->dev, "%s failed enabling PU and comp\n", ab8500_btemp_curr_source_enable()
314 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_btemp_curr_source_enable()
318 dev_err(di->dev, "%s failed disabling force comp\n", ab8500_btemp_curr_source_enable()
330 if (is_ab8540(di->parent)) { ab8500_btemp_curr_source_enable()
332 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_btemp_curr_source_enable()
336 } else if (is_ab9540(di->parent) || is_ab8505(di->parent)) { ab8500_btemp_curr_source_enable()
338 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_btemp_curr_source_enable()
344 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_btemp_curr_source_enable()
351 dev_err(di->dev, "%s failed disabling current source\n", ab8500_btemp_curr_source_enable()
357 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_btemp_curr_source_enable()
362 dev_err(di->dev, "%s failed enabling PU and comp\n", ab8500_btemp_curr_source_enable()
376 ret = abx500_mask_and_set_register_interruptible(di->dev, ab8500_btemp_curr_source_enable()
380 dev_err(di->dev, "%s failed disabling force comp\n", ab8500_btemp_curr_source_enable()
390 * @di: pointer to the ab8500_btemp structure
395 static int ab8500_btemp_get_batctrl_res(struct ab8500_btemp *di) ab8500_btemp_get_batctrl_res() argument
407 ret = ab8500_btemp_curr_source_enable(di, true); ab8500_btemp_get_batctrl_res()
409 dev_err(di->dev, "%s curr source enabled failed\n", __func__); ab8500_btemp_get_batctrl_res()
413 if (!di->fg) ab8500_btemp_get_batctrl_res()
414 di->fg = ab8500_fg_get(); ab8500_btemp_get_batctrl_res()
415 if (!di->fg) { ab8500_btemp_get_batctrl_res()
416 dev_err(di->dev, "No fg found\n"); ab8500_btemp_get_batctrl_res()
420 ret = ab8500_fg_inst_curr_start(di->fg); ab8500_btemp_get_batctrl_res()
423 dev_err(di->dev, "Failed to start current measurement\n"); ab8500_btemp_get_batctrl_res()
429 } while (!ab8500_fg_inst_curr_started(di->fg)); ab8500_btemp_get_batctrl_res()
434 batctrl += ab8500_btemp_read_batctrl_voltage(di); ab8500_btemp_get_batctrl_res()
437 } while (!ab8500_fg_inst_curr_done(di->fg)); ab8500_btemp_get_batctrl_res()
440 ret = ab8500_fg_inst_curr_finalize(di->fg, &inst_curr); ab8500_btemp_get_batctrl_res()
442 dev_err(di->dev, "Failed to finalize current measurement\n"); ab8500_btemp_get_batctrl_res()
446 res = ab8500_btemp_batctrl_volt_to_res(di, batctrl, inst_curr); ab8500_btemp_get_batctrl_res()
448 ret = ab8500_btemp_curr_source_enable(di, false); ab8500_btemp_get_batctrl_res()
450 dev_err(di->dev, "%s curr source disable failed\n", __func__); ab8500_btemp_get_batctrl_res()
454 dev_dbg(di->dev, "%s batctrl: %d res: %d inst_curr: %d samples: %d\n", ab8500_btemp_get_batctrl_res()
462 * @di: pointer to the ab8500_btemp structure
470 static int ab8500_btemp_res_to_temp(struct ab8500_btemp *di, ab8500_btemp_res_to_temp() argument
498 * @di: pointer to the ab8500_btemp structure
502 static int ab8500_btemp_measure_temp(struct ab8500_btemp *di) ab8500_btemp_measure_temp() argument
509 id = di->bm->batt_id; ab8500_btemp_measure_temp()
511 if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && ab8500_btemp_measure_temp()
514 rbat = ab8500_btemp_get_batctrl_res(di); ab8500_btemp_measure_temp()
516 dev_err(di->dev, "%s get batctrl res failed\n", ab8500_btemp_measure_temp()
525 temp = ab8500_btemp_res_to_temp(di, ab8500_btemp_measure_temp()
526 di->bm->bat_type[id].r_to_t_tbl, ab8500_btemp_measure_temp()
527 di->bm->bat_type[id].n_temp_tbl_elements, rbat); ab8500_btemp_measure_temp()
529 vntc = ab8500_gpadc_convert(di->gpadc, BTEMP_BALL); ab8500_btemp_measure_temp()
531 dev_err(di->dev, ab8500_btemp_measure_temp()
542 temp = ab8500_btemp_res_to_temp(di, ab8500_btemp_measure_temp()
543 di->bm->bat_type[id].r_to_t_tbl, ab8500_btemp_measure_temp()
544 di->bm->bat_type[id].n_temp_tbl_elements, rntc); ab8500_btemp_measure_temp()
547 dev_dbg(di->dev, "Battery temperature is %d\n", temp); ab8500_btemp_measure_temp()
553 * @di: pointer to the ab8500_btemp structure
559 static int ab8500_btemp_id(struct ab8500_btemp *di) ab8500_btemp_id() argument
563 if (is_ab8540(di->parent)) ab8500_btemp_id()
564 di->curr_source = BTEMP_BATCTRL_CURR_SRC_60UA; ab8500_btemp_id()
565 else if (is_ab9540(di->parent) || is_ab8505(di->parent)) ab8500_btemp_id()
566 di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA; ab8500_btemp_id()
568 di->curr_source = BTEMP_BATCTRL_CURR_SRC_7UA; ab8500_btemp_id()
570 di->bm->batt_id = BATTERY_UNKNOWN; ab8500_btemp_id()
572 res = ab8500_btemp_get_batctrl_res(di); ab8500_btemp_id()
574 dev_err(di->dev, "%s get batctrl res failed\n", __func__); ab8500_btemp_id()
579 for (i = BATTERY_UNKNOWN + 1; i < di->bm->n_btypes; i++) { ab8500_btemp_id()
580 if ((res <= di->bm->bat_type[i].resis_high) && ab8500_btemp_id()
581 (res >= di->bm->bat_type[i].resis_low)) { ab8500_btemp_id()
582 dev_dbg(di->dev, "Battery detected on %s" ab8500_btemp_id()
585 di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL ? ab8500_btemp_id()
587 di->bm->bat_type[i].resis_low, res, ab8500_btemp_id()
588 di->bm->bat_type[i].resis_high, i); ab8500_btemp_id()
590 di->bm->batt_id = i; ab8500_btemp_id()
595 if (di->bm->batt_id == BATTERY_UNKNOWN) { ab8500_btemp_id()
596 dev_warn(di->dev, "Battery identified as unknown" ab8500_btemp_id()
605 if (di->bm->adc_therm == ABx500_ADC_THERM_BATCTRL && ab8500_btemp_id()
606 di->bm->batt_id == 1) { ab8500_btemp_id()
607 if (is_ab8540(di->parent)) { ab8500_btemp_id()
608 dev_dbg(di->dev, ab8500_btemp_id()
610 di->curr_source = BTEMP_BATCTRL_CURR_SRC_60UA; ab8500_btemp_id()
611 } else if (is_ab9540(di->parent) || is_ab8505(di->parent)) { ab8500_btemp_id()
612 dev_dbg(di->dev, ab8500_btemp_id()
614 di->curr_source = BTEMP_BATCTRL_CURR_SRC_16UA; ab8500_btemp_id()
616 dev_dbg(di->dev, "Set BATCTRL current source to 20uA\n"); ab8500_btemp_id()
617 di->curr_source = BTEMP_BATCTRL_CURR_SRC_20UA; ab8500_btemp_id()
621 return di->bm->batt_id; ab8500_btemp_id()
634 struct ab8500_btemp *di = container_of(work, ab8500_btemp_periodic_work() local
637 if (!di->initialized) { ab8500_btemp_periodic_work()
639 if (ab8500_btemp_id(di) < 0) ab8500_btemp_periodic_work()
640 dev_warn(di->dev, "failed to identify the battery\n"); ab8500_btemp_periodic_work()
643 bat_temp = ab8500_btemp_measure_temp(di); ab8500_btemp_periodic_work()
650 if ((bat_temp == di->prev_bat_temp) || !di->initialized) { ab8500_btemp_periodic_work()
651 if ((di->bat_temp != di->prev_bat_temp) || !di->initialized) { ab8500_btemp_periodic_work()
652 di->initialized = true; ab8500_btemp_periodic_work()
653 di->bat_temp = bat_temp; ab8500_btemp_periodic_work()
654 power_supply_changed(di->btemp_psy); ab8500_btemp_periodic_work()
656 } else if (bat_temp < di->prev_bat_temp) { ab8500_btemp_periodic_work()
657 di->bat_temp--; ab8500_btemp_periodic_work()
658 power_supply_changed(di->btemp_psy); ab8500_btemp_periodic_work()
659 } else if (bat_temp > di->prev_bat_temp) { ab8500_btemp_periodic_work()
660 di->bat_temp++; ab8500_btemp_periodic_work()
661 power_supply_changed(di->btemp_psy); ab8500_btemp_periodic_work()
663 di->prev_bat_temp = bat_temp; ab8500_btemp_periodic_work()
665 if (di->events.ac_conn || di->events.usb_conn) ab8500_btemp_periodic_work()
666 interval = di->bm->temp_interval_chg; ab8500_btemp_periodic_work()
668 interval = di->bm->temp_interval_nochg; ab8500_btemp_periodic_work()
671 queue_delayed_work(di->btemp_wq, ab8500_btemp_periodic_work()
672 &di->btemp_periodic_work, ab8500_btemp_periodic_work()
685 struct ab8500_btemp *di = _di; ab8500_btemp_batctrlindb_handler() local
686 dev_err(di->dev, "Battery removal detected!\n"); ab8500_btemp_batctrlindb_handler()
688 di->events.batt_rem = true; ab8500_btemp_batctrlindb_handler()
689 power_supply_changed(di->btemp_psy); ab8500_btemp_batctrlindb_handler()
703 struct ab8500_btemp *di = _di; ab8500_btemp_templow_handler() local
705 if (is_ab8500_3p3_or_earlier(di->parent)) { ab8500_btemp_templow_handler()
706 dev_dbg(di->dev, "Ignore false btemp low irq" ab8500_btemp_templow_handler()
709 dev_crit(di->dev, "Battery temperature lower than -10deg c\n"); ab8500_btemp_templow_handler()
711 di->events.btemp_low = true; ab8500_btemp_templow_handler()
712 di->events.btemp_high = false; ab8500_btemp_templow_handler()
713 di->events.btemp_medhigh = false; ab8500_btemp_templow_handler()
714 di->events.btemp_lowmed = false; ab8500_btemp_templow_handler()
715 power_supply_changed(di->btemp_psy); ab8500_btemp_templow_handler()
730 struct ab8500_btemp *di = _di; ab8500_btemp_temphigh_handler() local
732 dev_crit(di->dev, "Battery temperature is higher than MAX temp\n"); ab8500_btemp_temphigh_handler()
734 di->events.btemp_high = true; ab8500_btemp_temphigh_handler()
735 di->events.btemp_medhigh = false; ab8500_btemp_temphigh_handler()
736 di->events.btemp_lowmed = false; ab8500_btemp_temphigh_handler()
737 di->events.btemp_low = false; ab8500_btemp_temphigh_handler()
738 power_supply_changed(di->btemp_psy); ab8500_btemp_temphigh_handler()
752 struct ab8500_btemp *di = _di; ab8500_btemp_lowmed_handler() local
754 dev_dbg(di->dev, "Battery temperature is between low and medium\n"); ab8500_btemp_lowmed_handler()
756 di->events.btemp_lowmed = true; ab8500_btemp_lowmed_handler()
757 di->events.btemp_medhigh = false; ab8500_btemp_lowmed_handler()
758 di->events.btemp_high = false; ab8500_btemp_lowmed_handler()
759 di->events.btemp_low = false; ab8500_btemp_lowmed_handler()
760 power_supply_changed(di->btemp_psy); ab8500_btemp_lowmed_handler()
774 struct ab8500_btemp *di = _di; ab8500_btemp_medhigh_handler() local
776 dev_dbg(di->dev, "Battery temperature is between medium and high\n"); ab8500_btemp_medhigh_handler()
778 di->events.btemp_medhigh = true; ab8500_btemp_medhigh_handler()
779 di->events.btemp_lowmed = false; ab8500_btemp_medhigh_handler()
780 di->events.btemp_high = false; ab8500_btemp_medhigh_handler()
781 di->events.btemp_low = false; ab8500_btemp_medhigh_handler()
782 power_supply_changed(di->btemp_psy); ab8500_btemp_medhigh_handler()
789 * @di: pointer to the ab8500_btemp structure
795 static void ab8500_btemp_periodic(struct ab8500_btemp *di, ab8500_btemp_periodic() argument
798 dev_dbg(di->dev, "Enable periodic temperature measurements: %d\n", ab8500_btemp_periodic()
804 cancel_delayed_work_sync(&di->btemp_periodic_work); ab8500_btemp_periodic()
807 queue_delayed_work(di->btemp_wq, &di->btemp_periodic_work, 0); ab8500_btemp_periodic()
812 * @di: pointer to the ab8500_btemp structure
816 int ab8500_btemp_get_temp(struct ab8500_btemp *di) ab8500_btemp_get_temp() argument
824 if (is_ab8500_3p3_or_earlier(di->parent)) { ab8500_btemp_get_temp()
825 temp = di->bat_temp * 10; ab8500_btemp_get_temp()
827 if (di->events.btemp_low) { ab8500_btemp_get_temp()
828 if (temp > di->btemp_ranges.btemp_low_limit) ab8500_btemp_get_temp()
829 temp = di->btemp_ranges.btemp_low_limit * 10; ab8500_btemp_get_temp()
831 temp = di->bat_temp * 10; ab8500_btemp_get_temp()
832 } else if (di->events.btemp_high) { ab8500_btemp_get_temp()
833 if (temp < di->btemp_ranges.btemp_high_limit) ab8500_btemp_get_temp()
834 temp = di->btemp_ranges.btemp_high_limit * 10; ab8500_btemp_get_temp()
836 temp = di->bat_temp * 10; ab8500_btemp_get_temp()
837 } else if (di->events.btemp_lowmed) { ab8500_btemp_get_temp()
838 if (temp > di->btemp_ranges.btemp_med_limit) ab8500_btemp_get_temp()
839 temp = di->btemp_ranges.btemp_med_limit * 10; ab8500_btemp_get_temp()
841 temp = di->bat_temp * 10; ab8500_btemp_get_temp()
842 } else if (di->events.btemp_medhigh) { ab8500_btemp_get_temp()
843 if (temp < di->btemp_ranges.btemp_med_limit) ab8500_btemp_get_temp()
844 temp = di->btemp_ranges.btemp_med_limit * 10; ab8500_btemp_get_temp()
846 temp = di->bat_temp * 10; ab8500_btemp_get_temp()
848 temp = di->bat_temp * 10; ab8500_btemp_get_temp()
884 struct ab8500_btemp *di = power_supply_get_drvdata(psy); ab8500_btemp_get_property() local
889 if (di->events.batt_rem) ab8500_btemp_get_property()
895 val->intval = di->bm->bat_type[di->bm->batt_id].name; ab8500_btemp_get_property()
898 val->intval = ab8500_btemp_get_temp(di); ab8500_btemp_get_property()
910 struct ab8500_btemp *di; ab8500_btemp_get_ext_psy_data() local
917 di = power_supply_get_drvdata(psy); ab8500_btemp_get_ext_psy_data()
944 if (!ret.intval && di->events.ac_conn) { ab8500_btemp_get_ext_psy_data()
945 di->events.ac_conn = false; ab8500_btemp_get_ext_psy_data()
948 else if (ret.intval && !di->events.ac_conn) { ab8500_btemp_get_ext_psy_data()
949 di->events.ac_conn = true; ab8500_btemp_get_ext_psy_data()
950 if (!di->events.usb_conn) ab8500_btemp_get_ext_psy_data()
951 ab8500_btemp_periodic(di, true); ab8500_btemp_get_ext_psy_data()
956 if (!ret.intval && di->events.usb_conn) { ab8500_btemp_get_ext_psy_data()
957 di->events.usb_conn = false; ab8500_btemp_get_ext_psy_data()
960 else if (ret.intval && !di->events.usb_conn) { ab8500_btemp_get_ext_psy_data()
961 di->events.usb_conn = true; ab8500_btemp_get_ext_psy_data()
962 if (!di->events.ac_conn) ab8500_btemp_get_ext_psy_data()
963 ab8500_btemp_periodic(di, true); ab8500_btemp_get_ext_psy_data()
988 struct ab8500_btemp *di = power_supply_get_drvdata(psy); ab8500_btemp_external_power_changed() local
991 di->btemp_psy, ab8500_btemp_get_ext_psy_data); ab8500_btemp_external_power_changed()
1006 struct ab8500_btemp *di = platform_get_drvdata(pdev); ab8500_btemp_resume() local
1008 ab8500_btemp_periodic(di, true); ab8500_btemp_resume()
1016 struct ab8500_btemp *di = platform_get_drvdata(pdev); ab8500_btemp_suspend() local
1018 ab8500_btemp_periodic(di, false); ab8500_btemp_suspend()
1029 struct ab8500_btemp *di = platform_get_drvdata(pdev); ab8500_btemp_remove() local
1035 free_irq(irq, di); ab8500_btemp_remove()
1039 destroy_workqueue(di->btemp_wq); ab8500_btemp_remove()
1042 power_supply_unregister(di->btemp_psy); ab8500_btemp_remove()
1066 struct ab8500_btemp *di; ab8500_btemp_probe() local
1070 di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL); ab8500_btemp_probe()
1071 if (!di) { ab8500_btemp_probe()
1080 di->bm = plat; ab8500_btemp_probe()
1083 ret = ab8500_bm_of_probe(&pdev->dev, np, di->bm); ab8500_btemp_probe()
1091 di->dev = &pdev->dev; ab8500_btemp_probe()
1092 di->parent = dev_get_drvdata(pdev->dev.parent); ab8500_btemp_probe()
1093 di->gpadc = ab8500_gpadc_get("ab8500-gpadc.0"); ab8500_btemp_probe()
1095 di->initialized = false; ab8500_btemp_probe()
1099 psy_cfg.drv_data = di; ab8500_btemp_probe()
1102 di->btemp_wq = ab8500_btemp_probe()
1104 if (di->btemp_wq == NULL) { ab8500_btemp_probe()
1105 dev_err(di->dev, "failed to create work queue\n"); ab8500_btemp_probe()
1110 INIT_DEFERRABLE_WORK(&di->btemp_periodic_work, ab8500_btemp_probe()
1114 di->btemp_ranges.btemp_low_limit = BTEMP_THERMAL_LOW_LIMIT; ab8500_btemp_probe()
1115 di->btemp_ranges.btemp_med_limit = BTEMP_THERMAL_MED_LIMIT; ab8500_btemp_probe()
1117 ret = abx500_get_register_interruptible(di->dev, AB8500_CHARGER, ab8500_btemp_probe()
1120 dev_err(di->dev, "%s ab8500 read failed\n", __func__); ab8500_btemp_probe()
1126 di->btemp_ranges.btemp_high_limit = ab8500_btemp_probe()
1130 di->btemp_ranges.btemp_high_limit = ab8500_btemp_probe()
1134 di->btemp_ranges.btemp_high_limit = ab8500_btemp_probe()
1140 di->btemp_psy = power_supply_register(di->dev, &ab8500_btemp_desc, ab8500_btemp_probe()
1142 if (IS_ERR(di->btemp_psy)) { ab8500_btemp_probe()
1143 dev_err(di->dev, "failed to register BTEMP psy\n"); ab8500_btemp_probe()
1144 ret = PTR_ERR(di->btemp_psy); ab8500_btemp_probe()
1153 ab8500_btemp_irq[i].name, di); ab8500_btemp_probe()
1156 dev_err(di->dev, "failed to request %s IRQ %d: %d\n" ab8500_btemp_probe()
1160 dev_dbg(di->dev, "Requested %s IRQ %d: %d\n", ab8500_btemp_probe()
1164 platform_set_drvdata(pdev, di); ab8500_btemp_probe()
1167 ab8500_btemp_periodic(di, true); ab8500_btemp_probe()
1168 list_add_tail(&di->node, &ab8500_btemp_list); ab8500_btemp_probe()
1173 power_supply_unregister(di->btemp_psy); ab8500_btemp_probe()
1178 free_irq(irq, di); ab8500_btemp_probe()
1181 destroy_workqueue(di->btemp_wq); ab8500_btemp_probe()
H A Drx51_battery.c55 static int rx51_battery_read_voltage(struct rx51_device_info *di) rx51_battery_read_voltage() argument
57 int voltage = rx51_battery_read_adc(di->channel_vbat); rx51_battery_read_voltage()
60 dev_err(di->dev, "Could not read ADC: %d\n", voltage); rx51_battery_read_voltage()
107 static int rx51_battery_read_temperature(struct rx51_device_info *di) rx51_battery_read_temperature() argument
111 int raw = rx51_battery_read_adc(di->channel_temp); rx51_battery_read_temperature()
114 dev_err(di->dev, "Could not read ADC: %d\n", raw); rx51_battery_read_temperature()
146 static int rx51_battery_read_capacity(struct rx51_device_info *di) rx51_battery_read_capacity() argument
148 int capacity = rx51_battery_read_adc(di->channel_bsi); rx51_battery_read_capacity()
151 dev_err(di->dev, "Could not read ADC: %d\n", capacity); rx51_battery_read_capacity()
165 struct rx51_device_info *di = power_supply_get_drvdata(psy); rx51_battery_get_property() local
175 val->intval = rx51_battery_read_voltage(di) ? 1 : 0; rx51_battery_get_property()
178 val->intval = rx51_battery_read_voltage(di); rx51_battery_get_property()
181 val->intval = rx51_battery_read_temperature(di); rx51_battery_get_property()
184 val->intval = rx51_battery_read_capacity(di); rx51_battery_get_property()
208 struct rx51_device_info *di; rx51_battery_probe() local
211 di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL); rx51_battery_probe()
212 if (!di) rx51_battery_probe()
215 platform_set_drvdata(pdev, di); rx51_battery_probe()
217 di->dev = &pdev->dev; rx51_battery_probe()
218 di->bat_desc.name = dev_name(&pdev->dev); rx51_battery_probe()
219 di->bat_desc.type = POWER_SUPPLY_TYPE_BATTERY; rx51_battery_probe()
220 di->bat_desc.properties = rx51_battery_props; rx51_battery_probe()
221 di->bat_desc.num_properties = ARRAY_SIZE(rx51_battery_props); rx51_battery_probe()
222 di->bat_desc.get_property = rx51_battery_get_property; rx51_battery_probe()
224 psy_cfg.drv_data = di; rx51_battery_probe()
226 di->channel_temp = iio_channel_get(di->dev, "temp"); rx51_battery_probe()
227 if (IS_ERR(di->channel_temp)) { rx51_battery_probe()
228 ret = PTR_ERR(di->channel_temp); rx51_battery_probe()
232 di->channel_bsi = iio_channel_get(di->dev, "bsi"); rx51_battery_probe()
233 if (IS_ERR(di->channel_bsi)) { rx51_battery_probe()
234 ret = PTR_ERR(di->channel_bsi); rx51_battery_probe()
238 di->channel_vbat = iio_channel_get(di->dev, "vbat"); rx51_battery_probe()
239 if (IS_ERR(di->channel_vbat)) { rx51_battery_probe()
240 ret = PTR_ERR(di->channel_vbat); rx51_battery_probe()
244 di->bat = power_supply_register(di->dev, &di->bat_desc, &psy_cfg); rx51_battery_probe()
245 if (IS_ERR(di->bat)) { rx51_battery_probe()
246 ret = PTR_ERR(di->bat); rx51_battery_probe()
253 iio_channel_release(di->channel_vbat); rx51_battery_probe()
255 iio_channel_release(di->channel_bsi); rx51_battery_probe()
257 iio_channel_release(di->channel_temp); rx51_battery_probe()
265 struct rx51_device_info *di = platform_get_drvdata(pdev); rx51_battery_remove() local
267 power_supply_unregister(di->bat); rx51_battery_remove()
269 iio_channel_release(di->channel_vbat); rx51_battery_remove()
270 iio_channel_release(di->channel_bsi); rx51_battery_remove()
271 iio_channel_release(di->channel_temp); rx51_battery_remove()
H A Dbq27x00_battery.c89 int (*read)(struct bq27x00_device_info *di, u8 reg, bool single);
206 static inline int bq27x00_read(struct bq27x00_device_info *di, u8 reg, bq27x00_read() argument
209 if (di->chip == BQ27425) bq27x00_read()
210 return di->bus.read(di, reg - BQ27425_REG_OFFSET, single); bq27x00_read()
211 return di->bus.read(di, reg, single); bq27x00_read()
219 static bool bq27xxx_is_chip_version_higher(struct bq27x00_device_info *di) bq27xxx_is_chip_version_higher() argument
221 if (di->chip == BQ27425 || di->chip == BQ27500 || di->chip == BQ27742 bq27xxx_is_chip_version_higher()
222 || di->chip == BQ27510) bq27xxx_is_chip_version_higher()
231 static int bq27x00_battery_read_rsoc(struct bq27x00_device_info *di) bq27x00_battery_read_rsoc() argument
235 if (di->chip == BQ27500 || di->chip == BQ27742) bq27x00_battery_read_rsoc()
236 rsoc = bq27x00_read(di, BQ27500_REG_SOC, false); bq27x00_battery_read_rsoc()
237 else if (di->chip == BQ27510) bq27x00_battery_read_rsoc()
238 rsoc = bq27x00_read(di, BQ27510_REG_SOC, false); bq27x00_battery_read_rsoc()
239 else if (di->chip == BQ27425) bq27x00_battery_read_rsoc()
240 rsoc = bq27x00_read(di, BQ27425_REG_SOC, false); bq27x00_battery_read_rsoc()
242 rsoc = bq27x00_read(di, BQ27000_REG_RSOC, true); bq27x00_battery_read_rsoc()
245 dev_dbg(di->dev, "error reading relative State-of-Charge\n"); bq27x00_battery_read_rsoc()
254 static int bq27x00_battery_read_charge(struct bq27x00_device_info *di, u8 reg) bq27x00_battery_read_charge() argument
258 charge = bq27x00_read(di, reg, false); bq27x00_battery_read_charge()
260 dev_dbg(di->dev, "error reading charge register %02x: %d\n", bq27x00_battery_read_charge()
265 if (bq27xxx_is_chip_version_higher(di)) bq27x00_battery_read_charge()
277 static inline int bq27x00_battery_read_nac(struct bq27x00_device_info *di) bq27x00_battery_read_nac() argument
280 bool is_bq27500 = di->chip == BQ27500; bq27x00_battery_read_nac()
281 bool is_bq27742 = di->chip == BQ27742; bq27x00_battery_read_nac()
282 bool is_higher = bq27xxx_is_chip_version_higher(di); bq27x00_battery_read_nac()
285 flags = bq27x00_read(di, BQ27x00_REG_FLAGS, flags_1b); bq27x00_battery_read_nac()
289 return bq27x00_battery_read_charge(di, BQ27x00_REG_NAC); bq27x00_battery_read_nac()
296 static inline int bq27x00_battery_read_lmd(struct bq27x00_device_info *di) bq27x00_battery_read_lmd() argument
298 return bq27x00_battery_read_charge(di, BQ27x00_REG_LMD); bq27x00_battery_read_lmd()
305 static int bq27x00_battery_read_ilmd(struct bq27x00_device_info *di) bq27x00_battery_read_ilmd() argument
309 if (bq27xxx_is_chip_version_higher(di)) { bq27x00_battery_read_ilmd()
310 if (di->chip == BQ27425) bq27x00_battery_read_ilmd()
311 ilmd = bq27x00_read(di, BQ27425_REG_DCAP, false); bq27x00_battery_read_ilmd()
312 else if (di->chip == BQ27510) bq27x00_battery_read_ilmd()
313 ilmd = bq27x00_read(di, BQ27510_REG_DCAP, false); bq27x00_battery_read_ilmd()
315 ilmd = bq27x00_read(di, BQ27500_REG_DCAP, false); bq27x00_battery_read_ilmd()
317 ilmd = bq27x00_read(di, BQ27000_REG_ILMD, true); bq27x00_battery_read_ilmd()
320 dev_dbg(di->dev, "error reading initial last measured discharge\n"); bq27x00_battery_read_ilmd()
324 if (bq27xxx_is_chip_version_higher(di)) bq27x00_battery_read_ilmd()
336 static int bq27x00_battery_read_energy(struct bq27x00_device_info *di) bq27x00_battery_read_energy() argument
340 ae = bq27x00_read(di, BQ27x00_REG_AE, false); bq27x00_battery_read_energy()
342 dev_dbg(di->dev, "error reading available energy\n"); bq27x00_battery_read_energy()
346 if (di->chip == BQ27500) bq27x00_battery_read_energy()
358 static int bq27x00_battery_read_temperature(struct bq27x00_device_info *di) bq27x00_battery_read_temperature() argument
362 temp = bq27x00_read(di, BQ27x00_REG_TEMP, false); bq27x00_battery_read_temperature()
364 dev_err(di->dev, "error reading temperature\n"); bq27x00_battery_read_temperature()
368 if (!bq27xxx_is_chip_version_higher(di)) bq27x00_battery_read_temperature()
378 static int bq27x00_battery_read_cyct(struct bq27x00_device_info *di) bq27x00_battery_read_cyct() argument
382 if (di->chip == BQ27510) bq27x00_battery_read_cyct()
383 cyct = bq27x00_read(di, BQ27510_REG_CYCT, false); bq27x00_battery_read_cyct()
385 cyct = bq27x00_read(di, BQ27x00_REG_CYCT, false); bq27x00_battery_read_cyct()
387 dev_err(di->dev, "error reading cycle count total\n"); bq27x00_battery_read_cyct()
396 static int bq27x00_battery_read_time(struct bq27x00_device_info *di, u8 reg) bq27x00_battery_read_time() argument
400 tval = bq27x00_read(di, reg, false); bq27x00_battery_read_time()
402 dev_dbg(di->dev, "error reading time register %02x: %d\n", bq27x00_battery_read_time()
417 static int bq27x00_battery_read_pwr_avg(struct bq27x00_device_info *di, u8 reg) bq27x00_battery_read_pwr_avg() argument
421 tval = bq27x00_read(di, reg, false); bq27x00_battery_read_pwr_avg()
423 dev_err(di->dev, "error reading power avg rgister %02x: %d\n", bq27x00_battery_read_pwr_avg()
428 if (di->chip == BQ27500) bq27x00_battery_read_pwr_avg()
438 static int bq27x00_battery_read_health(struct bq27x00_device_info *di) bq27x00_battery_read_health() argument
442 tval = bq27x00_read(di, BQ27x00_REG_FLAGS, false); bq27x00_battery_read_health()
444 dev_err(di->dev, "error reading flag register:%d\n", tval); bq27x00_battery_read_health()
448 if ((di->chip == BQ27500)) { bq27x00_battery_read_health()
456 } else if (di->chip == BQ27510) { bq27x00_battery_read_health()
471 static void bq27x00_update(struct bq27x00_device_info *di) bq27x00_update() argument
474 bool is_bq27500 = di->chip == BQ27500; bq27x00_update()
475 bool is_bq27510 = di->chip == BQ27510; bq27x00_update()
476 bool is_bq27425 = di->chip == BQ27425; bq27x00_update()
477 bool is_bq27742 = di->chip == BQ27742; bq27x00_update()
480 cache.flags = bq27x00_read(di, BQ27x00_REG_FLAGS, flags_1b); bq27x00_update()
487 dev_info(di->dev, "battery is not calibrated! ignoring capacity values\n"); bq27x00_update()
496 cache.capacity = bq27x00_battery_read_rsoc(di); bq27x00_update()
499 bq27x00_battery_read_time(di, bq27x00_update()
502 cache.energy = bq27x00_battery_read_energy(di); bq27x00_update()
504 bq27x00_battery_read_time(di, bq27x00_update()
507 bq27x00_battery_read_time(di, bq27x00_update()
510 bq27x00_battery_read_time(di, bq27x00_update()
513 cache.charge_full = bq27x00_battery_read_lmd(di); bq27x00_update()
514 cache.health = bq27x00_battery_read_health(di); bq27x00_update()
516 cache.temperature = bq27x00_battery_read_temperature(di); bq27x00_update()
518 cache.cycle_count = bq27x00_battery_read_cyct(di); bq27x00_update()
521 bq27x00_battery_read_pwr_avg(di, bq27x00_update()
525 bq27x00_battery_read_pwr_avg(di, bq27x00_update()
529 if (di->charge_design_full <= 0) bq27x00_update()
530 di->charge_design_full = bq27x00_battery_read_ilmd(di); bq27x00_update()
533 if (di->cache.capacity != cache.capacity) bq27x00_update()
534 power_supply_changed(di->bat); bq27x00_update()
536 if (memcmp(&di->cache, &cache, sizeof(cache)) != 0) bq27x00_update()
537 di->cache = cache; bq27x00_update()
539 di->last_update = jiffies; bq27x00_update()
544 struct bq27x00_device_info *di = bq27x00_battery_poll() local
547 bq27x00_update(di); bq27x00_battery_poll()
551 set_timer_slack(&di->work.timer, poll_interval * HZ / 4); bq27x00_battery_poll()
552 schedule_delayed_work(&di->work, poll_interval * HZ); bq27x00_battery_poll()
561 static int bq27x00_battery_current(struct bq27x00_device_info *di, bq27x00_battery_current() argument
567 curr = bq27x00_read(di, BQ27x00_REG_AI, false); bq27x00_battery_current()
569 dev_err(di->dev, "error reading current\n"); bq27x00_battery_current()
573 if (bq27xxx_is_chip_version_higher(di)) { bq27x00_battery_current()
577 flags = bq27x00_read(di, BQ27x00_REG_FLAGS, false); bq27x00_battery_current()
579 dev_dbg(di->dev, "negative current!\n"); bq27x00_battery_current()
589 static int bq27x00_battery_status(struct bq27x00_device_info *di, bq27x00_battery_status() argument
594 if (bq27xxx_is_chip_version_higher(di)) { bq27x00_battery_status()
595 if (di->cache.flags & BQ27500_FLAG_FC) bq27x00_battery_status()
597 else if (di->cache.flags & BQ27500_FLAG_DSC) bq27x00_battery_status()
602 if (di->cache.flags & BQ27000_FLAG_FC) bq27x00_battery_status()
604 else if (di->cache.flags & BQ27000_FLAG_CHGS) bq27x00_battery_status()
606 else if (power_supply_am_i_supplied(di->bat)) bq27x00_battery_status()
617 static int bq27x00_battery_capacity_level(struct bq27x00_device_info *di, bq27x00_battery_capacity_level() argument
622 if (bq27xxx_is_chip_version_higher(di)) { bq27x00_battery_capacity_level()
623 if (di->cache.flags & BQ27500_FLAG_FC) bq27x00_battery_capacity_level()
625 else if (di->cache.flags & BQ27500_FLAG_SOC1) bq27x00_battery_capacity_level()
627 else if (di->cache.flags & BQ27500_FLAG_SOCF) bq27x00_battery_capacity_level()
632 if (di->cache.flags & BQ27000_FLAG_FC) bq27x00_battery_capacity_level()
634 else if (di->cache.flags & BQ27000_FLAG_EDV1) bq27x00_battery_capacity_level()
636 else if (di->cache.flags & BQ27000_FLAG_EDVF) bq27x00_battery_capacity_level()
651 static int bq27x00_battery_voltage(struct bq27x00_device_info *di, bq27x00_battery_voltage() argument
656 volt = bq27x00_read(di, BQ27x00_REG_VOLT, false); bq27x00_battery_voltage()
658 dev_err(di->dev, "error reading voltage\n"); bq27x00_battery_voltage()
683 struct bq27x00_device_info *di = power_supply_get_drvdata(psy); bq27x00_battery_get_property() local
685 mutex_lock(&di->lock); bq27x00_battery_get_property()
686 if (time_is_before_jiffies(di->last_update + 5 * HZ)) { bq27x00_battery_get_property()
687 cancel_delayed_work_sync(&di->work); bq27x00_battery_get_property()
688 bq27x00_battery_poll(&di->work.work); bq27x00_battery_get_property()
690 mutex_unlock(&di->lock); bq27x00_battery_get_property()
692 if (psp != POWER_SUPPLY_PROP_PRESENT && di->cache.flags < 0) bq27x00_battery_get_property()
697 ret = bq27x00_battery_status(di, val); bq27x00_battery_get_property()
700 ret = bq27x00_battery_voltage(di, val); bq27x00_battery_get_property()
703 val->intval = di->cache.flags < 0 ? 0 : 1; bq27x00_battery_get_property()
706 ret = bq27x00_battery_current(di, val); bq27x00_battery_get_property()
709 ret = bq27x00_simple_value(di->cache.capacity, val); bq27x00_battery_get_property()
712 ret = bq27x00_battery_capacity_level(di, val); bq27x00_battery_get_property()
715 ret = bq27x00_simple_value(di->cache.temperature, val); bq27x00_battery_get_property()
720 ret = bq27x00_simple_value(di->cache.time_to_empty, val); bq27x00_battery_get_property()
723 ret = bq27x00_simple_value(di->cache.time_to_empty_avg, val); bq27x00_battery_get_property()
726 ret = bq27x00_simple_value(di->cache.time_to_full, val); bq27x00_battery_get_property()
732 ret = bq27x00_simple_value(bq27x00_battery_read_nac(di), val); bq27x00_battery_get_property()
735 ret = bq27x00_simple_value(di->cache.charge_full, val); bq27x00_battery_get_property()
738 ret = bq27x00_simple_value(di->charge_design_full, val); bq27x00_battery_get_property()
741 ret = bq27x00_simple_value(di->cache.cycle_count, val); bq27x00_battery_get_property()
744 ret = bq27x00_simple_value(di->cache.energy, val); bq27x00_battery_get_property()
747 ret = bq27x00_simple_value(di->cache.power_avg, val); bq27x00_battery_get_property()
750 ret = bq27x00_simple_value(di->cache.health, val); bq27x00_battery_get_property()
761 struct bq27x00_device_info *di = power_supply_get_drvdata(psy); bq27x00_external_power_changed() local
763 cancel_delayed_work_sync(&di->work); bq27x00_external_power_changed()
764 schedule_delayed_work(&di->work, 0); bq27x00_external_power_changed()
767 static int bq27x00_powersupply_init(struct bq27x00_device_info *di, bq27x00_powersupply_init() argument
772 struct power_supply_config psy_cfg = { .drv_data = di, }; bq27x00_powersupply_init()
774 psy_desc = devm_kzalloc(di->dev, sizeof(*psy_desc), GFP_KERNEL); bq27x00_powersupply_init()
780 if (di->chip == BQ27425) { bq27x00_powersupply_init()
783 } else if (di->chip == BQ27742) { bq27x00_powersupply_init()
786 } else if (di->chip == BQ27510) { bq27x00_powersupply_init()
796 INIT_DELAYED_WORK(&di->work, bq27x00_battery_poll); bq27x00_powersupply_init()
797 mutex_init(&di->lock); bq27x00_powersupply_init()
799 di->bat = power_supply_register_no_ws(di->dev, psy_desc, &psy_cfg); bq27x00_powersupply_init()
800 if (IS_ERR(di->bat)) { bq27x00_powersupply_init()
801 ret = PTR_ERR(di->bat); bq27x00_powersupply_init()
802 dev_err(di->dev, "failed to register battery: %d\n", ret); bq27x00_powersupply_init()
806 dev_info(di->dev, "support ver. %s enabled\n", DRIVER_VERSION); bq27x00_powersupply_init()
808 bq27x00_update(di); bq27x00_powersupply_init()
813 static void bq27x00_powersupply_unregister(struct bq27x00_device_info *di) bq27x00_powersupply_unregister() argument
823 cancel_delayed_work_sync(&di->work); bq27x00_powersupply_unregister()
825 power_supply_unregister(di->bat); bq27x00_powersupply_unregister()
827 mutex_destroy(&di->lock); bq27x00_powersupply_unregister()
840 static int bq27x00_read_i2c(struct bq27x00_device_info *di, u8 reg, bool single) bq27x00_read_i2c() argument
842 struct i2c_client *client = to_i2c_client(di->dev); bq27x00_read_i2c()
878 struct bq27x00_device_info *di; bq27x00_battery_probe() local
896 di = devm_kzalloc(&client->dev, sizeof(*di), GFP_KERNEL); bq27x00_battery_probe()
897 if (!di) { bq27x00_battery_probe()
903 di->id = num; bq27x00_battery_probe()
904 di->dev = &client->dev; bq27x00_battery_probe()
905 di->chip = id->driver_data; bq27x00_battery_probe()
906 di->bus.read = &bq27x00_read_i2c; bq27x00_battery_probe()
908 retval = bq27x00_powersupply_init(di, name); bq27x00_battery_probe()
912 i2c_set_clientdata(client, di); bq27x00_battery_probe()
926 struct bq27x00_device_info *di = i2c_get_clientdata(client); bq27x00_battery_remove() local
928 bq27x00_powersupply_unregister(di); bq27x00_battery_remove()
931 idr_remove(&battery_id, di->id); bq27x00_battery_remove()
980 static int bq27000_read_platform(struct bq27x00_device_info *di, u8 reg, bq27000_read_platform() argument
983 struct device *dev = di->dev; bq27000_read_platform()
1016 struct bq27x00_device_info *di; bq27000_battery_probe() local
1030 di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL); bq27000_battery_probe()
1031 if (!di) { bq27000_battery_probe()
1036 platform_set_drvdata(pdev, di); bq27000_battery_probe()
1038 di->dev = &pdev->dev; bq27000_battery_probe()
1039 di->chip = BQ27000; bq27000_battery_probe()
1042 di->bus.read = &bq27000_read_platform; bq27000_battery_probe()
1044 return bq27x00_powersupply_init(di, name); bq27000_battery_probe()
1049 struct bq27x00_device_info *di = platform_get_drvdata(pdev); bq27000_battery_remove() local
1051 bq27x00_powersupply_unregister(di); bq27000_battery_remove()
/linux-4.1.27/drivers/net/wireless/brcm80211/brcmsmac/
H A Ddma.c38 #define DMA64TXREGOFFS(di, field) (di->d64txregbase + DMA64REGOFFS(field))
39 #define DMA64RXREGOFFS(di, field) (di->d64rxregbase + DMA64REGOFFS(field))
313 static uint txd(struct dma_info *di, uint x) txd() argument
315 return xxd(x, di->ntxd); txd()
318 static uint rxd(struct dma_info *di, uint x) rxd() argument
320 return xxd(x, di->nrxd); rxd()
323 static uint nexttxd(struct dma_info *di, uint i) nexttxd() argument
325 return txd(di, i + 1); nexttxd()
328 static uint prevtxd(struct dma_info *di, uint i) prevtxd() argument
330 return txd(di, i - 1); prevtxd()
333 static uint nextrxd(struct dma_info *di, uint i) nextrxd() argument
335 return rxd(di, i + 1); nextrxd()
338 static uint ntxdactive(struct dma_info *di, uint h, uint t) ntxdactive() argument
340 return txd(di, t-h); ntxdactive()
343 static uint nrxdactive(struct dma_info *di, uint h, uint t) nrxdactive() argument
345 return rxd(di, t-h); nrxdactive()
348 static uint _dma_ctrlflags(struct dma_info *di, uint mask, uint flags) _dma_ctrlflags() argument
352 if (di == NULL) _dma_ctrlflags()
355 dmactrlflags = di->dma.dmactrlflags; _dma_ctrlflags()
363 control = bcma_read32(di->core, DMA64TXREGOFFS(di, control)); _dma_ctrlflags()
364 bcma_write32(di->core, DMA64TXREGOFFS(di, control), _dma_ctrlflags()
366 if (bcma_read32(di->core, DMA64TXREGOFFS(di, control)) & _dma_ctrlflags()
371 bcma_write32(di->core, DMA64TXREGOFFS(di, control), _dma_ctrlflags()
378 di->dma.dmactrlflags = dmactrlflags; _dma_ctrlflags()
383 static bool _dma64_addrext(struct dma_info *di, uint ctrl_offset) _dma64_addrext() argument
386 bcma_set32(di->core, ctrl_offset, D64_XC_AE); _dma64_addrext()
387 w = bcma_read32(di->core, ctrl_offset); _dma64_addrext()
388 bcma_mask32(di->core, ctrl_offset, ~D64_XC_AE); _dma64_addrext()
396 static bool _dma_isaddrext(struct dma_info *di) _dma_isaddrext() argument
401 if (di->d64txregbase != 0) { _dma_isaddrext()
402 if (!_dma64_addrext(di, DMA64TXREGOFFS(di, control))) _dma_isaddrext()
403 brcms_dbg_dma(di->core, _dma_isaddrext()
405 di->name); _dma_isaddrext()
407 } else if (di->d64rxregbase != 0) { _dma_isaddrext()
408 if (!_dma64_addrext(di, DMA64RXREGOFFS(di, control))) _dma_isaddrext()
409 brcms_dbg_dma(di->core, _dma_isaddrext()
411 di->name); _dma_isaddrext()
418 static bool _dma_descriptor_align(struct dma_info *di) _dma_descriptor_align() argument
423 if (di->d64txregbase != 0) { _dma_descriptor_align()
424 bcma_write32(di->core, DMA64TXREGOFFS(di, addrlow), 0xff0); _dma_descriptor_align()
425 addrl = bcma_read32(di->core, DMA64TXREGOFFS(di, addrlow)); _dma_descriptor_align()
428 } else if (di->d64rxregbase != 0) { _dma_descriptor_align()
429 bcma_write32(di->core, DMA64RXREGOFFS(di, addrlow), 0xff0); _dma_descriptor_align()
430 addrl = bcma_read32(di->core, DMA64RXREGOFFS(di, addrlow)); _dma_descriptor_align()
441 static void *dma_alloc_consistent(struct dma_info *di, uint size, dma_alloc_consistent() argument
451 return dma_alloc_coherent(di->dmadev, size, pap, GFP_ATOMIC); dma_alloc_consistent()
469 static void *dma_ringalloc(struct dma_info *di, u32 boundary, uint size, dma_ringalloc() argument
477 va = dma_alloc_consistent(di, size, *alignbits, alloced, descpa); dma_ringalloc()
486 dma_free_coherent(di->dmadev, size, va, *descpa); dma_ringalloc()
487 va = dma_alloc_consistent(di, size, *alignbits, dma_ringalloc()
493 static bool dma64_alloc(struct dma_info *di, uint direction) dma64_alloc() argument
504 size = (direction == DMA_TX) ? (di->ntxd * ddlen) : (di->nrxd * ddlen); dma64_alloc()
505 align_bits = di->dmadesc_align; dma64_alloc()
509 va = dma_ringalloc(di, D64RINGALIGN, size, &align_bits, dma64_alloc()
510 &alloced, &di->txdpaorig); dma64_alloc()
512 brcms_dbg_dma(di->core, dma64_alloc()
514 di->name); dma64_alloc()
518 di->txd64 = (struct dma64desc *) dma64_alloc()
520 di->txdalign = (uint) ((s8 *)di->txd64 - (s8 *) va); dma64_alloc()
521 di->txdpa = di->txdpaorig + di->txdalign; dma64_alloc()
522 di->txdalloc = alloced; dma64_alloc()
524 va = dma_ringalloc(di, D64RINGALIGN, size, &align_bits, dma64_alloc()
525 &alloced, &di->rxdpaorig); dma64_alloc()
527 brcms_dbg_dma(di->core, dma64_alloc()
529 di->name); dma64_alloc()
533 di->rxd64 = (struct dma64desc *) dma64_alloc()
535 di->rxdalign = (uint) ((s8 *)di->rxd64 - (s8 *) va); dma64_alloc()
536 di->rxdpa = di->rxdpaorig + di->rxdalign; dma64_alloc()
537 di->rxdalloc = alloced; dma64_alloc()
543 static bool _dma_alloc(struct dma_info *di, uint direction) _dma_alloc() argument
545 return dma64_alloc(di, direction); _dma_alloc()
555 struct dma_info *di; dma_attach() local
561 di = kzalloc(sizeof(struct dma_info), GFP_ATOMIC); dma_attach()
562 if (di == NULL) dma_attach()
565 di->dma64 = dma_attach()
569 di->core = core; dma_attach()
570 di->d64txregbase = txregbase; dma_attach()
571 di->d64rxregbase = rxregbase; dma_attach()
578 _dma_ctrlflags(di, DMA_CTRL_ROC | DMA_CTRL_PEN, 0); dma_attach()
580 brcms_dbg_dma(di->core, "%s: %s flags 0x%x ntxd %d nrxd %d " dma_attach()
583 di->dma.dmactrlflags, ntxd, nrxd, rxbufsize, dma_attach()
587 strncpy(di->name, name, MAXNAMEL); dma_attach()
588 di->name[MAXNAMEL - 1] = '\0'; dma_attach()
590 di->dmadev = core->dma_dev; dma_attach()
593 di->ntxd = (u16) ntxd; dma_attach()
594 di->nrxd = (u16) nrxd; dma_attach()
597 di->rxextrahdrroom = dma_attach()
600 di->rxbufsize = (u16) (rxbufsize - di->rxextrahdrroom); dma_attach()
602 di->rxbufsize = (u16) rxbufsize; dma_attach()
604 di->nrxpost = (u16) nrxpost; dma_attach()
605 di->rxoffset = (u8) rxoffset; dma_attach()
614 di->ddoffsetlow = 0; dma_attach()
615 di->dataoffsetlow = 0; dma_attach()
619 di->ddoffsetlow = 0; dma_attach()
620 di->ddoffsethigh = SI_PCIE_DMA_H32; dma_attach()
622 di->dataoffsetlow = di->ddoffsetlow; dma_attach()
623 di->dataoffsethigh = di->ddoffsethigh; dma_attach()
628 di->addrext = false; dma_attach()
631 di->addrext = false; dma_attach()
633 di->addrext = _dma_isaddrext(di); dma_attach()
636 di->aligndesc_4k = _dma_descriptor_align(di); dma_attach()
637 if (di->aligndesc_4k) { dma_attach()
638 di->dmadesc_align = D64RINGALIGN_BITS; dma_attach()
641 di->dmadesc_align = D64RINGALIGN_BITS - 1; dma_attach()
643 di->dmadesc_align = 4; /* 16 byte alignment */ dma_attach()
646 brcms_dbg_dma(di->core, "DMA descriptor align_needed %d, align %d\n", dma_attach()
647 di->aligndesc_4k, di->dmadesc_align); dma_attach()
652 di->txp = kzalloc(size, GFP_ATOMIC); dma_attach()
653 if (di->txp == NULL) dma_attach()
660 di->rxp = kzalloc(size, GFP_ATOMIC); dma_attach()
661 if (di->rxp == NULL) dma_attach()
670 if (!_dma_alloc(di, DMA_TX)) dma_attach()
679 if (!_dma_alloc(di, DMA_RX)) dma_attach()
683 if ((di->ddoffsetlow != 0) && !di->addrext) { dma_attach()
684 if (di->txdpa > SI_PCI_DMA_SZ) { dma_attach()
685 brcms_dbg_dma(di->core, dma_attach()
687 di->name, (u32)di->txdpa); dma_attach()
690 if (di->rxdpa > SI_PCI_DMA_SZ) { dma_attach()
691 brcms_dbg_dma(di->core, dma_attach()
693 di->name, (u32)di->rxdpa); dma_attach()
699 brcms_c_ampdu_reset_session(&di->ampdu_session, wlc); dma_attach()
701 brcms_dbg_dma(di->core, dma_attach()
703 di->ddoffsetlow, di->ddoffsethigh, dma_attach()
704 di->dataoffsetlow, di->dataoffsethigh, dma_attach()
705 di->addrext); dma_attach()
707 return (struct dma_pub *) di; dma_attach()
710 dma_detach((struct dma_pub *)di); dma_attach()
715 dma64_dd_upd(struct dma_info *di, struct dma64desc *ddring, dma64_dd_upd() argument
721 if ((di->dataoffsetlow == 0) || !(pa & PCI32ADDR_HIGH)) { dma64_dd_upd()
722 ddring[outidx].addrlow = cpu_to_le32(pa + di->dataoffsetlow); dma64_dd_upd()
723 ddring[outidx].addrhigh = cpu_to_le32(di->dataoffsethigh); dma64_dd_upd()
734 ddring[outidx].addrlow = cpu_to_le32(pa + di->dataoffsetlow); dma64_dd_upd()
735 ddring[outidx].addrhigh = cpu_to_le32(di->dataoffsethigh); dma64_dd_upd()
739 if (di->dma.dmactrlflags & DMA_CTRL_PEN) { dma64_dd_upd()
749 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_detach() local
751 brcms_dbg_dma(di->core, "%s:\n", di->name); dma_detach()
754 if (di->txd64) dma_detach()
755 dma_free_coherent(di->dmadev, di->txdalloc, dma_detach()
756 ((s8 *)di->txd64 - di->txdalign), dma_detach()
757 (di->txdpaorig)); dma_detach()
758 if (di->rxd64) dma_detach()
759 dma_free_coherent(di->dmadev, di->rxdalloc, dma_detach()
760 ((s8 *)di->rxd64 - di->rxdalign), dma_detach()
761 (di->rxdpaorig)); dma_detach()
764 kfree(di->txp); dma_detach()
765 kfree(di->rxp); dma_detach()
768 kfree(di); dma_detach()
774 _dma_ddtable_init(struct dma_info *di, uint direction, dma_addr_t pa) _dma_ddtable_init() argument
776 if (!di->aligndesc_4k) { _dma_ddtable_init()
778 di->xmtptrbase = pa; _dma_ddtable_init()
780 di->rcvptrbase = pa; _dma_ddtable_init()
783 if ((di->ddoffsetlow == 0) _dma_ddtable_init()
786 bcma_write32(di->core, DMA64TXREGOFFS(di, addrlow), _dma_ddtable_init()
787 pa + di->ddoffsetlow); _dma_ddtable_init()
788 bcma_write32(di->core, DMA64TXREGOFFS(di, addrhigh), _dma_ddtable_init()
789 di->ddoffsethigh); _dma_ddtable_init()
791 bcma_write32(di->core, DMA64RXREGOFFS(di, addrlow), _dma_ddtable_init()
792 pa + di->ddoffsetlow); _dma_ddtable_init()
793 bcma_write32(di->core, DMA64RXREGOFFS(di, addrhigh), _dma_ddtable_init()
794 di->ddoffsethigh); _dma_ddtable_init()
805 bcma_write32(di->core, DMA64TXREGOFFS(di, addrlow), _dma_ddtable_init()
806 pa + di->ddoffsetlow); _dma_ddtable_init()
807 bcma_write32(di->core, DMA64TXREGOFFS(di, addrhigh), _dma_ddtable_init()
808 di->ddoffsethigh); _dma_ddtable_init()
809 bcma_maskset32(di->core, DMA64TXREGOFFS(di, control), _dma_ddtable_init()
812 bcma_write32(di->core, DMA64RXREGOFFS(di, addrlow), _dma_ddtable_init()
813 pa + di->ddoffsetlow); _dma_ddtable_init()
814 bcma_write32(di->core, DMA64RXREGOFFS(di, addrhigh), _dma_ddtable_init()
815 di->ddoffsethigh); _dma_ddtable_init()
816 bcma_maskset32(di->core, DMA64RXREGOFFS(di, control), _dma_ddtable_init()
822 static void _dma_rxenable(struct dma_info *di) _dma_rxenable() argument
824 uint dmactrlflags = di->dma.dmactrlflags; _dma_rxenable()
827 brcms_dbg_dma(di->core, "%s:\n", di->name); _dma_rxenable()
829 control = D64_RC_RE | (bcma_read32(di->core, _dma_rxenable()
830 DMA64RXREGOFFS(di, control)) & _dma_rxenable()
839 bcma_write32(di->core, DMA64RXREGOFFS(di, control), _dma_rxenable()
840 ((di->rxoffset << D64_RC_RO_SHIFT) | control)); _dma_rxenable()
845 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_rxinit() local
847 brcms_dbg_dma(di->core, "%s:\n", di->name); dma_rxinit()
849 if (di->nrxd == 0) dma_rxinit()
852 di->rxin = di->rxout = 0; dma_rxinit()
855 memset(di->rxd64, '\0', di->nrxd * sizeof(struct dma64desc)); dma_rxinit()
860 if (!di->aligndesc_4k) dma_rxinit()
861 _dma_ddtable_init(di, DMA_RX, di->rxdpa); dma_rxinit()
863 _dma_rxenable(di); dma_rxinit()
865 if (di->aligndesc_4k) dma_rxinit()
866 _dma_ddtable_init(di, DMA_RX, di->rxdpa); dma_rxinit()
869 static struct sk_buff *dma64_getnextrxp(struct dma_info *di, bool forceall) dma64_getnextrxp() argument
875 i = di->rxin; dma64_getnextrxp()
878 if (i == di->rxout) dma64_getnextrxp()
882 B2I(((bcma_read32(di->core, dma64_getnextrxp()
883 DMA64RXREGOFFS(di, status0)) & D64_RS0_CD_MASK) - dma64_getnextrxp()
884 di->rcvptrbase) & D64_RS0_CD_MASK, struct dma64desc); dma64_getnextrxp()
891 rxp = di->rxp[i]; dma64_getnextrxp()
892 di->rxp[i] = NULL; dma64_getnextrxp()
894 pa = le32_to_cpu(di->rxd64[i].addrlow) - di->dataoffsetlow; dma64_getnextrxp()
897 dma_unmap_single(di->dmadev, pa, di->rxbufsize, DMA_FROM_DEVICE); dma64_getnextrxp()
899 di->rxd64[i].addrlow = cpu_to_le32(0xdeadbeef); dma64_getnextrxp()
900 di->rxd64[i].addrhigh = cpu_to_le32(0xdeadbeef); dma64_getnextrxp()
902 di->rxin = nextrxd(di, i); dma64_getnextrxp()
907 static struct sk_buff *_dma_getnextrxp(struct dma_info *di, bool forceall) _dma_getnextrxp() argument
909 if (di->nrxd == 0) _dma_getnextrxp()
912 return dma64_getnextrxp(di, forceall); _dma_getnextrxp()
927 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_rx() local
937 p = _dma_getnextrxp(di, false); dma_rx()
942 brcms_dbg_dma(di->core, "%s: dma_rx len %d\n", di->name, len); dma_rx()
946 pkt_len = min((di->rxoffset + len), di->rxbufsize); dma_rx()
949 resid = len - (di->rxbufsize - di->rxoffset); dma_rx()
953 while ((resid > 0) && (p = _dma_getnextrxp(di, false))) { dma_rx()
954 pkt_len = min_t(uint, resid, di->rxbufsize); dma_rx()
957 resid -= di->rxbufsize; dma_rx()
965 B2I(((bcma_read32(di->core, dma_rx()
966 DMA64RXREGOFFS(di, status0)) & dma_rx()
967 D64_RS0_CD_MASK) - di->rcvptrbase) & dma_rx()
969 brcms_dbg_dma(di->core, dma_rx()
971 di->rxin, di->rxout, cur); dma_rx()
975 if ((di->dma.dmactrlflags & DMA_CTRL_RXMULTI) == 0) { dma_rx()
976 brcms_dbg_dma(di->core, "%s: bad frame length (%d)\n", dma_rx()
977 di->name, len); dma_rx()
982 di->dma.rxgiants++; dma_rx()
992 static bool dma64_rxidle(struct dma_info *di) dma64_rxidle() argument
994 brcms_dbg_dma(di->core, "%s:\n", di->name); dma64_rxidle()
996 if (di->nrxd == 0) dma64_rxidle()
999 return ((bcma_read32(di->core, dma64_rxidle()
1000 DMA64RXREGOFFS(di, status0)) & D64_RS0_CD_MASK) == dma64_rxidle()
1001 (bcma_read32(di->core, DMA64RXREGOFFS(di, ptr)) & dma64_rxidle()
1005 static bool dma64_txidle(struct dma_info *di) dma64_txidle() argument
1007 if (di->ntxd == 0) dma64_txidle()
1010 return ((bcma_read32(di->core, dma64_txidle()
1011 DMA64TXREGOFFS(di, status0)) & D64_XS0_CD_MASK) == dma64_txidle()
1012 (bcma_read32(di->core, DMA64TXREGOFFS(di, ptr)) & dma64_txidle()
1025 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_rxfill() local
1043 rxin = di->rxin; dma_rxfill()
1044 rxout = di->rxout; dma_rxfill()
1046 n = di->nrxpost - nrxdactive(di, rxin, rxout); dma_rxfill()
1048 brcms_dbg_dma(di->core, "%s: post %d\n", di->name, n); dma_rxfill()
1050 if (di->rxbufsize > BCMEXTRAHDROOM) dma_rxfill()
1051 extra_offset = di->rxextrahdrroom; dma_rxfill()
1055 * the di->rxbufsize doesn't include the extra headroom, dma_rxfill()
1058 p = brcmu_pkt_buf_get_skb(di->rxbufsize + extra_offset); dma_rxfill()
1061 brcms_dbg_dma(di->core, "%s: out of rxbufs\n", dma_rxfill()
1062 di->name); dma_rxfill()
1063 if (i == 0 && dma64_rxidle(di)) { dma_rxfill()
1064 brcms_dbg_dma(di->core, "%s: ring is empty !\n", dma_rxfill()
1065 di->name); dma_rxfill()
1068 di->dma.rxnobuf++; dma_rxfill()
1080 pa = dma_map_single(di->dmadev, p->data, di->rxbufsize, dma_rxfill()
1082 if (dma_mapping_error(di->dmadev, pa)) dma_rxfill()
1086 di->rxp[rxout] = p; dma_rxfill()
1090 if (rxout == (di->nrxd - 1)) dma_rxfill()
1093 dma64_dd_upd(di, di->rxd64, pa, rxout, &flags, dma_rxfill()
1094 di->rxbufsize); dma_rxfill()
1095 rxout = nextrxd(di, rxout); dma_rxfill()
1098 di->rxout = rxout; dma_rxfill()
1101 bcma_write32(di->core, DMA64RXREGOFFS(di, ptr), dma_rxfill()
1102 di->rcvptrbase + I2B(rxout, struct dma64desc)); dma_rxfill()
1109 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_rxreclaim() local
1112 brcms_dbg_dma(di->core, "%s:\n", di->name); dma_rxreclaim()
1114 while ((p = _dma_getnextrxp(di, true))) dma_rxreclaim()
1129 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_getvar() local
1132 return (unsigned long)&(di->dma.txavail); dma_getvar()
1140 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_txinit() local
1143 brcms_dbg_dma(di->core, "%s:\n", di->name); dma_txinit()
1145 if (di->ntxd == 0) dma_txinit()
1148 di->txin = di->txout = 0; dma_txinit()
1149 di->dma.txavail = di->ntxd - 1; dma_txinit()
1152 memset(di->txd64, '\0', (di->ntxd * sizeof(struct dma64desc))); dma_txinit()
1157 if (!di->aligndesc_4k) dma_txinit()
1158 _dma_ddtable_init(di, DMA_TX, di->txdpa); dma_txinit()
1160 if ((di->dma.dmactrlflags & DMA_CTRL_PEN) == 0) dma_txinit()
1162 bcma_set32(di->core, DMA64TXREGOFFS(di, control), control); dma_txinit()
1167 if (di->aligndesc_4k) dma_txinit()
1168 _dma_ddtable_init(di, DMA_TX, di->txdpa); dma_txinit()
1173 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_txsuspend() local
1175 brcms_dbg_dma(di->core, "%s:\n", di->name); dma_txsuspend()
1177 if (di->ntxd == 0) dma_txsuspend()
1180 bcma_set32(di->core, DMA64TXREGOFFS(di, control), D64_XC_SE); dma_txsuspend()
1185 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_txresume() local
1187 brcms_dbg_dma(di->core, "%s:\n", di->name); dma_txresume()
1189 if (di->ntxd == 0) dma_txresume()
1192 bcma_mask32(di->core, DMA64TXREGOFFS(di, control), ~D64_XC_SE); dma_txresume()
1197 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_txsuspended() local
1199 return (di->ntxd == 0) || dma_txsuspended()
1200 ((bcma_read32(di->core, dma_txsuspended()
1201 DMA64TXREGOFFS(di, control)) & D64_XC_SE) == dma_txsuspended()
1207 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_txreclaim() local
1210 brcms_dbg_dma(di->core, "%s: %s\n", dma_txreclaim()
1211 di->name, dma_txreclaim()
1216 if (di->txin == di->txout) dma_txreclaim()
1221 if (!(di->dma.dmactrlflags & DMA_CTRL_UNFRAMED)) dma_txreclaim()
1228 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_txreset() local
1231 if (di->ntxd == 0) dma_txreset()
1235 bcma_write32(di->core, DMA64TXREGOFFS(di, control), D64_XC_SE); dma_txreset()
1237 (bcma_read32(di->core, DMA64TXREGOFFS(di, status0)) & dma_txreset()
1242 bcma_write32(di->core, DMA64TXREGOFFS(di, control), 0); dma_txreset()
1244 (bcma_read32(di->core, DMA64TXREGOFFS(di, status0)) & dma_txreset()
1255 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_rxreset() local
1258 if (di->nrxd == 0) dma_rxreset()
1261 bcma_write32(di->core, DMA64RXREGOFFS(di, control), 0); dma_rxreset()
1263 (bcma_read32(di->core, DMA64RXREGOFFS(di, status0)) & dma_rxreset()
1269 static void dma_txenq(struct dma_info *di, struct sk_buff *p) dma_txenq() argument
1277 txout = di->txout; dma_txenq()
1279 if (WARN_ON(nexttxd(di, txout) == di->txin)) dma_txenq()
1289 pa = dma_map_single(di->dmadev, data, len, DMA_TO_DEVICE); dma_txenq()
1291 if (dma_mapping_error(di->dmadev, pa)) { dma_txenq()
1301 if (txout == (di->ntxd - 1)) dma_txenq()
1304 dma64_dd_upd(di, di->txd64, pa, txout, &flags, len); dma_txenq()
1306 txout = nexttxd(di, txout); dma_txenq()
1309 di->txp[prevtxd(di, txout)] = p; dma_txenq()
1312 di->txout = txout; dma_txenq()
1315 static void ampdu_finalize(struct dma_info *di) ampdu_finalize() argument
1317 struct brcms_ampdu_session *session = &di->ampdu_session; ampdu_finalize()
1334 dma_txenq(di, p); ampdu_finalize()
1337 bcma_write32(di->core, DMA64TXREGOFFS(di, ptr), ampdu_finalize()
1338 di->xmtptrbase + I2B(di->txout, struct dma64desc)); ampdu_finalize()
1342 static void prep_ampdu_frame(struct dma_info *di, struct sk_buff *p) prep_ampdu_frame() argument
1344 struct brcms_ampdu_session *session = &di->ampdu_session; prep_ampdu_frame()
1353 ampdu_finalize(di); prep_ampdu_frame()
1361 static void dma_update_txavail(struct dma_info *di) dma_update_txavail() argument
1367 di->dma.txavail = di->ntxd - ntxdactive(di, di->txin, di->txout) - dma_update_txavail()
1368 skb_queue_len(&di->ampdu_session.skb_list) - 1; dma_update_txavail()
1380 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_txfast() local
1381 struct brcms_ampdu_session *session = &di->ampdu_session; dma_txfast()
1390 if (di->dma.txavail == 0 || nexttxd(di, di->txout) == di->txin) dma_txfast()
1396 prep_ampdu_frame(di, p); dma_txfast()
1398 dma_txenq(di, p); dma_txfast()
1401 dma_update_txavail(di); dma_txfast()
1411 di->dma.txavail == 0 || dma64_txidle(di)) dma_txfast()
1412 ampdu_finalize(di); dma_txfast()
1414 bcma_write32(di->core, DMA64TXREGOFFS(di, ptr), dma_txfast()
1415 di->xmtptrbase + I2B(di->txout, struct dma64desc)); dma_txfast()
1421 brcms_dbg_dma(di->core, "%s: out of txds !!!\n", di->name); dma_txfast()
1423 di->dma.txavail = 0; dma_txfast()
1424 di->dma.txnobuf++; dma_txfast()
1430 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_txflush() local
1431 struct brcms_ampdu_session *session = &di->ampdu_session; dma_txflush()
1434 ampdu_finalize(di); dma_txflush()
1439 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_txpending() local
1440 return ntxdactive(di, di->txin, di->txout); dma_txpending()
1449 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_kick_tx() local
1450 struct brcms_ampdu_session *session = &di->ampdu_session; dma_kick_tx()
1452 if (!skb_queue_empty(&session->skb_list) && dma64_txidle(di)) dma_kick_tx()
1453 ampdu_finalize(di); dma_kick_tx()
1468 struct dma_info *di = container_of(pub, struct dma_info, dma); dma_getnexttxp() local
1473 brcms_dbg_dma(di->core, "%s: %s\n", dma_getnexttxp()
1474 di->name, dma_getnexttxp()
1479 if (di->ntxd == 0) dma_getnexttxp()
1484 start = di->txin; dma_getnexttxp()
1486 end = di->txout; dma_getnexttxp()
1488 end = (u16) (B2I(((bcma_read32(di->core, dma_getnexttxp()
1489 DMA64TXREGOFFS(di, status0)) & dma_getnexttxp()
1490 D64_XS0_CD_MASK) - di->xmtptrbase) & dma_getnexttxp()
1495 (u16)(bcma_read32(di->core, dma_getnexttxp()
1496 DMA64TXREGOFFS(di, status1)) & dma_getnexttxp()
1499 (active_desc - di->xmtptrbase) & D64_XS0_CD_MASK; dma_getnexttxp()
1502 end = prevtxd(di, active_desc); dma_getnexttxp()
1506 if ((start == 0) && (end > di->txout)) dma_getnexttxp()
1509 for (i = start; i != end && !txp; i = nexttxd(di, i)) { dma_getnexttxp()
1513 pa = le32_to_cpu(di->txd64[i].addrlow) - di->dataoffsetlow; dma_getnexttxp()
1516 (le32_to_cpu(di->txd64[i].ctrl2) & dma_getnexttxp()
1519 di->txd64[i].addrlow = cpu_to_le32(0xdeadbeef); dma_getnexttxp()
1520 di->txd64[i].addrhigh = cpu_to_le32(0xdeadbeef); dma_getnexttxp()
1522 txp = di->txp[i]; dma_getnexttxp()
1523 di->txp[i] = NULL; dma_getnexttxp()
1525 dma_unmap_single(di->dmadev, pa, size, DMA_TO_DEVICE); dma_getnexttxp()
1528 di->txin = i; dma_getnexttxp()
1531 dma_update_txavail(di); dma_getnexttxp()
1536 brcms_dbg_dma(di->core, "bogus curr: start %d end %d txout %d\n", dma_getnexttxp()
1537 start, end, di->txout); dma_getnexttxp()
1550 struct dma_info *di = container_of(dmah, struct dma_info, dma); dma_walk_packets() local
1551 uint i = di->txin; dma_walk_packets()
1552 uint end = di->txout; dma_walk_packets()
1557 skb = di->txp[i]; dma_walk_packets()
1562 i = nexttxd(di, i); dma_walk_packets()
H A Dmain.c406 for (i = 0; i < ARRAY_SIZE(wlc->hw->di); i++) brcms_txpktpendtot()
407 if (wlc->hw->di[i]) brcms_txpktpendtot()
408 pending += dma_txpending(wlc->hw->di[i]); brcms_txpktpendtot()
873 dma = wlc->hw->di[queue]; brcms_c_dotxstatus()
875 p = dma_getnexttxp(wlc->hw->di[queue], DMA_RANGE_TRANSMITTED); brcms_c_dotxstatus()
1126 if (wlc_hw->di[0] == NULL) { /* Init FIFOs */ brcms_b_attach_dmapio()
1134 wlc_hw->di[0] = dma_attach(name, wlc, brcms_b_attach_dmapio()
1140 dma_attach_err |= (NULL == wlc_hw->di[0]); brcms_b_attach_dmapio()
1148 wlc_hw->di[1] = dma_attach(name, wlc, brcms_b_attach_dmapio()
1151 dma_attach_err |= (NULL == wlc_hw->di[1]); brcms_b_attach_dmapio()
1158 wlc_hw->di[2] = dma_attach(name, wlc, brcms_b_attach_dmapio()
1161 dma_attach_err |= (NULL == wlc_hw->di[2]); brcms_b_attach_dmapio()
1167 wlc_hw->di[3] = dma_attach(name, wlc, brcms_b_attach_dmapio()
1171 dma_attach_err |= (NULL == wlc_hw->di[3]); brcms_b_attach_dmapio()
1183 if (wlc_hw->di[i]) brcms_b_attach_dmapio()
1185 (uint *) dma_getvar(wlc_hw->di[i], brcms_b_attach_dmapio()
1200 if (wlc_hw->di[j]) { brcms_b_detach_dmapio()
1201 dma_detach(wlc_hw->di[j]); brcms_b_detach_dmapio()
1202 wlc_hw->di[j] = NULL; brcms_b_detach_dmapio()
1990 struct dma_pub *di = wlc_hw->di[fifo]; wlc_dma_rxreset() local
1991 return dma_rxreset(di); wlc_dma_rxreset()
2020 if ((wlc_hw->di[i]) && (!dma_txreset(wlc_hw->di[i]))) brcms_b_corereset()
2025 if ((wlc_hw->di[RX_FIFO]) brcms_b_corereset()
2455 if (wlc_hw->di[tx_fifo]) { brcms_b_tx_fifo_suspend()
2464 dma_txsuspend(wlc_hw->di[tx_fifo]); brcms_b_tx_fifo_suspend()
2479 if (wlc_hw->di[tx_fifo]) brcms_b_tx_fifo_resume()
2480 dma_txresume(wlc_hw->di[tx_fifo]); brcms_b_tx_fifo_resume()
2905 if (wlc_hw->di[i]) { brcms_c_flushqueues()
2906 dma_txreclaim(wlc_hw->di[i], DMA_RANGE_ALL); brcms_c_flushqueues()
2914 dma_rxreclaim(wlc_hw->di[RX_FIFO]); brcms_c_flushqueues()
3128 if (wlc->hw->di[i]) brcms_c_statsupd()
3129 dma_counterreset(wlc->hw->di[i]); brcms_c_statsupd()
3343 if (wlc_hw->di[i]) brcms_b_coreinit()
3344 dma_txinit(wlc_hw->di[i]); brcms_b_coreinit()
3348 dma_rxinit(wlc_hw->di[RX_FIFO]); brcms_b_coreinit()
3349 dma_rxfill(wlc_hw->di[RX_FIFO]); brcms_b_coreinit()
4230 dma_rxfill(wlc->hw->di[RX_FIFO]); brcms_b_watchdog()
6870 dma = wlc->hw->di[fifo]; brcms_c_tx()
6935 struct dma_pub *dma = wlc->hw->di[fifo]; brcms_c_txfifo()
7580 dmah = hw->di[i]; brcms_c_inval_dma_pkts()
7596 for (i = 0; i < ARRAY_SIZE(wlc->hw->di); i++) brcms_c_tx_flush_completed()
7597 if (wlc->hw->di[i]) brcms_c_tx_flush_completed()
7598 dma_kick_tx(wlc->hw->di[i]); brcms_c_tx_flush_completed()
7737 morepending = dma_rx(wlc_hw->di[fifo], &recv_frames); brcms_b_recv()
7742 dma_rxfill(wlc_hw->di[fifo]); brcms_b_recv()
/linux-4.1.27/drivers/regulator/
H A Dfan53555.c98 struct fan53555_device_info *di = rdev_get_drvdata(rdev); fan53555_set_suspend_voltage() local
101 if (di->sleep_vol_cache == uV) fan53555_set_suspend_voltage()
106 ret = regmap_update_bits(di->regmap, di->sleep_reg, fan53555_set_suspend_voltage()
112 di->sleep_vol_cache = uV; fan53555_set_suspend_voltage()
119 struct fan53555_device_info *di = rdev_get_drvdata(rdev); fan53555_set_mode() local
123 regmap_update_bits(di->regmap, di->vol_reg, fan53555_set_mode()
127 regmap_update_bits(di->regmap, di->vol_reg, VSEL_MODE, 0); fan53555_set_mode()
137 struct fan53555_device_info *di = rdev_get_drvdata(rdev); fan53555_get_mode() local
141 ret = regmap_read(di->regmap, di->vol_reg, &val); fan53555_get_mode()
163 struct fan53555_device_info *di = rdev_get_drvdata(rdev); fan53555_set_ramp() local
174 dev_err(di->dev, "unsupported ramp value %d\n", ramp); fan53555_set_ramp()
178 return regmap_update_bits(di->regmap, FAN53555_CONTROL, fan53555_set_ramp()
196 static int fan53555_voltages_setup_fairchild(struct fan53555_device_info *di) fan53555_voltages_setup_fairchild() argument
199 switch (di->chip_id) { fan53555_voltages_setup_fairchild()
204 di->vsel_min = 600000; fan53555_voltages_setup_fairchild()
205 di->vsel_step = 10000; fan53555_voltages_setup_fairchild()
208 di->vsel_min = 603000; fan53555_voltages_setup_fairchild()
209 di->vsel_step = 12826; fan53555_voltages_setup_fairchild()
212 dev_err(di->dev, fan53555_voltages_setup_fairchild()
213 "Chip ID %d not supported!\n", di->chip_id); fan53555_voltages_setup_fairchild()
220 static int fan53555_voltages_setup_silergy(struct fan53555_device_info *di) fan53555_voltages_setup_silergy() argument
223 switch (di->chip_id) { fan53555_voltages_setup_silergy()
225 di->vsel_min = 712500; fan53555_voltages_setup_silergy()
226 di->vsel_step = 12500; fan53555_voltages_setup_silergy()
229 dev_err(di->dev, fan53555_voltages_setup_silergy()
230 "Chip ID %d not supported!\n", di->chip_id); fan53555_voltages_setup_silergy()
242 static int fan53555_device_setup(struct fan53555_device_info *di, fan53555_device_setup() argument
250 di->sleep_reg = FAN53555_VSEL0; fan53555_device_setup()
251 di->vol_reg = FAN53555_VSEL1; fan53555_device_setup()
254 di->sleep_reg = FAN53555_VSEL1; fan53555_device_setup()
255 di->vol_reg = FAN53555_VSEL0; fan53555_device_setup()
258 dev_err(di->dev, "Invalid VSEL ID!\n"); fan53555_device_setup()
262 switch (di->vendor) { fan53555_device_setup()
264 ret = fan53555_voltages_setup_fairchild(di); fan53555_device_setup()
267 ret = fan53555_voltages_setup_silergy(di); fan53555_device_setup()
270 dev_err(di->dev, "vendor %d not supported!\n", di->vendor); fan53555_device_setup()
277 static int fan53555_regulator_register(struct fan53555_device_info *di, fan53555_regulator_register() argument
280 struct regulator_desc *rdesc = &di->desc; fan53555_regulator_register()
287 rdesc->enable_reg = di->vol_reg; fan53555_regulator_register()
289 rdesc->min_uV = di->vsel_min; fan53555_regulator_register()
290 rdesc->uV_step = di->vsel_step; fan53555_regulator_register()
291 rdesc->vsel_reg = di->vol_reg; fan53555_regulator_register()
295 di->rdev = devm_regulator_register(di->dev, &di->desc, config); fan53555_regulator_register()
296 return PTR_ERR_OR_ZERO(di->rdev); fan53555_regulator_register()
345 struct fan53555_device_info *di; fan53555_regulator_probe() local
351 di = devm_kzalloc(&client->dev, sizeof(struct fan53555_device_info), fan53555_regulator_probe()
353 if (!di) fan53555_regulator_probe()
358 pdata = fan53555_parse_dt(&client->dev, np, &di->desc); fan53555_regulator_probe()
365 di->regulator = pdata->regulator; fan53555_regulator_probe()
374 di->vendor = (unsigned long) match->data; fan53555_regulator_probe()
377 if (!di->regulator->constraints.ramp_delay) { fan53555_regulator_probe()
381 di->regulator->constraints.ramp_delay fan53555_regulator_probe()
385 di->vendor = id->driver_data; fan53555_regulator_probe()
388 di->regmap = devm_regmap_init_i2c(client, &fan53555_regmap_config); fan53555_regulator_probe()
389 if (IS_ERR(di->regmap)) { fan53555_regulator_probe()
391 return PTR_ERR(di->regmap); fan53555_regulator_probe()
393 di->dev = &client->dev; fan53555_regulator_probe()
394 i2c_set_clientdata(client, di); fan53555_regulator_probe()
396 ret = regmap_read(di->regmap, FAN53555_ID1, &val); fan53555_regulator_probe()
401 di->chip_id = val & DIE_ID; fan53555_regulator_probe()
403 ret = regmap_read(di->regmap, FAN53555_ID2, &val); fan53555_regulator_probe()
408 di->chip_rev = val & DIE_REV; fan53555_regulator_probe()
410 di->chip_id, di->chip_rev); fan53555_regulator_probe()
412 ret = fan53555_device_setup(di, pdata); fan53555_regulator_probe()
418 config.dev = di->dev; fan53555_regulator_probe()
419 config.init_data = di->regulator; fan53555_regulator_probe()
420 config.regmap = di->regmap; fan53555_regulator_probe()
421 config.driver_data = di; fan53555_regulator_probe()
424 ret = fan53555_regulator_register(di, &config); fan53555_regulator_probe()
/linux-4.1.27/drivers/gpu/ipu-v3/
H A Dipu-di.c128 static inline u32 ipu_di_read(struct ipu_di *di, unsigned offset) ipu_di_read() argument
130 return readl(di->base + offset); ipu_di_read()
133 static inline void ipu_di_write(struct ipu_di *di, u32 value, unsigned offset) ipu_di_write() argument
135 writel(value, di->base + offset); ipu_di_write()
138 static void ipu_di_data_wave_config(struct ipu_di *di, ipu_di_data_wave_config() argument
145 ipu_di_write(di, reg, DI_DW_GEN(wave_gen)); ipu_di_data_wave_config()
148 static void ipu_di_data_pin_config(struct ipu_di *di, int wave_gen, int di_pin, ipu_di_data_pin_config() argument
153 reg = ipu_di_read(di, DI_DW_GEN(wave_gen)); ipu_di_data_pin_config()
156 ipu_di_write(di, reg, DI_DW_GEN(wave_gen)); ipu_di_data_pin_config()
158 ipu_di_write(di, (down << 16) | up, DI_DW_SET(wave_gen, set)); ipu_di_data_pin_config()
161 static void ipu_di_sync_config(struct ipu_di *di, struct di_sync_config *config, ipu_di_sync_config() argument
175 dev_err(di->ipu->dev, "DI%d counters out of range.\n", ipu_di_sync_config()
176 di->id); ipu_di_sync_config()
184 ipu_di_write(di, reg, DI_SW_GEN0(wave_gen)); ipu_di_sync_config()
198 ipu_di_write(di, reg, DI_SW_GEN1(wave_gen)); ipu_di_sync_config()
200 reg = ipu_di_read(di, DI_STP_REP(wave_gen)); ipu_di_sync_config()
203 ipu_di_write(di, reg, DI_STP_REP(wave_gen)); ipu_di_sync_config()
207 static void ipu_di_sync_config_interlaced(struct ipu_di *di, ipu_di_sync_config_interlaced() argument
266 ipu_di_sync_config(di, cfg, 0, ARRAY_SIZE(cfg)); ipu_di_sync_config_interlaced()
269 reg = ipu_di_read(di, DI_SW_GEN1(9)); ipu_di_sync_config_interlaced()
272 ipu_di_write(di, reg, DI_SW_GEN1(9)); ipu_di_sync_config_interlaced()
274 ipu_di_write(di, v_total / 2 - 1, DI_SCR_CONF); ipu_di_sync_config_interlaced()
277 static void ipu_di_sync_config_noninterlaced(struct ipu_di *di, ipu_di_sync_config_noninterlaced() argument
398 ipu_di_write(di, v_total - 1, DI_SCR_CONF); ipu_di_sync_config_noninterlaced()
400 ipu_di_sync_config(di, cfg, 0, ARRAY_SIZE(cfg)); ipu_di_sync_config_noninterlaced()
402 ipu_di_sync_config(di, cfg_vga, 0, ARRAY_SIZE(cfg_vga)); ipu_di_sync_config_noninterlaced()
405 static void ipu_di_config_clock(struct ipu_di *di, ipu_di_config_clock() argument
418 clk = di->clk_di; ipu_di_config_clock()
459 clkrate = clk_get_rate(di->clk_ipu); ipu_di_config_clock()
466 dev_dbg(di->ipu->dev, " IPU clock can give %lu with divider %u, error %d.%u%%\n", ipu_di_config_clock()
471 clk = di->clk_ipu; ipu_di_config_clock()
478 clk = di->clk_di; ipu_di_config_clock()
490 di->clk_di_pixel = clk; ipu_di_config_clock()
493 ipu_di_write(di, clkgen0, DI_BS_CLKGEN0); ipu_di_config_clock()
501 ipu_di_write(di, (clkgen0 >> 4) << 16, DI_BS_CLKGEN1); ipu_di_config_clock()
504 val = ipu_di_read(di, DI_GENERAL) & ~DI_GEN_DI_CLK_EXT; ipu_di_config_clock()
505 if (clk == di->clk_di) ipu_di_config_clock()
507 ipu_di_write(di, val, DI_GENERAL); ipu_di_config_clock()
509 dev_dbg(di->ipu->dev, "Want %luHz IPU %luHz DI %luHz using %s, %luHz\n", ipu_di_config_clock()
511 clk_get_rate(di->clk_ipu), ipu_di_config_clock()
512 clk_get_rate(di->clk_di), ipu_di_config_clock()
513 clk == di->clk_di ? "DI" : "IPU", ipu_di_config_clock()
514 clk_get_rate(di->clk_di_pixel) / (clkgen0 >> 4)); ipu_di_config_clock()
521 int ipu_di_adjust_videomode(struct ipu_di *di, struct videomode *mode) ipu_di_adjust_videomode() argument
537 dev_warn(di->ipu->dev, "failed to adjust videomode\n"); ipu_di_adjust_videomode()
541 dev_warn(di->ipu->dev, "videomode adapted for IPU restrictions\n"); ipu_di_adjust_videomode()
546 int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) ipu_di_init_sync_panel() argument
552 dev_dbg(di->ipu->dev, "disp %d: panel size = %d x %d\n", ipu_di_init_sync_panel()
553 di->id, sig->mode.hactive, sig->mode.vactive); ipu_di_init_sync_panel()
558 dev_dbg(di->ipu->dev, "Clocks: IPU %luHz DI %luHz Needed %luHz\n", ipu_di_init_sync_panel()
559 clk_get_rate(di->clk_ipu), ipu_di_init_sync_panel()
560 clk_get_rate(di->clk_di), ipu_di_init_sync_panel()
565 ipu_di_config_clock(di, sig); ipu_di_init_sync_panel()
567 div = ipu_di_read(di, DI_BS_CLKGEN0) & 0xfff; ipu_di_init_sync_panel()
572 ipu_di_write(di, (div << 16), DI_BS_CLKGEN1); ipu_di_init_sync_panel()
574 ipu_di_data_wave_config(di, SYNC_WAVE, div - 1, div - 1); ipu_di_init_sync_panel()
575 ipu_di_data_pin_config(di, SYNC_WAVE, DI_PIN15, 3, 0, div * 2); ipu_di_init_sync_panel()
577 di_gen = ipu_di_read(di, DI_GENERAL) & DI_GEN_DI_CLK_EXT; ipu_di_init_sync_panel()
581 ipu_di_sync_config_interlaced(di, sig); ipu_di_init_sync_panel()
595 ipu_di_sync_config_noninterlaced(di, sig, div); ipu_di_init_sync_panel()
598 if (di->id == 1) ipu_di_init_sync_panel()
627 ipu_di_write(di, di_gen, DI_GENERAL); ipu_di_init_sync_panel()
629 ipu_di_write(di, (--vsync_cnt << DI_VSYNC_SEL_OFFSET) | 0x00000002, ipu_di_init_sync_panel()
632 reg = ipu_di_read(di, DI_POL); ipu_di_init_sync_panel()
640 ipu_di_write(di, reg, DI_POL); ipu_di_init_sync_panel()
648 int ipu_di_enable(struct ipu_di *di) ipu_di_enable() argument
652 WARN_ON(IS_ERR(di->clk_di_pixel)); ipu_di_enable()
654 ret = clk_prepare_enable(di->clk_di_pixel); ipu_di_enable()
658 ipu_module_enable(di->ipu, di->module); ipu_di_enable()
664 int ipu_di_disable(struct ipu_di *di) ipu_di_disable() argument
666 WARN_ON(IS_ERR(di->clk_di_pixel)); ipu_di_disable()
668 ipu_module_disable(di->ipu, di->module); ipu_di_disable()
670 clk_disable_unprepare(di->clk_di_pixel); ipu_di_disable()
676 int ipu_di_get_num(struct ipu_di *di) ipu_di_get_num() argument
678 return di->id; ipu_di_get_num()
686 struct ipu_di *di; ipu_di_get() local
691 di = ipu->di_priv[disp]; ipu_di_get()
695 if (di->inuse) { ipu_di_get()
696 di = ERR_PTR(-EBUSY); ipu_di_get()
700 di->inuse = true; ipu_di_get()
704 return di; ipu_di_get()
708 void ipu_di_put(struct ipu_di *di) ipu_di_put() argument
712 di->inuse = false; ipu_di_put()
722 struct ipu_di *di; ipu_di_init() local
727 di = devm_kzalloc(dev, sizeof(*di), GFP_KERNEL); ipu_di_init()
728 if (!di) ipu_di_init()
731 ipu->di_priv[id] = di; ipu_di_init()
733 di->clk_di = devm_clk_get(dev, id ? "di1" : "di0"); ipu_di_init()
734 if (IS_ERR(di->clk_di)) ipu_di_init()
735 return PTR_ERR(di->clk_di); ipu_di_init()
737 di->module = module; ipu_di_init()
738 di->id = id; ipu_di_init()
739 di->clk_ipu = clk_ipu; ipu_di_init()
740 di->base = devm_ioremap(dev, base, PAGE_SIZE); ipu_di_init()
741 if (!di->base) ipu_di_init()
744 ipu_di_write(di, 0x10, DI_BS_CLKGEN0); ipu_di_init()
747 id, base, di->base); ipu_di_init()
748 di->inuse = false; ipu_di_init()
749 di->ipu = ipu; ipu_di_init()
H A DMakefile3 imx-ipu-v3-objs := ipu-common.o ipu-cpmem.o ipu-csi.o ipu-dc.o ipu-di.o \
H A Dipu-dc.c100 unsigned int di; member in struct:ipu_dc
170 int ipu_dc_init_sync(struct ipu_dc *dc, struct ipu_di *di, bool interlaced, ipu_dc_init_sync() argument
177 dc->di = ipu_di_get_num(di); ipu_dc_init_sync()
193 if (dc->di) { ipu_dc_init_sync()
228 writel(width, priv->dc_reg + DC_DISP_CONF2(dc->di)); ipu_dc_init_sync()
251 int di; ipu_dc_enable_channel() local
254 di = dc->di; ipu_dc_enable_channel()
/linux-4.1.27/fs/bfs/
H A Dinode.c36 struct bfs_inode *di; bfs_iget() local
61 di = (struct bfs_inode *)bh->b_data + off; bfs_iget()
63 inode->i_mode = 0x0000FFFF & le32_to_cpu(di->i_mode); bfs_iget()
64 if (le32_to_cpu(di->i_vtype) == BFS_VDIR) { bfs_iget()
68 } else if (le32_to_cpu(di->i_vtype) == BFS_VREG) { bfs_iget()
75 BFS_I(inode)->i_sblock = le32_to_cpu(di->i_sblock); bfs_iget()
76 BFS_I(inode)->i_eblock = le32_to_cpu(di->i_eblock); bfs_iget()
77 BFS_I(inode)->i_dsk_ino = le16_to_cpu(di->i_ino); bfs_iget()
78 i_uid_write(inode, le32_to_cpu(di->i_uid)); bfs_iget()
79 i_gid_write(inode, le32_to_cpu(di->i_gid)); bfs_iget()
80 set_nlink(inode, le32_to_cpu(di->i_nlink)); bfs_iget()
81 inode->i_size = BFS_FILESIZE(di); bfs_iget()
82 inode->i_blocks = BFS_FILEBLOCKS(di); bfs_iget()
83 inode->i_atime.tv_sec = le32_to_cpu(di->i_atime); bfs_iget()
84 inode->i_mtime.tv_sec = le32_to_cpu(di->i_mtime); bfs_iget()
85 inode->i_ctime.tv_sec = le32_to_cpu(di->i_ctime); bfs_iget()
122 struct bfs_inode *di; bfs_write_inode() local
128 di = find_inode(inode->i_sb, ino, &bh); bfs_write_inode()
129 if (IS_ERR(di)) bfs_write_inode()
130 return PTR_ERR(di); bfs_write_inode()
135 di->i_vtype = cpu_to_le32(BFS_VDIR); bfs_write_inode()
137 di->i_vtype = cpu_to_le32(BFS_VREG); bfs_write_inode()
139 di->i_ino = cpu_to_le16(ino); bfs_write_inode()
140 di->i_mode = cpu_to_le32(inode->i_mode); bfs_write_inode()
141 di->i_uid = cpu_to_le32(i_uid_read(inode)); bfs_write_inode()
142 di->i_gid = cpu_to_le32(i_gid_read(inode)); bfs_write_inode()
143 di->i_nlink = cpu_to_le32(inode->i_nlink); bfs_write_inode()
144 di->i_atime = cpu_to_le32(inode->i_atime.tv_sec); bfs_write_inode()
145 di->i_mtime = cpu_to_le32(inode->i_mtime.tv_sec); bfs_write_inode()
146 di->i_ctime = cpu_to_le32(inode->i_ctime.tv_sec); bfs_write_inode()
148 di->i_sblock = cpu_to_le32(i_sblock); bfs_write_inode()
149 di->i_eblock = cpu_to_le32(BFS_I(inode)->i_eblock); bfs_write_inode()
150 di->i_eoffset = cpu_to_le32(i_sblock * BFS_BSIZE + inode->i_size - 1); bfs_write_inode()
166 struct bfs_inode *di; bfs_evict_inode() local
181 di = find_inode(s, inode->i_ino, &bh); bfs_evict_inode()
182 if (IS_ERR(di)) bfs_evict_inode()
187 memset(di, 0, sizeof(struct bfs_inode)); bfs_evict_inode()
397 struct bfs_inode *di; bfs_fill_super() local
410 di = (struct bfs_inode *)bh->b_data + off; bfs_fill_super()
414 i_eoff = le32_to_cpu(di->i_eoffset); bfs_fill_super()
415 i_sblock = le32_to_cpu(di->i_sblock); bfs_fill_super()
416 i_eblock = le32_to_cpu(di->i_eblock); bfs_fill_super()
432 if (!di->i_ino) { bfs_fill_super()
437 info->si_freeb -= BFS_FILEBLOCKS(di); bfs_fill_super()
439 eblock = le32_to_cpu(di->i_eblock); bfs_fill_super()
/linux-4.1.27/net/netfilter/ipvs/
H A Dip_vs_wrr.c34 * - di: weight step, greatest common divisor from all weights
36 * As result, all weights are in the [di..mw] range with a step=di.
39 * Then cw is reduced with di and all dests are checked again.
40 * Last pass should be with cw = di. We have mw/di passes in total:
43 * pass 2: cw = max weight - di
44 * pass 3: cw = max weight - 2 * di
46 * last pass: cw = di
48 * Weights are supposed to be >= di but we run in parallel with
50 * below di, bad if it is the only available dest.
52 * So, we modify how mw is calculated, now it is reduced with (di - 1),
53 * so that last cw is 1 to catch such dests with weight below di:
54 * pass 1: cw = max weight - (di - 1)
55 * pass 2: cw = max weight - di - (di - 1)
56 * pass 3: cw = max weight - 2 * di - (di - 1)
69 int di; /* decreasing interval */ member in struct:ip_vs_wrr_mark
123 mark->di = ip_vs_wrr_gcd_weight(svc); ip_vs_wrr_init_svc()
124 mark->mw = ip_vs_wrr_max_weight(svc) - (mark->di - 1); ip_vs_wrr_init_svc()
150 mark->di = ip_vs_wrr_gcd_weight(svc); ip_vs_wrr_dest_changed()
151 mark->mw = ip_vs_wrr_max_weight(svc) - (mark->di - 1); ip_vs_wrr_dest_changed()
154 else if (mark->di > 1) ip_vs_wrr_dest_changed()
155 mark->cw = (mark->cw / mark->di) * mark->di + 1; ip_vs_wrr_dest_changed()
191 mark->cw -= mark->di; ip_vs_wrr_schedule()
195 * 1. last_pass: we started checks when cw > di but ip_vs_wrr_schedule()
205 last_pass = mark->cw <= mark->di; ip_vs_wrr_schedule()
/linux-4.1.27/fs/btrfs/
H A Dxattr.c38 struct btrfs_dir_item *di; __btrfs_getxattr() local
50 di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode), name, __btrfs_getxattr()
52 if (!di) { __btrfs_getxattr()
55 } else if (IS_ERR(di)) { __btrfs_getxattr()
56 ret = PTR_ERR(di); __btrfs_getxattr()
63 ret = btrfs_dir_data_len(leaf, di); __btrfs_getxattr()
68 if (btrfs_dir_data_len(leaf, di) > size) { __btrfs_getxattr()
80 data_ptr = (unsigned long)((char *)(di + 1) + __btrfs_getxattr()
81 btrfs_dir_name_len(leaf, di)); __btrfs_getxattr()
83 btrfs_dir_data_len(leaf, di)); __btrfs_getxattr()
84 ret = btrfs_dir_data_len(leaf, di); __btrfs_getxattr()
95 struct btrfs_dir_item *di = NULL; do_setxattr() local
110 di = btrfs_lookup_xattr(trans, root, path, btrfs_ino(inode), do_setxattr()
112 if (!di && (flags & XATTR_REPLACE)) do_setxattr()
114 else if (IS_ERR(di)) do_setxattr()
115 ret = PTR_ERR(di); do_setxattr()
116 else if (di) do_setxattr()
117 ret = btrfs_delete_one_dir_name(trans, root, path, di); do_setxattr()
130 di = btrfs_lookup_xattr(NULL, root, path, btrfs_ino(inode), do_setxattr()
132 if (!di) do_setxattr()
134 else if (IS_ERR(di)) do_setxattr()
135 ret = PTR_ERR(di); do_setxattr()
139 di = NULL; do_setxattr()
152 di = btrfs_match_dir_item_name(root, path, name, name_len); do_setxattr()
153 if (!di && !(flags & XATTR_REPLACE)) { do_setxattr()
159 di = btrfs_match_dir_item_name(root, path, name, name_len); do_setxattr()
160 ASSERT(di); /* logic error */ do_setxattr()
165 if (di && (flags & XATTR_CREATE)) { do_setxattr()
170 if (di) { do_setxattr()
180 const u16 old_data_len = btrfs_dir_data_len(leaf, di); do_setxattr()
182 const u32 data_size = sizeof(*di) + name_len + size; do_setxattr()
195 if (old_data_len + name_len + sizeof(*di) == item_size) { do_setxattr()
204 ret = btrfs_delete_one_dir_name(trans, root, path, di); do_setxattr()
213 di = (struct btrfs_dir_item *)ptr; do_setxattr()
214 btrfs_set_dir_data_len(leaf, di, size); do_setxattr()
215 data_ptr = ((unsigned long)(di + 1)) + name_len; do_setxattr()
268 struct btrfs_dir_item *di; btrfs_listxattr() local
321 di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item); btrfs_listxattr()
322 if (verify_dir_item(root, leaf, di)) btrfs_listxattr()
325 name_len = btrfs_dir_name_len(leaf, di); btrfs_listxattr()
337 name_ptr = (unsigned long)(di + 1); btrfs_listxattr()
H A Ddir-item.c48 struct btrfs_dir_item *di; insert_with_overflow() local
49 di = btrfs_match_dir_item_name(root, path, name, name_len); insert_with_overflow()
50 if (di) insert_with_overflow()
221 struct btrfs_dir_item *di; btrfs_check_dir_item_collision() local
249 di = btrfs_match_dir_item_name(root, path, name, name_len); btrfs_check_dir_item_collision()
250 if (di) { btrfs_check_dir_item_collision()
260 data_size = sizeof(*di) + name_len; btrfs_check_dir_item_collision()
313 struct btrfs_dir_item *di; btrfs_search_dir_index_item() local
345 di = btrfs_match_dir_item_name(root, path, name, name_len); btrfs_search_dir_index_item()
346 if (di) btrfs_search_dir_index_item()
347 return di; btrfs_search_dir_index_item()
423 struct btrfs_dir_item *di) btrfs_delete_one_dir_name()
432 sub_item_len = sizeof(*di) + btrfs_dir_name_len(leaf, di) + btrfs_delete_one_dir_name()
433 btrfs_dir_data_len(leaf, di); btrfs_delete_one_dir_name()
439 unsigned long ptr = (unsigned long)di; btrfs_delete_one_dir_name()
420 btrfs_delete_one_dir_name(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_path *path, struct btrfs_dir_item *di) btrfs_delete_one_dir_name() argument
H A Dprops.c176 struct btrfs_dir_item *di; iterate_object_props() local
204 di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item); iterate_object_props()
209 u32 name_len = btrfs_dir_name_len(leaf, di); iterate_object_props()
210 u32 data_len = btrfs_dir_data_len(leaf, di); iterate_object_props()
214 this_len = sizeof(*di) + name_len + data_len; iterate_object_props()
215 name_ptr = (unsigned long)(di + 1); iterate_object_props()
254 di = (struct btrfs_dir_item *)((char *) di + this_len); iterate_object_props()
H A Dtree-log.c778 struct btrfs_dir_item *di) drop_one_dir_item()
789 btrfs_dir_item_key_to_cpu(leaf, di, &location); drop_one_dir_item()
790 name_len = btrfs_dir_name_len(leaf, di); drop_one_dir_item()
795 read_extent_buffer(leaf, name, (unsigned long)(di + 1), name_len); drop_one_dir_item()
829 struct btrfs_dir_item *di; inode_in_dir() local
833 di = btrfs_lookup_dir_index_item(NULL, root, path, dirid, inode_in_dir()
835 if (di && !IS_ERR(di)) { inode_in_dir()
836 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location); inode_in_dir()
843 di = btrfs_lookup_dir_item(NULL, root, path, dirid, name, name_len, 0); inode_in_dir()
844 if (di && !IS_ERR(di)) { inode_in_dir()
845 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &location); inode_in_dir()
934 struct btrfs_dir_item *di; __add_inode_ref() local
1079 di = btrfs_lookup_dir_index_item(trans, root, path, btrfs_ino(dir), __add_inode_ref()
1081 if (di && !IS_ERR(di)) { __add_inode_ref()
1082 ret = drop_one_dir_item(trans, root, path, dir, di); __add_inode_ref()
1089 di = btrfs_lookup_dir_item(trans, root, path, btrfs_ino(dir), __add_inode_ref()
1091 if (di && !IS_ERR(di)) { __add_inode_ref()
1092 ret = drop_one_dir_item(trans, root, path, dir, di); __add_inode_ref()
1621 struct btrfs_dir_item *di, replay_one_name()
1639 name_len = btrfs_dir_name_len(eb, di); replay_one_name()
1646 log_type = btrfs_dir_type(eb, di); replay_one_name()
1647 read_extent_buffer(eb, name, (unsigned long)(di + 1), replay_one_name()
1650 btrfs_dir_item_key_to_cpu(eb, di, &log_key); replay_one_name()
1745 struct btrfs_dir_item *di; replay_one_dir_item() local
1753 di = (struct btrfs_dir_item *)ptr; replay_one_dir_item()
1754 if (verify_dir_item(root, eb, di)) replay_one_dir_item()
1756 name_len = btrfs_dir_name_len(eb, di); replay_one_dir_item()
1757 ret = replay_one_name(trans, root, path, eb, di, key); replay_one_dir_item()
1760 ptr = (unsigned long)(di + 1); replay_one_dir_item()
1866 struct btrfs_dir_item *di; check_item_in_log() local
1882 di = (struct btrfs_dir_item *)ptr; check_item_in_log()
1883 if (verify_dir_item(root, eb, di)) { check_item_in_log()
1888 name_len = btrfs_dir_name_len(eb, di); check_item_in_log()
1894 read_extent_buffer(eb, name, (unsigned long)(di + 1), check_item_in_log()
1909 btrfs_dir_item_key_to_cpu(eb, di, &location); check_item_in_log()
1952 ptr = (unsigned long)(di + 1); check_item_in_log()
1989 struct btrfs_dir_item *di; replay_xattr_deletes() local
2000 di = btrfs_item_ptr(path->nodes[0], i, struct btrfs_dir_item); replay_xattr_deletes()
2004 u16 name_len = btrfs_dir_name_len(path->nodes[0], di); replay_xattr_deletes()
2005 u16 data_len = btrfs_dir_data_len(path->nodes[0], di); replay_xattr_deletes()
2006 u32 this_len = sizeof(*di) + name_len + data_len; replay_xattr_deletes()
2015 (unsigned long)(di + 1), name_len); replay_xattr_deletes()
2023 di = btrfs_lookup_xattr(trans, root, path, ino, replay_xattr_deletes()
2026 if (IS_ERR(di)) { replay_xattr_deletes()
2027 ret = PTR_ERR(di); replay_xattr_deletes()
2030 ASSERT(di); replay_xattr_deletes()
2032 path, di); replay_xattr_deletes()
2045 di = (struct btrfs_dir_item *)((char *)di + this_len); replay_xattr_deletes()
2960 struct btrfs_dir_item *di; btrfs_del_dir_entries_in_log() local
2983 di = btrfs_lookup_dir_item(trans, log, path, dir_ino, btrfs_del_dir_entries_in_log()
2985 if (IS_ERR(di)) { btrfs_del_dir_entries_in_log()
2986 err = PTR_ERR(di); btrfs_del_dir_entries_in_log()
2989 if (di) { btrfs_del_dir_entries_in_log()
2990 ret = btrfs_delete_one_dir_name(trans, log, path, di); btrfs_del_dir_entries_in_log()
2998 di = btrfs_lookup_dir_index_item(trans, log, path, dir_ino, btrfs_del_dir_entries_in_log()
3000 if (IS_ERR(di)) { btrfs_del_dir_entries_in_log()
3001 err = PTR_ERR(di); btrfs_del_dir_entries_in_log()
3004 if (di) { btrfs_del_dir_entries_in_log()
3005 ret = btrfs_delete_one_dir_name(trans, log, path, di); btrfs_del_dir_entries_in_log()
3220 struct btrfs_dir_item *di; log_dir_items() local
3256 di = btrfs_item_ptr(src, i, struct btrfs_dir_item); log_dir_items()
3257 btrfs_dir_item_key_to_cpu(src, di, &tmp); log_dir_items()
3259 (btrfs_dir_transid(src, di) == trans->transid || log_dir_items()
3260 btrfs_dir_type(src, di) == BTRFS_FT_DIR) && log_dir_items()
4373 struct btrfs_dir_item *di; btrfs_check_ref_name_override() local
4407 di = btrfs_lookup_dir_item(NULL, BTRFS_I(inode)->root, btrfs_check_ref_name_override()
4410 if (di && !IS_ERR(di)) { btrfs_check_ref_name_override()
4413 } else if (IS_ERR(di)) { btrfs_check_ref_name_override()
4414 ret = PTR_ERR(di); btrfs_check_ref_name_override()
4973 struct btrfs_dir_item *di; log_new_dir_dentries() local
4985 di = btrfs_item_ptr(leaf, i, struct btrfs_dir_item); log_new_dir_dentries()
4986 type = btrfs_dir_type(leaf, di); log_new_dir_dentries()
4987 if (btrfs_dir_transid(leaf, di) < trans->transid && log_new_dir_dentries()
4990 btrfs_dir_item_key_to_cpu(leaf, di, &di_key); log_new_dir_dentries()
774 drop_one_dir_item(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_path *path, struct inode *dir, struct btrfs_dir_item *di) drop_one_dir_item() argument
1617 replay_one_name(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_path *path, struct extent_buffer *eb, struct btrfs_dir_item *di, struct btrfs_key *key) replay_one_name() argument
H A Dprint-tree.c178 struct btrfs_dir_item *di; btrfs_print_leaf() local
213 di = btrfs_item_ptr(l, i, struct btrfs_dir_item); btrfs_print_leaf()
214 btrfs_dir_item_key_to_cpu(l, di, &found_key); btrfs_print_leaf()
217 btrfs_dir_type(l, di)); btrfs_print_leaf()
H A Dsend.c977 struct btrfs_dir_item *di; iterate_dir_item() local
1006 di = btrfs_item_ptr(eb, slot, struct btrfs_dir_item); iterate_dir_item()
1013 name_len = btrfs_dir_name_len(eb, di); iterate_dir_item()
1014 data_len = btrfs_dir_data_len(eb, di); iterate_dir_item()
1015 type = btrfs_dir_type(eb, di); iterate_dir_item()
1016 btrfs_dir_item_key_to_cpu(eb, di, &di_key); iterate_dir_item()
1059 read_extent_buffer(eb, buf, (unsigned long)(di + 1), iterate_dir_item()
1062 len = sizeof(*di) + name_len + data_len; iterate_dir_item()
1063 di = (struct btrfs_dir_item *)((char *)di + len); iterate_dir_item()
1508 struct btrfs_dir_item *di; gen_unique_name() local
1522 di = btrfs_lookup_dir_item(NULL, sctx->send_root, gen_unique_name()
1526 if (IS_ERR(di)) { gen_unique_name()
1527 ret = PTR_ERR(di); gen_unique_name()
1530 if (di) { gen_unique_name()
1542 di = btrfs_lookup_dir_item(NULL, sctx->parent_root, gen_unique_name()
1546 if (IS_ERR(di)) { gen_unique_name()
1547 ret = PTR_ERR(di); gen_unique_name()
1550 if (di) { gen_unique_name()
1668 struct btrfs_dir_item *di; lookup_dir_item_inode() local
1676 di = btrfs_lookup_dir_item(NULL, root, path, lookup_dir_item_inode()
1678 if (!di) { lookup_dir_item_inode()
1682 if (IS_ERR(di)) { lookup_dir_item_inode()
1683 ret = PTR_ERR(di); lookup_dir_item_inode()
1686 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &key); lookup_dir_item_inode()
1692 *found_type = btrfs_dir_type(path->nodes[0], di); lookup_dir_item_inode()
2600 struct btrfs_dir_item *di; did_create_dir() local
2637 di = btrfs_item_ptr(eb, slot, struct btrfs_dir_item); did_create_dir()
2638 btrfs_dir_item_key_to_cpu(eb, di, &di_key); did_create_dir()
2863 struct btrfs_dir_item *di; can_rmdir() local
2899 di = btrfs_item_ptr(path->nodes[0], path->slots[0], can_rmdir()
2901 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &loc); can_rmdir()
3292 struct btrfs_dir_item *di; wait_for_dest_dir_move() local
3316 di = btrfs_match_dir_item_name(sctx->parent_root, path, wait_for_dest_dir_move()
3318 if (!di) { wait_for_dest_dir_move()
3330 btrfs_dir_item_key_to_cpu(path->nodes[0], di, &di_key); wait_for_dest_dir_move()
H A Dinode.c3869 struct btrfs_dir_item *di; __btrfs_unlink_inode() local
3882 di = btrfs_lookup_dir_item(trans, root, path, dir_ino, __btrfs_unlink_inode()
3884 if (IS_ERR(di)) { __btrfs_unlink_inode()
3885 ret = PTR_ERR(di); __btrfs_unlink_inode()
3888 if (!di) { __btrfs_unlink_inode()
3893 btrfs_dir_item_key_to_cpu(leaf, di, &key); __btrfs_unlink_inode()
3894 ret = btrfs_delete_one_dir_name(trans, root, path, di); __btrfs_unlink_inode()
4055 struct btrfs_dir_item *di; btrfs_unlink_subvol() local
4065 di = btrfs_lookup_dir_item(trans, root, path, dir_ino, btrfs_unlink_subvol()
4067 if (IS_ERR_OR_NULL(di)) { btrfs_unlink_subvol()
4068 if (!di) btrfs_unlink_subvol()
4071 ret = PTR_ERR(di); btrfs_unlink_subvol()
4076 btrfs_dir_item_key_to_cpu(leaf, di, &key); btrfs_unlink_subvol()
4078 ret = btrfs_delete_one_dir_name(trans, root, path, di); btrfs_unlink_subvol()
4093 di = btrfs_search_dir_index_item(root, path, dir_ino, btrfs_unlink_subvol()
4095 if (IS_ERR_OR_NULL(di)) { btrfs_unlink_subvol()
4096 if (!di) btrfs_unlink_subvol()
4099 ret = PTR_ERR(di); btrfs_unlink_subvol()
5244 struct btrfs_dir_item *di; btrfs_inode_by_name() local
5253 di = btrfs_lookup_dir_item(NULL, root, path, btrfs_ino(dir), name, btrfs_inode_by_name()
5255 if (IS_ERR(di)) btrfs_inode_by_name()
5256 ret = PTR_ERR(di); btrfs_inode_by_name()
5258 if (IS_ERR_OR_NULL(di)) btrfs_inode_by_name()
5261 btrfs_dir_item_key_to_cpu(path->nodes[0], di, location); btrfs_inode_by_name()
5650 struct btrfs_dir_item *di; btrfs_real_readdir() local
5728 di = btrfs_item_ptr(leaf, slot, struct btrfs_dir_item); btrfs_real_readdir()
5735 if (verify_dir_item(root, leaf, di)) btrfs_real_readdir()
5738 name_len = btrfs_dir_name_len(leaf, di); btrfs_real_readdir()
5749 (unsigned long)(di + 1), name_len); btrfs_real_readdir()
5751 d_type = btrfs_filetype_table[btrfs_dir_type(leaf, di)]; btrfs_real_readdir()
5752 btrfs_dir_item_key_to_cpu(leaf, di, &location); btrfs_real_readdir()
5779 di_len = btrfs_dir_name_len(leaf, di) + btrfs_real_readdir()
5780 btrfs_dir_data_len(leaf, di) + sizeof(*di); btrfs_real_readdir()
5782 di = (struct btrfs_dir_item *)((char *)di + di_len); btrfs_real_readdir()
H A Ddelayed-inode.c1695 struct btrfs_dir_item *di; btrfs_readdir_delayed_dir_index() local
1722 di = (struct btrfs_dir_item *)curr->data; list_for_each_entry_safe()
1723 name = (char *)(di + 1); list_for_each_entry_safe()
1724 name_len = btrfs_stack_dir_name_len(di); list_for_each_entry_safe()
1726 d_type = btrfs_filetype_table[di->type]; list_for_each_entry_safe()
1727 btrfs_disk_key_to_cpu(&location, &di->location); list_for_each_entry_safe()
/linux-4.1.27/drivers/staging/dgnc/
H A Ddgnc_mgmt.c133 struct digi_info di; dgnc_mgmt_ioctl() local
141 memset(&di, 0, sizeof(di)); dgnc_mgmt_ioctl()
143 di.info_bdnum = brd; dgnc_mgmt_ioctl()
147 di.info_bdtype = dgnc_Board[brd]->dpatype; dgnc_mgmt_ioctl()
148 di.info_bdstate = dgnc_Board[brd]->dpastatus; dgnc_mgmt_ioctl()
149 di.info_ioport = 0; dgnc_mgmt_ioctl()
150 di.info_physaddr = (ulong) dgnc_Board[brd]->membase; dgnc_mgmt_ioctl()
151 di.info_physsize = (ulong) dgnc_Board[brd]->membase - dgnc_Board[brd]->membase_end; dgnc_mgmt_ioctl()
153 di.info_nports = dgnc_Board[brd]->nasync; dgnc_mgmt_ioctl()
155 di.info_nports = 0; dgnc_mgmt_ioctl()
159 if (copy_to_user(uarg, &di, sizeof(di))) dgnc_mgmt_ioctl()
/linux-4.1.27/drivers/isdn/i4l/
H A Disdn_common.h30 extern void isdn_free_channel(int di, int ch, int usage);
31 extern void isdn_all_eaz(int di, int ch);
33 extern int isdn_dc2minor(int di, int ch);
35 extern char *isdn_map_eaz2msn(char *msn, int di);
37 extern void isdn_unexclusive_channel(int di, int ch);
H A Disdn_common.c220 isdn_dc2minor(int di, int ch) isdn_dc2minor() argument
224 if (dev->chanmap[i] == ch && dev->drvmap[i] == di) isdn_dc2minor()
294 isdn_receive_skb_callback(int di, int channel, struct sk_buff *skb) isdn_receive_skb_callback() argument
298 if ((i = isdn_dc2minor(di, channel)) == -1) { isdn_receive_skb_callback()
323 if (isdn_tty_rcv_skb(i, di, channel, skb)) isdn_receive_skb_callback()
325 wake_up_interruptible(&dev->drv[di]->rcv_waitq[channel]); isdn_receive_skb_callback()
381 isdn_all_eaz(int di, int ch) isdn_all_eaz() argument
385 if (di < 0) isdn_all_eaz()
387 cmd.driver = di; isdn_all_eaz()
415 int di; isdn_status_callback() local
423 di = c->driver; isdn_status_callback()
424 i = isdn_dc2minor(di, c->arg); isdn_status_callback()
437 wake_up_interruptible(&dev->drv[di]->snd_waitq[c->arg]); isdn_status_callback()
440 dev->drv[di]->stavail += c->arg; isdn_status_callback()
441 wake_up_interruptible(&dev->drv[di]->st_waitq); isdn_status_callback()
444 dev->drv[di]->flags |= DRV_FLAG_RUNNING; isdn_status_callback()
446 if (dev->drvmap[i] == di) isdn_status_callback()
447 isdn_all_eaz(di, dev->chanmap[i]); isdn_status_callback()
451 dev->drv[di]->flags &= ~DRV_FLAG_RUNNING; isdn_status_callback()
457 printk(KERN_DEBUG "ICALL (net): %d %ld %s\n", di, c->arg, c->parm.num); isdn_status_callback()
460 cmd.driver = di; isdn_status_callback()
467 r = ((c->command == ISDN_STAT_ICALLW) ? 0 : isdn_net_find_icall(di, c->arg, i, &c->parm.setup)); isdn_status_callback()
476 if ((retval = isdn_tty_find_icall(di, c->arg, &c->parm.setup))) return (retval); isdn_status_callback()
482 if ((!retval) && (dev->drv[di]->flags & DRV_FLAG_REJBUS)) { isdn_status_callback()
484 cmd.driver = di; isdn_status_callback()
494 cmd.driver = di; isdn_status_callback()
511 cmd.driver = di; isdn_status_callback()
549 dev->drvid[di], c->arg, c->parm.num); isdn_status_callback()
580 cmd.driver = di; isdn_status_callback()
595 dev->drv[di]->online &= ~(1 << (c->arg)); isdn_status_callback()
618 dev->drv[di]->online |= (1 << (c->arg)); isdn_status_callback()
634 dev->drv[di]->online &= ~(1 << (c->arg)); isdn_status_callback()
660 if (isdn_add_channels(dev->drv[di], di, c->arg, 1)) { isdn_status_callback()
670 if ((dev->drvmap[i] == di) && isdn_status_callback()
686 while (dev->drv[di]->locks > 0) { isdn_status_callback()
687 isdn_unlock_driver(dev->drv[di]); isdn_status_callback()
692 if (dev->drvmap[i] == di) { isdn_status_callback()
698 dev->channels -= dev->drv[di]->channels; isdn_status_callback()
699 kfree(dev->drv[di]->rcverr); isdn_status_callback()
700 kfree(dev->drv[di]->rcvcount); isdn_status_callback()
701 for (i = 0; i < dev->drv[di]->channels; i++) isdn_status_callback()
702 skb_queue_purge(&dev->drv[di]->rpqueue[i]); isdn_status_callback()
703 kfree(dev->drv[di]->rpqueue); isdn_status_callback()
704 kfree(dev->drv[di]->rcv_waitq); isdn_status_callback()
705 kfree(dev->drv[di]); isdn_status_callback()
706 dev->drv[di] = NULL; isdn_status_callback()
707 dev->drvid[di][0] = '\0'; isdn_status_callback()
764 * of the mapping (di,ch)<->minor, happen during the sleep? --he
767 isdn_readbchan(int di, int channel, u_char *buf, u_char *fp, int len, wait_queue_head_t *sleep) isdn_readbchan() argument
776 if (!dev->drv[di]) isdn_readbchan()
778 if (skb_queue_empty(&dev->drv[di]->rpqueue[channel])) { isdn_readbchan()
781 !skb_queue_empty(&dev->drv[di]->rpqueue[channel])); isdn_readbchan()
785 if (len > dev->drv[di]->rcvcount[channel]) isdn_readbchan()
786 len = dev->drv[di]->rcvcount[channel]; isdn_readbchan()
790 if (!(skb = skb_peek(&dev->drv[di]->rpqueue[channel]))) isdn_readbchan()
796 if ((ISDN_AUDIO_SKB_DLECOUNT(skb)) || (dev->drv[di]->DLEflag & (1 << channel))) { isdn_readbchan()
804 if (dev->drv[di]->DLEflag & DLEmask) { isdn_readbchan()
806 dev->drv[di]->DLEflag &= ~DLEmask; isdn_readbchan()
810 dev->drv[di]->DLEflag |= DLEmask; isdn_readbchan()
849 skb = skb_dequeue(&dev->drv[di]->rpqueue[channel]); isdn_readbchan()
861 dev->drv[di]->rcvcount[channel] -= count_put; isdn_readbchan()
877 * of the mapping (di,ch)<->minor, happen during the sleep? --he
880 isdn_readbchan_tty(int di, int channel, struct tty_port *port, int cisco_hack) isdn_readbchan_tty() argument
890 if (!dev->drv[di]) isdn_readbchan_tty()
892 if (skb_queue_empty(&dev->drv[di]->rpqueue[channel])) isdn_readbchan_tty()
895 len = tty_buffer_request_room(port, dev->drv[di]->rcvcount[channel]); isdn_readbchan_tty()
901 if (!(skb = skb_peek(&dev->drv[di]->rpqueue[channel]))) isdn_readbchan_tty()
907 if ((ISDN_AUDIO_SKB_DLECOUNT(skb)) || (dev->drv[di]->DLEflag & (1 << channel))) { isdn_readbchan_tty()
918 if (dev->drv[di]->DLEflag & DLEmask) { isdn_readbchan_tty()
920 dev->drv[di]->DLEflag &= ~DLEmask; isdn_readbchan_tty()
924 dev->drv[di]->DLEflag |= DLEmask; isdn_readbchan_tty()
962 skb = skb_dequeue(&dev->drv[di]->rpqueue[channel]); isdn_readbchan_tty()
975 dev->drv[di]->rcvcount[channel] -= count_put; isdn_readbchan_tty()
1851 isdn_map_eaz2msn(char *msn, int di) isdn_map_eaz2msn() argument
1853 isdn_driver_t *this = dev->drv[di]; isdn_map_eaz2msn()
1927 isdn_free_channel(int di, int ch, int usage) isdn_free_channel() argument
1931 if ((di < 0) || (ch < 0)) { isdn_free_channel()
1933 __func__, di, ch); isdn_free_channel()
1938 (dev->drvmap[i] == di) && isdn_free_channel()
1951 if (dev->drv[di]) isdn_free_channel()
1952 skb_queue_purge(&dev->drv[di]->rpqueue[ch]); isdn_free_channel()
1960 isdn_unexclusive_channel(int di, int ch) isdn_unexclusive_channel() argument
1965 if ((dev->drvmap[i] == di) && isdn_unexclusive_channel()
2171 static char *map_drvname(int di) map_drvname() argument
2173 if ((di < 0) || (di >= ISDN_MAX_DRIVERS)) map_drvname()
2175 return (dev->drvid[di]); /* driver name */ map_drvname()
H A Disdn_audio.c502 int di; isdn_audio_eval_dtmf() local
569 di = info->isdn_driver; isdn_audio_eval_dtmf()
571 __skb_queue_tail(&dev->drv[di]->rpqueue[ch], skb); isdn_audio_eval_dtmf()
572 dev->drv[di]->rcvcount[ch] += 2; isdn_audio_eval_dtmf()
576 wake_up_interruptible(&dev->drv[di]->rcv_waitq[ch]); isdn_audio_eval_dtmf()
664 int di; isdn_audio_put_dle_code() local
680 di = info->isdn_driver; isdn_audio_put_dle_code()
682 __skb_queue_tail(&dev->drv[di]->rpqueue[ch], skb); isdn_audio_put_dle_code()
683 dev->drv[di]->rcvcount[ch] += 2; isdn_audio_put_dle_code()
687 wake_up_interruptible(&dev->drv[di]->rcv_waitq[ch]); isdn_audio_put_dle_code()
H A Disdn_tty.c168 isdn_tty_rcv_skb(int i, int di, int channel, struct sk_buff *skb) isdn_tty_rcv_skb() argument
257 if (skb_queue_empty(&dev->drv[di]->rpqueue[channel])) isdn_tty_rcv_skb()
265 __skb_queue_tail(&dev->drv[di]->rpqueue[channel], skb); isdn_tty_rcv_skb()
266 dev->drv[di]->rcvcount[channel] += isdn_tty_rcv_skb()
687 int di, ch; isdn_tty_modem_hup() local
692 di = info->isdn_driver; isdn_tty_modem_hup()
694 if (di < 0 || ch < 0) isdn_tty_modem_hup()
734 cmd.driver = di; isdn_tty_modem_hup()
740 isdn_all_eaz(di, ch); isdn_tty_modem_hup()
742 isdn_free_channel(di, ch, 0); isdn_tty_modem_hup()
1881 isdn_tty_match_icall(char *cid, atemu *emu, int di) isdn_tty_match_icall() argument
1885 emu->msn, emu->lmsn, isdn_map_eaz2msn(emu->msn, di), isdn_tty_match_icall()
1897 if ((tmp = isdn_msncmp(cid, isdn_map_eaz2msn(p, di))) > ret) isdn_tty_match_icall()
1901 p, isdn_map_eaz2msn(emu->msn, di), tmp); isdn_tty_match_icall()
1916 tmp = isdn_msncmp(cid, isdn_map_eaz2msn(emu->msn, di)); isdn_tty_match_icall()
1919 isdn_map_eaz2msn(emu->msn, di), tmp); isdn_tty_match_icall()
1937 isdn_tty_find_icall(int di, int ch, setup_parm *setup) isdn_tty_find_icall() argument
1972 idx = isdn_dc2minor(di, ch); isdn_tty_find_icall()
1988 if ((matchret = isdn_tty_match_icall(eaz, &info->emu, di)) > wret) isdn_tty_find_icall()
1991 info->isdn_driver = di; isdn_tty_find_icall()
2016 ((dev->drv[di]->flags & DRV_FLAG_REJBUS) && (wret != 2)) ? "rejected" : "ignored"); isdn_tty_find_icall()
H A Disdn_net.c2060 isdn_net_find_icall(int di, int ch, int idx, setup_parm *setup) isdn_net_find_icall() argument
2103 printk(KERN_DEBUG "n_fi: di=%d ch=%d idx=%d usg=%d\n", di, ch, idx, isdn_net_find_icall()
2116 isdn_net_swapbind(di); isdn_net_find_icall()
2121 my_eaz = isdn_map_eaz2msn(lp->msn, di); isdn_net_find_icall()
2159 (lp->pre_device != di)) { isdn_net_find_icall()
2170 sidx = isdn_dc2minor(di, 1); isdn_net_find_icall()
2183 if ((lp->pre_device == di) && isdn_net_find_icall()
2185 isdn_net_swapbind(di); isdn_net_find_icall()
2198 isdn_net_swapbind(di); isdn_net_find_icall()
2207 (lp->pre_device != di))) { isdn_net_find_icall()
2355 lp->isdn_device = di; isdn_net_find_icall()
2383 printk(KERN_INFO "isdn_net: call from %s -> %d %s ignored\n", nr, di, eaz); isdn_net_find_icall()
/linux-4.1.27/arch/x86/boot/
H A Dbioscall.S36 movw %sp, %di
68 movw 68(%esp), %di /* Original %cx == 3rd argument */
69 andw %di, %di
H A Dvideo-vesa.c45 ireg.di = (size_t)&vginfo; vesa_probe()
69 ireg.di = (size_t)&vminfo; vesa_probe()
117 ireg.di = (size_t)&vminfo; vesa_set_mode()
203 boot_params.screen_info.vesapm_off = oreg.di; vesa_store_pm_info()
267 ireg.di =(size_t)&boot_params.edid_info; /* (ES:)Pointer to block */ vesa_store_edid()
H A Dapm.c53 boot_params.apm_bios_info.dseg_len = oreg.di; query_apm_bios()
H A Dmemory.c31 ireg.di = (size_t)&buf; detect_memory_e820()
H A Dheader.S501 movw $__bss_start, %di
504 subw %di, %cx
H A Dboot.h247 u16 di, hdi; member in struct:biosregs::__anon2961::__anon2963
/linux-4.1.27/arch/arc/include/asm/
H A Dcache.h25 * explicit uncached accesses (LD.di/ST.di) hence more portable drivers
36 " ld.di %0, [%1] \n" \
45 " st.di %0, [%1] \n" \
H A Ddisasm.h89 int zz, aa, x, pref, di; member in struct:disasm_state
/linux-4.1.27/tools/build/feature/
H A Dtest-libunwind.c6 unw_dyn_info_t *di,
/linux-4.1.27/drivers/usb/host/whci/
H A Dwusb.c107 struct di_buf_entry *di = &whc->di_buf[idx]; whc_dev_info_set() local
112 uwb_mas_bm_copy_le(di->availability_info, &wusb_dev->availability); whc_dev_info_set()
113 di->addr_sec_info &= ~(WHC_DI_DISABLE | WHC_DI_DEV_ADDR_MASK); whc_dev_info_set()
114 di->addr_sec_info |= WHC_DI_DEV_ADDR(wusb_dev->addr); whc_dev_info_set()
175 struct di_buf_entry *di = &whc->di_buf[port_idx]; whc_set_ptk() local
185 di->addr_sec_info &= ~WHC_DI_KEY_IDX_MASK; whc_set_ptk()
186 di->addr_sec_info |= WHC_DI_SECURE | WHC_DI_KEY_IDX(port_idx); whc_set_ptk()
188 di->addr_sec_info &= ~WHC_DI_SECURE; whc_set_ptk()
H A Ddebug.c92 struct di_buf_entry *di = &whc->di_buf[d]; di_print() local
96 UWB_NUM_MAS, (unsigned long *)di->availability_info); di_print()
98 (di->addr_sec_info & WHC_DI_SECURE) ? 'S' : ' ', di_print()
99 (di->addr_sec_info & WHC_DI_DISABLE) ? 'D' : ' ', di_print()
100 (di->addr_sec_info & WHC_DI_KEY_IDX_MASK) >> 8, di_print()
101 (di->addr_sec_info & WHC_DI_DEV_ADDR_MASK)); di_print()
181 whc->dbg->di_f = debugfs_create_file("di", 0444, whc_dbg_init()
/linux-4.1.27/drivers/isdn/hardware/eicon/
H A DMakefile12 divas-y := divasmain.o divasfunc.o di.o io.o istream.o \
H A Ddivasfunc.c15 #include "di.h"
H A Distream.c32 #include "di.h"
H A Ds_bri.c30 #include "di.h"
H A Ds_pri.c30 #include "di.h"
H A Ddivasproc.c28 #include "di.h"
/linux-4.1.27/arch/x86/lib/
H A Dstrstr_32.c28 : "dx", "di"); strstr()
/linux-4.1.27/include/linux/
H A Dipv6_route.h5 * Pedro Roque <roque@di.fc.ul.pt>
H A Din6.h6 * Pedro Roque <roque@di.fc.ul.pt>
H A Dquotaops.h101 struct qc_dqblk *di);
103 struct qc_dqblk *di);
/linux-4.1.27/arch/x86/kernel/
H A Dverify_cpu.S59 xor %di,%di
66 mov $1,%di # cpu is from AMD
125 test %di,%di
131 xor %di,%di # don't loop
H A Dasm-offsets_64.c42 ENTRY(di); main()
60 ENTRY(di); main()
H A Dvsyscall_64.c68 printk_ratelimited("%s%s[%d] %s ip:%lx cs:%lx sp:%lx ax:%lx si:%lx di:%lx\n", warn_bad_vsyscall()
71 regs->sp, regs->ax, regs->si, regs->di); warn_bad_vsyscall()
165 if (!write_ok_or_segv(regs->di, sizeof(struct timeval)) || emulate_vsyscall()
175 if (!write_ok_or_segv(regs->di, sizeof(time_t))) { emulate_vsyscall()
184 if (!write_ok_or_segv(regs->di, sizeof(unsigned)) || emulate_vsyscall()
224 (struct timeval __user *)regs->di, emulate_vsyscall()
229 ret = sys_time((time_t __user *)regs->di); emulate_vsyscall()
233 ret = sys_getcpu((unsigned __user *)regs->di, emulate_vsyscall()
H A Dasm-offsets_32.c25 OFFSET(IA32_SIGCONTEXT_di, sigcontext, di); foo()
48 OFFSET(PT_EDI, pt_regs, di); foo()
H A Dperf_regs.c24 PT_REGS_OFFSET(PERF_REG_X86_DI, di),
142 regs_user_copy->di = user_regs->di; perf_get_regs_user()
H A Ddoublefault.c43 t->si, t->di); doublefault_fn()
H A Dsignal.c82 COPY(di); COPY(si); COPY(bp); COPY(sp); COPY(bx); restore_sigcontext()
134 put_user_ex(regs->di, &sc->di); setup_sigcontext()
447 regs->di = sig; __setup_rt_frame()
519 regs->di = ksig->sig; x32_setup_rt_frame()
H A Dkgdb.c63 { "di", 4, offsetof(struct pt_regs, di) },
76 { "di", 8, offsetof(struct pt_regs, di) },
H A Dptrace.c79 REG_OFFSET_NAME(di),
135 [0] = offsetof(struct pt_regs, di),
966 R32(edi, di); putreg32()
1036 R32(edi, di); getreg32()
1442 audit_syscall_entry(regs->orig_ax, regs->di, do_audit_syscall_entry()
1498 sd.args[0] = regs->di; syscall_trace_enter_phase1()
1511 sd.args[4] = regs->di; syscall_trace_enter_phase1()
H A Duprobes.c408 * we'll need code to prevent selection of di as scratch reg! riprel_analyze()
435 * Register numbering is ax,cx,dx,bx, sp,bp,si,di, r8..r15. riprel_analyze()
446 /* TODO (paranoia): force maskmovq to not use di */ riprel_analyze()
471 return &regs->di; scratch_reg()
/linux-4.1.27/arch/mips/sni/
H A Dsetup.c43 DISPLAY_STATUS *di; sni_display_setup() local
45 di = ArcGetDisplayStatus(1); sni_display_setup()
47 if (di) { sni_display_setup()
48 si->orig_x = di->CursorXPosition; sni_display_setup()
49 si->orig_y = di->CursorYPosition; sni_display_setup()
50 si->orig_video_cols = di->CursorMaxXPosition; sni_display_setup()
51 si->orig_video_lines = di->CursorMaxYPosition; sni_display_setup()
/linux-4.1.27/drivers/gpu/drm/imx/
H A Dipuv3-crtc.c43 struct ipu_di *di; member in struct:ipu_crtc
66 ipu_di_enable(ipu_crtc->di); ipu_fb_enable()
80 ipu_di_disable(ipu_crtc->di); ipu_fb_disable()
184 ret = ipu_dc_init_sync(ipu_crtc->dc, ipu_crtc->di, ipu_crtc_mode_set()
194 ret = ipu_di_init_sync_panel(ipu_crtc->di, &sig_cfg); ipu_crtc_mode_set()
249 ret = ipu_di_adjust_videomode(ipu_crtc->di, &vm); ipu_crtc_mode_fixup()
317 if (!IS_ERR_OR_NULL(ipu_crtc->di)) ipu_put_resources()
318 ipu_di_put(ipu_crtc->di); ipu_put_resources()
333 ipu_crtc->di = ipu_di_get(ipu, pdata->di); ipu_get_resources()
334 if (IS_ERR(ipu_crtc->di)) { ipu_get_resources()
335 ret = PTR_ERR(ipu_crtc->di); ipu_get_resources()
482 pdata->di + 2); ipu_drm_probe()
485 pdata->di + 2, dev->parent->of_node->full_name); ipu_drm_probe()
H A Dimx-ldb.c100 struct drm_display_info *di = &connector->display_info; imx_ldb_connector_get_modes() local
103 if (!imx_ldb_ch->bus_format && di->num_bus_formats) imx_ldb_connector_get_modes()
104 imx_ldb_ch->bus_format = di->bus_formats[0]; imx_ldb_connector_get_modes()
173 "unable to set di%d parent clock to ldb_di%d\n", mux, imx_ldb_set_clock()
355 "unable to set di%d parent clock to original parent\n", imx_ldb_encoder_disable()
390 snprintf(clkname, sizeof(clkname), "di%d", chno); imx_ldb_get_clk()
395 snprintf(clkname, sizeof(clkname), "di%d_pll", chno); imx_ldb_get_clk()
548 sprintf(clkname, "di%d_sel", i); imx_ldb_bind()
/linux-4.1.27/drivers/isdn/mISDN/
H A Dsocket.c387 struct mISDN_devinfo di; data_sock_ioctl() local
389 memset(&di, 0, sizeof(di)); data_sock_ioctl()
390 di.id = dev->id; data_sock_ioctl()
391 di.Dprotocols = dev->Dprotocols; data_sock_ioctl()
392 di.Bprotocols = dev->Bprotocols | get_all_Bprotocols(); data_sock_ioctl()
393 di.protocol = dev->D.protocol; data_sock_ioctl()
394 memcpy(di.channelmap, dev->channelmap, data_sock_ioctl()
395 sizeof(di.channelmap)); data_sock_ioctl()
396 di.nrbchan = dev->nrbchan; data_sock_ioctl()
397 strcpy(di.name, dev_name(&dev->dev)); data_sock_ioctl()
398 if (copy_to_user((void __user *)arg, &di, sizeof(di))) data_sock_ioctl()
671 struct mISDN_devinfo di; base_sock_ioctl() local
673 memset(&di, 0, sizeof(di)); base_sock_ioctl()
674 di.id = dev->id; base_sock_ioctl()
675 di.Dprotocols = dev->Dprotocols; base_sock_ioctl()
676 di.Bprotocols = dev->Bprotocols | get_all_Bprotocols(); base_sock_ioctl()
677 di.protocol = dev->D.protocol; base_sock_ioctl()
678 memcpy(di.channelmap, dev->channelmap, base_sock_ioctl()
679 sizeof(di.channelmap)); base_sock_ioctl()
680 di.nrbchan = dev->nrbchan; base_sock_ioctl()
681 strcpy(di.name, dev_name(&dev->dev)); base_sock_ioctl()
682 if (copy_to_user((void __user *)arg, &di, sizeof(di))) base_sock_ioctl()
/linux-4.1.27/arch/m68k/include/asm/
H A Dbitops.h37 : "a" (p), "di" (nr & 7) bset_reg_set_bit()
47 : "di" (nr & 7)); bset_mem_set_bit()
77 : "a" (p), "di" (nr & 7) bclr_reg_clear_bit()
87 : "di" (nr & 7)); bclr_mem_clear_bit()
117 : "a" (p), "di" (nr & 7) bchg_reg_change_bit()
127 : "di" (nr & 7)); bchg_mem_change_bit()
165 : "a" (p), "di" (nr & 7) bset_reg_test_and_set_bit()
178 : "di" (nr & 7)); bset_mem_test_and_set_bit()
215 : "a" (p), "di" (nr & 7) bclr_reg_test_and_clear_bit()
228 : "di" (nr & 7)); bclr_mem_test_and_clear_bit()
265 : "a" (p), "di" (nr & 7) bchg_reg_test_and_change_bit()
278 : "di" (nr & 7)); bchg_mem_test_and_change_bit()
H A Datariints.h133 : : "di" (mask), "m" (*reg) : "memory" ); set_mfp_bit()
145 : : "di" (mask), "m" (*reg) : "memory" ); clear_mfp_bit()
148 : : "di" (mask), "m" (*reg) : "memory" ); clear_mfp_bit()
H A Dthread_info.h54 : "di" (~(THREAD_SIZE-1)) current_thread_info()
H A Dcacheflush_mm.h174 : "di" (FLUSH_I_AND_D)); \
186 : "di" (FLUSH_I_AND_D)); \
246 : "di" (FLUSH_I)); __flush_page_to_ram()
H A Datomic.h30 #define ASM_DI "di"
H A Dmmu_context.h239 : "=d" (tmp) : "di" (FLUSH_I_AND_D)); switch_mm_0230()
276 : "=d" (tmp): "di" (0x00200000)); switch_mm_0460()
/linux-4.1.27/arch/x86/kvm/
H A Dtss.h51 u16 di; member in struct:tss_segment_16
/linux-4.1.27/arch/mips/include/asm/
H A Dirqflags.h28 " di \n" arch_local_irq_disable()
44 " di %[flags] \n" arch_local_irq_save()
69 " di \n" arch_local_irq_restore()
99 " di \n" __arch_local_irq_restore()
/linux-4.1.27/arch/cris/include/arch-v10/arch/
H A Dirqflags.h15 asm volatile("di" : : : "memory"); arch_local_irq_disable()
H A Dirq.h90 "di\n\t" /* need to disable irq's at this point */\
/linux-4.1.27/arch/cris/include/arch-v32/arch/
H A Dirqflags.h16 asm volatile("di" : : : "memory"); arch_local_irq_disable()
/linux-4.1.27/security/keys/encrypted-keys/
H A Decryptfs_format.h5 * Copyright (C) 2010 Politecnico di Torino, Italy
H A Decryptfs_format.c5 * Copyright (C) 2010 Politecnico di Torino, Italy
H A Dmasterkey_trusted.c3 * Copyright (C) 2010 Politecnico di Torino, Italy
/linux-4.1.27/fs/ceph/
H A Ddir.c36 struct ceph_dentry_info *di; ceph_init_dentry() local
41 di = kmem_cache_alloc(ceph_dentry_cachep, GFP_NOFS | __GFP_ZERO); ceph_init_dentry()
42 if (!di) ceph_init_dentry()
48 kmem_cache_free(ceph_dentry_cachep, di); ceph_init_dentry()
59 di->dentry = dentry; ceph_init_dentry()
60 di->lease_session = NULL; ceph_init_dentry()
64 dentry->d_fsdata = di; ceph_init_dentry()
128 struct ceph_dentry_info *di; __dcache_readdir() local
153 di = ceph_dentry(dentry); __dcache_readdir()
163 if (di->lease_shared_gen == shared_gen && __dcache_readdir()
167 fpos_cmp(ctx->pos, di->offset) <= 0) __dcache_readdir()
170 dentry, di->offset, __dcache_readdir()
176 di = ceph_dentry(dentry); __dcache_readdir()
191 dout(" %llu (%llu) dentry %p %pd %p\n", di->offset, ctx->pos, __dcache_readdir()
200 fi->next_offset = fpos_off(di->offset); __dcache_readdir()
206 ctx->pos = di->offset + 1; __dcache_readdir()
632 struct ceph_dentry_info *di = ceph_dentry(dentry); ceph_lookup() local
646 di->lease_shared_gen = ci->i_shared_gen; ceph_lookup()
1020 struct ceph_dentry_info *di; dentry_lease_is_valid() local
1030 di = ceph_dentry(dentry); dentry_lease_is_valid()
1031 if (di->lease_session) { dentry_lease_is_valid()
1032 s = di->lease_session; dentry_lease_is_valid()
1038 if (di->lease_gen == gen && dentry_lease_is_valid()
1042 if (di->lease_renew_after && dentry_lease_is_valid()
1043 time_after(jiffies, di->lease_renew_after)) { dentry_lease_is_valid()
1047 seq = di->lease_seq; dentry_lease_is_valid()
1048 di->lease_renew_after = 0; dentry_lease_is_valid()
1049 di->lease_renew_from = jiffies; dentry_lease_is_valid()
1070 struct ceph_dentry_info *di = ceph_dentry(dentry); dir_lease_is_valid() local
1074 if (ci->i_shared_gen == di->lease_shared_gen) dir_lease_is_valid()
1079 (unsigned)di->lease_shared_gen, valid); dir_lease_is_valid()
1130 struct ceph_dentry_info *di = ceph_dentry(dentry); ceph_d_release() local
1134 if (di->lease_session) ceph_d_release()
1135 ceph_put_mds_session(di->lease_session); ceph_d_release()
1136 kmem_cache_free(ceph_dentry_cachep, di); ceph_d_release()
1293 struct ceph_dentry_info *di = ceph_dentry(dn); ceph_dentry_lru_add() local
1296 dout("dentry_lru_add %p %p '%pd'\n", di, dn, dn); ceph_dentry_lru_add()
1299 list_add_tail(&di->lru, &mdsc->dentry_lru); ceph_dentry_lru_add()
1306 struct ceph_dentry_info *di = ceph_dentry(dn); ceph_dentry_lru_touch() local
1309 dout("dentry_lru_touch %p %p '%pd' (offset %lld)\n", di, dn, dn, ceph_dentry_lru_touch()
1310 di->offset); ceph_dentry_lru_touch()
1313 list_move_tail(&di->lru, &mdsc->dentry_lru); ceph_dentry_lru_touch()
1319 struct ceph_dentry_info *di = ceph_dentry(dn); ceph_dentry_lru_del() local
1322 dout("dentry_lru_del %p %p '%pd'\n", di, dn, dn); ceph_dentry_lru_del()
1325 list_del_init(&di->lru); ceph_dentry_lru_del()
H A Ddebugfs.c146 struct ceph_dentry_info *di; dentry_lru_show() local
149 list_for_each_entry(di, &mdsc->dentry_lru, lru) { dentry_lru_show()
150 struct dentry *dentry = di->dentry; dentry_lru_show()
152 di, dentry, dentry); dentry_lru_show()
H A Dmds_client.c3086 struct ceph_dentry_info *di = ceph_dentry(dentry); __ceph_mdsc_drop_dentry_lease() local
3088 ceph_put_mds_session(di->lease_session); __ceph_mdsc_drop_dentry_lease()
3089 di->lease_session = NULL; __ceph_mdsc_drop_dentry_lease()
3099 struct ceph_dentry_info *di; handle_lease() local
3148 di = ceph_dentry(dentry); handle_lease()
3151 if (di->lease_session == session) { handle_lease()
3152 if (ceph_seq_cmp(di->lease_seq, seq) > 0) handle_lease()
3153 h->seq = cpu_to_le32(di->lease_seq); handle_lease()
3160 if (di->lease_session == session && handle_lease()
3161 di->lease_gen == session->s_cap_gen && handle_lease()
3162 di->lease_renew_from && handle_lease()
3163 di->lease_renew_after == 0) { handle_lease()
3167 di->lease_seq = seq; handle_lease()
3168 dentry->d_time = di->lease_renew_from + duration; handle_lease()
3169 di->lease_renew_after = di->lease_renew_from + handle_lease()
3171 di->lease_renew_from = 0; handle_lease()
3240 struct ceph_dentry_info *di; ceph_mdsc_lease_release() local
3249 di = ceph_dentry(dentry); ceph_mdsc_lease_release()
3250 if (!di || !di->lease_session || ceph_mdsc_lease_release()
3251 di->lease_session->s_mds < 0 || ceph_mdsc_lease_release()
3252 di->lease_gen != di->lease_session->s_cap_gen || ceph_mdsc_lease_release()
3262 session = ceph_get_mds_session(di->lease_session); ceph_mdsc_lease_release()
3263 seq = di->lease_seq; ceph_mdsc_lease_release()
H A Dinode.c928 struct ceph_dentry_info *di = ceph_dentry(dentry); update_dentry_lease() local
944 di->lease_shared_gen = ceph_inode(dir)->i_shared_gen; update_dentry_lease()
949 if (di->lease_gen == session->s_cap_gen && update_dentry_lease()
953 if (di->lease_session && di->lease_session != session) update_dentry_lease()
958 if (!di->lease_session) update_dentry_lease()
959 di->lease_session = ceph_get_mds_session(session); update_dentry_lease()
960 di->lease_gen = session->s_cap_gen; update_dentry_lease()
961 di->lease_seq = le32_to_cpu(lease->seq); update_dentry_lease()
962 di->lease_renew_after = half_ttl; update_dentry_lease()
963 di->lease_renew_from = 0; update_dentry_lease()
1347 struct ceph_dentry_info *di; ceph_readdir_prepopulate() local
1460 di = dn->d_fsdata; ceph_readdir_prepopulate()
1461 di->offset = ceph_make_fpos(frag, i + r_readdir_offset); ceph_readdir_prepopulate()
/linux-4.1.27/tools/perf/util/
H A Dunwind-libunwind.c39 unw_dyn_info_t *di,
329 unw_dyn_info_t di; find_proc_info() local
341 memset(&di, 0, sizeof(di)); find_proc_info()
342 di.format = UNW_INFO_FORMAT_REMOTE_TABLE; find_proc_info()
343 di.start_ip = map->start; find_proc_info()
344 di.end_ip = map->end; find_proc_info()
345 di.u.rti.segbase = map->start + segbase; find_proc_info()
346 di.u.rti.table_data = map->start + table_data; find_proc_info()
347 di.u.rti.table_len = fde_count * sizeof(struct table_entry) find_proc_info()
349 return dwarf_search_unwind_table(as, ip, &di, pi, find_proc_info()
360 memset(&di, 0, sizeof(di)); find_proc_info()
361 if (dwarf_find_debug_frame(0, &di, ip, base, map->dso->name, find_proc_info()
363 return dwarf_search_unwind_table(as, ip, &di, pi, find_proc_info()
/linux-4.1.27/arch/x86/include/asm/
H A Da.out-core.h46 dump->regs.di = regs->di; aout_dump_thread()
H A Dsyscall.h123 *args++ = regs->di; syscall_get_arguments()
138 *args++ = regs->di; syscall_get_arguments()
184 regs->di = *args++; syscall_set_arguments()
199 regs->di = *args++; syscall_set_arguments()
H A Dsigcontext.h12 unsigned long di; member in struct:sigcontext
49 unsigned long di; member in struct:sigcontext
H A Dasm.h43 #define _ASM_DI __ASM_REG(di)
H A Delf.h111 _r->si = 0; _r->di = 0; _r->bp = 0; \
126 pr_reg[4] = regs->di; \
176 regs->si = regs->di /*= regs->bp*/ = 0; elf_common_init()
222 (pr_reg)[14] = (regs)->di; \
H A Dptrace.h16 unsigned long di; member in struct:pt_regs
53 unsigned long di; member in struct:pt_regs
H A Dkexec.h104 asm volatile("movl %%edi,%0" : "=m"(newregs->di)); crash_setup_regs()
118 asm volatile("movq %%rdi,%0" : "=m"(newregs->di)); crash_setup_regs()
H A Duser_32.h82 unsigned long di; member in struct:user_regs_struct
H A Duser_64.h83 unsigned long di; member in struct:user_regs_struct
/linux-4.1.27/samples/bpf/
H A Dtracex3_kern.c26 long rq = ctx->di; bpf_prog1()
54 long rq = ctx->di; bpf_prog2()
H A Dtracex1_kern.c32 skb = (struct sk_buff *) ctx->di; bpf_prog1()
/linux-4.1.27/tools/perf/arch/x86/util/
H A Ddwarf-regs.c39 "%di",
49 "%di",
/linux-4.1.27/fs/ocfs2/
H A Dsuper.c128 static int ocfs2_verify_volume(struct ocfs2_dinode *di,
763 struct ocfs2_dinode *di; ocfs2_sb_probe() local
824 di = (struct ocfs2_dinode *) (*bh)->b_data; ocfs2_sb_probe()
827 tmpstat = ocfs2_verify_volume(di, *bh, blksize, stats); ocfs2_sb_probe()
2045 struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data; ocfs2_initialize_super() local
2069 cbits = le32_to_cpu(di->id2.i_super.s_clustersize_bits); ocfs2_initialize_super()
2070 bbits = le32_to_cpu(di->id2.i_super.s_blocksize_bits); ocfs2_initialize_super()
2072 memcpy(sb->s_uuid, di->id2.i_super.s_uuid, ocfs2_initialize_super()
2073 sizeof(di->id2.i_super.s_uuid)); ocfs2_initialize_super()
2078 osb->osb_dx_seed[i] = le32_to_cpu(di->id2.i_super.s_dx_seed[i]); ocfs2_initialize_super()
2079 osb->osb_dx_seed[3] = le32_to_cpu(di->id2.i_super.s_uuid_hash); ocfs2_initialize_super()
2112 osb->max_slots = le16_to_cpu(di->id2.i_super.s_max_slots); ocfs2_initialize_super()
2136 di->id2.i_super.s_xattr_inline_size); ocfs2_initialize_super()
2179 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_compat); ocfs2_initialize_super()
2181 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_ro_compat); ocfs2_initialize_super()
2183 le32_to_cpu(OCFS2_RAW_SB(di)->s_feature_incompat); ocfs2_initialize_super()
2201 OCFS2_RAW_SB(di)->s_cluster_info.ci_stackflags; ocfs2_initialize_super()
2203 OCFS2_RAW_SB(di)->s_cluster_info.ci_stack, ocfs2_initialize_super()
2214 OCFS2_RAW_SB(di)->s_cluster_info.ci_cluster, ocfs2_initialize_super()
2256 le32_to_cpu(di->id2.i_super.s_clustersize_bits); ocfs2_initialize_super()
2268 le32_to_cpu(di->i_clusters)); ocfs2_initialize_super()
2279 if (ocfs2_setup_osb_uuid(osb, di->id2.i_super.s_uuid, ocfs2_initialize_super()
2280 sizeof(di->id2.i_super.s_uuid))) { ocfs2_initialize_super()
2286 strlcpy(osb->vol_label, di->id2.i_super.s_label, ocfs2_initialize_super()
2288 osb->root_blkno = le64_to_cpu(di->id2.i_super.s_root_blkno); ocfs2_initialize_super()
2289 osb->system_dir_blkno = le64_to_cpu(di->id2.i_super.s_system_dir_blkno); ocfs2_initialize_super()
2291 le64_to_cpu(di->id2.i_super.s_first_cluster_group); ocfs2_initialize_super()
2292 osb->fs_generation = le32_to_cpu(di->i_fs_generation); ocfs2_initialize_super()
2293 osb->uuid_hash = le32_to_cpu(di->id2.i_super.s_uuid_hash); ocfs2_initialize_super()
2349 static int ocfs2_verify_volume(struct ocfs2_dinode *di, ocfs2_verify_volume() argument
2356 if (memcmp(di->i_signature, OCFS2_SUPER_BLOCK_SIGNATURE, ocfs2_verify_volume()
2359 if (le32_to_cpu(di->id2.i_super.s_feature_incompat) & ocfs2_verify_volume()
2363 &di->i_check, ocfs2_verify_volume()
2369 if ((1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits)) != blksz) { ocfs2_verify_volume()
2372 1 << le32_to_cpu(di->id2.i_super.s_blocksize_bits), ocfs2_verify_volume()
2374 } else if (le16_to_cpu(di->id2.i_super.s_major_rev_level) != ocfs2_verify_volume()
2376 le16_to_cpu(di->id2.i_super.s_minor_rev_level) != ocfs2_verify_volume()
2380 le16_to_cpu(di->id2.i_super.s_major_rev_level), ocfs2_verify_volume()
2381 le16_to_cpu(di->id2.i_super.s_minor_rev_level), ocfs2_verify_volume()
2384 } else if (bh->b_blocknr != le64_to_cpu(di->i_blkno)) { ocfs2_verify_volume()
2387 (unsigned long long)le64_to_cpu(di->i_blkno), ocfs2_verify_volume()
2389 } else if (le32_to_cpu(di->id2.i_super.s_clustersize_bits) < 12 || ocfs2_verify_volume()
2390 le32_to_cpu(di->id2.i_super.s_clustersize_bits) > 20) { ocfs2_verify_volume()
2392 1 << le32_to_cpu(di->id2.i_super.s_clustersize_bits)); ocfs2_verify_volume()
2393 } else if (!le64_to_cpu(di->id2.i_super.s_root_blkno)) { ocfs2_verify_volume()
2395 } else if (!le64_to_cpu(di->id2.i_super.s_system_dir_blkno)) { ocfs2_verify_volume()
2397 } else if (le16_to_cpu(di->id2.i_super.s_max_slots) > OCFS2_MAX_SLOTS) { ocfs2_verify_volume()
2401 le16_to_cpu(di->id2.i_super.s_max_slots), ocfs2_verify_volume()
H A Dresize.c377 struct ocfs2_dinode *di, ocfs2_check_new_group()
384 u16 cl_bpc = le16_to_cpu(di->id2.i_chain.cl_bpc); ocfs2_check_new_group()
386 ret = ocfs2_check_group_descriptor(inode->i_sb, di, group_bh); ocfs2_check_new_group()
415 struct ocfs2_dinode *di, ocfs2_verify_group_and_input()
419 u16 cl_count = le16_to_cpu(di->id2.i_chain.cl_count); ocfs2_verify_group_and_input()
420 u16 cl_cpg = le16_to_cpu(di->id2.i_chain.cl_cpg); ocfs2_verify_group_and_input()
421 u16 next_free = le16_to_cpu(di->id2.i_chain.cl_next_free_rec); ocfs2_verify_group_and_input()
423 u32 total_clusters = le32_to_cpu(di->i_clusters); ocfs2_verify_group_and_input()
444 else if ((ret = ocfs2_check_new_group(inode, di, input, group_bh))) ocfs2_verify_group_and_input()
376 ocfs2_check_new_group(struct inode *inode, struct ocfs2_dinode *di, struct ocfs2_new_group_input *input, struct buffer_head *group_bh) ocfs2_check_new_group() argument
414 ocfs2_verify_group_and_input(struct inode *inode, struct ocfs2_dinode *di, struct ocfs2_new_group_input *input, struct buffer_head *group_bh) ocfs2_verify_group_and_input() argument
H A Dacl.c172 struct ocfs2_dinode *di; ocfs2_acl_set_mode() local
195 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_acl_set_mode()
205 di->i_mode = cpu_to_le16(inode->i_mode); ocfs2_acl_set_mode()
206 di->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec); ocfs2_acl_set_mode()
207 di->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec); ocfs2_acl_set_mode()
H A Dinode.c621 struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_remove_inode() local
625 le16_to_cpu(di->i_suballoc_slot)); ocfs2_remove_inode()
666 di->i_dtime = cpu_to_le64(CURRENT_TIME.tv_sec); ocfs2_remove_inode()
667 di->i_flags &= cpu_to_le32(~(OCFS2_VALID_FL | OCFS2_ORPHANED_FL)); ocfs2_remove_inode()
674 inode_alloc_bh, di); ocfs2_remove_inode()
732 struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_wipe_inode() local
735 orphaned_slot = le16_to_cpu(di->i_orphaned_slot); ocfs2_wipe_inode()
870 struct ocfs2_dinode *di; ocfs2_query_inode_wipe() local
891 di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_query_inode_wipe()
892 if (!(di->i_flags & cpu_to_le32(OCFS2_ORPHANED_FL)) && ocfs2_query_inode_wipe()
902 if (di->i_dyn_features & cpu_to_le16(OCFS2_HAS_REFCOUNT_FL)) { ocfs2_query_inode_wipe()
913 (unsigned long long)le64_to_cpu(di->i_blkno), ocfs2_query_inode_wipe()
914 le32_to_cpu(di->i_flags), oi->ip_flags); ocfs2_query_inode_wipe()
919 if (di->i_dtime) { ocfs2_query_inode_wipe()
949 trace_ocfs2_query_inode_wipe_succ(le16_to_cpu(di->i_orphaned_slot)); ocfs2_query_inode_wipe()
1328 struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data; ocfs2_validate_inode_block() local
1339 rc = ocfs2_validate_meta_ecc(sb, bh->b_data, &di->i_check); ocfs2_validate_inode_block()
1352 if (!OCFS2_IS_VALID_DINODE(di)) { ocfs2_validate_inode_block()
1355 di->i_signature); ocfs2_validate_inode_block()
1359 if (le64_to_cpu(di->i_blkno) != bh->b_blocknr) { ocfs2_validate_inode_block()
1362 (unsigned long long)le64_to_cpu(di->i_blkno)); ocfs2_validate_inode_block()
1366 if (!(di->i_flags & cpu_to_le32(OCFS2_VALID_FL))) { ocfs2_validate_inode_block()
1373 if (le32_to_cpu(di->i_fs_generation) != ocfs2_validate_inode_block()
1378 le32_to_cpu(di->i_fs_generation)); ocfs2_validate_inode_block()
H A Dextent_map.c289 struct ocfs2_dinode *di) ocfs2_last_eb_is_empty()
292 u64 last_eb_blk = le64_to_cpu(di->i_last_eb_blk); ocfs2_last_eb_is_empty()
417 struct ocfs2_dinode *di; ocfs2_get_clusters_nocache() local
427 di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_get_clusters_nocache()
428 el = &di->id2.i_list; ocfs2_get_clusters_nocache()
507 else if (eb->h_blkno == di->i_last_eb_blk) ocfs2_get_clusters_nocache()
509 else if (eb->h_next_leaf_blk == di->i_last_eb_blk) { ocfs2_get_clusters_nocache()
510 ret = ocfs2_last_eb_is_empty(inode, di); ocfs2_get_clusters_nocache()
719 struct ocfs2_dinode *di; ocfs2_fiemap_inline() local
724 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_fiemap_inline()
728 id_count = le16_to_cpu(di->id2.i_data.id_count); ocfs2_fiemap_inline()
288 ocfs2_last_eb_is_empty(struct inode *inode, struct ocfs2_dinode *di) ocfs2_last_eb_is_empty() argument
H A Dxattr.c303 struct ocfs2_dinode *di,
946 struct ocfs2_dinode *di) ocfs2_has_inline_xattr_value_outside()
952 ((void *)di + inode->i_sb->s_blocksize - ocfs2_has_inline_xattr_value_outside()
953 le16_to_cpu(di->i_xattr_inline_size)); ocfs2_has_inline_xattr_value_outside()
963 struct ocfs2_dinode *di, ocfs2_xattr_ibody_list()
975 ((void *)di + inode->i_sb->s_blocksize - ocfs2_xattr_ibody_list()
976 le16_to_cpu(di->i_xattr_inline_size)); ocfs2_xattr_ibody_list()
984 struct ocfs2_dinode *di, ocfs2_xattr_block_list()
992 if (!di->i_xattr_loc) ocfs2_xattr_block_list()
995 ret = ocfs2_read_xattr_block(inode, le64_to_cpu(di->i_xattr_loc), ocfs2_xattr_block_list()
1022 struct ocfs2_dinode *di = NULL; ocfs2_listxattr() local
1037 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_listxattr()
1040 i_ret = ocfs2_xattr_ibody_list(d_inode(dentry), di, buffer, size); ocfs2_listxattr()
1048 b_ret = ocfs2_xattr_block_list(d_inode(dentry), di, ocfs2_listxattr()
1151 struct ocfs2_dinode *di = (struct ocfs2_dinode *)xs->inode_bh->b_data; ocfs2_xattr_ibody_get() local
1159 xs->end = (void *)di + inode->i_sb->s_blocksize; ocfs2_xattr_ibody_get()
1161 (xs->end - le16_to_cpu(di->i_xattr_inline_size)); ocfs2_xattr_ibody_get()
1278 struct ocfs2_dinode *di = NULL; ocfs2_xattr_get_nolock() local
1294 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_xattr_get_nolock()
1298 if (ret == -ENODATA && di->i_xattr_loc) ocfs2_xattr_get_nolock()
2261 struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data; ocfs2_init_dinode_xa_loc() local
2269 loc->xl_size = le16_to_cpu(di->i_xattr_inline_size); ocfs2_init_dinode_xa_loc()
2416 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_xattr_ibody_remove() local
2425 ((void *)di + inode->i_sb->s_blocksize - ocfs2_xattr_ibody_remove()
2426 le16_to_cpu(di->i_xattr_inline_size)); ocfs2_xattr_ibody_remove()
2552 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_xattr_remove() local
2567 le64_to_cpu(di->i_refcount_loc), ocfs2_xattr_remove()
2586 if (di->i_xattr_loc) { ocfs2_xattr_remove()
2588 le64_to_cpu(di->i_xattr_loc), ocfs2_xattr_remove()
2610 di->i_xattr_loc = 0; ocfs2_xattr_remove()
2614 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); ocfs2_xattr_remove()
2629 struct ocfs2_dinode *di) ocfs2_xattr_has_space_inline()
2639 struct ocfs2_inline_data *idata = &di->id2.i_data; ocfs2_xattr_has_space_inline()
2640 free = le16_to_cpu(idata->id_count) - le64_to_cpu(di->i_size); ocfs2_xattr_has_space_inline()
2643 le64_to_cpu(di->i_size); ocfs2_xattr_has_space_inline()
2645 struct ocfs2_extent_list *el = &di->id2.i_list; ocfs2_xattr_has_space_inline()
2668 struct ocfs2_dinode *di = (struct ocfs2_dinode *)xs->inode_bh->b_data; ocfs2_xattr_ibody_find() local
2677 has_space = ocfs2_xattr_has_space_inline(inode, di); ocfs2_xattr_ibody_find()
2684 xs->end = (void *)di + inode->i_sb->s_blocksize; ocfs2_xattr_ibody_find()
2687 (xs->end - le16_to_cpu(di->i_xattr_inline_size)); ocfs2_xattr_ibody_find()
2711 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_xattr_ibody_init() local
2715 if (!ocfs2_xattr_has_space_inline(inode, di)) { ocfs2_xattr_ibody_init()
2732 struct ocfs2_inline_data *idata = &di->id2.i_data; ocfs2_xattr_ibody_init()
2735 struct ocfs2_extent_list *el = &di->id2.i_list; ocfs2_xattr_ibody_init()
2739 di->i_xattr_inline_size = cpu_to_le16(xattrsize); ocfs2_xattr_ibody_init()
2743 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); ocfs2_xattr_ibody_init()
2807 struct ocfs2_dinode *di = (struct ocfs2_dinode *)xs->inode_bh->b_data; ocfs2_xattr_block_find() local
2812 if (!di->i_xattr_loc) ocfs2_xattr_block_find()
2815 ret = ocfs2_read_xattr_block(inode, le64_to_cpu(di->i_xattr_loc), ocfs2_xattr_block_find()
2859 struct ocfs2_dinode *di = (struct ocfs2_dinode *)inode_bh->b_data; ocfs2_create_xattr_block() local
2918 di->i_xattr_loc = cpu_to_le64(first_blkno); ocfs2_create_xattr_block()
2922 di->i_dyn_features = cpu_to_le16(OCFS2_I(inode)->ip_dyn_features); ocfs2_create_xattr_block()
3025 struct ocfs2_dinode *di, ocfs2_calc_xattr_set_need()
3170 if (di->i_xattr_loc) { ocfs2_calc_xattr_set_need()
3173 le64_to_cpu(di->i_xattr_loc), ocfs2_calc_xattr_set_need()
3237 struct ocfs2_dinode *di, ocfs2_init_xattr_set_ctxt()
3252 ret = ocfs2_calc_xattr_set_need(inode, di, xi, xis, xbs, ocfs2_init_xattr_set_ctxt()
3293 struct ocfs2_dinode *di, __ocfs2_xattr_set_handle()
3321 di, __ocfs2_xattr_set_handle()
3341 if (di->i_xattr_loc && !xbs->xattr_bh) { __ocfs2_xattr_set_handle()
3351 di, __ocfs2_xattr_set_handle()
3386 di, __ocfs2_xattr_set_handle()
3420 di->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec); __ocfs2_xattr_set_handle()
3421 di->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec); __ocfs2_xattr_set_handle()
3444 struct ocfs2_dinode *di; ocfs2_xattr_set_handle() local
3486 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_xattr_set_handle()
3499 ret = __ocfs2_xattr_set_handle(inode, di, &xi, &xis, &xbs, &ctxt); ocfs2_xattr_set_handle()
3524 struct ocfs2_dinode *di; ocfs2_xattr_set() local
3566 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_xattr_set()
3598 ret = ocfs2_prepare_refcount_xattr(inode, di, &xi, ocfs2_xattr_set()
3619 ret = ocfs2_init_xattr_set_ctxt(inode, di, &xi, &xis, ocfs2_xattr_set()
3635 ret = __ocfs2_xattr_set_handle(inode, di, &xi, &xis, &xbs, &ctxt); ocfs2_xattr_set()
5754 struct ocfs2_dinode *di, ocfs2_prepare_refcount_xattr()
5842 ret = ocfs2_lock_refcount_tree(osb, le64_to_cpu(di->i_refcount_loc), ocfs2_prepare_refcount_xattr()
5868 ret = ocfs2_refcount_cow_xattr(inode, di, &vb, ocfs2_prepare_refcount_xattr()
5975 struct ocfs2_dinode *di = (struct ocfs2_dinode *)fe_bh->b_data; ocfs2_xattr_inline_attach_refcount() local
5978 le16_to_cpu(di->i_xattr_inline_size)); ocfs2_xattr_inline_attach_refcount()
6140 struct ocfs2_dinode *di = (struct ocfs2_dinode *)fe_bh->b_data; ocfs2_xattr_attach_refcount_tree() local
6153 if (!di->i_xattr_loc) ocfs2_xattr_attach_refcount_tree()
6156 ret = ocfs2_read_xattr_block(inode, le64_to_cpu(di->i_xattr_loc), ocfs2_xattr_attach_refcount_tree()
6463 struct ocfs2_dinode *di = (struct ocfs2_dinode *)args->old_bh->b_data; ocfs2_reflink_xattr_inline() local
6464 int inline_size = le16_to_cpu(di->i_xattr_inline_size); ocfs2_reflink_xattr_inline()
7133 struct ocfs2_dinode *di = (struct ocfs2_dinode *)old_bh->b_data; ocfs2_reflink_xattrs() local
7140 le64_to_cpu(di->i_refcount_loc), ocfs2_reflink_xattrs()
7169 if (!di->i_xattr_loc) ocfs2_reflink_xattrs()
7172 ret = ocfs2_read_xattr_block(old_inode, le64_to_cpu(di->i_xattr_loc), ocfs2_reflink_xattrs()
945 ocfs2_has_inline_xattr_value_outside(struct inode *inode, struct ocfs2_dinode *di) ocfs2_has_inline_xattr_value_outside() argument
962 ocfs2_xattr_ibody_list(struct inode *inode, struct ocfs2_dinode *di, char *buffer, size_t buffer_size) ocfs2_xattr_ibody_list() argument
983 ocfs2_xattr_block_list(struct inode *inode, struct ocfs2_dinode *di, char *buffer, size_t buffer_size) ocfs2_xattr_block_list() argument
2628 ocfs2_xattr_has_space_inline(struct inode *inode, struct ocfs2_dinode *di) ocfs2_xattr_has_space_inline() argument
3024 ocfs2_calc_xattr_set_need(struct inode *inode, struct ocfs2_dinode *di, struct ocfs2_xattr_info *xi, struct ocfs2_xattr_search *xis, struct ocfs2_xattr_search *xbs, int *clusters_need, int *meta_need, int *credits_need) ocfs2_calc_xattr_set_need() argument
3236 ocfs2_init_xattr_set_ctxt(struct inode *inode, struct ocfs2_dinode *di, struct ocfs2_xattr_info *xi, struct ocfs2_xattr_search *xis, struct ocfs2_xattr_search *xbs, struct ocfs2_xattr_set_ctxt *ctxt, int extra_meta, int *credits) ocfs2_init_xattr_set_ctxt() argument
3292 __ocfs2_xattr_set_handle(struct inode *inode, struct ocfs2_dinode *di, struct ocfs2_xattr_info *xi, struct ocfs2_xattr_search *xis, struct ocfs2_xattr_search *xbs, struct ocfs2_xattr_set_ctxt *ctxt) __ocfs2_xattr_set_handle() argument
5753 ocfs2_prepare_refcount_xattr(struct inode *inode, struct ocfs2_dinode *di, struct ocfs2_xattr_info *xi, struct ocfs2_xattr_search *xis, struct ocfs2_xattr_search *xbs, struct ocfs2_refcount_tree **ref_tree, int *meta_add, int *credits) ocfs2_prepare_refcount_xattr() argument
H A Docfs2.h553 static inline unsigned int ocfs2_read_links_count(struct ocfs2_dinode *di) ocfs2_read_links_count() argument
555 u32 nlink = le16_to_cpu(di->i_links_count); ocfs2_read_links_count()
556 u32 hi = le16_to_cpu(di->i_links_count_hi); ocfs2_read_links_count()
558 if (di->i_dyn_features & cpu_to_le16(OCFS2_INDEXED_DIR_FL)) ocfs2_read_links_count()
564 static inline void ocfs2_set_links_count(struct ocfs2_dinode *di, u32 nlink) ocfs2_set_links_count() argument
571 di->i_links_count = cpu_to_le16(lo); ocfs2_set_links_count()
572 di->i_links_count_hi = cpu_to_le16(hi); ocfs2_set_links_count()
575 static inline void ocfs2_add_links_count(struct ocfs2_dinode *di, int n) ocfs2_add_links_count() argument
577 u32 links = ocfs2_read_links_count(di); ocfs2_add_links_count()
581 ocfs2_set_links_count(di, links); ocfs2_add_links_count()
H A Daops.c227 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_read_inline_data() local
229 if (!(le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_DATA_FL)) { ocfs2_read_inline_data()
238 size > ocfs2_max_inline_data_with_xattr(inode->i_sb, di)) { ocfs2_read_inline_data()
248 memcpy(kaddr, di->id2.i_data.id_data, size); ocfs2_read_inline_data()
1840 struct ocfs2_dinode *di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; ocfs2_write_begin_inline() local
1873 ocfs2_set_inode_data_inline(inode, di); ocfs2_write_begin_inline()
1891 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_size_fits_inline_data() local
1893 if (new_size <= le16_to_cpu(di->id2.i_data.id_count)) ocfs2_size_fits_inline_data()
1906 struct ocfs2_dinode *di = NULL; ocfs2_try_to_write_inline_data() local
1939 di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; ocfs2_try_to_write_inline_data()
1941 end > ocfs2_max_inline_data_with_xattr(inode->i_sb, di)) ocfs2_try_to_write_inline_data()
2052 struct ocfs2_dinode *di; ocfs2_write_begin_nolock() local
2111 di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; ocfs2_write_begin_nolock()
2116 le32_to_cpu(di->i_clusters), ocfs2_write_begin_nolock()
2146 &di->id2.i_list); ocfs2_write_begin_nolock()
2312 struct ocfs2_dinode *di, ocfs2_write_end_inline()
2325 memcpy(di->id2.i_data.id_data + pos, kaddr + pos, *copied); ocfs2_write_end_inline()
2331 le16_to_cpu(di->id2.i_data.id_count), ocfs2_write_end_inline()
2332 le16_to_cpu(di->i_dyn_features)); ocfs2_write_end_inline()
2344 struct ocfs2_dinode *di = (struct ocfs2_dinode *)wc->w_di_bh->b_data; ocfs2_write_end_nolock() local
2349 ocfs2_write_end_inline(inode, pos, len, &copied, di, wc); ocfs2_write_end_nolock()
2396 di->i_size = cpu_to_le64((u64)i_size_read(inode)); ocfs2_write_end_nolock()
2398 di->i_mtime = di->i_ctime = cpu_to_le64(inode->i_mtime.tv_sec); ocfs2_write_end_nolock()
2399 di->i_mtime_nsec = di->i_ctime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec); ocfs2_write_end_nolock()
2310 ocfs2_write_end_inline(struct inode *inode, loff_t pos, unsigned len, unsigned *copied, struct ocfs2_dinode *di, struct ocfs2_write_ctxt *wc) ocfs2_write_end_inline() argument
H A Dsuballoc.c228 struct ocfs2_dinode *di, ocfs2_validate_gd_parent()
235 if (di->i_blkno != gd->bg_parent_dinode) { ocfs2_validate_gd_parent()
240 (unsigned long long)le64_to_cpu(di->i_blkno)); ocfs2_validate_gd_parent()
244 max_bits = le16_to_cpu(di->id2.i_chain.cl_cpg) * le16_to_cpu(di->id2.i_chain.cl_bpc); ocfs2_validate_gd_parent()
254 le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) || ocfs2_validate_gd_parent()
256 le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) && !resize)) { ocfs2_validate_gd_parent()
273 struct ocfs2_dinode *di, ocfs2_check_group_descriptor()
294 rc = ocfs2_validate_gd_parent(sb, di, bh, 1); ocfs2_check_group_descriptor()
326 int ocfs2_read_group_descriptor(struct inode *inode, struct ocfs2_dinode *di, ocfs2_read_group_descriptor() argument
337 rc = ocfs2_validate_gd_parent(inode->i_sb, di, tmp, 0); ocfs2_read_group_descriptor()
1592 struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_alloc_dinode_update_counts() local
1593 struct ocfs2_chain_list *cl = (struct ocfs2_chain_list *) &di->id2.i_chain; ocfs2_alloc_dinode_update_counts()
1602 tmp_used = le32_to_cpu(di->id1.bitmap1.i_used); ocfs2_alloc_dinode_update_counts()
1603 di->id1.bitmap1.i_used = cpu_to_le32(num_bits + tmp_used); ocfs2_alloc_dinode_update_counts()
1617 struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_rollback_alloc_dinode_counts() local
1620 cl = (struct ocfs2_chain_list *)&di->id2.i_chain; ocfs2_rollback_alloc_dinode_counts()
1621 tmp_used = le32_to_cpu(di->id1.bitmap1.i_used); ocfs2_rollback_alloc_dinode_counts()
1622 di->id1.bitmap1.i_used = cpu_to_le32(tmp_used - num_bits); ocfs2_rollback_alloc_dinode_counts()
1652 struct ocfs2_dinode *di = (struct ocfs2_dinode *)ac->ac_bh->b_data; ocfs2_bg_discontig_fix_result() local
1653 struct ocfs2_chain_list *cl = &di->id2.i_chain; ocfs2_bg_discontig_fix_result()
1685 struct ocfs2_dinode *di = (struct ocfs2_dinode *)ac->ac_bh->b_data; ocfs2_search_one_group() local
1688 ret = ocfs2_read_group_descriptor(alloc_inode, di, ocfs2_search_one_group()
2035 struct ocfs2_dinode *di = (struct ocfs2_dinode *)parent_di_bh->b_data; ocfs2_init_inode_ac_group() local
2049 else if (le16_to_cpu(di->i_suballoc_slot) == ac->ac_alloc_slot) { ocfs2_init_inode_ac_group()
2050 if (di->i_suballoc_loc) ocfs2_init_inode_ac_group()
2051 ac->ac_last_group = le64_to_cpu(di->i_suballoc_loc); ocfs2_init_inode_ac_group()
2054 le64_to_cpu(di->i_blkno), ocfs2_init_inode_ac_group()
2055 le16_to_cpu(di->i_suballoc_bit)); ocfs2_init_inode_ac_group()
2139 struct ocfs2_dinode *di = (struct ocfs2_dinode *) ac->ac_bh->b_data; ocfs2_claim_new_inode_at_loc() local
2149 ret = ocfs2_read_group_descriptor(ac->ac_inode, di, ocfs2_claim_new_inode_at_loc()
2535 struct ocfs2_dinode *di) ocfs2_free_dinode()
2537 u64 blk = le64_to_cpu(di->i_blkno); ocfs2_free_dinode()
2538 u16 bit = le16_to_cpu(di->i_suballoc_bit); ocfs2_free_dinode()
2541 if (di->i_suballoc_loc) ocfs2_free_dinode()
2542 bg_blkno = le64_to_cpu(di->i_suballoc_loc); ocfs2_free_dinode()
227 ocfs2_validate_gd_parent(struct super_block *sb, struct ocfs2_dinode *di, struct buffer_head *bh, int resize) ocfs2_validate_gd_parent() argument
272 ocfs2_check_group_descriptor(struct super_block *sb, struct ocfs2_dinode *di, struct buffer_head *bh) ocfs2_check_group_descriptor() argument
2532 ocfs2_free_dinode(handle_t *handle, struct inode *inode_alloc_inode, struct buffer_head *inode_alloc_bh, struct ocfs2_dinode *di) ocfs2_free_dinode() argument
H A Dfile.c265 struct ocfs2_dinode *di = (struct ocfs2_dinode *) bh->b_data; ocfs2_update_inode_atime() local
287 di->i_atime = cpu_to_le64(inode->i_atime.tv_sec); ocfs2_update_inode_atime()
288 di->i_atime_nsec = cpu_to_le32(inode->i_atime.tv_nsec); ocfs2_update_inode_atime()
385 struct ocfs2_dinode *di; ocfs2_orphan_for_truncate() local
430 di = (struct ocfs2_dinode *) fe_bh->b_data; ocfs2_orphan_for_truncate()
431 di->i_size = cpu_to_le64(new_i_size); ocfs2_orphan_for_truncate()
432 di->i_ctime = di->i_mtime = cpu_to_le64(inode->i_ctime.tv_sec); ocfs2_orphan_for_truncate()
433 di->i_ctime_nsec = di->i_mtime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec); ocfs2_orphan_for_truncate()
461 "Inode %llu, inode i_size = %lld != di " ocfs2_truncate_file()
773 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_write_zero_page() local
838 di->i_size = cpu_to_le64((u64)i_size_read(inode)); ocfs2_write_zero_page()
840 di->i_mtime = di->i_ctime = cpu_to_le64(inode->i_mtime.tv_sec); ocfs2_write_zero_page()
841 di->i_ctime_nsec = cpu_to_le32(inode->i_mtime.tv_nsec); ocfs2_write_zero_page()
842 di->i_mtime_nsec = di->i_ctime_nsec; ocfs2_write_zero_page()
1326 struct ocfs2_dinode *di; __ocfs2_write_remove_suid() local
1350 di = (struct ocfs2_dinode *) bh->b_data; __ocfs2_write_remove_suid()
1351 di->i_mode = cpu_to_le16(inode->i_mode); __ocfs2_write_remove_suid()
1686 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_remove_inode_range() local
1687 u64 blkno, refcount_loc = le64_to_cpu(di->i_refcount_loc); ocfs2_remove_inode_range()
H A Dsuballoc.h144 struct ocfs2_dinode *di);
203 struct ocfs2_dinode *di,
210 int ocfs2_read_group_descriptor(struct inode *inode, struct ocfs2_dinode *di,
H A Dalloc.c181 struct ocfs2_dinode *di = et->et_object; ocfs2_dinode_set_last_eb_blk() local
184 di->i_last_eb_blk = cpu_to_le64(blkno); ocfs2_dinode_set_last_eb_blk()
189 struct ocfs2_dinode *di = et->et_object; ocfs2_dinode_get_last_eb_blk() local
192 return le64_to_cpu(di->i_last_eb_blk); ocfs2_dinode_get_last_eb_blk()
199 struct ocfs2_dinode *di = et->et_object; ocfs2_dinode_update_clusters() local
201 le32_add_cpu(&di->i_clusters, clusters); ocfs2_dinode_update_clusters()
203 oi->ip_clusters = le32_to_cpu(di->i_clusters); ocfs2_dinode_update_clusters()
243 struct ocfs2_dinode *di = et->et_object; ocfs2_dinode_sanity_check() local
246 BUG_ON(!OCFS2_IS_VALID_DINODE(di)); ocfs2_dinode_sanity_check()
253 struct ocfs2_dinode *di = et->et_object; ocfs2_dinode_fill_root_el() local
255 et->et_root_el = &di->id2.i_list; ocfs2_dinode_fill_root_el()
5775 struct ocfs2_dinode *di; ocfs2_truncate_log_needs_flush() local
5778 di = (struct ocfs2_dinode *) tl_bh->b_data; ocfs2_truncate_log_needs_flush()
5779 tl = &di->id2.i_dealloc; ocfs2_truncate_log_needs_flush()
5814 struct ocfs2_dinode *di; ocfs2_truncate_log_append() local
5821 di = (struct ocfs2_dinode *) tl_bh->b_data; ocfs2_truncate_log_append()
5826 BUG_ON(!OCFS2_IS_VALID_DINODE(di)); ocfs2_truncate_log_append()
5828 tl = &di->id2.i_dealloc; ocfs2_truncate_log_append()
5891 struct ocfs2_dinode *di; ocfs2_replay_truncate_records() local
5896 di = (struct ocfs2_dinode *) tl_bh->b_data; ocfs2_replay_truncate_records()
5897 tl = &di->id2.i_dealloc; ocfs2_replay_truncate_records()
5962 struct ocfs2_dinode *di; __ocfs2_flush_truncate_log() local
5967 di = (struct ocfs2_dinode *) tl_bh->b_data; __ocfs2_flush_truncate_log()
5972 BUG_ON(!OCFS2_IS_VALID_DINODE(di)); __ocfs2_flush_truncate_log()
5974 tl = &di->id2.i_dealloc; __ocfs2_flush_truncate_log()
6111 struct ocfs2_dinode *di; ocfs2_begin_truncate_log_recovery() local
6124 di = (struct ocfs2_dinode *) tl_bh->b_data; ocfs2_begin_truncate_log_recovery()
6129 BUG_ON(!OCFS2_IS_VALID_DINODE(di)); ocfs2_begin_truncate_log_recovery()
6131 tl = &di->id2.i_dealloc; ocfs2_begin_truncate_log_recovery()
6150 ocfs2_compute_meta_ecc(osb->sb, tl_bh->b_data, &di->i_check); ocfs2_begin_truncate_log_recovery()
6789 struct ocfs2_dinode *di) ocfs2_zero_dinode_id2_with_xattr()
6792 unsigned int xattrsize = le16_to_cpu(di->i_xattr_inline_size); ocfs2_zero_dinode_id2_with_xattr()
6794 if (le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_XATTR_FL) ocfs2_zero_dinode_id2_with_xattr()
6795 memset(&di->id2, 0, blocksize - ocfs2_zero_dinode_id2_with_xattr()
6799 memset(&di->id2, 0, blocksize - ocfs2_zero_dinode_id2_with_xattr()
6804 struct ocfs2_dinode *di) ocfs2_dinode_new_extent_list()
6806 ocfs2_zero_dinode_id2_with_xattr(inode, di); ocfs2_dinode_new_extent_list()
6807 di->id2.i_list.l_tree_depth = 0; ocfs2_dinode_new_extent_list()
6808 di->id2.i_list.l_next_free_rec = 0; ocfs2_dinode_new_extent_list()
6809 di->id2.i_list.l_count = cpu_to_le16( ocfs2_dinode_new_extent_list()
6810 ocfs2_extent_recs_per_inode_with_xattr(inode->i_sb, di)); ocfs2_dinode_new_extent_list()
6813 void ocfs2_set_inode_data_inline(struct inode *inode, struct ocfs2_dinode *di) ocfs2_set_inode_data_inline() argument
6816 struct ocfs2_inline_data *idata = &di->id2.i_data; ocfs2_set_inode_data_inline()
6820 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); ocfs2_set_inode_data_inline()
6827 ocfs2_zero_dinode_id2_with_xattr(inode, di); ocfs2_set_inode_data_inline()
6830 ocfs2_max_inline_data_with_xattr(inode->i_sb, di)); ocfs2_set_inode_data_inline()
6843 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_convert_inline_data_to_extents() local
6945 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); ocfs2_convert_inline_data_to_extents()
6949 ocfs2_dinode_new_extent_list(inode, di); ocfs2_convert_inline_data_to_extents()
7017 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_commit_truncate() local
7018 struct ocfs2_extent_list *root_el = &(di->id2.i_list); ocfs2_commit_truncate()
7019 u64 refcount_loc = le64_to_cpu(di->i_refcount_loc); ocfs2_commit_truncate()
7030 path = ocfs2_new_path(di_bh, &di->id2.i_list, ocfs2_commit_truncate()
7180 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_truncate_inline() local
7181 struct ocfs2_inline_data *idata = &di->id2.i_data; ocfs2_truncate_inline()
7189 !(le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_DATA_FL) || ocfs2_truncate_inline()
7195 le16_to_cpu(di->i_dyn_features), ocfs2_truncate_inline()
7227 di->i_size = cpu_to_le64(start); ocfs2_truncate_inline()
7233 di->i_ctime = di->i_mtime = cpu_to_le64(inode->i_ctime.tv_sec); ocfs2_truncate_inline()
7234 di->i_ctime_nsec = di->i_mtime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec); ocfs2_truncate_inline()
6788 ocfs2_zero_dinode_id2_with_xattr(struct inode *inode, struct ocfs2_dinode *di) ocfs2_zero_dinode_id2_with_xattr() argument
6803 ocfs2_dinode_new_extent_list(struct inode *inode, struct ocfs2_dinode *di) ocfs2_dinode_new_extent_list() argument
H A Ddir.c415 struct ocfs2_dinode *di; ocfs2_find_entry_id() local
424 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_find_entry_id()
425 data = &di->id2.i_data; ocfs2_find_entry_id()
617 static int ocfs2_read_dx_root(struct inode *dir, struct ocfs2_dinode *di, ocfs2_read_dx_root() argument
621 u64 blkno = le64_to_cpu(di->i_dx_root); ocfs2_read_dx_root()
1038 struct ocfs2_dinode *di; ocfs2_find_entry_dx() local
1048 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_find_entry_dx()
1050 ret = ocfs2_read_dx_root(dir, di, &dx_root_bh); ocfs2_find_entry_dx()
1381 struct ocfs2_dinode *di; ocfs2_delete_entry_id() local
1390 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_delete_entry_id()
1391 data = &di->id2.i_data; ocfs2_delete_entry_id()
1618 struct ocfs2_dinode *di = (struct ocfs2_dinode *)parent_fe_bh->b_data; __ocfs2_add_entry() local
1655 data_start = di->id2.i_data.id_data; __ocfs2_add_entry()
1769 struct ocfs2_dinode *di; ocfs2_dir_foreach_blk_id() local
1780 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_dir_foreach_blk_id()
1781 data = &di->id2.i_data; ocfs2_dir_foreach_blk_id()
2116 struct ocfs2_dinode *di; ocfs2_empty_dir_dx() local
2126 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_empty_dir_dx()
2128 ret = ocfs2_read_dx_root(inode, di, &dx_root_bh); ocfs2_empty_dir_dx()
2224 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_fill_new_dir_id() local
2225 struct ocfs2_inline_data *data = &di->id2.i_data; ocfs2_fill_new_dir_id()
2329 struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_dx_dir_attach_index() local
2395 di->i_dx_root = cpu_to_le64(dr_blkno); ocfs2_dx_dir_attach_index()
2399 di->i_dyn_features = cpu_to_le16(OCFS2_I(dir)->ip_dyn_features); ocfs2_dx_dir_attach_index()
2720 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_new_dx_should_be_inline() local
2722 de_buf = di->id2.i_data.id_data; ocfs2_new_dx_should_be_inline()
2820 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_expand_inline_dir() local
2945 memcpy(dirdata_bh->b_data, di->id2.i_data.id_data, i_size_read(dir)); ocfs2_expand_inline_dir()
2997 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); ocfs2_expand_inline_dir()
3000 ocfs2_dinode_new_extent_list(dir, di); ocfs2_expand_inline_dir()
3005 di->i_size = cpu_to_le64(sb->s_blocksize); ocfs2_expand_inline_dir()
3006 di->i_ctime = di->i_mtime = cpu_to_le64(dir->i_ctime.tv_sec); ocfs2_expand_inline_dir()
3007 di->i_ctime_nsec = di->i_mtime_nsec = cpu_to_le32(dir->i_ctime.tv_nsec); ocfs2_expand_inline_dir()
3380 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_find_dir_space_id() local
3395 de_buf = di->id2.i_data.id_data; ocfs2_find_dir_space_id()
4183 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_prepare_dx_dir_for_insert() local
4186 ret = ocfs2_read_dx_root(dir, di, &dx_root_bh); ocfs2_prepare_dx_dir_for_insert()
4358 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_dx_dir_remove_index() local
4401 di->i_dyn_features = cpu_to_le16(OCFS2_I(dir)->ip_dyn_features); ocfs2_dx_dir_remove_index()
4403 di->i_dx_root = cpu_to_le64(0ULL); ocfs2_dx_dir_remove_index()
4442 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_dx_dir_truncate() local
4451 ret = ocfs2_read_dx_root(dir, di, &dx_root_bh); ocfs2_dx_dir_truncate()
H A Dnamei.c2449 struct ocfs2_dinode *di = NULL; ocfs2_create_inode_in_orphan() local
2514 di = (struct ocfs2_dinode *)new_di_bh->b_data; ocfs2_create_inode_in_orphan()
2565 struct ocfs2_dinode *di = NULL; ocfs2_dio_orphan_recovered() local
2573 di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_dio_orphan_recovered()
2574 ret = !(di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL)); ocfs2_dio_orphan_recovered()
2591 struct ocfs2_dinode *di = NULL; ocfs2_add_inode_to_orphan() local
2600 di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_add_inode_to_orphan()
2605 if (unlikely(di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL))) { ocfs2_add_inode_to_orphan()
2660 struct ocfs2_dinode *di = NULL; ocfs2_del_inode_from_orphan() local
2669 di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_del_inode_from_orphan()
2673 le16_to_cpu(di->i_dio_orphaned_slot)); ocfs2_del_inode_from_orphan()
2696 BUG_ON(!(di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL))); ocfs2_del_inode_from_orphan()
2714 di->i_flags &= ~cpu_to_le32(OCFS2_DIO_ORPHANED_FL); ocfs2_del_inode_from_orphan()
2715 di->i_dio_orphaned_slot = 0; ocfs2_del_inode_from_orphan()
2749 struct ocfs2_dinode *dir_di, *di; ocfs2_mv_orphaned_inode_to_new() local
2835 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_mv_orphaned_inode_to_new()
2836 di->i_flags &= ~cpu_to_le32(OCFS2_ORPHANED_FL); ocfs2_mv_orphaned_inode_to_new()
2837 di->i_orphaned_slot = 0; ocfs2_mv_orphaned_inode_to_new()
2839 ocfs2_set_links_count(di, inode->i_nlink); ocfs2_mv_orphaned_inode_to_new()
H A Drefcounttree.c407 struct ocfs2_dinode *di; ocfs2_get_refcount_block() local
417 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_get_refcount_block()
418 *ref_blkno = le64_to_cpu(di->i_refcount_loc); ocfs2_get_refcount_block()
565 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_create_refcount_tree() local
650 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); ocfs2_create_refcount_tree()
651 di->i_refcount_loc = cpu_to_le64(first_blkno); ocfs2_create_refcount_tree()
706 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_set_refcount_tree() local
750 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); ocfs2_set_refcount_tree()
751 di->i_refcount_loc = cpu_to_le64(refcount_loc); ocfs2_set_refcount_tree()
768 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_remove_refcount_tree() local
777 u64 blk = 0, bg_blkno = 0, ref_blkno = le64_to_cpu(di->i_refcount_loc); ocfs2_remove_refcount_tree()
846 di->i_dyn_features = cpu_to_le16(oi->ip_dyn_features); ocfs2_remove_refcount_tree()
847 di->i_refcount_loc = 0; ocfs2_remove_refcount_tree()
938 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_try_remove_refcount_tree() local
946 if ((oi->ip_dyn_features & OCFS2_HAS_XATTR_FL) && di->i_xattr_loc) ocfs2_try_remove_refcount_tree()
950 ocfs2_has_inline_xattr_value_outside(inode, di)) ocfs2_try_remove_refcount_tree()
3435 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_refcount_cow_hunk() local
3442 ret = ocfs2_refcount_cal_cow_clusters(inode, &di->id2.i_list, ocfs2_refcount_cow_hunk()
3463 ret = ocfs2_lock_refcount_tree(osb, le64_to_cpu(di->i_refcount_loc), ocfs2_refcount_cow_hunk()
3641 struct ocfs2_dinode *di, ocfs2_refcount_cow_xattr()
3782 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_change_ctime() local
3800 di->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec); ocfs2_change_ctime()
3801 di->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec); ocfs2_change_ctime()
3817 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_attach_refcount_tree() local
3836 BUG_ON(!di->i_refcount_loc); ocfs2_attach_refcount_tree()
3838 le64_to_cpu(di->i_refcount_loc), 1, ocfs2_attach_refcount_tree()
4070 struct ocfs2_dinode *di = (struct ocfs2_dinode *)t_bh->b_data; ocfs2_complete_reflink() local
4096 di->i_xattr_inline_size = s_di->i_xattr_inline_size; ocfs2_complete_reflink()
4097 di->i_clusters = s_di->i_clusters; ocfs2_complete_reflink()
4098 di->i_size = s_di->i_size; ocfs2_complete_reflink()
4099 di->i_dyn_features = s_di->i_dyn_features; ocfs2_complete_reflink()
4100 di->i_attr = s_di->i_attr; ocfs2_complete_reflink()
4106 di->i_uid = s_di->i_uid; ocfs2_complete_reflink()
4107 di->i_gid = s_di->i_gid; ocfs2_complete_reflink()
4108 di->i_mode = s_di->i_mode; ocfs2_complete_reflink()
4117 di->i_ctime = cpu_to_le64(t_inode->i_ctime.tv_sec); ocfs2_complete_reflink()
4118 di->i_ctime_nsec = cpu_to_le32(t_inode->i_ctime.tv_nsec); ocfs2_complete_reflink()
4121 di->i_mtime = s_di->i_mtime; ocfs2_complete_reflink()
4122 di->i_mtime_nsec = s_di->i_mtime_nsec; ocfs2_complete_reflink()
4143 struct ocfs2_dinode *di = (struct ocfs2_dinode *)s_bh->b_data; ocfs2_create_reflink_node() local
4149 le64_to_cpu(di->i_refcount_loc)); ocfs2_create_reflink_node()
4163 ret = ocfs2_lock_refcount_tree(osb, le64_to_cpu(di->i_refcount_loc), ocfs2_create_reflink_node()
3640 ocfs2_refcount_cow_xattr(struct inode *inode, struct ocfs2_dinode *di, struct ocfs2_xattr_value_buf *vb, struct ocfs2_refcount_tree *ref_tree, struct buffer_head *ref_root_bh, u32 cpos, u32 write_len, struct ocfs2_post_refcount *post) ocfs2_refcount_cow_xattr() argument
H A Dmove_extents.c771 struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; __ocfs2_move_extents_range() local
781 context->refcount_loc = le64_to_cpu(di->i_refcount_loc); __ocfs2_move_extents_range()
903 struct ocfs2_dinode *di; ocfs2_move_extents() local
957 di = (struct ocfs2_dinode *)di_bh->b_data; ocfs2_move_extents()
959 di->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec); ocfs2_move_extents()
960 di->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec); ocfs2_move_extents()
H A Drefcounttree.h81 struct ocfs2_dinode *di,
H A Dxattr.h55 struct ocfs2_dinode *di);
H A Djournal.c805 struct ocfs2_dinode *di = NULL; ocfs2_journal_init() local
844 di = (struct ocfs2_dinode *)bh->b_data; ocfs2_journal_init()
867 *dirty = (le32_to_cpu(di->id1.journal1.ij_flags) & ocfs2_journal_init()
893 static void ocfs2_bump_recovery_generation(struct ocfs2_dinode *di) ocfs2_bump_recovery_generation() argument
895 le32_add_cpu(&(di->id1.journal1.ij_recovery_generation), 1); ocfs2_bump_recovery_generation()
898 static u32 ocfs2_get_recovery_generation(struct ocfs2_dinode *di) ocfs2_get_recovery_generation() argument
900 return le32_to_cpu(di->id1.journal1.ij_recovery_generation); ocfs2_get_recovery_generation()
1786 struct ocfs2_dinode *di; ocfs2_mark_dead_nodes() local
1798 di = (struct ocfs2_dinode *)bh->b_data; ocfs2_mark_dead_nodes()
1799 gen = ocfs2_get_recovery_generation(di); ocfs2_mark_dead_nodes()
2296 struct ocfs2_dinode *di; ocfs2_check_journals_nolocks() local
2306 di = (struct ocfs2_dinode *) di_bh->b_data; ocfs2_check_journals_nolocks()
2309 ocfs2_get_recovery_generation(di); ocfs2_check_journals_nolocks()
2311 if (le32_to_cpu(di->id1.journal1.ij_flags) & ocfs2_check_journals_nolocks()
H A Docfs2_fs.h1288 struct ocfs2_dinode *di) ocfs2_max_inline_data_with_xattr()
1290 unsigned int xattrsize = le16_to_cpu(di->i_xattr_inline_size); ocfs2_max_inline_data_with_xattr()
1292 if (le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_XATTR_FL) ocfs2_max_inline_data_with_xattr()
1313 struct ocfs2_dinode *di) ocfs2_extent_recs_per_inode_with_xattr()
1316 unsigned int xattrsize = le16_to_cpu(di->i_xattr_inline_size); ocfs2_extent_recs_per_inode_with_xattr()
1318 if (le16_to_cpu(di->i_dyn_features) & OCFS2_INLINE_XATTR_FL) ocfs2_extent_recs_per_inode_with_xattr()
1486 struct ocfs2_dinode *di) ocfs2_max_inline_data_with_xattr()
1488 if (di && (di->i_dyn_features & OCFS2_INLINE_XATTR_FL)) ocfs2_max_inline_data_with_xattr()
1491 di->i_xattr_inline_size; ocfs2_max_inline_data_with_xattr()
1287 ocfs2_max_inline_data_with_xattr(struct super_block *sb, struct ocfs2_dinode *di) ocfs2_max_inline_data_with_xattr() argument
1311 ocfs2_extent_recs_per_inode_with_xattr( struct super_block *sb, struct ocfs2_dinode *di) ocfs2_extent_recs_per_inode_with_xattr() argument
1485 ocfs2_max_inline_data_with_xattr(int blocksize, struct ocfs2_dinode *di) ocfs2_max_inline_data_with_xattr() argument
H A Dalloc.h170 void ocfs2_dinode_new_extent_list(struct inode *inode, struct ocfs2_dinode *di);
171 void ocfs2_set_inode_data_inline(struct inode *inode, struct ocfs2_dinode *di);
H A Dbuffer_head_io.c396 struct ocfs2_dinode *di = (struct ocfs2_dinode *)bh->b_data; ocfs2_write_super_or_backup() local
415 ocfs2_compute_meta_ecc(osb->sb, bh->b_data, &di->i_check); ocfs2_write_super_or_backup()
/linux-4.1.27/tools/perf/scripts/python/Perf-Trace-Util/lib/Perf/Trace/
H A DEventClass.py57 flags, ip, ax, bx, cx, dx, si, di, bp, sp = struct.unpack('QQQQQQQQQQ', tmp_buf)
65 self.di = di
/linux-4.1.27/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/
H A Dconn.h36 u8 di; member in struct:nvbios_connE
/linux-4.1.27/arch/mips/include/asm/mach-paravirt/
H A Dkernel-entry-init.h33 di
/linux-4.1.27/include/keys/
H A Dencrypted-type.h3 * Copyright (C) 2010 Politecnico di Torino, Italy
/linux-4.1.27/arch/m68k/mm/
H A Dcache.c103 : "di" (FLUSH_I)); flush_icache_range()
133 : "di" (FLUSH_I)); flush_icache_user_range()
/linux-4.1.27/net/bluetooth/rfcomm/
H A Dtty.c507 struct rfcomm_dev_info *di; rfcomm_get_dev_list() local
516 if (!dev_num || dev_num > (PAGE_SIZE * 4) / sizeof(*di)) rfcomm_get_dev_list()
519 size = sizeof(*dl) + dev_num * sizeof(*di); rfcomm_get_dev_list()
525 di = dl->dev_info; rfcomm_get_dev_list()
532 (di + n)->id = dev->id; rfcomm_get_dev_list()
533 (di + n)->flags = dev->flags; rfcomm_get_dev_list()
534 (di + n)->state = dev->dlc->state; rfcomm_get_dev_list()
535 (di + n)->channel = dev->channel; rfcomm_get_dev_list()
536 bacpy(&(di + n)->src, &dev->src); rfcomm_get_dev_list()
537 bacpy(&(di + n)->dst, &dev->dst); rfcomm_get_dev_list()
546 size = sizeof(*dl) + n * sizeof(*di); rfcomm_get_dev_list()
557 struct rfcomm_dev_info di; rfcomm_get_dev_info() local
562 if (copy_from_user(&di, arg, sizeof(di))) rfcomm_get_dev_info()
565 dev = rfcomm_dev_get(di.id); rfcomm_get_dev_info()
569 di.flags = dev->flags; rfcomm_get_dev_info()
570 di.channel = dev->channel; rfcomm_get_dev_info()
571 di.state = dev->dlc->state; rfcomm_get_dev_info()
572 bacpy(&di.src, &dev->src); rfcomm_get_dev_info()
573 bacpy(&di.dst, &dev->dst); rfcomm_get_dev_info()
575 if (copy_to_user(arg, &di, sizeof(di))) rfcomm_get_dev_info()
/linux-4.1.27/fs/logfs/
H A Dreadwrite.c114 static void logfs_disk_to_inode(struct logfs_disk_inode *di, struct inode*inode) logfs_disk_to_inode() argument
119 inode->i_mode = be16_to_cpu(di->di_mode); logfs_disk_to_inode()
120 li->li_height = di->di_height; logfs_disk_to_inode()
121 li->li_flags = be32_to_cpu(di->di_flags); logfs_disk_to_inode()
122 i_uid_write(inode, be32_to_cpu(di->di_uid)); logfs_disk_to_inode()
123 i_gid_write(inode, be32_to_cpu(di->di_gid)); logfs_disk_to_inode()
124 inode->i_size = be64_to_cpu(di->di_size); logfs_disk_to_inode()
125 logfs_set_blocks(inode, be64_to_cpu(di->di_used_bytes)); logfs_disk_to_inode()
126 inode->i_atime = be64_to_timespec(di->di_atime); logfs_disk_to_inode()
127 inode->i_ctime = be64_to_timespec(di->di_ctime); logfs_disk_to_inode()
128 inode->i_mtime = be64_to_timespec(di->di_mtime); logfs_disk_to_inode()
129 set_nlink(inode, be32_to_cpu(di->di_refcount)); logfs_disk_to_inode()
130 inode->i_generation = be32_to_cpu(di->di_generation); logfs_disk_to_inode()
137 inode->i_rdev = be64_to_cpu(di->di_data[0]); logfs_disk_to_inode()
143 li->li_data[i] = be64_to_cpu(di->di_data[i]); logfs_disk_to_inode()
150 static void logfs_inode_to_disk(struct inode *inode, struct logfs_disk_inode*di) logfs_inode_to_disk()
155 di->di_mode = cpu_to_be16(inode->i_mode); logfs_inode_to_disk()
156 di->di_height = li->li_height; logfs_inode_to_disk()
157 di->di_pad = 0; logfs_inode_to_disk()
158 di->di_flags = cpu_to_be32(li->li_flags); logfs_inode_to_disk()
159 di->di_uid = cpu_to_be32(i_uid_read(inode)); logfs_inode_to_disk()
160 di->di_gid = cpu_to_be32(i_gid_read(inode)); logfs_inode_to_disk()
161 di->di_size = cpu_to_be64(i_size_read(inode)); logfs_inode_to_disk()
162 di->di_used_bytes = cpu_to_be64(li->li_used_bytes); logfs_inode_to_disk()
163 di->di_atime = timespec_to_be64(inode->i_atime); logfs_inode_to_disk()
164 di->di_ctime = timespec_to_be64(inode->i_ctime); logfs_inode_to_disk()
165 di->di_mtime = timespec_to_be64(inode->i_mtime); logfs_inode_to_disk()
166 di->di_refcount = cpu_to_be32(inode->i_nlink); logfs_inode_to_disk()
167 di->di_generation = cpu_to_be32(inode->i_generation); logfs_inode_to_disk()
174 di->di_data[0] = cpu_to_be64(inode->i_rdev); logfs_inode_to_disk()
180 di->di_data[i] = cpu_to_be64(li->li_data[i]); logfs_inode_to_disk()
1957 struct logfs_disk_inode *di; logfs_read_inode() local
1970 di = kmap_atomic(page); logfs_read_inode()
1971 logfs_disk_to_inode(di, inode); logfs_read_inode()
1972 kunmap_atomic(di); logfs_read_inode()
1982 struct logfs_disk_inode *di; inode_to_page() local
1991 di = kmap_atomic(page); inode_to_page()
1992 logfs_inode_to_disk(inode, di); inode_to_page()
1993 kunmap_atomic(di); inode_to_page()
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/engine/pm/
H A Dbase.c117 int tmp = 0, di, si; nvkm_perfctr_query() local
124 di = (args->v0.iter & 0xff000000) >> 24; nvkm_perfctr_query()
130 if (tmp++ == di) { nvkm_perfctr_query()
151 args->v0.iter = (di << 24) | ++si; nvkm_perfctr_query()
156 di = di + 1; nvkm_perfctr_query()
/linux-4.1.27/drivers/s390/char/
H A Dvmur.h105 #define CCWDEV_CU_DI(cutype, di) \
106 CCW_DEVICE(cutype, 0x00), .driver_info = (di)
/linux-4.1.27/arch/cris/boot/rescue/
H A Dkimagerescue.S49 ;; put a nop (2 bytes) here first so we dont accidentally skip the di
52 di
H A Dhead_v10.S27 * 2 bytes [opcode 'di']
124 ;; put a nop (2 bytes) here first so we dont accidentally skip the di
127 di
165 cmp.d NOP_DI, $r0 ; make sure the nop/di is there...
/linux-4.1.27/fs/quota/
H A Ddquot.c2497 static void do_get_dqblk(struct dquot *dquot, struct qc_dqblk *di) do_get_dqblk() argument
2501 memset(di, 0, sizeof(*di)); do_get_dqblk()
2503 di->d_spc_hardlimit = dm->dqb_bhardlimit; do_get_dqblk()
2504 di->d_spc_softlimit = dm->dqb_bsoftlimit; do_get_dqblk()
2505 di->d_ino_hardlimit = dm->dqb_ihardlimit; do_get_dqblk()
2506 di->d_ino_softlimit = dm->dqb_isoftlimit; do_get_dqblk()
2507 di->d_space = dm->dqb_curspace + dm->dqb_rsvspace; do_get_dqblk()
2508 di->d_ino_count = dm->dqb_curinodes; do_get_dqblk()
2509 di->d_spc_timer = dm->dqb_btime; do_get_dqblk()
2510 di->d_ino_timer = dm->dqb_itime; do_get_dqblk()
2515 struct qc_dqblk *di) dquot_get_dqblk()
2522 do_get_dqblk(dquot, di); dquot_get_dqblk()
2535 static int do_set_dqblk(struct dquot *dquot, struct qc_dqblk *di) do_set_dqblk() argument
2541 if (di->d_fieldmask & ~VFS_QC_MASK) do_set_dqblk()
2544 if (((di->d_fieldmask & QC_SPC_SOFT) && do_set_dqblk()
2545 di->d_spc_softlimit > dqi->dqi_max_spc_limit) || do_set_dqblk()
2546 ((di->d_fieldmask & QC_SPC_HARD) && do_set_dqblk()
2547 di->d_spc_hardlimit > dqi->dqi_max_spc_limit) || do_set_dqblk()
2548 ((di->d_fieldmask & QC_INO_SOFT) && do_set_dqblk()
2549 (di->d_ino_softlimit > dqi->dqi_max_ino_limit)) || do_set_dqblk()
2550 ((di->d_fieldmask & QC_INO_HARD) && do_set_dqblk()
2551 (di->d_ino_hardlimit > dqi->dqi_max_ino_limit))) do_set_dqblk()
2555 if (di->d_fieldmask & QC_SPACE) { do_set_dqblk()
2556 dm->dqb_curspace = di->d_space - dm->dqb_rsvspace; do_set_dqblk()
2561 if (di->d_fieldmask & QC_SPC_SOFT) do_set_dqblk()
2562 dm->dqb_bsoftlimit = di->d_spc_softlimit; do_set_dqblk()
2563 if (di->d_fieldmask & QC_SPC_HARD) do_set_dqblk()
2564 dm->dqb_bhardlimit = di->d_spc_hardlimit; do_set_dqblk()
2565 if (di->d_fieldmask & (QC_SPC_SOFT | QC_SPC_HARD)) { do_set_dqblk()
2570 if (di->d_fieldmask & QC_INO_COUNT) { do_set_dqblk()
2571 dm->dqb_curinodes = di->d_ino_count; do_set_dqblk()
2576 if (di->d_fieldmask & QC_INO_SOFT) do_set_dqblk()
2577 dm->dqb_isoftlimit = di->d_ino_softlimit; do_set_dqblk()
2578 if (di->d_fieldmask & QC_INO_HARD) do_set_dqblk()
2579 dm->dqb_ihardlimit = di->d_ino_hardlimit; do_set_dqblk()
2580 if (di->d_fieldmask & (QC_INO_SOFT | QC_INO_HARD)) { do_set_dqblk()
2585 if (di->d_fieldmask & QC_SPC_TIMER) { do_set_dqblk()
2586 dm->dqb_btime = di->d_spc_timer; do_set_dqblk()
2591 if (di->d_fieldmask & QC_INO_TIMER) { do_set_dqblk()
2592 dm->dqb_itime = di->d_ino_timer; do_set_dqblk()
2602 } else if (!(di->d_fieldmask & QC_SPC_TIMER)) do_set_dqblk()
2611 } else if (!(di->d_fieldmask & QC_INO_TIMER)) do_set_dqblk()
2627 struct qc_dqblk *di) dquot_set_dqblk()
2637 rc = do_set_dqblk(dquot, di); dquot_set_dqblk()
2514 dquot_get_dqblk(struct super_block *sb, struct kqid qid, struct qc_dqblk *di) dquot_get_dqblk() argument
2626 dquot_set_dqblk(struct super_block *sb, struct kqid qid, struct qc_dqblk *di) dquot_set_dqblk() argument
/linux-4.1.27/drivers/isdn/pcbit/
H A Dcallbacks.h6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
H A Dedss1.h6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
H A Dmodule.c6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
H A Dcapi.h6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
H A Dpcbit.h6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
H A Dcallbacks.c6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
H A Dedss1.c7 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
H A Dlayer2.h6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
/linux-4.1.27/arch/x86/include/uapi/asm/
H A Dsigcontext32.h57 unsigned int di; member in struct:sigcontext_ia32
/linux-4.1.27/arch/x86/math-emu/
H A Dget_address.c38 offsetof(struct pt_regs, di)
349 address += FPU_info->regs->bx + FPU_info->regs->di; FPU_get_address_16()
357 address += FPU_info->regs->bp + FPU_info->regs->di; FPU_get_address_16()
365 address += FPU_info->regs->di; FPU_get_address_16()
H A Dpoly.h80 :"ax", "si", "di"); add_Xsig_Xsig()
/linux-4.1.27/include/uapi/linux/
H A Dipv6_route.h5 * Pedro Roque <roque@di.fc.ul.pt>
H A Din6.h6 * Pedro Roque <roque@di.fc.ul.pt>
H A Dmroute.h14 * Carlos Picoto (cap@di.fc.ul.pt)
H A Dmroute6.h14 * Carlos Picoto (cap@di.fc.ul.pt)
/linux-4.1.27/net/ipv6/
H A Dprotocol.c8 * Authors: Pedro Roque <roque@di.fc.ul.pt>
/linux-4.1.27/security/integrity/ima/
H A Dima_template_lib.h2 * Copyright (C) 2013 Politecnico di Torino, Italy
H A Dima_template.c2 * Copyright (C) 2013 Politecnico di Torino, Italy
/linux-4.1.27/drivers/usb/wusbcore/
H A Dcbaf.c283 struct wusb_cbaf_device_info *di; cbaf_cdid_get() local
286 di = cbaf->buffer; cbaf_cdid_get()
292 di, cbaf->buffer_size, USB_CTRL_GET_TIMEOUT); cbaf_cdid_get()
299 needed = result < sizeof(*di) ? sizeof(*di) : le32_to_cpu(di->Length); cbaf_cdid_get()
306 strlcpy(cbaf->device_name, di->DeviceFriendlyName, CBA_NAME_LEN); cbaf_cdid_get()
307 cbaf->cdid = di->CDID; cbaf_cdid_get()
308 cbaf->device_band_groups = le16_to_cpu(di->BandGroups); cbaf_cdid_get()
/linux-4.1.27/fs/nilfs2/
H A Ddat.c484 struct nilfs_dat_info *di; nilfs_dat_read() local
505 err = nilfs_mdt_init(dat, NILFS_MDT_GFP, sizeof(*di)); nilfs_dat_read()
513 di = NILFS_DAT_I(dat); nilfs_dat_read()
514 lockdep_set_class(&di->mi.mi_sem, &dat_lock_key); nilfs_dat_read()
515 nilfs_palloc_setup_cache(dat, &di->palloc_cache); nilfs_dat_read()
516 nilfs_mdt_setup_shadow_map(dat, &di->shadow); nilfs_dat_read()
/linux-4.1.27/arch/arc/kernel/
H A Ddisasm.c106 state->di = BITS(state->words[0], 11, 11); disasm_instr()
107 if (state->di) disasm_instr()
127 state->di = BITS(state->words[0], 5, 5); disasm_instr()
128 if (state->di) disasm_instr()
213 state->di = BITS(state->words[0], 15, 15); disasm_instr()
214 if (state->di) disasm_instr()
H A Dunaligned.c233 if ((state.zz == 1) || (state.di)) misaligned_fixup()
/linux-4.1.27/arch/cris/arch-v10/kernel/
H A Dentry.S55 di
102 ; Note that di below is in delay slot
105 di ; so need_resched and sigpending don't change
193 di ; make sure need_resched and sigpending don't change
254 di
310 di
345 di
396 di
420 di
439 di
529 di
542 di
562 di ; Need to disable irq's at this point.
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/engine/disp/
H A Dconn.c111 DBG("type %02x loc %d hpd %02x dp %x di %x sr %x lcdid %x\n", nvkm_connector_create_()
113 info->di, info->sr, info->lcdid); nvkm_connector_create_()
/linux-4.1.27/include/video/
H A Dimx-ipu-v3.h212 int ipu_dc_init_sync(struct ipu_dc *dc, struct ipu_di *di, bool interlaced,
220 * IPU Display Interface (di) functions
227 int ipu_di_adjust_videomode(struct ipu_di *di, struct videomode *mode);
343 int di; member in struct:ipu_client_platformdata
/linux-4.1.27/drivers/mtd/ubi/
H A Dkapi.c34 * @di: the information is stored here
39 void ubi_do_get_device_info(struct ubi_device *ubi, struct ubi_device_info *di) ubi_do_get_device_info() argument
41 di->ubi_num = ubi->ubi_num; ubi_do_get_device_info()
42 di->leb_size = ubi->leb_size; ubi_do_get_device_info()
43 di->leb_start = ubi->leb_start; ubi_do_get_device_info()
44 di->min_io_size = ubi->min_io_size; ubi_do_get_device_info()
45 di->max_write_size = ubi->max_write_size; ubi_do_get_device_info()
46 di->ro_mode = ubi->ro_mode; ubi_do_get_device_info()
47 di->cdev = ubi->cdev.dev; ubi_do_get_device_info()
54 * @di: the information is stored here
59 int ubi_get_device_info(int ubi_num, struct ubi_device_info *di) ubi_get_device_info() argument
68 ubi_do_get_device_info(ubi, di); ubi_get_device_info()
H A Dgluebi.c292 * @di: UBI device description object
299 static int gluebi_create(struct ubi_device_info *di, gluebi_create() argument
319 if (!di->ro_mode) gluebi_create()
322 mtd->writesize = di->min_io_size; gluebi_create()
472 gluebi_create(&nt->di, &nt->vi); gluebi_notify()
/linux-4.1.27/fs/gfs2/
H A Dinode.c415 struct gfs2_dinode *di = (struct gfs2_dinode *)dibh->b_data; gfs2_init_dir() local
416 struct gfs2_dirent *dent = (struct gfs2_dirent *)(di+1); gfs2_init_dir()
419 dent->de_inum = di->di_num; /* already GFS2 endian */ gfs2_init_dir()
468 struct gfs2_dinode *di; init_dinode() local
473 di = (struct gfs2_dinode *)dibh->b_data; init_dinode()
474 gfs2_dinode_out(ip, di); init_dinode()
476 di->di_major = cpu_to_be32(MAJOR(ip->i_inode.i_rdev)); init_dinode()
477 di->di_minor = cpu_to_be32(MINOR(ip->i_inode.i_rdev)); init_dinode()
478 di->__pad1 = 0; init_dinode()
479 di->__pad2 = 0; init_dinode()
480 di->__pad3 = 0; init_dinode()
481 memset(&di->__pad4, 0, sizeof(di->__pad4)); init_dinode()
482 memset(&di->di_reserved, 0, sizeof(di->di_reserved)); init_dinode()
/linux-4.1.27/drivers/staging/comedi/drivers/
H A Ddas08.c67 3 di do
159 3 di do
421 /* di */ das08_common_attach()
H A Ddas16m1.c75 3 di 4 bit do 4 bit
589 /* di */ das16m1_attach()
H A Ddt2811.c426 /* di subdevice */ dt2811_attach()
H A Dmultiq3.c247 /* di subdevice */ multiq3_attach()
H A Drti800.c324 /* di */ rti800_attach()
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/subdev/bios/
H A Dconn.c88 info->di = (nv_ro08(bios, data + 0x02) & 0xf0) >> 4; nvbios_connEp()
/linux-4.1.27/drivers/video/fbdev/exynos/
H A Dexynos_mipi_dsi_lowlevel.c579 unsigned int di, unsigned int data0, unsigned int data1) exynos_mipi_dsi_wr_tx_header()
581 unsigned int reg = (data1 << 16) | (data0 << 8) | ((di & 0x3f) << 0); exynos_mipi_dsi_wr_tx_header()
587 unsigned int di, unsigned int data0) exynos_mipi_dsi_rd_tx_header()
589 unsigned int reg = (data0 << 8) | (di << 0); exynos_mipi_dsi_rd_tx_header()
578 exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim, unsigned int di, unsigned int data0, unsigned int data1) exynos_mipi_dsi_wr_tx_header() argument
586 exynos_mipi_dsi_rd_tx_header(struct mipi_dsim_device *dsim, unsigned int di, unsigned int data0) exynos_mipi_dsi_rd_tx_header() argument
H A Dexynos_mipi_dsi_lowlevel.h104 void exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim, unsigned int di,
/linux-4.1.27/arch/cris/boot/compressed/
H A Dhead_v10.S25 di
H A Dhead_v32.S21 di
/linux-4.1.27/sound/drivers/vx/
H A Dvx_mixer.c76 #define SET_CDC_DATA_SEL(di,s) ((di).b.mh = (u8) (s))
77 #define SET_CDC_DATA_REG(di,r) ((di).b.ml = (u8) (r))
78 #define SET_CDC_DATA_VAL(di,d) ((di).b.ll = (u8) (d))
79 #define SET_CDC_DATA_INIT(di) ((di).l = 0L, SET_CDC_DATA_SEL(di,XX_CODEC_SELECTOR))
/linux-4.1.27/include/linux/mfd/abx500/
H A Dab8500-bm.h470 int ab8500_fg_inst_curr_start(struct ab8500_fg *di);
471 int ab8500_fg_inst_curr_finalize(struct ab8500_fg *di, int *res);
472 int ab8500_fg_inst_curr_started(struct ab8500_fg *di);
473 int ab8500_fg_inst_curr_done(struct ab8500_fg *di);
/linux-4.1.27/drivers/block/
H A Dpktcdvd.c1590 static int pkt_get_disc_info(struct pktcdvd_device *pd, disc_information *di) pkt_get_disc_info() argument
1596 init_cdrom_command(&cgc, di, sizeof(*di), CGC_DATA_READ); pkt_get_disc_info()
1607 cgc.buflen = be16_to_cpu(di->disc_information_length) + pkt_get_disc_info()
1608 sizeof(di->disc_information_length); pkt_get_disc_info()
1646 disc_information di; pkt_get_last_written() local
1651 if ((ret = pkt_get_disc_info(pd, &di))) pkt_get_last_written()
1654 last_track = (di.last_track_msb << 8) | di.last_track_lsb; pkt_get_last_written()
1798 static int pkt_writable_disc(struct pktcdvd_device *pd, disc_information *di) pkt_writable_disc() argument
1818 if (di->disc_type == 0xff) { pkt_writable_disc()
1823 if (di->disc_type != 0x20 && di->disc_type != 0) { pkt_writable_disc()
1824 pkt_err(pd, "wrong disc type (%x)\n", di->disc_type); pkt_writable_disc()
1828 if (di->erasable == 0) { pkt_writable_disc()
1833 if (di->border_status == PACKET_SESSION_RESERVED) { pkt_writable_disc()
1845 disc_information di; pkt_probe_settings() local
1855 memset(&di, 0, sizeof(disc_information)); pkt_probe_settings()
1858 if ((ret = pkt_get_disc_info(pd, &di))) { pkt_probe_settings()
1863 if (!pkt_writable_disc(pd, &di)) pkt_probe_settings()
1866 pd->type = di.erasable ? PACKET_CDRW : PACKET_CDR; pkt_probe_settings()
1868 track = 1; /* (di.last_track_msb << 8) | di.last_track_lsb; */ pkt_probe_settings()
/linux-4.1.27/drivers/net/wireless/
H A Dmwl8k.c541 struct mwl8k_device_info *di = priv->device_info; mwl8k_request_firmware() local
544 if (di->helper_image != NULL) { mwl8k_request_firmware()
546 rc = mwl8k_request_fw(priv, di->helper_image, mwl8k_request_firmware()
549 rc = mwl8k_request_fw(priv, di->helper_image, mwl8k_request_firmware()
553 pci_name(priv->pdev), di->helper_image); mwl8k_request_firmware()
4790 struct mwl8k_device_info *di; mwl8k_add_interface() local
4803 di = priv->device_info; mwl8k_add_interface()
4806 if (!priv->ap_fw && di->fw_image_ap) { mwl8k_add_interface()
4810 rc = mwl8k_reload_firmware(hw, di->fw_image_ap); mwl8k_add_interface()
4817 if (priv->ap_fw && di->fw_image_sta) { mwl8k_add_interface()
4826 di->fw_image_sta); mwl8k_add_interface()
4891 struct mwl8k_device_info *di; mwl8k_hw_restart_work() local
4901 di = priv->device_info; mwl8k_hw_restart_work()
4905 rc = mwl8k_reload_firmware(hw, di->fw_image_ap); mwl8k_hw_restart_work()
4907 rc = mwl8k_reload_firmware(hw, di->fw_image_sta); mwl8k_hw_restart_work()
5714 struct mwl8k_device_info *di = priv->device_info; mwl8k_fw_state_machine() local
5721 pci_name(priv->pdev), di->helper_image); mwl8k_fw_state_machine()
5760 pci_name(priv->pdev), di->helper_image); mwl8k_fw_state_machine()
6169 struct mwl8k_device_info *di; mwl8k_probe() local
6240 di = priv->device_info; mwl8k_probe()
6241 if (ap_mode_default && di->fw_image_ap) { mwl8k_probe()
6242 priv->fw_pref = di->fw_image_ap; mwl8k_probe()
6243 priv->fw_alt = di->fw_image_sta; mwl8k_probe()
6244 } else if (!ap_mode_default && di->fw_image_sta) { mwl8k_probe()
6245 priv->fw_pref = di->fw_image_sta; mwl8k_probe()
6246 priv->fw_alt = di->fw_image_ap; mwl8k_probe()
6247 } else if (ap_mode_default && !di->fw_image_ap && di->fw_image_sta) { mwl8k_probe()
6249 priv->fw_pref = di->fw_image_sta; mwl8k_probe()
6250 } else if (!ap_mode_default && !di->fw_image_sta && di->fw_image_ap) { mwl8k_probe()
6252 priv->fw_pref = di->fw_image_ap; mwl8k_probe()
/linux-4.1.27/drivers/cdrom/
H A Dcdrom.c372 disc_information *di) cdrom_get_disc_info()
379 init_cdrom_command(&cgc, di, sizeof(*di), CGC_DATA_READ); cdrom_get_disc_info()
391 buflen = be16_to_cpu(di->disc_information_length) + cdrom_get_disc_info()
392 sizeof(di->disc_information_length); cdrom_get_disc_info()
535 disc_information di; cdrom_mrw_exit() local
538 ret = cdrom_get_disc_info(cdi, &di); cdrom_mrw_exit()
539 if (ret < 0 || ret < (int)offsetof(typeof(di),disc_type)) cdrom_mrw_exit()
543 if (di.mrw_status == CDM_MRW_BGFORMAT_ACTIVE) { cdrom_mrw_exit()
750 disc_information di; cdrom_media_erasable() local
753 ret = cdrom_get_disc_info(cdi, &di); cdrom_media_erasable()
754 if (ret < 0 || ret < offsetof(typeof(di), n_first_track)) cdrom_media_erasable()
757 return di.erasable; cdrom_media_erasable()
779 disc_information di; cdrom_mrw_open_write() local
790 ret = cdrom_get_disc_info(cdi, &di); cdrom_mrw_open_write()
791 if (ret < 0 || ret < offsetof(typeof(di),disc_type)) cdrom_mrw_open_write()
794 if (!di.erasable) cdrom_mrw_open_write()
805 pr_info("open: mrw_status '%s'\n", mrw_format_status[di.mrw_status]); cdrom_mrw_open_write()
806 if (!di.mrw_status) cdrom_mrw_open_write()
808 else if (di.mrw_status == CDM_MRW_BGFORMAT_INACTIVE && cdrom_mrw_open_write()
2818 disc_information di; cdrom_get_last_written() local
2826 ret = cdrom_get_disc_info(cdi, &di); cdrom_get_last_written()
2827 if (ret < (int)(offsetof(typeof(di), last_track_lsb) cdrom_get_last_written()
2828 + sizeof(di.last_track_lsb))) cdrom_get_last_written()
2832 last_track = (di.last_track_msb << 8) | di.last_track_lsb; cdrom_get_last_written()
2880 disc_information di; cdrom_get_next_writable() local
2888 ret = cdrom_get_disc_info(cdi, &di); cdrom_get_next_writable()
2889 if (ret < 0 || ret < offsetof(typeof(di), last_track_lsb) cdrom_get_next_writable()
2890 + sizeof(di.last_track_lsb)) cdrom_get_next_writable()
2894 last_track = (di.last_track_msb << 8) | di.last_track_lsb; cdrom_get_next_writable()
371 cdrom_get_disc_info(struct cdrom_device_info *cdi, disc_information *di) cdrom_get_disc_info() argument
/linux-4.1.27/lib/mpi/
H A Dmpi-internal.h137 #define UDIV_QRNND_PREINV(q, r, nh, nl, d, di) \
141 umul_ppmm(_q, _ql, (nh), (di)); \
/linux-4.1.27/drivers/staging/lustre/lustre/include/
H A Ddt_object.h599 struct dt_it *di);
601 struct dt_it *di,
604 struct dt_it *di);
606 struct dt_it *di);
608 const struct dt_it *di);
610 const struct dt_it *di);
612 const struct dt_it *di,
616 const struct dt_it *di);
618 const struct dt_it *di, __u64 hash);
620 const struct dt_it *di, void *key_rec);
/linux-4.1.27/arch/cris/arch-v32/kernel/
H A Dentry.S46 di
114 ; Note that di below is in delay slot.
117 di ; So need_resched and sigpending don't change.
232 di ; Make sure need_resched and sigpending don't change.
341 di
424 di
488 di ; Need to disable irq's at this point.
/linux-4.1.27/drivers/net/wireless/p54/
H A Dp54spi.c479 struct p54s_tx_info *di = (struct p54s_tx_info *) mi->data; p54spi_op_tx() local
482 BUILD_BUG_ON(sizeof(*di) > sizeof((mi->data))); p54spi_op_tx()
485 list_add_tail(&di->tx_list, &priv->tx_pending); p54spi_op_tx()
/linux-4.1.27/arch/x86/ia32/
H A Dia32_signal.c185 COPY(di); COPY(si); COPY(bp); COPY(sp); COPY(bx); ia32_restore_sigcontext()
278 put_user_ex(regs->di, &sc->di); ia32_setup_sigcontext()
H A Dia32entry.S141 pushq_cfi_reg rdi /* pt_regs->di */
374 pushq_cfi_reg rdi /* pt_regs->di */
523 pushq_cfi_reg rdi /* pt_regs->di */
/linux-4.1.27/include/linux/mtd/
H A Dubi.h222 * @di: UBI device description object
230 struct ubi_device_info di; member in struct:ubi_notification
237 int ubi_get_device_info(int ubi_num, struct ubi_device_info *di);
/linux-4.1.27/drivers/scsi/
H A Daha1740.h108 :6, di:1, /* Disable Interrupt */ member in struct:ecb
/linux-4.1.27/drivers/staging/speakup/
H A Dspeakup_ltlk.c128 .command = "\x01%di",
H A Dspeakup_soft.c146 .command = "\x01%di",
/linux-4.1.27/drivers/staging/lustre/lustre/fld/
H A Dlproc_fld.c41 * Di Wang <di.wang@whamcloud.com>
/linux-4.1.27/arch/x86/include/asm/xen/
H A Dinterface_64.h113 __DECL_REG(di);
/linux-4.1.27/arch/x86/xen/
H A Dxen-asm.S86 testw $X86_EFLAGS_IF, %di
/linux-4.1.27/drivers/usb/misc/sisusbvga/
H A Dsisusb_init.c769 unsigned short si, di, bx, sf; SiS_LoadDAC() local
821 di = si; SiS_LoadDAC()
826 table[di], table[bx], SiS_LoadDAC()
833 table[di], table[si], SiS_LoadDAC()
/linux-4.1.27/include/net/
H A Dif_inet6.h6 * Pedro Roque <roque@di.fc.ul.pt>
H A Dip6_fib.h5 * Pedro Roque <roque@di.fc.ul.pt>
/linux-4.1.27/net/bluetooth/
H A Dhci_core.c1977 struct hci_dev_info di; hci_get_dev_info() local
1981 if (copy_from_user(&di, arg, sizeof(di))) hci_get_dev_info()
1984 hdev = hci_dev_get(di.dev_id); hci_get_dev_info()
1997 strcpy(di.name, hdev->name); hci_get_dev_info()
1998 di.bdaddr = hdev->bdaddr; hci_get_dev_info()
1999 di.type = (hdev->bus & 0x0f) | ((hdev->dev_type & 0x03) << 4); hci_get_dev_info()
2000 di.flags = flags; hci_get_dev_info()
2001 di.pkt_type = hdev->pkt_type; hci_get_dev_info()
2003 di.acl_mtu = hdev->acl_mtu; hci_get_dev_info()
2004 di.acl_pkts = hdev->acl_pkts; hci_get_dev_info()
2005 di.sco_mtu = hdev->sco_mtu; hci_get_dev_info()
2006 di.sco_pkts = hdev->sco_pkts; hci_get_dev_info()
2008 di.acl_mtu = hdev->le_mtu; hci_get_dev_info()
2009 di.acl_pkts = hdev->le_pkts; hci_get_dev_info()
2010 di.sco_mtu = 0; hci_get_dev_info()
2011 di.sco_pkts = 0; hci_get_dev_info()
2013 di.link_policy = hdev->link_policy; hci_get_dev_info()
2014 di.link_mode = hdev->link_mode; hci_get_dev_info()
2016 memcpy(&di.stat, &hdev->stat, sizeof(di.stat)); hci_get_dev_info()
2017 memcpy(&di.features, &hdev->features, sizeof(di.features)); hci_get_dev_info()
2019 if (copy_to_user(arg, &di, sizeof(di))) hci_get_dev_info()
/linux-4.1.27/arch/x86/mm/
H A Dmmio-mod.c132 regs->si, regs->di, regs->bp, regs->sp); die_kmmio_nesting_error()
137 regs->si, regs->di, regs->bp, regs->sp); die_kmmio_nesting_error()
H A Dpf_in.c312 rv = (unsigned char *)&regs->di; get_reg_w8()
375 rv = &regs->di; get_reg_w32()
/linux-4.1.27/drivers/input/serio/
H A Dhil_mlc.c102 memcpy(&mlc->di[idx], &mlc->di_scratch, sizeof(mlc->di_scratch)); hil_mlc_copy_di_scratch()
120 if (!memcmp(mlc->di + idx, &mlc->di_scratch, hil_mlc_match_di_scratch()
820 idx = mlc->di[map->didx].idd; hil_mlc_serio_write()
823 idx = mlc->di[map->didx].rsc; hil_mlc_serio_write()
826 idx = mlc->di[map->didx].exd; hil_mlc_serio_write()
829 idx = mlc->di[map->didx].rnm; hil_mlc_serio_write()
/linux-4.1.27/arch/x86/kernel/cpu/
H A Dperf_event_intel_ds.c23 u32 si, di, bp, sp;
183 u64 si, di, bp, sp; member in struct:pebs_record_core
191 u64 si, di, bp, sp; member in struct:pebs_record_nhm
203 u64 si, di, bp, sp; member in struct:pebs_record_hsw
923 regs.di = pebs->di; __intel_pmu_pebs_event()
/linux-4.1.27/drivers/net/ethernet/micrel/
H A Dks8851.c1073 struct ethtool_drvinfo *di) ks8851_get_drvinfo()
1075 strlcpy(di->driver, "KS8851", sizeof(di->driver)); ks8851_get_drvinfo()
1076 strlcpy(di->version, "1.00", sizeof(di->version)); ks8851_get_drvinfo()
1077 strlcpy(di->bus_info, dev_name(dev->dev.parent), sizeof(di->bus_info)); ks8851_get_drvinfo()
1072 ks8851_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *di) ks8851_get_drvinfo() argument
H A Dks8851_mll.c1295 struct ethtool_drvinfo *di) ks_get_drvinfo()
1297 strlcpy(di->driver, DRV_NAME, sizeof(di->driver)); ks_get_drvinfo()
1298 strlcpy(di->version, "1.00", sizeof(di->version)); ks_get_drvinfo()
1299 strlcpy(di->bus_info, dev_name(netdev->dev.parent), ks_get_drvinfo()
1300 sizeof(di->bus_info)); ks_get_drvinfo()
1294 ks_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *di) ks_get_drvinfo() argument
/linux-4.1.27/drivers/block/drbd/
H A Ddrbd_worker.c1110 struct digest_info *di; w_e_end_csum_rs_req() local
1126 di = peer_req->digest; w_e_end_csum_rs_req()
1134 D_ASSERT(device, digest_size == di->digest_size); w_e_end_csum_rs_req()
1139 eq = !memcmp(digest, di->digest, digest_size); w_e_end_csum_rs_req()
1152 kfree(di); w_e_end_csum_rs_req()
1231 struct digest_info *di; w_e_end_ov_reply() local
1252 di = peer_req->digest; w_e_end_ov_reply()
1260 D_ASSERT(device, digest_size == di->digest_size); w_e_end_ov_reply()
1261 eq = !memcmp(digest, di->digest, digest_size); w_e_end_ov_reply()
/linux-4.1.27/arch/powerpc/kernel/
H A Dcacheinfo.c52 /* Allow for both [di]-cache-line-size and
53 * [di]-cache-block-size properties. According to the PowerPC
80 /* PowerPC Processor binding says the [di]-cache-*
/linux-4.1.27/arch/x86/mm/kmemcheck/
H A Dkmemcheck.c591 kmemcheck_copy(regs, regs->si, regs->di, size); kmemcheck_access()
598 kmemcheck_read(regs, regs->di, size); kmemcheck_access()
/linux-4.1.27/arch/x86/um/
H A Dsignal.c174 GETREG(DI, di); copy_sc_from_user()
263 PUTREG(DI, di); copy_sc_to_user()
/linux-4.1.27/fs/ntfs/
H A Dcompress.c228 int di = completed_pages[i]; ntfs_decompress() local
230 dp = dest_pages[di]; ntfs_decompress()
241 if (di == xpage) ntfs_decompress()
245 dest_pages[di] = NULL; ntfs_decompress()

Completed in 4491 milliseconds

12