Lines Matching +full:bat +full:- +full:present

2  * 1-Wire implementation for Maxim Semiconductor
32 #define MAX1721X_REG_NRSENSE 0x1CF /* RSense in 10^-5 Ohm */
60 struct power_supply *bat; member
108 * RSense stored in 10^-5 Ohm, so measurement voltage must be
109 * in 10^-11 Volts for get current in uA.
110 * 16 bit current reg fullscale +/-51.2mV is 102400 uV.
140 * present or unaccessible via W1. in max1721x_battery_get_property()
142 val->intval = in max1721x_battery_get_property()
143 regmap_read(info->regmap, MAX172XX_REG_STATUS, in max1721x_battery_get_property()
147 ret = regmap_read(info->regmap, MAX172XX_REG_REPSOC, &reg); in max1721x_battery_get_property()
148 val->intval = max172xx_percent_to_ps(reg); in max1721x_battery_get_property()
151 ret = regmap_read(info->regmap, MAX172XX_REG_BATT, &reg); in max1721x_battery_get_property()
152 val->intval = max172xx_voltage_to_ps(reg); in max1721x_battery_get_property()
155 ret = regmap_read(info->regmap, MAX172XX_REG_DESIGNCAP, &reg); in max1721x_battery_get_property()
156 val->intval = max172xx_capacity_to_ps(reg); in max1721x_battery_get_property()
159 ret = regmap_read(info->regmap, MAX172XX_REG_REPCAP, &reg); in max1721x_battery_get_property()
160 val->intval = max172xx_capacity_to_ps(reg); in max1721x_battery_get_property()
163 ret = regmap_read(info->regmap, MAX172XX_REG_TTE, &reg); in max1721x_battery_get_property()
164 val->intval = max172xx_time_to_ps(reg); in max1721x_battery_get_property()
167 ret = regmap_read(info->regmap, MAX172XX_REG_TTF, &reg); in max1721x_battery_get_property()
168 val->intval = max172xx_time_to_ps(reg); in max1721x_battery_get_property()
171 ret = regmap_read(info->regmap, MAX172XX_REG_TEMP, &reg); in max1721x_battery_get_property()
172 val->intval = max172xx_temperature_to_ps(reg); in max1721x_battery_get_property()
174 /* We need signed current, so must cast info->rsense to signed type */ in max1721x_battery_get_property()
176 ret = regmap_read(info->regmap, MAX172XX_REG_CURRENT, &reg); in max1721x_battery_get_property()
177 val->intval = in max1721x_battery_get_property()
178 max172xx_current_to_voltage(reg) / (int)info->rsense; in max1721x_battery_get_property()
181 ret = regmap_read(info->regmap, MAX172XX_REG_AVGCURRENT, &reg); in max1721x_battery_get_property()
182 val->intval = in max1721x_battery_get_property()
183 max172xx_current_to_voltage(reg) / (int)info->rsense; in max1721x_battery_get_property()
190 ret = regmap_read(info->regmap, MAX1721X_REG_DEV_STR, &reg); in max1721x_battery_get_property()
191 val->strval = info->DeviceName; in max1721x_battery_get_property()
194 ret = regmap_read(info->regmap, MAX1721X_REG_MFG_STR, &reg); in max1721x_battery_get_property()
195 val->strval = info->ManufacturerName; in max1721x_battery_get_property()
198 ret = regmap_read(info->regmap, MAX1721X_REG_SER_HEX, &reg); in max1721x_battery_get_property()
199 val->strval = info->SerialNumber; in max1721x_battery_get_property()
202 ret = -EINVAL; in max1721x_battery_get_property()
233 return -EFAULT; in get_string()
235 while (nr--) { in get_string()
236 if (regmap_read(info->regmap, reg++, &val)) in get_string()
237 return -EFAULT; in get_string()
250 return -EFAULT; in get_sn_string()
252 if (regmap_read(info->regmap, MAX1721X_REG_SER_HEX, &val[0])) in get_sn_string()
253 return -EFAULT; in get_sn_string()
254 if (regmap_read(info->regmap, MAX1721X_REG_SER_HEX + 1, &val[1])) in get_sn_string()
255 return -EFAULT; in get_sn_string()
256 if (regmap_read(info->regmap, MAX1721X_REG_SER_HEX + 2, &val[2])) in get_sn_string()
257 return -EFAULT; in get_sn_string()
264 * MAX1721x registers description for w1-regmap
268 regmap_reg_range(0x180, 0x1DF), /* non-volatile memory */
269 regmap_reg_range(0x1E0, 0x1EF), /* non-volatile history (unused) */
288 /* hole between volatile and non-volatile registers */
313 * W1-regmap config
328 info = devm_kzalloc(&sl->dev, sizeof(*info), GFP_KERNEL); in devm_w1_max1721x_add_device()
330 return -ENOMEM; in devm_w1_max1721x_add_device()
332 sl->family_data = (void *)info; in devm_w1_max1721x_add_device()
333 info->w1_dev = &sl->dev; in devm_w1_max1721x_add_device()
337 * unique ID (look like 26-0123456789AB) to "max1721x-0123456789AB\0" in devm_w1_max1721x_add_device()
341 snprintf(info->name, sizeof(info->name), in devm_w1_max1721x_add_device()
342 "max1721x-%012X", (unsigned int)sl->reg_num.id); in devm_w1_max1721x_add_device()
343 info->bat_desc.name = info->name; in devm_w1_max1721x_add_device()
349 info->bat_desc.no_thermal = true; in devm_w1_max1721x_add_device()
350 info->bat_desc.type = POWER_SUPPLY_TYPE_BATTERY; in devm_w1_max1721x_add_device()
351 info->bat_desc.properties = max1721x_battery_props; in devm_w1_max1721x_add_device()
352 info->bat_desc.num_properties = ARRAY_SIZE(max1721x_battery_props); in devm_w1_max1721x_add_device()
353 info->bat_desc.get_property = max1721x_battery_get_property; in devm_w1_max1721x_add_device()
357 info->regmap = devm_regmap_init_w1(info->w1_dev, in devm_w1_max1721x_add_device()
359 if (IS_ERR(info->regmap)) { in devm_w1_max1721x_add_device()
360 int err = PTR_ERR(info->regmap); in devm_w1_max1721x_add_device()
362 dev_err(info->w1_dev, "Failed to allocate register map: %d\n", in devm_w1_max1721x_add_device()
368 info->rsense = 0; in devm_w1_max1721x_add_device()
369 if (regmap_read(info->regmap, MAX1721X_REG_NRSENSE, &info->rsense)) { in devm_w1_max1721x_add_device()
370 dev_err(info->w1_dev, "Can't read RSense. Hardware error.\n"); in devm_w1_max1721x_add_device()
371 return -ENODEV; in devm_w1_max1721x_add_device()
374 if (!info->rsense) { in devm_w1_max1721x_add_device()
375 dev_warn(info->w1_dev, "RSense not calibrated, set 10 mOhms!\n"); in devm_w1_max1721x_add_device()
376 info->rsense = 1000; /* in regs in 10^-5 */ in devm_w1_max1721x_add_device()
378 dev_info(info->w1_dev, "RSense: %d mOhms.\n", info->rsense / 100); in devm_w1_max1721x_add_device()
381 MAX1721X_REG_MFG_NUMB, info->ManufacturerName)) { in devm_w1_max1721x_add_device()
382 dev_err(info->w1_dev, "Can't read manufacturer. Hardware error.\n"); in devm_w1_max1721x_add_device()
383 return -ENODEV; in devm_w1_max1721x_add_device()
386 if (!info->ManufacturerName[0]) in devm_w1_max1721x_add_device()
387 strscpy(info->ManufacturerName, DEF_MFG_NAME, in devm_w1_max1721x_add_device()
391 MAX1721X_REG_DEV_NUMB, info->DeviceName)) { in devm_w1_max1721x_add_device()
392 dev_err(info->w1_dev, "Can't read device. Hardware error.\n"); in devm_w1_max1721x_add_device()
393 return -ENODEV; in devm_w1_max1721x_add_device()
395 if (!info->DeviceName[0]) { in devm_w1_max1721x_add_device()
398 if (regmap_read(info->regmap, in devm_w1_max1721x_add_device()
400 dev_err(info->w1_dev, "Can't read device name reg.\n"); in devm_w1_max1721x_add_device()
401 return -ENODEV; in devm_w1_max1721x_add_device()
406 strscpy(info->DeviceName, DEF_DEV_NAME_MAX17211, in devm_w1_max1721x_add_device()
410 strscpy(info->DeviceName, DEF_DEV_NAME_MAX17215, in devm_w1_max1721x_add_device()
414 strscpy(info->DeviceName, DEF_DEV_NAME_UNKNOWN, in devm_w1_max1721x_add_device()
419 if (get_sn_string(info, info->SerialNumber)) { in devm_w1_max1721x_add_device()
420 dev_err(info->w1_dev, "Can't read serial. Hardware error.\n"); in devm_w1_max1721x_add_device()
421 return -ENODEV; in devm_w1_max1721x_add_device()
424 info->bat = devm_power_supply_register(&sl->dev, &info->bat_desc, in devm_w1_max1721x_add_device()
426 if (IS_ERR(info->bat)) { in devm_w1_max1721x_add_device()
427 dev_err(info->w1_dev, "failed to register battery\n"); in devm_w1_max1721x_add_device()
428 return PTR_ERR(info->bat); in devm_w1_max1721x_add_device()
448 MODULE_ALIAS("w1-family-" __stringify(W1_MAX1721X_FAMILY_ID));