Lines Matching +full:charging +full:- +full:current
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 #include <linux/devm-helpers.h>
32 #include <linux/power/bq24735-charger.h>
58 bool charging;
113 struct bq24735_platform *pdata = charger->pdata;
117 if (pdata->ext_control)
120 if (pdata->charge_current) {
121 value = pdata->charge_current & BQ24735_CHARGE_CURRENT_MASK;
123 ret = bq24735_write_word(charger->client,
126 dev_err(&charger->client->dev,
127 "Failed to write charger current : %d\n",
133 if (pdata->charge_voltage) {
134 value = pdata->charge_voltage & BQ24735_CHARGE_VOLTAGE_MASK;
136 ret = bq24735_write_word(charger->client,
139 dev_err(&charger->client->dev,
146 if (pdata->input_current) {
147 value = pdata->input_current & BQ24735_INPUT_CURRENT_MASK;
149 ret = bq24735_write_word(charger->client,
152 dev_err(&charger->client->dev,
153 "Failed to write input current : %d\n",
166 if (charger->pdata->ext_control)
173 return bq24735_update_word(charger->client, BQ24735_CHARGE_OPT,
179 if (charger->pdata->ext_control)
182 return bq24735_update_word(charger->client, BQ24735_CHARGE_OPT,
189 if (charger->status_gpio) {
190 return !gpiod_get_value_cansleep(charger->status_gpio);
194 ac = bq24735_read_word(charger->client, BQ24735_CHARGE_OPT);
196 dev_dbg(&charger->client->dev,
214 ret = bq24735_read_word(charger->client, BQ24735_CHARGE_OPT);
223 mutex_lock(&charger->lock);
225 if (charger->charging && bq24735_charger_is_present(charger))
230 mutex_unlock(&charger->lock);
232 power_supply_changed(charger->charger);
251 schedule_delayed_work(&charger->poll,
252 msecs_to_jiffies(charger->poll_interval));
263 val->intval = bq24735_charger_is_present(charger) ? 1 : 0;
268 val->intval = POWER_SUPPLY_STATUS_CHARGING;
271 val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
274 val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
279 return -EINVAL;
294 switch (val->intval) {
296 mutex_lock(&charger->lock);
297 charger->charging = true;
299 mutex_unlock(&charger->lock);
305 mutex_lock(&charger->lock);
306 charger->charging = false;
308 mutex_unlock(&charger->lock);
313 return -EINVAL;
318 return -EPERM;
327 struct device_node *np = client->dev.of_node;
331 pdata = devm_kzalloc(&client->dev, sizeof(*pdata), GFP_KERNEL);
333 dev_err(&client->dev,
338 ret = of_property_read_u32(np, "ti,charge-current", &val);
340 pdata->charge_current = val;
342 ret = of_property_read_u32(np, "ti,charge-voltage", &val);
344 pdata->charge_voltage = val;
346 ret = of_property_read_u32(np, "ti,input-current", &val);
348 pdata->input_current = val;
350 pdata->ext_control = of_property_read_bool(np, "ti,external-control");
363 charger = devm_kzalloc(&client->dev, sizeof(*charger), GFP_KERNEL);
365 return -ENOMEM;
367 mutex_init(&charger->lock);
368 charger->charging = true;
369 charger->pdata = client->dev.platform_data;
371 if (IS_ENABLED(CONFIG_OF) && !charger->pdata && client->dev.of_node)
372 charger->pdata = bq24735_parse_dt_data(client);
374 if (!charger->pdata) {
375 dev_err(&client->dev, "no platform data provided\n");
376 return -EINVAL;
379 name = (char *)charger->pdata->name;
381 name = devm_kasprintf(&client->dev, GFP_KERNEL,
383 dev_name(&client->dev));
385 dev_err(&client->dev, "Failed to alloc device name\n");
386 return -ENOMEM;
390 charger->client = client;
392 supply_desc = &charger->charger_desc;
394 supply_desc->name = name;
395 supply_desc->type = POWER_SUPPLY_TYPE_MAINS;
396 supply_desc->properties = bq24735_charger_properties;
397 supply_desc->num_properties = ARRAY_SIZE(bq24735_charger_properties);
398 supply_desc->get_property = bq24735_charger_get_property;
399 supply_desc->set_property = bq24735_charger_set_property;
400 supply_desc->property_is_writeable =
403 psy_cfg.supplied_to = charger->pdata->supplied_to;
404 psy_cfg.num_supplicants = charger->pdata->num_supplicants;
405 psy_cfg.fwnode = dev_fwnode(&client->dev);
410 charger->status_gpio = devm_gpiod_get_optional(&client->dev,
411 "ti,ac-detect",
413 if (IS_ERR(charger->status_gpio)) {
414 ret = PTR_ERR(charger->status_gpio);
415 dev_err(&client->dev, "Getting gpio failed: %d\n", ret);
422 dev_err(&client->dev, "Failed to read manufacturer id : %d\n",
426 dev_err(&client->dev,
428 return -ENODEV;
433 dev_err(&client->dev, "Failed to read device id : %d\n", ret);
436 dev_err(&client->dev,
438 return -ENODEV;
443 dev_err(&client->dev, "Failed to enable charging\n");
448 charger->charger = devm_power_supply_register(&client->dev, supply_desc,
450 if (IS_ERR(charger->charger)) {
451 ret = PTR_ERR(charger->charger);
452 dev_err(&client->dev, "Failed to register power supply: %d\n",
457 if (client->irq) {
458 ret = devm_request_threaded_irq(&client->dev, client->irq,
463 supply_desc->name,
464 charger->charger);
466 dev_err(&client->dev,
468 client->irq, ret);
472 ret = device_property_read_u32(&client->dev, "poll-interval",
473 &charger->poll_interval);
476 if (!charger->poll_interval)
479 ret = devm_delayed_work_autocancel(&client->dev, &charger->poll,
484 schedule_delayed_work(&charger->poll,
485 msecs_to_jiffies(charger->poll_interval));
492 { "bq24735-charger" },
505 .name = "bq24735-charger",
514 MODULE_DESCRIPTION("bq24735 battery charging driver");