/linux-4.1.27/drivers/power/ |
H A D | ds2760_battery.c | 123 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 D | abx500_chargalg.c | 294 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 D | ab8500_charger.c | 344 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 D | ab8500_fg.c | 361 * @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 D | ab8500_btemp.c | 135 * @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 D | rx51_battery.c | 55 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 D | bq27x00_battery.c | 89 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 D | dma.c | 38 #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 D | main.c | 406 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 D | fan53555.c | 98 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 D | ipu-di.c | 128 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 D | Makefile | 3 imx-ipu-v3-objs := ipu-common.o ipu-cpmem.o ipu-csi.o ipu-dc.o ipu-di.o \
|
H A D | ipu-dc.c | 100 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 D | inode.c | 36 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 D | ip_vs_wrr.c | 34 * - 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 D | xattr.c | 38 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 D | dir-item.c | 48 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 D | props.c | 176 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 D | tree-log.c | 778 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 D | print-tree.c | 178 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 D | send.c | 977 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 D | inode.c | 3869 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 D | delayed-inode.c | 1695 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 D | dgnc_mgmt.c | 133 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 D | isdn_common.h | 30 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 D | isdn_common.c | 220 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 D | isdn_audio.c | 502 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 D | isdn_tty.c | 168 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 D | isdn_net.c | 2060 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 D | bioscall.S | 36 movw %sp, %di 68 movw 68(%esp), %di /* Original %cx == 3rd argument */ 69 andw %di, %di
|
H A D | video-vesa.c | 45 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 D | apm.c | 53 boot_params.apm_bios_info.dseg_len = oreg.di; query_apm_bios()
|
H A D | memory.c | 31 ireg.di = (size_t)&buf; detect_memory_e820()
|
H A D | header.S | 501 movw $__bss_start, %di 504 subw %di, %cx
|
H A D | boot.h | 247 u16 di, hdi; member in struct:biosregs::__anon2961::__anon2963
|
/linux-4.1.27/arch/arc/include/asm/ |
H A D | cache.h | 25 * 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 D | disasm.h | 89 int zz, aa, x, pref, di; member in struct:disasm_state
|
/linux-4.1.27/tools/build/feature/ |
H A D | test-libunwind.c | 6 unw_dyn_info_t *di,
|
/linux-4.1.27/drivers/usb/host/whci/ |
H A D | wusb.c | 107 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 D | debug.c | 92 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 D | Makefile | 12 divas-y := divasmain.o divasfunc.o di.o io.o istream.o \
|
H A D | divasfunc.c | 15 #include "di.h"
|
H A D | istream.c | 32 #include "di.h"
|
H A D | s_bri.c | 30 #include "di.h"
|
H A D | s_pri.c | 30 #include "di.h"
|
H A D | divasproc.c | 28 #include "di.h"
|
/linux-4.1.27/arch/x86/lib/ |
H A D | strstr_32.c | 28 : "dx", "di"); strstr()
|
/linux-4.1.27/include/linux/ |
H A D | ipv6_route.h | 5 * Pedro Roque <roque@di.fc.ul.pt>
|
H A D | in6.h | 6 * Pedro Roque <roque@di.fc.ul.pt>
|
H A D | quotaops.h | 101 struct qc_dqblk *di); 103 struct qc_dqblk *di);
|
/linux-4.1.27/arch/x86/kernel/ |
H A D | verify_cpu.S | 59 xor %di,%di 66 mov $1,%di # cpu is from AMD 125 test %di,%di 131 xor %di,%di # don't loop
|
H A D | asm-offsets_64.c | 42 ENTRY(di); main() 60 ENTRY(di); main()
|
H A D | vsyscall_64.c | 68 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 D | asm-offsets_32.c | 25 OFFSET(IA32_SIGCONTEXT_di, sigcontext, di); foo() 48 OFFSET(PT_EDI, pt_regs, di); foo()
|
H A D | perf_regs.c | 24 PT_REGS_OFFSET(PERF_REG_X86_DI, di), 142 regs_user_copy->di = user_regs->di; perf_get_regs_user()
|
H A D | doublefault.c | 43 t->si, t->di); doublefault_fn()
|
H A D | signal.c | 82 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 D | kgdb.c | 63 { "di", 4, offsetof(struct pt_regs, di) }, 76 { "di", 8, offsetof(struct pt_regs, di) },
|
H A D | ptrace.c | 79 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 D | uprobes.c | 408 * 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 ®s->di; scratch_reg()
|
/linux-4.1.27/arch/mips/sni/ |
H A D | setup.c | 43 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 D | ipuv3-crtc.c | 43 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 D | imx-ldb.c | 100 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 D | socket.c | 387 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 D | bitops.h | 37 : "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 D | atariints.h | 133 : : "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 D | thread_info.h | 54 : "di" (~(THREAD_SIZE-1)) current_thread_info()
|
H A D | cacheflush_mm.h | 174 : "di" (FLUSH_I_AND_D)); \ 186 : "di" (FLUSH_I_AND_D)); \ 246 : "di" (FLUSH_I)); __flush_page_to_ram()
|
H A D | atomic.h | 30 #define ASM_DI "di"
|
H A D | mmu_context.h | 239 : "=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 D | tss.h | 51 u16 di; member in struct:tss_segment_16
|
/linux-4.1.27/arch/mips/include/asm/ |
H A D | irqflags.h | 28 " 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 D | irqflags.h | 15 asm volatile("di" : : : "memory"); arch_local_irq_disable()
|
H A D | irq.h | 90 "di\n\t" /* need to disable irq's at this point */\
|
/linux-4.1.27/arch/cris/include/arch-v32/arch/ |
H A D | irqflags.h | 16 asm volatile("di" : : : "memory"); arch_local_irq_disable()
|
/linux-4.1.27/security/keys/encrypted-keys/ |
H A D | ecryptfs_format.h | 5 * Copyright (C) 2010 Politecnico di Torino, Italy
|
H A D | ecryptfs_format.c | 5 * Copyright (C) 2010 Politecnico di Torino, Italy
|
H A D | masterkey_trusted.c | 3 * Copyright (C) 2010 Politecnico di Torino, Italy
|
/linux-4.1.27/fs/ceph/ |
H A D | dir.c | 36 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 D | debugfs.c | 146 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 D | mds_client.c | 3086 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 D | inode.c | 928 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 D | unwind-libunwind.c | 39 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 D | a.out-core.h | 46 dump->regs.di = regs->di; aout_dump_thread()
|
H A D | syscall.h | 123 *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 D | sigcontext.h | 12 unsigned long di; member in struct:sigcontext 49 unsigned long di; member in struct:sigcontext
|
H A D | asm.h | 43 #define _ASM_DI __ASM_REG(di)
|
H A D | elf.h | 111 _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 D | ptrace.h | 16 unsigned long di; member in struct:pt_regs 53 unsigned long di; member in struct:pt_regs
|
H A D | kexec.h | 104 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 D | user_32.h | 82 unsigned long di; member in struct:user_regs_struct
|
H A D | user_64.h | 83 unsigned long di; member in struct:user_regs_struct
|
/linux-4.1.27/samples/bpf/ |
H A D | tracex3_kern.c | 26 long rq = ctx->di; bpf_prog1() 54 long rq = ctx->di; bpf_prog2()
|
H A D | tracex1_kern.c | 32 skb = (struct sk_buff *) ctx->di; bpf_prog1()
|
/linux-4.1.27/tools/perf/arch/x86/util/ |
H A D | dwarf-regs.c | 39 "%di", 49 "%di",
|
/linux-4.1.27/fs/ocfs2/ |
H A D | super.c | 128 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 D | resize.c | 377 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 D | acl.c | 172 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 D | inode.c | 621 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 D | extent_map.c | 289 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 D | xattr.c | 303 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 D | ocfs2.h | 553 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 D | aops.c | 227 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 D | suballoc.c | 228 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 D | file.c | 265 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 D | suballoc.h | 144 struct ocfs2_dinode *di); 203 struct ocfs2_dinode *di, 210 int ocfs2_read_group_descriptor(struct inode *inode, struct ocfs2_dinode *di,
|
H A D | alloc.c | 181 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 D | dir.c | 415 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 D | namei.c | 2449 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 D | refcounttree.c | 407 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 D | move_extents.c | 771 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 D | refcounttree.h | 81 struct ocfs2_dinode *di,
|
H A D | xattr.h | 55 struct ocfs2_dinode *di);
|
H A D | journal.c | 805 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 D | ocfs2_fs.h | 1288 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 D | alloc.h | 170 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 D | buffer_head_io.c | 396 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 D | EventClass.py | 57 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 D | conn.h | 36 u8 di; member in struct:nvbios_connE
|
/linux-4.1.27/arch/mips/include/asm/mach-paravirt/ |
H A D | kernel-entry-init.h | 33 di
|
/linux-4.1.27/include/keys/ |
H A D | encrypted-type.h | 3 * Copyright (C) 2010 Politecnico di Torino, Italy
|
/linux-4.1.27/arch/m68k/mm/ |
H A D | cache.c | 103 : "di" (FLUSH_I)); flush_icache_range() 133 : "di" (FLUSH_I)); flush_icache_user_range()
|
/linux-4.1.27/net/bluetooth/rfcomm/ |
H A D | tty.c | 507 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 D | readwrite.c | 114 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 D | base.c | 117 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 D | vmur.h | 105 #define CCWDEV_CU_DI(cutype, di) \ 106 CCW_DEVICE(cutype, 0x00), .driver_info = (di)
|
/linux-4.1.27/arch/cris/boot/rescue/ |
H A D | kimagerescue.S | 49 ;; put a nop (2 bytes) here first so we dont accidentally skip the di 52 di
|
H A D | head_v10.S | 27 * 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 D | dquot.c | 2497 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 D | callbacks.h | 6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
|
H A D | edss1.h | 6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
|
H A D | module.c | 6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
|
H A D | capi.h | 6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
|
H A D | pcbit.h | 6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
|
H A D | callbacks.c | 6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
|
H A D | edss1.c | 7 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
|
H A D | layer2.h | 6 * Written by Pedro Roque Marques (roque@di.fc.ul.pt)
|
/linux-4.1.27/arch/x86/include/uapi/asm/ |
H A D | sigcontext32.h | 57 unsigned int di; member in struct:sigcontext_ia32
|
/linux-4.1.27/arch/x86/math-emu/ |
H A D | get_address.c | 38 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 D | poly.h | 80 :"ax", "si", "di"); add_Xsig_Xsig()
|
/linux-4.1.27/include/uapi/linux/ |
H A D | ipv6_route.h | 5 * Pedro Roque <roque@di.fc.ul.pt>
|
H A D | in6.h | 6 * Pedro Roque <roque@di.fc.ul.pt>
|
H A D | mroute.h | 14 * Carlos Picoto (cap@di.fc.ul.pt)
|
H A D | mroute6.h | 14 * Carlos Picoto (cap@di.fc.ul.pt)
|
/linux-4.1.27/net/ipv6/ |
H A D | protocol.c | 8 * Authors: Pedro Roque <roque@di.fc.ul.pt>
|
/linux-4.1.27/security/integrity/ima/ |
H A D | ima_template_lib.h | 2 * Copyright (C) 2013 Politecnico di Torino, Italy
|
H A D | ima_template.c | 2 * Copyright (C) 2013 Politecnico di Torino, Italy
|
/linux-4.1.27/drivers/usb/wusbcore/ |
H A D | cbaf.c | 283 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 D | dat.c | 484 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 D | disasm.c | 106 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 D | unaligned.c | 233 if ((state.zz == 1) || (state.di)) misaligned_fixup()
|
/linux-4.1.27/arch/cris/arch-v10/kernel/ |
H A D | entry.S | 55 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 D | conn.c | 111 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 D | imx-ipu-v3.h | 212 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 D | kapi.c | 34 * @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 D | gluebi.c | 292 * @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 D | inode.c | 415 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 D | das08.c | 67 3 di do 159 3 di do 421 /* di */ das08_common_attach()
|
H A D | das16m1.c | 75 3 di 4 bit do 4 bit 589 /* di */ das16m1_attach()
|
H A D | dt2811.c | 426 /* di subdevice */ dt2811_attach()
|
H A D | multiq3.c | 247 /* di subdevice */ multiq3_attach()
|
H A D | rti800.c | 324 /* di */ rti800_attach()
|
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/subdev/bios/ |
H A D | conn.c | 88 info->di = (nv_ro08(bios, data + 0x02) & 0xf0) >> 4; nvbios_connEp()
|
/linux-4.1.27/drivers/video/fbdev/exynos/ |
H A D | exynos_mipi_dsi_lowlevel.c | 579 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 D | exynos_mipi_dsi_lowlevel.h | 104 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 D | head_v10.S | 25 di
|
H A D | head_v32.S | 21 di
|
/linux-4.1.27/sound/drivers/vx/ |
H A D | vx_mixer.c | 76 #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 D | ab8500-bm.h | 470 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 D | pktcdvd.c | 1590 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 D | mwl8k.c | 541 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 D | cdrom.c | 372 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 D | mpi-internal.h | 137 #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 D | dt_object.h | 599 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 D | entry.S | 46 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 D | p54spi.c | 479 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 D | ia32_signal.c | 185 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 D | ia32entry.S | 141 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 D | ubi.h | 222 * @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 D | aha1740.h | 108 :6, di:1, /* Disable Interrupt */ member in struct:ecb
|
/linux-4.1.27/drivers/staging/speakup/ |
H A D | speakup_ltlk.c | 128 .command = "\x01%di",
|
H A D | speakup_soft.c | 146 .command = "\x01%di",
|
/linux-4.1.27/drivers/staging/lustre/lustre/fld/ |
H A D | lproc_fld.c | 41 * Di Wang <di.wang@whamcloud.com>
|
/linux-4.1.27/arch/x86/include/asm/xen/ |
H A D | interface_64.h | 113 __DECL_REG(di);
|
/linux-4.1.27/arch/x86/xen/ |
H A D | xen-asm.S | 86 testw $X86_EFLAGS_IF, %di
|
/linux-4.1.27/drivers/usb/misc/sisusbvga/ |
H A D | sisusb_init.c | 769 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 D | if_inet6.h | 6 * Pedro Roque <roque@di.fc.ul.pt>
|
H A D | ip6_fib.h | 5 * Pedro Roque <roque@di.fc.ul.pt>
|
/linux-4.1.27/net/bluetooth/ |
H A D | hci_core.c | 1977 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 D | mmio-mod.c | 132 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 D | pf_in.c | 312 rv = (unsigned char *)®s->di; get_reg_w8() 375 rv = ®s->di; get_reg_w32()
|
/linux-4.1.27/drivers/input/serio/ |
H A D | hil_mlc.c | 102 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 D | perf_event_intel_ds.c | 23 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 D | ks8851.c | 1073 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 D | ks8851_mll.c | 1295 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 D | drbd_worker.c | 1110 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 D | cacheinfo.c | 52 /* 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 D | kmemcheck.c | 591 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 D | signal.c | 174 GETREG(DI, di); copy_sc_from_user() 263 PUTREG(DI, di); copy_sc_to_user()
|
/linux-4.1.27/fs/ntfs/ |
H A D | compress.c | 228 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()
|