blob: 55cb5ef15bb3f7fb6c442c785df98114c0097b80 [file] [log] [blame]
Anirudh Ghayale6b2f4a2018-01-02 19:35:40 +05301/* Copyright (c) 2018 The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#define pr_fmt(fmt) "QG-K: %s: " fmt, __func__
14
15#include <linux/alarmtimer.h>
16#include <linux/cdev.h>
17#include <linux/device.h>
18#include <linux/interrupt.h>
19#include <linux/ktime.h>
20#include <linux/module.h>
21#include <linux/of.h>
22#include <linux/of_irq.h>
23#include <linux/of_batterydata.h>
24#include <linux/platform_device.h>
25#include <linux/power_supply.h>
26#include <linux/regmap.h>
27#include <linux/uaccess.h>
28#include <linux/pmic-voter.h>
29#include <linux/qpnp/qpnp-adc.h>
30#include <uapi/linux/qg.h>
31#include "qg-sdam.h"
32#include "qg-core.h"
33#include "qg-reg.h"
34#include "qg-util.h"
35#include "qg-soc.h"
36#include "qg-battery-profile.h"
37#include "qg-defs.h"
38
39static int qg_debug_mask;
40module_param_named(
41 debug_mask, qg_debug_mask, int, 0600
42);
43
44static int qg_get_battery_temp(struct qpnp_qg *chip, int *batt_temp);
45
46static bool is_battery_present(struct qpnp_qg *chip)
47{
48 u8 reg = 0;
49 int rc;
50
51 rc = qg_read(chip, chip->qg_base + QG_STATUS1_REG, &reg, 1);
52 if (rc < 0)
53 pr_err("Failed to read battery presence, rc=%d\n", rc);
54
55 return !!(reg & BATTERY_PRESENT_BIT);
56}
57
58#define DEBUG_BATT_ID_LOW 6000
59#define DEBUG_BATT_ID_HIGH 8500
60static bool is_debug_batt_id(struct qpnp_qg *chip)
61{
62 if (is_between(DEBUG_BATT_ID_LOW, DEBUG_BATT_ID_HIGH,
63 chip->batt_id_ohm))
64 return true;
65
66 return false;
67}
68
69static int qg_read_ocv(struct qpnp_qg *chip, u32 *ocv_uv, u8 type)
70{
71 int rc, addr;
72 u64 temp = 0;
73
74 switch (type) {
75 case GOOD_OCV:
76 addr = QG_S3_GOOD_OCV_V_DATA0_REG;
77 break;
78 case PON_OCV:
79 addr = QG_S7_PON_OCV_V_DATA0_REG;
80 break;
81 default:
82 pr_err("Invalid OCV type %d\n", type);
83 return -EINVAL;
84 }
85
86 rc = qg_read(chip, chip->qg_base + addr, (u8 *)&temp, 2);
87 if (rc < 0) {
88 pr_err("Failed to read ocv, rc=%d\n", rc);
89 return rc;
90 }
91
92 *ocv_uv = V_RAW_TO_UV(temp);
93
94 pr_debug("%s: OCV=%duV\n",
95 type == GOOD_OCV ? "GOOD_OCV" : "PON_OCV", *ocv_uv);
96
97 return rc;
98}
99
100static int qg_update_fifo_length(struct qpnp_qg *chip, u8 length)
101{
102 int rc;
103
104 if (!length || length > 8) {
105 pr_err("Invalid FIFO length %d\n", length);
106 return -EINVAL;
107 }
108
109 rc = qg_masked_write(chip, chip->qg_base + QG_S2_NORMAL_MEAS_CTL2_REG,
110 FIFO_LENGTH_MASK, (length - 1) << FIFO_LENGTH_SHIFT);
111 if (rc < 0)
112 pr_err("Failed to write S2 FIFO length, rc=%d\n", rc);
113
114 return rc;
115}
116
117static int qg_master_hold(struct qpnp_qg *chip, bool hold)
118{
119 int rc;
120
121 /* clear the master */
122 rc = qg_masked_write(chip, chip->qg_base + QG_DATA_CTL1_REG,
123 MASTER_HOLD_OR_CLR_BIT, 0);
124 if (rc < 0)
125 return rc;
126
127 if (hold) {
128 /* 0 -> 1, hold the master */
129 rc = qg_masked_write(chip, chip->qg_base + QG_DATA_CTL1_REG,
130 MASTER_HOLD_OR_CLR_BIT,
131 MASTER_HOLD_OR_CLR_BIT);
132 if (rc < 0)
133 return rc;
134 }
135
136 qg_dbg(chip, QG_DEBUG_STATUS, "Master hold = %d\n", hold);
137
138 return rc;
139}
140
141static void qg_notify_charger(struct qpnp_qg *chip)
142{
143 union power_supply_propval prop = {0, };
144 int rc;
145
146 if (!chip->batt_psy)
147 return;
148
149 if (is_debug_batt_id(chip)) {
150 prop.intval = 1;
151 power_supply_set_property(chip->batt_psy,
152 POWER_SUPPLY_PROP_DEBUG_BATTERY, &prop);
153 return;
154 }
155
156 if (!chip->profile_loaded)
157 return;
158
159 prop.intval = chip->bp.float_volt_uv;
160 rc = power_supply_set_property(chip->batt_psy,
161 POWER_SUPPLY_PROP_VOLTAGE_MAX, &prop);
162 if (rc < 0) {
163 pr_err("Failed to set voltage_max property on batt_psy, rc=%d\n",
164 rc);
165 return;
166 }
167
168 prop.intval = chip->bp.fastchg_curr_ma * 1000;
169 rc = power_supply_set_property(chip->batt_psy,
170 POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX, &prop);
171 if (rc < 0) {
172 pr_err("Failed to set constant_charge_current_max property on batt_psy, rc=%d\n",
173 rc);
174 return;
175 }
176
177 pr_debug("Notified charger on float voltage and FCC\n");
178}
179
180static bool is_batt_available(struct qpnp_qg *chip)
181{
182 if (chip->batt_psy)
183 return true;
184
185 chip->batt_psy = power_supply_get_by_name("battery");
186 if (!chip->batt_psy)
187 return false;
188
189 /* batt_psy is initialized, set the fcc and fv */
190 qg_notify_charger(chip);
191
192 return true;
193}
194
195static int qg_update_sdam_params(struct qpnp_qg *chip)
196{
197 int rc, batt_temp = 0, i;
198 unsigned long rtc_sec = 0;
199
200 rc = get_rtc_time(&rtc_sec);
201 if (rc < 0)
202 pr_err("Failed to get RTC time, rc=%d\n", rc);
203 else
204 chip->sdam_data[SDAM_TIME_SEC] = rtc_sec;
205
206 rc = qg_get_battery_temp(chip, &batt_temp);
207 if (rc < 0)
208 pr_err("Failed to get battery-temp, rc = %d\n", rc);
209 else
210 chip->sdam_data[SDAM_TEMP] = (u32)batt_temp;
211
212 rc = qg_sdam_write_all(chip->sdam_data);
213 if (rc < 0)
214 pr_err("Failed to write to SDAM rc=%d\n", rc);
215
216 for (i = 0; i < SDAM_MAX; i++)
217 qg_dbg(chip, QG_DEBUG_STATUS, "SDAM write param %d value=%d\n",
218 i, chip->sdam_data[i]);
219
220 return rc;
221}
222
223static int qg_process_fifo(struct qpnp_qg *chip, u32 fifo_length)
224{
225 int rc = 0, i, j = 0, temp;
226 u8 v_fifo[MAX_FIFO_LENGTH * 2], i_fifo[MAX_FIFO_LENGTH * 2];
227 u32 sample_interval = 0, sample_count = 0, fifo_v = 0, fifo_i = 0;
228
229 if (!fifo_length) {
230 pr_debug("No FIFO data\n");
231 return 0;
232 }
233
234 qg_dbg(chip, QG_DEBUG_FIFO, "FIFO length=%d\n", fifo_length);
235
236 rc = get_sample_interval(chip, &sample_interval);
237 if (rc < 0) {
238 pr_err("Failed to get FIFO sample interval, rc=%d\n", rc);
239 return rc;
240 }
241
242 rc = get_sample_count(chip, &sample_count);
243 if (rc < 0) {
244 pr_err("Failed to get FIFO sample count, rc=%d\n", rc);
245 return rc;
246 }
247
248 for (i = 0; i < fifo_length * 2; i = i + 2, j++) {
249 rc = qg_read(chip, chip->qg_base + QG_V_FIFO0_DATA0_REG + i,
250 &v_fifo[i], 2);
251 if (rc < 0) {
252 pr_err("Failed to read QG_V_FIFO, rc=%d\n", rc);
253 return rc;
254 }
255 rc = qg_read(chip, chip->qg_base + QG_I_FIFO0_DATA0_REG + i,
256 &i_fifo[i], 2);
257 if (rc < 0) {
258 pr_err("Failed to read QG_I_FIFO, rc=%d\n", rc);
259 return rc;
260 }
261
262 fifo_v = v_fifo[i] | (v_fifo[i + 1] << 8);
263 fifo_i = i_fifo[i] | (i_fifo[i + 1] << 8);
264
265 temp = sign_extend32(fifo_i, 15);
266
267 chip->kdata.fifo[j].v = V_RAW_TO_UV(fifo_v);
268 chip->kdata.fifo[j].i = I_RAW_TO_UA(temp);
269 chip->kdata.fifo[j].interval = sample_interval;
270 chip->kdata.fifo[j].count = sample_count;
271
272 qg_dbg(chip, QG_DEBUG_FIFO, "FIFO %d raw_v=%d uV=%d raw_i=%d uA=%d interval=%d count=%d\n",
273 j, fifo_v,
274 chip->kdata.fifo[j].v,
275 fifo_i,
276 (int)chip->kdata.fifo[j].i,
277 chip->kdata.fifo[j].interval,
278 chip->kdata.fifo[j].count);
279 }
280
281 chip->kdata.fifo_length = fifo_length;
282
283 return rc;
284}
285
286static int qg_process_accumulator(struct qpnp_qg *chip)
287{
288 int rc, sample_interval = 0;
289 u8 count, index = chip->kdata.fifo_length;
290 u64 acc_v = 0, acc_i = 0;
291 s64 temp = 0;
292
293 rc = qg_read(chip, chip->qg_base + QG_ACCUM_CNT_RT_REG,
294 &count, 1);
295 if (rc < 0) {
296 pr_err("Failed to read ACC count, rc=%d\n", rc);
297 return rc;
298 }
299
300 if (!count) {
301 pr_debug("No ACCUMULATOR data!\n");
302 return 0;
303 }
304
305 rc = get_sample_interval(chip, &sample_interval);
306 if (rc < 0) {
307 pr_err("Failed to get ACC sample interval, rc=%d\n", rc);
308 return 0;
309 }
310
311 rc = qg_read(chip, chip->qg_base + QG_V_ACCUM_DATA0_RT_REG,
312 (u8 *)&acc_v, 3);
313 if (rc < 0) {
314 pr_err("Failed to read ACC RT V data, rc=%d\n", rc);
315 return rc;
316 }
317
318 rc = qg_read(chip, chip->qg_base + QG_I_ACCUM_DATA0_RT_REG,
319 (u8 *)&acc_i, 3);
320 if (rc < 0) {
321 pr_err("Failed to read ACC RT I data, rc=%d\n", rc);
322 return rc;
323 }
324
325 temp = sign_extend64(acc_i, 23);
326
327 chip->kdata.fifo[index].v = V_RAW_TO_UV(div_u64(acc_v, count));
328 chip->kdata.fifo[index].i = I_RAW_TO_UA(div_s64(temp, count));
329 chip->kdata.fifo[index].interval = sample_interval;
330 chip->kdata.fifo[index].count = count;
331 chip->kdata.fifo_length++;
332
333 qg_dbg(chip, QG_DEBUG_FIFO, "ACC v_avg=%duV i_avg=%duA interval=%d count=%d\n",
334 chip->kdata.fifo[index].v,
335 (int)chip->kdata.fifo[index].i,
336 chip->kdata.fifo[index].interval,
337 chip->kdata.fifo[index].count);
338
339 return rc;
340}
341
342static int qg_process_rt_fifo(struct qpnp_qg *chip)
343{
344 int rc;
345 u32 fifo_length = 0;
346
347 /* Get the real-time FIFO length */
348 rc = get_fifo_length(chip, &fifo_length, true);
349 if (rc < 0) {
350 pr_err("Failed to read RT FIFO length, rc=%d\n", rc);
351 return rc;
352 }
353
354 rc = qg_process_fifo(chip, fifo_length);
355 if (rc < 0) {
356 pr_err("Failed to process FIFO data, rc=%d\n", rc);
357 return rc;
358 }
359
360 rc = qg_process_accumulator(chip);
361 if (rc < 0) {
362 pr_err("Failed to process ACC data, rc=%d\n", rc);
363 return rc;
364 }
365
366 return rc;
367}
368
369#define VBAT_LOW_HYST_UV 50000 /* 50mV */
370static int qg_vbat_low_wa(struct qpnp_qg *chip)
371{
372 int rc, i;
373 u32 vbat_low_uv = chip->dt.vbatt_low_mv * 1000 + VBAT_LOW_HYST_UV;
374
375 if (!(chip->wa_flags & QG_VBAT_LOW_WA) || !chip->vbat_low)
376 return 0;
377
378 /*
379 * PMI632 1.0 does not generate a falling VBAT_LOW IRQ.
380 * To exit from VBAT_LOW config, check if any of the FIFO
381 * averages is > vbat_low threshold and reconfigure the
382 * FIFO length to normal.
383 */
384 for (i = 0; i < chip->kdata.fifo_length; i++) {
385 if (chip->kdata.fifo[i].v > vbat_low_uv) {
386 rc = qg_master_hold(chip, true);
387 if (rc < 0) {
388 pr_err("Failed to hold master, rc=%d\n", rc);
389 goto done;
390 }
391 rc = qg_update_fifo_length(chip,
392 chip->dt.s2_fifo_length);
393 if (rc < 0)
394 goto done;
395
396 rc = qg_master_hold(chip, false);
397 if (rc < 0) {
398 pr_err("Failed to release master, rc=%d\n", rc);
399 goto done;
400 }
401 /* FIFOs restarted */
402 chip->last_fifo_update_time = ktime_get();
403
404 chip->vbat_low = false;
405 pr_info("Exit VBAT_LOW vbat_avg=%duV vbat_low=%duV updated fifo_length=%d\n",
406 chip->kdata.fifo[i].v, vbat_low_uv,
407 chip->dt.s2_fifo_length);
408 break;
409 }
410 }
411
412 return 0;
413
414done:
415 qg_master_hold(chip, false);
416 return rc;
417}
418
419#define MIN_FIFO_FULL_TIME_MS 12000
420static int process_rt_fifo_data(struct qpnp_qg *chip,
421 bool vbat_low, bool update_smb)
422{
423 int rc = 0;
424 ktime_t now = ktime_get();
425 s64 time_delta;
426
427 /*
428 * Reject the FIFO read event if there are back-to-back requests
429 * This is done to gaurantee that there is always a minimum FIFO
430 * data to be processed, ignore this if vbat_low is set.
431 */
432 time_delta = ktime_ms_delta(now, chip->last_user_update_time);
433
434 qg_dbg(chip, QG_DEBUG_FIFO, "time_delta=%lld ms vbat_low=%d\n",
435 time_delta, vbat_low);
436
437 if (time_delta > MIN_FIFO_FULL_TIME_MS || vbat_low || update_smb) {
438 rc = qg_master_hold(chip, true);
439 if (rc < 0) {
440 pr_err("Failed to hold master, rc=%d\n", rc);
441 goto done;
442 }
443
444 rc = qg_process_rt_fifo(chip);
445 if (rc < 0) {
446 pr_err("Failed to process FIFO real-time, rc=%d\n", rc);
447 goto done;
448 }
449
450 if (vbat_low) {
451 /* change FIFO length */
452 rc = qg_update_fifo_length(chip,
453 chip->dt.s2_vbat_low_fifo_length);
454 if (rc < 0)
455 goto done;
456
457 qg_dbg(chip, QG_DEBUG_STATUS,
458 "FIFO length updated to %d vbat_low=%d\n",
459 chip->dt.s2_vbat_low_fifo_length,
460 vbat_low);
461 }
462
463 if (update_smb) {
464 rc = qg_masked_write(chip, chip->qg_base +
465 QG_MODE_CTL1_REG, PARALLEL_IBAT_SENSE_EN_BIT,
466 chip->parallel_enabled ?
467 PARALLEL_IBAT_SENSE_EN_BIT : 0);
468 if (rc < 0) {
469 pr_err("Failed to update SMB_EN, rc=%d\n", rc);
470 goto done;
471 }
472 qg_dbg(chip, QG_DEBUG_STATUS, "Parallel SENSE %d\n",
473 chip->parallel_enabled);
474 }
475
476 rc = qg_master_hold(chip, false);
477 if (rc < 0) {
478 pr_err("Failed to release master, rc=%d\n", rc);
479 goto done;
480 }
481 /* FIFOs restarted */
482 chip->last_fifo_update_time = ktime_get();
483
484 /* signal the read thread */
485 chip->data_ready = true;
486 wake_up_interruptible(&chip->qg_wait_q);
487 chip->last_user_update_time = now;
488
489 /* vote to stay awake until userspace reads data */
490 vote(chip->awake_votable, FIFO_RT_DONE_VOTER, true, 0);
491 } else {
492 qg_dbg(chip, QG_DEBUG_FIFO, "FIFO processing too early time_delta=%lld\n",
493 time_delta);
494 }
495done:
496 qg_master_hold(chip, false);
497 return rc;
498}
499
500static void process_udata_work(struct work_struct *work)
501{
502 struct qpnp_qg *chip = container_of(work,
503 struct qpnp_qg, udata_work);
504 int rc;
505
506 if (chip->udata.param[QG_SOC].valid) {
507 qg_dbg(chip, QG_DEBUG_SOC, "udata SOC=%d last SOC=%d\n",
508 chip->udata.param[QG_SOC].data, chip->catch_up_soc);
509
510 /* Only scale if SOC has changed */
511 if (chip->catch_up_soc != chip->udata.param[QG_SOC].data) {
512 chip->catch_up_soc = chip->udata.param[QG_SOC].data;
513 qg_scale_soc(chip, false);
514 }
515
516 /* update parameters to SDAM */
517 chip->sdam_data[SDAM_SOC] =
518 chip->udata.param[QG_SOC].data;
519 chip->sdam_data[SDAM_OCV_UV] =
520 chip->udata.param[QG_OCV_UV].data;
521 chip->sdam_data[SDAM_RBAT_MOHM] =
522 chip->udata.param[QG_RBAT_MOHM].data;
523 chip->sdam_data[SDAM_VALID] = 1;
524
525 rc = qg_update_sdam_params(chip);
526 if (rc < 0)
527 pr_err("Failed to update SDAM params, rc=%d\n", rc);
528 }
529
530 vote(chip->awake_votable, UDATA_READY_VOTER, false, 0);
531}
532
533static irqreturn_t qg_default_irq_handler(int irq, void *data)
534{
535 struct qpnp_qg *chip = data;
536
537 qg_dbg(chip, QG_DEBUG_IRQ, "IRQ triggered\n");
538
539 return IRQ_HANDLED;
540}
541
542#define MAX_FIFO_DELTA_PERCENT 10
543static irqreturn_t qg_fifo_update_done_handler(int irq, void *data)
544{
545 ktime_t now = ktime_get();
546 int rc, hw_delta_ms = 0, margin_ms = 0;
547 u32 fifo_length = 0;
548 s64 time_delta_ms = 0;
549 struct qpnp_qg *chip = data;
550
551 time_delta_ms = ktime_ms_delta(now, chip->last_fifo_update_time);
552 chip->last_fifo_update_time = now;
553
554 qg_dbg(chip, QG_DEBUG_IRQ, "IRQ triggered\n");
555 mutex_lock(&chip->data_lock);
556
557 rc = get_fifo_length(chip, &fifo_length, false);
558 if (rc < 0) {
559 pr_err("Failed to get FIFO length, rc=%d\n", rc);
560 goto done;
561 }
562
563 rc = qg_process_fifo(chip, fifo_length);
564 if (rc < 0) {
565 pr_err("Failed to process QG FIFO, rc=%d\n", rc);
566 goto done;
567 }
568
569 rc = qg_vbat_low_wa(chip);
570 if (rc < 0) {
571 pr_err("Failed to apply VBAT LOW WA, rc=%d\n", rc);
572 goto done;
573 }
574
575 rc = get_fifo_done_time(chip, false, &hw_delta_ms);
576 if (rc < 0)
577 hw_delta_ms = 0;
578 else
579 margin_ms = (hw_delta_ms * MAX_FIFO_DELTA_PERCENT) / 100;
580
581 if (abs(hw_delta_ms - time_delta_ms) < margin_ms) {
582 chip->kdata.param[QG_FIFO_TIME_DELTA].data = time_delta_ms;
583 chip->kdata.param[QG_FIFO_TIME_DELTA].valid = true;
584 qg_dbg(chip, QG_DEBUG_FIFO, "FIFO_done time_delta_ms=%lld\n",
585 time_delta_ms);
586 }
587
588 /* signal the read thread */
589 chip->data_ready = true;
590 wake_up_interruptible(&chip->qg_wait_q);
591
592 /* vote to stay awake until userspace reads data */
593 vote(chip->awake_votable, FIFO_DONE_VOTER, true, 0);
594
595done:
596 mutex_unlock(&chip->data_lock);
597 return IRQ_HANDLED;
598}
599
600static irqreturn_t qg_vbat_low_handler(int irq, void *data)
601{
602 int rc;
603 struct qpnp_qg *chip = data;
604 u8 status = 0;
605
606 qg_dbg(chip, QG_DEBUG_IRQ, "IRQ triggered\n");
607 mutex_lock(&chip->data_lock);
608
609 rc = qg_read(chip, chip->qg_base + QG_INT_RT_STS_REG, &status, 1);
610 if (rc < 0) {
611 pr_err("Failed to read RT status, rc=%d\n", rc);
612 goto done;
613 }
614 chip->vbat_low = !!(status & VBAT_LOW_INT_RT_STS_BIT);
615
616 rc = process_rt_fifo_data(chip, chip->vbat_low, false);
617 if (rc < 0)
618 pr_err("Failed to process RT FIFO data, rc=%d\n", rc);
619
620 qg_dbg(chip, QG_DEBUG_IRQ, "VBAT_LOW = %d\n", chip->vbat_low);
621done:
622 mutex_unlock(&chip->data_lock);
623 return IRQ_HANDLED;
624}
625
626static irqreturn_t qg_vbat_empty_handler(int irq, void *data)
627{
628 struct qpnp_qg *chip = data;
629 u32 ocv_uv = 0;
630
631 qg_dbg(chip, QG_DEBUG_IRQ, "IRQ triggered\n");
632 pr_warn("VBATT EMPTY SOC = 0\n");
633
634 chip->catch_up_soc = 0;
635 qg_scale_soc(chip, true);
636
637 qg_sdam_read(SDAM_OCV_UV, &ocv_uv);
638 chip->sdam_data[SDAM_SOC] = 0;
639 chip->sdam_data[SDAM_OCV_UV] = ocv_uv;
640 chip->sdam_data[SDAM_VALID] = 1;
641
642 qg_update_sdam_params(chip);
643
644 if (chip->qg_psy)
645 power_supply_changed(chip->qg_psy);
646
647 return IRQ_HANDLED;
648}
649
650static irqreturn_t qg_good_ocv_handler(int irq, void *data)
651{
652 int rc;
653 u32 ocv_uv;
654 struct qpnp_qg *chip = data;
655
656 qg_dbg(chip, QG_DEBUG_IRQ, "IRQ triggered\n");
657
658 mutex_lock(&chip->data_lock);
659
660 rc = qg_read_ocv(chip, &ocv_uv, GOOD_OCV);
661 if (rc < 0) {
662 pr_err("Failed to read good_ocv, rc=%d\n", rc);
663 goto done;
664 }
665
666 chip->kdata.param[QG_GOOD_OCV_UV].data = ocv_uv;
667 chip->kdata.param[QG_GOOD_OCV_UV].valid = true;
668
669 vote(chip->awake_votable, GOOD_OCV_VOTER, true, 0);
670
671 /* signal the readd thread */
672 chip->data_ready = true;
673 wake_up_interruptible(&chip->qg_wait_q);
674done:
675 mutex_unlock(&chip->data_lock);
676 return IRQ_HANDLED;
677}
678
679static struct qg_irq_info qg_irqs[] = {
680 [QG_BATT_MISSING_IRQ] = {
681 .name = "qg-batt-missing",
682 .handler = qg_default_irq_handler,
683 },
684 [QG_VBATT_LOW_IRQ] = {
685 .name = "qg-vbat-low",
686 .handler = qg_vbat_low_handler,
687 .wake = true,
688 },
689 [QG_VBATT_EMPTY_IRQ] = {
690 .name = "qg-vbat-empty",
691 .handler = qg_vbat_empty_handler,
692 .wake = true,
693 },
694 [QG_FIFO_UPDATE_DONE_IRQ] = {
695 .name = "qg-fifo-done",
696 .handler = qg_fifo_update_done_handler,
697 .wake = true,
698 },
699 [QG_GOOD_OCV_IRQ] = {
700 .name = "qg-good-ocv",
701 .handler = qg_good_ocv_handler,
702 .wake = true,
703 },
704 [QG_FSM_STAT_CHG_IRQ] = {
705 .name = "qg-fsm-state-chg",
706 .handler = qg_default_irq_handler,
707 },
708 [QG_EVENT_IRQ] = {
709 .name = "qg-event",
710 .handler = qg_default_irq_handler,
711 },
712};
713
714static int qg_awake_cb(struct votable *votable, void *data, int awake,
715 const char *client)
716{
717 struct qpnp_qg *chip = data;
718
719 if (awake)
720 pm_stay_awake(chip->dev);
721 else
722 pm_relax(chip->dev);
723
724 pr_debug("client: %s awake: %d\n", client, awake);
725 return 0;
726}
727
728static int qg_fifo_irq_disable_cb(struct votable *votable, void *data,
729 int disable, const char *client)
730{
731 if (disable) {
732 if (qg_irqs[QG_FIFO_UPDATE_DONE_IRQ].wake)
733 disable_irq_wake(
734 qg_irqs[QG_FIFO_UPDATE_DONE_IRQ].irq);
735 if (qg_irqs[QG_FIFO_UPDATE_DONE_IRQ].irq)
736 disable_irq_nosync(
737 qg_irqs[QG_FIFO_UPDATE_DONE_IRQ].irq);
738 } else {
739 if (qg_irqs[QG_FIFO_UPDATE_DONE_IRQ].irq)
740 enable_irq(qg_irqs[QG_FIFO_UPDATE_DONE_IRQ].irq);
741 if (qg_irqs[QG_FIFO_UPDATE_DONE_IRQ].wake)
742 enable_irq_wake(
743 qg_irqs[QG_FIFO_UPDATE_DONE_IRQ].irq);
744 }
745
746 return 0;
747}
748
749static int qg_vbatt_irq_disable_cb(struct votable *votable, void *data,
750 int disable, const char *client)
751{
752 if (disable) {
753 if (qg_irqs[QG_VBATT_LOW_IRQ].wake)
754 disable_irq_wake(qg_irqs[QG_VBATT_LOW_IRQ].irq);
755 if (qg_irqs[QG_VBATT_EMPTY_IRQ].wake)
756 disable_irq_wake(qg_irqs[QG_VBATT_EMPTY_IRQ].irq);
757 if (qg_irqs[QG_VBATT_LOW_IRQ].irq)
758 disable_irq_nosync(qg_irqs[QG_VBATT_LOW_IRQ].irq);
759 if (qg_irqs[QG_VBATT_EMPTY_IRQ].irq)
760 disable_irq_nosync(qg_irqs[QG_VBATT_EMPTY_IRQ].irq);
761 } else {
762 if (qg_irqs[QG_VBATT_LOW_IRQ].irq)
763 enable_irq(qg_irqs[QG_VBATT_LOW_IRQ].irq);
764 if (qg_irqs[QG_VBATT_EMPTY_IRQ].irq)
765 enable_irq(qg_irqs[QG_VBATT_EMPTY_IRQ].irq);
766 if (qg_irqs[QG_VBATT_LOW_IRQ].wake)
767 enable_irq_wake(qg_irqs[QG_VBATT_LOW_IRQ].irq);
768 if (qg_irqs[QG_VBATT_EMPTY_IRQ].wake)
769 enable_irq_wake(qg_irqs[QG_VBATT_EMPTY_IRQ].irq);
770 }
771
772 return 0;
773}
774
775static int qg_good_ocv_irq_disable_cb(struct votable *votable, void *data,
776 int disable, const char *client)
777{
778 if (disable) {
779 if (qg_irqs[QG_GOOD_OCV_IRQ].wake)
780 disable_irq_wake(qg_irqs[QG_GOOD_OCV_IRQ].irq);
781 if (qg_irqs[QG_GOOD_OCV_IRQ].irq)
782 disable_irq_nosync(qg_irqs[QG_GOOD_OCV_IRQ].irq);
783 } else {
784 if (qg_irqs[QG_GOOD_OCV_IRQ].irq)
785 enable_irq(qg_irqs[QG_GOOD_OCV_IRQ].irq);
786 if (qg_irqs[QG_GOOD_OCV_IRQ].wake)
787 enable_irq_wake(qg_irqs[QG_GOOD_OCV_IRQ].irq);
788 }
789
790 return 0;
791}
792
793#define DEFAULT_BATT_TYPE "Unknown Battery"
794#define MISSING_BATT_TYPE "Missing Battery"
795#define DEBUG_BATT_TYPE "Debug Board"
796static const char *qg_get_battery_type(struct qpnp_qg *chip)
797{
798 if (chip->battery_missing)
799 return MISSING_BATT_TYPE;
800
801 if (is_debug_batt_id(chip))
802 return DEBUG_BATT_TYPE;
803
804 if (chip->bp.batt_type_str) {
805 if (chip->profile_loaded)
806 return chip->bp.batt_type_str;
807 }
808
809 return DEFAULT_BATT_TYPE;
810}
811
812static int qg_get_battery_current(struct qpnp_qg *chip, int *ibat_ua)
813{
814 int rc = 0, last_ibat = 0;
815
816 if (chip->battery_missing) {
817 *ibat_ua = 0;
818 return 0;
819 }
820
821 rc = qg_read(chip, chip->qg_base + QG_LAST_ADC_I_DATA0_REG,
822 (u8 *)&last_ibat, 2);
823 if (rc < 0) {
824 pr_err("Failed to read LAST_ADV_I reg, rc=%d\n", rc);
825 return rc;
826 }
827
828 last_ibat = sign_extend32(last_ibat, 15);
829 *ibat_ua = I_RAW_TO_UA(last_ibat);
830
831 return rc;
832}
833
834static int qg_get_battery_voltage(struct qpnp_qg *chip, int *vbat_uv)
835{
836 int rc = 0;
837 u64 last_vbat = 0;
838
839 if (chip->battery_missing) {
840 *vbat_uv = 3700000;
841 return 0;
842 }
843
844 rc = qg_read(chip, chip->qg_base + QG_LAST_ADC_V_DATA0_REG,
845 (u8 *)&last_vbat, 2);
846 if (rc < 0) {
847 pr_err("Failed to read LAST_ADV_V reg, rc=%d\n", rc);
848 return rc;
849 }
850
851 *vbat_uv = V_RAW_TO_UV(last_vbat);
852
853 return rc;
854}
855
856#define DEBUG_BATT_SOC 67
857#define BATT_MISSING_SOC 50
858#define EMPTY_SOC 0
859static int qg_get_battery_capacity(struct qpnp_qg *chip, int *soc)
860{
861 if (is_debug_batt_id(chip)) {
862 *soc = DEBUG_BATT_SOC;
863 return 0;
864 }
865
866 if (chip->battery_missing || !chip->profile_loaded) {
867 *soc = BATT_MISSING_SOC;
868 return 0;
869 }
870
871 *soc = chip->msoc;
872
873 return 0;
874}
875
876static int qg_get_battery_temp(struct qpnp_qg *chip, int *temp)
877{
878 int rc = 0;
879 struct qpnp_vadc_result result;
880
881 if (chip->battery_missing) {
882 *temp = 250;
883 return 0;
884 }
885
886 rc = qpnp_vadc_read(chip->vadc_dev, VADC_BAT_THERM_PU2, &result);
887 if (rc) {
888 pr_err("Failed reading adc channel=%d, rc=%d\n",
889 VADC_BAT_THERM_PU2, rc);
890 return rc;
891 }
892 pr_debug("batt_temp = %lld meas = 0x%llx\n",
893 result.physical, result.measurement);
894
895 *temp = (int)result.physical;
896
897 return rc;
898}
899
900static int qg_psy_set_property(struct power_supply *psy,
901 enum power_supply_property psp,
902 const union power_supply_propval *pval)
903{
904 return 0;
905}
906
907static int qg_psy_get_property(struct power_supply *psy,
908 enum power_supply_property psp,
909 union power_supply_propval *pval)
910{
911 struct qpnp_qg *chip = power_supply_get_drvdata(psy);
912 int rc = 0;
913
914 pval->intval = 0;
915
916 switch (psp) {
917 case POWER_SUPPLY_PROP_CAPACITY:
918 rc = qg_get_battery_capacity(chip, &pval->intval);
919 break;
920 case POWER_SUPPLY_PROP_VOLTAGE_NOW:
921 rc = qg_get_battery_voltage(chip, &pval->intval);
922 break;
923 case POWER_SUPPLY_PROP_CURRENT_NOW:
924 rc = qg_get_battery_current(chip, &pval->intval);
925 break;
926 case POWER_SUPPLY_PROP_VOLTAGE_OCV:
927 rc = qg_sdam_read(SDAM_OCV_UV, &pval->intval);
928 break;
929 case POWER_SUPPLY_PROP_TEMP:
930 rc = qg_get_battery_temp(chip, &pval->intval);
931 break;
932 case POWER_SUPPLY_PROP_RESISTANCE_ID:
933 pval->intval = chip->batt_id_ohm;
934 break;
935 case POWER_SUPPLY_PROP_DEBUG_BATTERY:
936 pval->intval = is_debug_batt_id(chip);
937 break;
938 case POWER_SUPPLY_PROP_RESISTANCE:
939 rc = qg_sdam_read(SDAM_RBAT_MOHM, &pval->intval);
940 if (!rc)
941 pval->intval *= 1000;
942 break;
943 case POWER_SUPPLY_PROP_RESISTANCE_CAPACITIVE:
944 pval->intval = chip->dt.rbat_conn_mohm;
945 break;
946 case POWER_SUPPLY_PROP_BATTERY_TYPE:
947 pval->strval = qg_get_battery_type(chip);
948 break;
949 case POWER_SUPPLY_PROP_VOLTAGE_MIN:
950 pval->intval = chip->dt.vbatt_cutoff_mv * 1000;
951 break;
952 case POWER_SUPPLY_PROP_VOLTAGE_MAX:
953 pval->intval = chip->bp.float_volt_uv;
954 break;
955 case POWER_SUPPLY_PROP_BATT_FULL_CURRENT:
956 pval->intval = chip->dt.iterm_ma * 1000;
957 break;
958 case POWER_SUPPLY_PROP_BATT_PROFILE_VERSION:
959 pval->intval = chip->bp.qg_profile_version;
960 break;
961 default:
962 pr_debug("Unsupported property %d\n", psp);
963 break;
964 }
965
966 return rc;
967}
968
969static int qg_property_is_writeable(struct power_supply *psy,
970 enum power_supply_property psp)
971{
972 return 0;
973}
974
975static enum power_supply_property qg_psy_props[] = {
976 POWER_SUPPLY_PROP_CAPACITY,
977 POWER_SUPPLY_PROP_TEMP,
978 POWER_SUPPLY_PROP_VOLTAGE_NOW,
979 POWER_SUPPLY_PROP_VOLTAGE_OCV,
980 POWER_SUPPLY_PROP_CURRENT_NOW,
981 POWER_SUPPLY_PROP_RESISTANCE,
982 POWER_SUPPLY_PROP_RESISTANCE_ID,
983 POWER_SUPPLY_PROP_RESISTANCE_CAPACITIVE,
984 POWER_SUPPLY_PROP_DEBUG_BATTERY,
985 POWER_SUPPLY_PROP_BATTERY_TYPE,
986 POWER_SUPPLY_PROP_VOLTAGE_MIN,
987 POWER_SUPPLY_PROP_VOLTAGE_MAX,
988 POWER_SUPPLY_PROP_BATT_FULL_CURRENT,
989 POWER_SUPPLY_PROP_BATT_PROFILE_VERSION,
990};
991
992static const struct power_supply_desc qg_psy_desc = {
993 .name = "bms",
994 .type = POWER_SUPPLY_TYPE_BMS,
995 .properties = qg_psy_props,
996 .num_properties = ARRAY_SIZE(qg_psy_props),
997 .get_property = qg_psy_get_property,
998 .set_property = qg_psy_set_property,
999 .property_is_writeable = qg_property_is_writeable,
1000};
1001
1002static int qg_charge_full_update(struct qpnp_qg *chip)
1003{
1004
1005 vote(chip->good_ocv_irq_disable_votable,
1006 QG_INIT_STATE_IRQ_DISABLE, !chip->charge_done, 0);
1007
1008 /* TODO: add hold-soc-at-full logic */
1009 return 0;
1010}
1011
1012static int qg_parallel_status_update(struct qpnp_qg *chip)
1013{
1014 int rc;
1015 bool parallel_enabled = is_parallel_enabled(chip);
1016
1017 if (parallel_enabled == chip->parallel_enabled)
1018 return 0;
1019
1020 chip->parallel_enabled = parallel_enabled;
1021 qg_dbg(chip, QG_DEBUG_STATUS,
1022 "Parallel status changed Enabled=%d\n", parallel_enabled);
1023
1024 mutex_lock(&chip->data_lock);
1025
1026 rc = process_rt_fifo_data(chip, false, true);
1027 if (rc < 0)
1028 pr_err("Failed to process RT FIFO data, rc=%d\n", rc);
1029
1030 mutex_unlock(&chip->data_lock);
1031
1032 return 0;
1033}
1034
1035static int qg_usb_status_update(struct qpnp_qg *chip)
1036{
1037 bool usb_present = is_usb_present(chip);
1038
1039 if (chip->usb_present != usb_present) {
1040 qg_dbg(chip, QG_DEBUG_STATUS,
1041 "USB status changed Present=%d\n",
1042 usb_present);
1043 qg_scale_soc(chip, false);
1044 }
1045
1046 chip->usb_present = usb_present;
1047
1048 return 0;
1049}
1050
1051static void qg_status_change_work(struct work_struct *work)
1052{
1053 struct qpnp_qg *chip = container_of(work,
1054 struct qpnp_qg, qg_status_change_work);
1055 union power_supply_propval prop = {0, };
1056 int rc = 0;
1057
1058 if (!is_batt_available(chip)) {
1059 pr_debug("batt-psy not available\n");
1060 goto out;
1061 }
1062
1063 rc = power_supply_get_property(chip->batt_psy,
1064 POWER_SUPPLY_PROP_STATUS, &prop);
1065 if (rc < 0)
1066 pr_err("Failed to get charger status, rc=%d\n", rc);
1067 else
1068 chip->charge_status = prop.intval;
1069
1070 rc = power_supply_get_property(chip->batt_psy,
1071 POWER_SUPPLY_PROP_CHARGE_DONE, &prop);
1072 if (rc < 0)
1073 pr_err("Failed to get charge done status, rc=%d\n", rc);
1074 else
1075 chip->charge_done = prop.intval;
1076
1077 rc = qg_parallel_status_update(chip);
1078 if (rc < 0)
1079 pr_err("Failed to update parallel-status, rc=%d\n", rc);
1080
1081 rc = qg_usb_status_update(chip);
1082 if (rc < 0)
1083 pr_err("Failed to update usb status, rc=%d\n", rc);
1084
1085 rc = qg_charge_full_update(chip);
1086 if (rc < 0)
1087 pr_err("Failed in charge_full_update, rc=%d\n", rc);
1088out:
1089 pm_relax(chip->dev);
1090}
1091
1092static int qg_notifier_cb(struct notifier_block *nb,
1093 unsigned long event, void *data)
1094{
1095 struct power_supply *psy = data;
1096 struct qpnp_qg *chip = container_of(nb, struct qpnp_qg, nb);
1097
1098 if (event != PSY_EVENT_PROP_CHANGED)
1099 return NOTIFY_OK;
1100
1101 if (work_pending(&chip->qg_status_change_work))
1102 return NOTIFY_OK;
1103
1104 if ((strcmp(psy->desc->name, "battery") == 0)
1105 || (strcmp(psy->desc->name, "parallel") == 0)
1106 || (strcmp(psy->desc->name, "usb") == 0)) {
1107 /*
1108 * We cannot vote for awake votable here as that takes
1109 * a mutex lock and this is executed in an atomic context.
1110 */
1111 pm_stay_awake(chip->dev);
1112 schedule_work(&chip->qg_status_change_work);
1113 }
1114
1115 return NOTIFY_OK;
1116}
1117
1118static int qg_init_psy(struct qpnp_qg *chip)
1119{
1120 struct power_supply_config qg_psy_cfg;
1121 int rc;
1122
1123 qg_psy_cfg.drv_data = chip;
1124 qg_psy_cfg.of_node = NULL;
1125 qg_psy_cfg.supplied_to = NULL;
1126 qg_psy_cfg.num_supplicants = 0;
1127 chip->qg_psy = devm_power_supply_register(chip->dev,
1128 &qg_psy_desc, &qg_psy_cfg);
1129 if (IS_ERR_OR_NULL(chip->qg_psy)) {
1130 pr_err("Failed to register qg_psy rc = %ld\n",
1131 PTR_ERR(chip->qg_psy));
1132 return -ENODEV;
1133 }
1134
1135 chip->nb.notifier_call = qg_notifier_cb;
1136 rc = power_supply_reg_notifier(&chip->nb);
1137 if (rc < 0)
1138 pr_err("Failed register psy notifier rc = %d\n", rc);
1139
1140 return rc;
1141}
1142
1143static ssize_t qg_device_read(struct file *file, char __user *buf, size_t count,
1144 loff_t *ppos)
1145{
1146 int rc;
1147 struct qpnp_qg *chip = file->private_data;
1148 unsigned long data_size = sizeof(chip->kdata);
1149
1150 /* non-blocking access, return */
1151 if (!chip->data_ready && (file->f_flags & O_NONBLOCK))
1152 return -EAGAIN;
1153
1154 /* blocking access wait on data_ready */
1155 if (!(file->f_flags & O_NONBLOCK)) {
1156 rc = wait_event_interruptible(chip->qg_wait_q,
1157 chip->data_ready);
1158 if (rc < 0) {
1159 pr_debug("Failed wait! rc=%d\n", rc);
1160 return rc;
1161 }
1162 }
1163
1164 mutex_lock(&chip->data_lock);
1165
1166 if (!chip->data_ready) {
1167 pr_debug("No Data, false wakeup\n");
1168 rc = -EFAULT;
1169 goto fail_read;
1170 }
1171
1172 if (copy_to_user(buf, &chip->kdata, data_size)) {
1173 pr_err("Failed in copy_to_user\n");
1174 rc = -EFAULT;
1175 goto fail_read;
1176 }
1177 chip->data_ready = false;
1178
1179 /* clear data */
1180 memset(&chip->kdata, 0, sizeof(chip->kdata));
1181
1182 /* release all wake sources */
1183 vote(chip->awake_votable, GOOD_OCV_VOTER, false, 0);
1184 vote(chip->awake_votable, FIFO_DONE_VOTER, false, 0);
1185 vote(chip->awake_votable, FIFO_RT_DONE_VOTER, false, 0);
1186 vote(chip->awake_votable, SUSPEND_DATA_VOTER, false, 0);
1187
1188 qg_dbg(chip, QG_DEBUG_DEVICE,
1189 "QG device read complete Size=%ld\n", data_size);
1190
1191 mutex_unlock(&chip->data_lock);
1192
1193 return data_size;
1194
1195fail_read:
1196 mutex_unlock(&chip->data_lock);
1197 return rc;
1198}
1199
1200static ssize_t qg_device_write(struct file *file, const char __user *buf,
1201 size_t count, loff_t *ppos)
1202{
1203 int rc = -EINVAL;
1204 struct qpnp_qg *chip = file->private_data;
1205 unsigned long data_size = sizeof(chip->udata);
1206
1207 mutex_lock(&chip->data_lock);
1208 if (count == 0) {
1209 pr_err("No data!\n");
1210 goto fail;
1211 }
1212
1213 if (count != 0 && count < data_size) {
1214 pr_err("Invalid datasize %zu expected %zu\n", count, data_size);
1215 goto fail;
1216 }
1217
1218 if (copy_from_user(&chip->udata, buf, data_size)) {
1219 pr_err("Failed in copy_from_user\n");
1220 rc = -EFAULT;
1221 goto fail;
1222 }
1223
1224 rc = data_size;
1225 vote(chip->awake_votable, UDATA_READY_VOTER, true, 0);
1226 schedule_work(&chip->udata_work);
1227 qg_dbg(chip, QG_DEBUG_DEVICE, "QG write complete size=%d\n", rc);
1228fail:
1229 mutex_unlock(&chip->data_lock);
1230 return rc;
1231}
1232
1233static unsigned int qg_device_poll(struct file *file, poll_table *wait)
1234{
1235 struct qpnp_qg *chip = file->private_data;
1236 unsigned int mask;
1237
1238 poll_wait(file, &chip->qg_wait_q, wait);
1239
1240 if (chip->data_ready)
1241 mask = POLLIN | POLLRDNORM;
1242 else
1243 mask = POLLERR;
1244
1245 return mask;
1246}
1247
1248static int qg_device_open(struct inode *inode, struct file *file)
1249{
1250 struct qpnp_qg *chip = container_of(inode->i_cdev,
1251 struct qpnp_qg, qg_cdev);
1252
1253 file->private_data = chip;
1254 qg_dbg(chip, QG_DEBUG_DEVICE, "QG device opened!\n");
1255
1256 return 0;
1257}
1258
1259static const struct file_operations qg_fops = {
1260 .owner = THIS_MODULE,
1261 .open = qg_device_open,
1262 .read = qg_device_read,
1263 .write = qg_device_write,
1264 .poll = qg_device_poll,
1265};
1266
1267static int qg_register_device(struct qpnp_qg *chip)
1268{
1269 int rc;
1270
1271 rc = alloc_chrdev_region(&chip->dev_no, 0, 1, "qg");
1272 if (rc < 0) {
1273 pr_err("Failed to allocate chardev rc=%d\n", rc);
1274 return rc;
1275 }
1276
1277 cdev_init(&chip->qg_cdev, &qg_fops);
1278 rc = cdev_add(&chip->qg_cdev, chip->dev_no, 1);
1279 if (rc < 0) {
1280 pr_err("Failed to cdev_add rc=%d\n", rc);
1281 goto unregister_chrdev;
1282 }
1283
1284 chip->qg_class = class_create(THIS_MODULE, "qg");
1285 if (IS_ERR_OR_NULL(chip->qg_class)) {
1286 pr_err("Failed to create qg class\n");
1287 rc = -EINVAL;
1288 goto delete_cdev;
1289 }
1290 chip->qg_device = device_create(chip->qg_class, NULL, chip->dev_no,
1291 NULL, "qg");
1292 if (IS_ERR(chip->qg_device)) {
1293 pr_err("Failed to create qg_device\n");
1294 rc = -EINVAL;
1295 goto destroy_class;
1296 }
1297
1298 qg_dbg(chip, QG_DEBUG_DEVICE, "'/dev/qg' successfully created\n");
1299
1300 return 0;
1301
1302destroy_class:
1303 class_destroy(chip->qg_class);
1304delete_cdev:
1305 cdev_del(&chip->qg_cdev);
1306unregister_chrdev:
1307 unregister_chrdev_region(chip->dev_no, 1);
1308 return rc;
1309}
1310
1311#define BID_RPULL_OHM 100000
1312#define BID_VREF_MV 1875
1313static int get_batt_id_ohm(struct qpnp_qg *chip, u32 *batt_id_ohm)
1314{
1315 int rc, batt_id_mv;
1316 int64_t denom;
1317 struct qpnp_vadc_result result;
1318
1319 /* Read battery-id */
1320 rc = qpnp_vadc_read(chip->vadc_dev, VADC_BAT_ID_PU2, &result);
1321 if (rc) {
1322 pr_err("Failed to read BATT_ID over vadc, rc=%d\n", rc);
1323 return rc;
1324 }
1325
1326 batt_id_mv = result.physical / 1000;
1327 if (batt_id_mv == 0) {
1328 pr_debug("batt_id_mv = 0 from ADC\n");
1329 return 0;
1330 }
1331
1332 denom = div64_s64(BID_VREF_MV * 1000, batt_id_mv) - 1000;
1333 if (denom <= 0) {
1334 /* batt id connector might be open, return 0 kohms */
1335 return 0;
1336 }
1337
1338 *batt_id_ohm = div64_u64(BID_RPULL_OHM * 1000 + denom / 2, denom);
1339
1340 qg_dbg(chip, QG_DEBUG_PROFILE, "batt_id_mv=%d, batt_id_ohm=%d\n",
1341 batt_id_mv, *batt_id_ohm);
1342
1343 return 0;
1344}
1345
1346static int qg_load_battery_profile(struct qpnp_qg *chip)
1347{
1348 struct device_node *node = chip->dev->of_node;
1349 struct device_node *batt_node, *profile_node;
1350 int rc;
1351
1352 batt_node = of_find_node_by_name(node, "qcom,battery-data");
1353 if (!batt_node) {
1354 pr_err("Batterydata not available\n");
1355 return -ENXIO;
1356 }
1357
1358 profile_node = of_batterydata_get_best_profile(batt_node,
1359 chip->batt_id_ohm / 1000, NULL);
1360 if (IS_ERR(profile_node)) {
1361 rc = PTR_ERR(profile_node);
1362 pr_err("Failed to detect valid QG battery profile %d\n", rc);
1363 return rc;
1364 }
1365
1366 rc = of_property_read_string(profile_node, "qcom,battery-type",
1367 &chip->bp.batt_type_str);
1368 if (rc < 0) {
1369 pr_err("Failed to detect battery type rc:%d\n", rc);
1370 return rc;
1371 }
1372
1373 rc = qg_batterydata_init(profile_node);
1374 if (rc < 0) {
1375 pr_err("Failed to initialize battery-profile rc=%d\n", rc);
1376 return rc;
1377 }
1378
1379 rc = of_property_read_u32(profile_node, "qcom,max-voltage-uv",
1380 &chip->bp.float_volt_uv);
1381 if (rc < 0) {
1382 pr_err("Failed to read battery float-voltage rc:%d\n", rc);
1383 chip->bp.float_volt_uv = -EINVAL;
1384 }
1385
1386 rc = of_property_read_u32(profile_node, "qcom,fastchg-current-ma",
1387 &chip->bp.fastchg_curr_ma);
1388 if (rc < 0) {
1389 pr_err("Failed to read battery fastcharge current rc:%d\n", rc);
1390 chip->bp.fastchg_curr_ma = -EINVAL;
1391 }
1392
1393 rc = of_property_read_u32(profile_node, "qcom,qg-batt-profile-ver",
1394 &chip->bp.qg_profile_version);
1395 if (rc < 0) {
1396 pr_err("Failed to read QG profile version rc:%d\n", rc);
1397 chip->bp.qg_profile_version = -EINVAL;
1398 }
1399
1400 qg_dbg(chip, QG_DEBUG_PROFILE, "profile=%s FV=%duV FCC=%dma\n",
1401 chip->bp.batt_type_str, chip->bp.float_volt_uv,
1402 chip->bp.fastchg_curr_ma);
1403
1404 return 0;
1405}
1406
1407static int qg_setup_battery(struct qpnp_qg *chip)
1408{
1409 int rc;
1410
1411 if (!is_battery_present(chip)) {
1412 qg_dbg(chip, QG_DEBUG_PROFILE, "Battery Missing!\n");
1413 chip->battery_missing = true;
1414 chip->profile_loaded = false;
1415 } else {
1416 /* battery present */
1417 rc = get_batt_id_ohm(chip, &chip->batt_id_ohm);
1418 if (rc < 0) {
1419 pr_err("Failed to detect batt_id rc=%d\n", rc);
1420 chip->profile_loaded = false;
1421 } else {
1422 rc = qg_load_battery_profile(chip);
1423 if (rc < 0)
1424 pr_err("Failed to load battery-profile rc=%d\n",
1425 rc);
1426 else
1427 chip->profile_loaded = true;
1428 }
1429 }
1430
1431 qg_dbg(chip, QG_DEBUG_PROFILE, "battery_missing=%d batt_id_ohm=%d Ohm profile_loaded=%d profile=%s\n",
1432 chip->battery_missing, chip->batt_id_ohm,
1433 chip->profile_loaded, chip->bp.batt_type_str);
1434
1435 return 0;
1436}
1437
1438static int qg_determine_pon_soc(struct qpnp_qg *chip)
1439{
1440 u8 status;
1441 int rc, batt_temp = 0;
1442 bool use_pon_ocv = false;
1443 unsigned long rtc_sec = 0;
1444 u32 ocv_uv = 0, soc = 0, shutdown[SDAM_MAX] = {0};
1445
1446 if (!chip->profile_loaded) {
1447 qg_dbg(chip, QG_DEBUG_PON, "No Profile, skipping PON soc\n");
1448 return 0;
1449 }
1450
1451 rc = qg_get_battery_temp(chip, &batt_temp);
1452 if (rc) {
1453 pr_err("Failed to read BATT_TEMP at PON rc=%d\n", rc);
1454 return rc;
1455 }
1456
1457 rc = qg_read(chip, chip->qg_base + QG_STATUS2_REG,
1458 &status, 1);
1459 if (rc < 0) {
1460 pr_err("Failed to read status2 register rc=%d\n", rc);
1461 return rc;
1462 }
1463
1464 if (status & GOOD_OCV_BIT) {
1465 qg_dbg(chip, QG_DEBUG_PON, "Using GOOD_OCV @ PON\n");
1466 rc = qg_read_ocv(chip, &ocv_uv, GOOD_OCV);
1467 if (rc < 0) {
1468 pr_err("Failed to read good_ocv rc=%d\n", rc);
1469 use_pon_ocv = true;
1470 } else {
1471 rc = lookup_soc_ocv(&soc, ocv_uv, batt_temp, false);
1472 if (rc < 0) {
1473 pr_err("Failed to lookup SOC (GOOD_OCV) @ PON rc=%d\n",
1474 rc);
1475 use_pon_ocv = true;
1476 }
1477 }
1478 } else {
1479 rc = get_rtc_time(&rtc_sec);
1480 if (rc < 0) {
1481 pr_err("Failed to read RTC time rc=%d\n", rc);
1482 use_pon_ocv = true;
1483 goto done;
1484 }
1485
1486 rc = qg_sdam_read_all(shutdown);
1487 if (rc < 0) {
1488 pr_err("Failed to read shutdown params rc=%d\n", rc);
1489 use_pon_ocv = true;
1490 goto done;
1491 }
1492 qg_dbg(chip, QG_DEBUG_PON, "Shutdown: SOC=%d OCV=%duV time=%dsecs, time_now=%ldsecs\n",
1493 shutdown[SDAM_SOC],
1494 shutdown[SDAM_OCV_UV],
1495 shutdown[SDAM_TIME_SEC],
1496 rtc_sec);
1497 /*
1498 * Use the shutdown SOC if
1499 * 1. The device was powered off for < 180 seconds
1500 * 2. SDAM read is a success & SDAM data is valid
1501 */
1502 use_pon_ocv = true;
1503 if (!rc && shutdown[SDAM_VALID] &&
1504 ((rtc_sec - shutdown[SDAM_TIME_SEC]) < 180)) {
1505 use_pon_ocv = false;
1506 ocv_uv = shutdown[SDAM_OCV_UV];
1507 soc = shutdown[SDAM_SOC];
1508 qg_dbg(chip, QG_DEBUG_PON, "Using SHUTDOWN_SOC @ PON\n");
1509 }
1510 }
1511done:
1512 /*
1513 * Use PON OCV if
1514 * OCV_UV is not set or shutdown SOC is invalid.
1515 */
1516 if (use_pon_ocv || !ocv_uv || !rtc_sec) {
1517 qg_dbg(chip, QG_DEBUG_PON, "Using PON_OCV @ PON\n");
1518 rc = qg_read_ocv(chip, &ocv_uv, PON_OCV);
1519 if (rc < 0) {
1520 pr_err("Failed to read HW PON ocv rc=%d\n", rc);
1521 return rc;
1522 }
1523 rc = lookup_soc_ocv(&soc, ocv_uv, batt_temp, false);
1524 if (rc < 0) {
1525 pr_err("Failed to lookup SOC @ PON rc=%d\n", rc);
1526 soc = 50;
1527 }
1528 }
1529
1530 chip->pon_soc = chip->catch_up_soc = chip->msoc = soc;
1531 chip->kdata.param[QG_PON_OCV_UV].data = ocv_uv;
1532 chip->kdata.param[QG_PON_OCV_UV].valid = true;
1533
1534 /* write back to SDAM */
1535 chip->sdam_data[SDAM_SOC] = soc;
1536 chip->sdam_data[SDAM_OCV_UV] = ocv_uv;
1537 chip->sdam_data[SDAM_VALID] = 1;
1538
1539 rc = qg_write_monotonic_soc(chip, chip->msoc);
1540 if (rc < 0)
1541 pr_err("Failed to update MSOC register rc=%d\n", rc);
1542
1543 rc = qg_update_sdam_params(chip);
1544 if (rc < 0)
1545 pr_err("Failed to update sdam params rc=%d\n", rc);
1546
1547 pr_info("use_pon_ocv=%d good_ocv=%d ocv_uv=%duV temp=%d soc=%d\n",
1548 use_pon_ocv, !!(status & GOOD_OCV_BIT),
1549 ocv_uv, batt_temp, chip->msoc);
1550
1551 return 0;
1552}
1553
1554static int qg_set_wa_flags(struct qpnp_qg *chip)
1555{
1556 switch (chip->pmic_rev_id->pmic_subtype) {
1557 case PMI632_SUBTYPE:
1558 if (chip->pmic_rev_id->rev4 == PMI632_V1P0_REV4)
1559 chip->wa_flags |= QG_VBAT_LOW_WA;
1560 break;
1561 default:
1562 pr_err("Unsupported PMIC subtype %d\n",
1563 chip->pmic_rev_id->pmic_subtype);
1564 return -EINVAL;
1565 }
1566
1567 qg_dbg(chip, QG_DEBUG_PON, "wa_flags = %x\n", chip->wa_flags);
1568
1569 return 0;
1570}
1571
1572static int qg_hw_init(struct qpnp_qg *chip)
1573{
1574 int rc, temp;
1575 u8 reg;
1576
1577 rc = qg_set_wa_flags(chip);
1578 if (rc < 0) {
1579 pr_err("Failed to update PMIC type flags, rc=%d\n", rc);
1580 return rc;
1581 }
1582
1583 rc = qg_master_hold(chip, true);
1584 if (rc < 0) {
1585 pr_err("Failed to hold master, rc=%d\n", rc);
1586 goto done_fifo;
1587 }
1588
1589 rc = qg_process_rt_fifo(chip);
1590 if (rc < 0) {
1591 pr_err("Failed to process FIFO real-time, rc=%d\n", rc);
1592 goto done_fifo;
1593 }
1594
1595 /* update the changed S2 fifo DT parameters */
1596 if (chip->dt.s2_fifo_length > 0) {
1597 rc = qg_update_fifo_length(chip, chip->dt.s2_fifo_length);
1598 if (rc < 0)
1599 goto done_fifo;
1600 }
1601
1602 if (chip->dt.s2_acc_length > 0) {
1603 reg = ilog2(chip->dt.s2_acc_length) - 1;
1604 rc = qg_masked_write(chip, chip->qg_base +
1605 QG_S2_NORMAL_MEAS_CTL2_REG,
1606 NUM_OF_ACCUM_MASK, reg);
1607 if (rc < 0) {
1608 pr_err("Failed to write S2 ACC length, rc=%d\n", rc);
1609 goto done_fifo;
1610 }
1611 }
1612
1613 if (chip->dt.s2_acc_intvl_ms > 0) {
1614 reg = chip->dt.s2_acc_intvl_ms / 10;
1615 rc = qg_write(chip, chip->qg_base +
1616 QG_S2_NORMAL_MEAS_CTL3_REG,
1617 &reg, 1);
1618 if (rc < 0) {
1619 pr_err("Failed to write S2 ACC intrvl, rc=%d\n", rc);
1620 goto done_fifo;
1621 }
1622 }
1623
1624 /* signal the read thread */
1625 chip->data_ready = true;
1626 wake_up_interruptible(&chip->qg_wait_q);
1627
1628done_fifo:
1629 rc = qg_master_hold(chip, false);
1630 if (rc < 0) {
1631 pr_err("Failed to release master, rc=%d\n", rc);
1632 return rc;
1633 }
1634 chip->last_fifo_update_time = ktime_get();
1635
1636 if (chip->dt.ocv_timer_expiry_min != -EINVAL) {
1637 if (chip->dt.ocv_timer_expiry_min < 2)
1638 chip->dt.ocv_timer_expiry_min = 2;
1639 else if (chip->dt.ocv_timer_expiry_min > 30)
1640 chip->dt.ocv_timer_expiry_min = 30;
1641
1642 reg = (chip->dt.ocv_timer_expiry_min - 2) / 4;
1643 rc = qg_masked_write(chip,
1644 chip->qg_base + QG_S3_SLEEP_OCV_MEAS_CTL4_REG,
1645 SLEEP_IBAT_QUALIFIED_LENGTH_MASK, reg);
1646 if (rc < 0) {
1647 pr_err("Failed to write OCV timer, rc=%d\n", rc);
1648 return rc;
1649 }
1650 }
1651
1652 if (chip->dt.ocv_tol_threshold_uv != -EINVAL) {
1653 if (chip->dt.ocv_tol_threshold_uv < 0)
1654 chip->dt.ocv_tol_threshold_uv = 0;
1655 else if (chip->dt.ocv_tol_threshold_uv > 12262)
1656 chip->dt.ocv_tol_threshold_uv = 12262;
1657
1658 reg = chip->dt.ocv_tol_threshold_uv / 195;
1659 rc = qg_masked_write(chip,
1660 chip->qg_base + QG_S3_SLEEP_OCV_TREND_CTL2_REG,
1661 TREND_TOL_MASK, reg);
1662 if (rc < 0) {
1663 pr_err("Failed to write OCV tol-thresh, rc=%d\n", rc);
1664 return rc;
1665 }
1666 }
1667
1668 if (chip->dt.s3_entry_fifo_length != -EINVAL) {
1669 if (chip->dt.s3_entry_fifo_length < 1)
1670 chip->dt.s3_entry_fifo_length = 1;
1671 else if (chip->dt.s3_entry_fifo_length > 8)
1672 chip->dt.s3_entry_fifo_length = 8;
1673
1674 reg = chip->dt.s3_entry_fifo_length - 1;
1675 rc = qg_masked_write(chip,
1676 chip->qg_base + QG_S3_SLEEP_OCV_IBAT_CTL1_REG,
1677 SLEEP_IBAT_QUALIFIED_LENGTH_MASK, reg);
1678 if (rc < 0) {
1679 pr_err("Failed to write S3-entry fifo-length, rc=%d\n",
1680 rc);
1681 return rc;
1682 }
1683 }
1684
1685 if (chip->dt.s3_entry_ibat_ua != -EINVAL) {
1686 if (chip->dt.s3_entry_ibat_ua < 0)
1687 chip->dt.s3_entry_ibat_ua = 0;
1688 else if (chip->dt.s3_entry_ibat_ua > 155550)
1689 chip->dt.s3_entry_ibat_ua = 155550;
1690
1691 reg = chip->dt.s3_entry_ibat_ua / 610;
1692 rc = qg_write(chip, chip->qg_base +
1693 QG_S3_ENTRY_IBAT_THRESHOLD_REG,
1694 &reg, 1);
1695 if (rc < 0) {
1696 pr_err("Failed to write S3-entry ibat-uA, rc=%d\n", rc);
1697 return rc;
1698 }
1699 }
1700
1701 if (chip->dt.s3_exit_ibat_ua != -EINVAL) {
1702 if (chip->dt.s3_exit_ibat_ua < 0)
1703 chip->dt.s3_exit_ibat_ua = 0;
1704 else if (chip->dt.s3_exit_ibat_ua > 155550)
1705 chip->dt.s3_exit_ibat_ua = 155550;
1706
1707 rc = qg_read(chip, chip->qg_base +
1708 QG_S3_ENTRY_IBAT_THRESHOLD_REG,
1709 &reg, 1);
1710 if (rc < 0) {
1711 pr_err("Failed to read S3-entry ibat-uA, rc=%d", rc);
1712 return rc;
1713 }
1714 temp = reg * 610;
1715 if (chip->dt.s3_exit_ibat_ua < temp)
1716 chip->dt.s3_exit_ibat_ua = temp;
1717 else
1718 chip->dt.s3_exit_ibat_ua -= temp;
1719
1720 reg = chip->dt.s3_exit_ibat_ua / 610;
1721 rc = qg_write(chip,
1722 chip->qg_base + QG_S3_EXIT_IBAT_THRESHOLD_REG,
1723 &reg, 1);
1724 if (rc < 0) {
1725 pr_err("Failed to write S3-entry ibat-uA, rc=%d\n", rc);
1726 return rc;
1727 }
1728 }
1729
1730 /* vbat low */
1731 if (chip->dt.vbatt_low_mv < 0)
1732 chip->dt.vbatt_low_mv = 0;
1733 else if (chip->dt.vbatt_low_mv > 12750)
1734 chip->dt.vbatt_low_mv = 12750;
1735
1736 reg = chip->dt.vbatt_low_mv / 50;
1737 rc = qg_write(chip, chip->qg_base + QG_VBAT_LOW_THRESHOLD_REG,
1738 &reg, 1);
1739 if (rc < 0) {
1740 pr_err("Failed to write vbat-low, rc=%d\n", rc);
1741 return rc;
1742 }
1743
1744 /* vbat empty */
1745 if (chip->dt.vbatt_empty_mv < 0)
1746 chip->dt.vbatt_empty_mv = 0;
1747 else if (chip->dt.vbatt_empty_mv > 12750)
1748 chip->dt.vbatt_empty_mv = 12750;
1749
1750 reg = chip->dt.vbatt_empty_mv / 50;
1751 rc = qg_write(chip, chip->qg_base + QG_VBAT_EMPTY_THRESHOLD_REG,
1752 &reg, 1);
1753 if (rc < 0) {
1754 pr_err("Failed to write vbat-empty, rc=%d\n", rc);
1755 return rc;
1756 }
1757
1758 return 0;
1759}
1760
1761static int qg_post_init(struct qpnp_qg *chip)
1762{
1763 /* disable all IRQs if profile is not loaded */
1764 if (!chip->profile_loaded) {
1765 vote(chip->vbatt_irq_disable_votable,
1766 PROFILE_IRQ_DISABLE, true, 0);
1767 vote(chip->fifo_irq_disable_votable,
1768 PROFILE_IRQ_DISABLE, true, 0);
1769 vote(chip->good_ocv_irq_disable_votable,
1770 PROFILE_IRQ_DISABLE, true, 0);
1771 } else {
1772 /* disable GOOD_OCV IRQ at init */
1773 vote(chip->good_ocv_irq_disable_votable,
1774 QG_INIT_STATE_IRQ_DISABLE, true, 0);
1775 }
1776
1777 return 0;
1778}
1779
1780static int qg_get_irq_index_byname(const char *irq_name)
1781{
1782 int i;
1783
1784 for (i = 0; i < ARRAY_SIZE(qg_irqs); i++) {
1785 if (strcmp(qg_irqs[i].name, irq_name) == 0)
1786 return i;
1787 }
1788
1789 return -ENOENT;
1790}
1791
1792static int qg_request_interrupt(struct qpnp_qg *chip,
1793 struct device_node *node, const char *irq_name)
1794{
1795 int rc, irq, irq_index;
1796
1797 irq = of_irq_get_byname(node, irq_name);
1798 if (irq < 0) {
1799 pr_err("Failed to get irq %s byname\n", irq_name);
1800 return irq;
1801 }
1802
1803 irq_index = qg_get_irq_index_byname(irq_name);
1804 if (irq_index < 0) {
1805 pr_err("%s is not a defined irq\n", irq_name);
1806 return irq_index;
1807 }
1808
1809 if (!qg_irqs[irq_index].handler)
1810 return 0;
1811
1812 rc = devm_request_threaded_irq(chip->dev, irq, NULL,
1813 qg_irqs[irq_index].handler,
1814 IRQF_ONESHOT, irq_name, chip);
1815 if (rc < 0) {
1816 pr_err("Failed to request irq %d\n", irq);
1817 return rc;
1818 }
1819
1820 qg_irqs[irq_index].irq = irq;
1821 if (qg_irqs[irq_index].wake)
1822 enable_irq_wake(irq);
1823
1824 qg_dbg(chip, QG_DEBUG_PON, "IRQ %s registered wakeable=%d\n",
1825 qg_irqs[irq_index].name, qg_irqs[irq_index].wake);
1826
1827 return 0;
1828}
1829
1830static int qg_request_irqs(struct qpnp_qg *chip)
1831{
1832 struct device_node *node = chip->dev->of_node;
1833 struct device_node *child;
1834 const char *name;
1835 struct property *prop;
1836 int rc = 0;
1837
1838 for_each_available_child_of_node(node, child) {
1839 of_property_for_each_string(child, "interrupt-names",
1840 prop, name) {
1841 rc = qg_request_interrupt(chip, child, name);
1842 if (rc < 0)
1843 return rc;
1844 }
1845 }
1846
1847
1848 return 0;
1849}
1850
1851#define DEFAULT_VBATT_EMPTY_MV 3200
1852#define DEFAULT_VBATT_CUTOFF_MV 3400
1853#define DEFAULT_VBATT_LOW_MV 3500
1854#define DEFAULT_ITERM_MA 100
1855#define DEFAULT_S2_FIFO_LENGTH 5
1856#define DEFAULT_S2_VBAT_LOW_LENGTH 2
1857#define DEFAULT_S2_ACC_LENGTH 128
1858#define DEFAULT_S2_ACC_INTVL_MS 100
1859#define DEFAULT_DELTA_SOC 1
1860static int qg_parse_dt(struct qpnp_qg *chip)
1861{
1862 int rc = 0;
1863 struct device_node *revid_node, *child, *node = chip->dev->of_node;
1864 u32 base, temp;
1865 u8 type;
1866
1867 if (!node) {
1868 pr_err("Failed to find device-tree node\n");
1869 return -ENXIO;
1870 }
1871
1872 revid_node = of_parse_phandle(node, "qcom,pmic-revid", 0);
1873 if (!revid_node) {
1874 pr_err("Missing qcom,pmic-revid property - driver failed\n");
1875 return -EINVAL;
1876 }
1877
1878 chip->pmic_rev_id = get_revid_data(revid_node);
1879 of_node_put(revid_node);
1880 if (IS_ERR_OR_NULL(chip->pmic_rev_id)) {
1881 pr_err("Failed to get pmic_revid, rc=%ld\n",
1882 PTR_ERR(chip->pmic_rev_id));
1883 /*
1884 * the revid peripheral must be registered, any failure
1885 * here only indicates that the rev-id module has not
1886 * probed yet.
1887 */
1888 return -EPROBE_DEFER;
1889 }
1890
1891 qg_dbg(chip, QG_DEBUG_PON, "PMIC subtype %d Digital major %d\n",
1892 chip->pmic_rev_id->pmic_subtype, chip->pmic_rev_id->rev4);
1893
1894 for_each_available_child_of_node(node, child) {
1895 rc = of_property_read_u32(child, "reg", &base);
1896 if (rc < 0) {
1897 pr_err("Failed to read base address, rc=%d\n", rc);
1898 return rc;
1899 }
1900
1901 rc = qg_read(chip, base + PERPH_TYPE_REG, &type, 1);
1902 if (rc < 0) {
1903 pr_err("Failed to read type, rc=%d\n", rc);
1904 return rc;
1905 }
1906
1907 switch (type) {
1908 case QG_TYPE:
1909 chip->qg_base = base;
1910 break;
1911 default:
1912 break;
1913 }
1914 }
1915
1916 if (!chip->qg_base) {
1917 pr_err("QG device node missing\n");
1918 return -EINVAL;
1919 }
1920
1921 /* S2 state params */
1922 rc = of_property_read_u32(node, "qcom,s2-fifo-length", &temp);
1923 if (rc < 0)
1924 chip->dt.s2_fifo_length = DEFAULT_S2_FIFO_LENGTH;
1925 else
1926 chip->dt.s2_fifo_length = temp;
1927
1928 rc = of_property_read_u32(node, "qcom,s2-vbat-low-fifo-length", &temp);
1929 if (rc < 0)
1930 chip->dt.s2_vbat_low_fifo_length = DEFAULT_S2_VBAT_LOW_LENGTH;
1931 else
1932 chip->dt.s2_vbat_low_fifo_length = temp;
1933
1934 rc = of_property_read_u32(node, "qcom,s2-acc-length", &temp);
1935 if (rc < 0)
1936 chip->dt.s2_acc_length = DEFAULT_S2_ACC_LENGTH;
1937 else
1938 chip->dt.s2_acc_length = temp;
1939
1940 rc = of_property_read_u32(node, "qcom,s2-acc-interval-ms", &temp);
1941 if (rc < 0)
1942 chip->dt.s2_acc_intvl_ms = DEFAULT_S2_ACC_INTVL_MS;
1943 else
1944 chip->dt.s2_acc_intvl_ms = temp;
1945
1946 qg_dbg(chip, QG_DEBUG_PON, "DT: S2 FIFO length=%d low_vbat_length=%d acc_length=%d acc_interval=%d\n",
1947 chip->dt.s2_fifo_length, chip->dt.s2_vbat_low_fifo_length,
1948 chip->dt.s2_acc_length, chip->dt.s2_acc_intvl_ms);
1949
1950 /* OCV params */
1951 rc = of_property_read_u32(node, "qcom,ocv-timer-expiry-min", &temp);
1952 if (rc < 0)
1953 chip->dt.ocv_timer_expiry_min = -EINVAL;
1954 else
1955 chip->dt.ocv_timer_expiry_min = temp;
1956
1957 rc = of_property_read_u32(node, "qcom,ocv-tol-threshold-uv", &temp);
1958 if (rc < 0)
1959 chip->dt.ocv_tol_threshold_uv = -EINVAL;
1960 else
1961 chip->dt.ocv_tol_threshold_uv = temp;
1962
1963 qg_dbg(chip, QG_DEBUG_PON, "DT: OCV timer_expiry =%dmin ocv_tol_threshold=%duV\n",
1964 chip->dt.ocv_timer_expiry_min, chip->dt.ocv_tol_threshold_uv);
1965
1966 /* S3 sleep configuration */
1967 rc = of_property_read_u32(node, "qcom,s3-entry-fifo-length", &temp);
1968 if (rc < 0)
1969 chip->dt.s3_entry_fifo_length = -EINVAL;
1970 else
1971 chip->dt.s3_entry_fifo_length = temp;
1972
1973 rc = of_property_read_u32(node, "qcom,s3-entry-ibat-ua", &temp);
1974 if (rc < 0)
1975 chip->dt.s3_entry_ibat_ua = -EINVAL;
1976 else
1977 chip->dt.s3_entry_ibat_ua = temp;
1978
1979 rc = of_property_read_u32(node, "qcom,s3-entry-ibat-ua", &temp);
1980 if (rc < 0)
1981 chip->dt.s3_exit_ibat_ua = -EINVAL;
1982 else
1983 chip->dt.s3_exit_ibat_ua = temp;
1984
1985 /* VBAT thresholds */
1986 rc = of_property_read_u32(node, "qcom,vbatt-empty-mv", &temp);
1987 if (rc < 0)
1988 chip->dt.vbatt_empty_mv = DEFAULT_VBATT_EMPTY_MV;
1989 else
1990 chip->dt.vbatt_empty_mv = temp;
1991
1992 rc = of_property_read_u32(node, "qcom,vbatt-low-mv", &temp);
1993 if (rc < 0)
1994 chip->dt.vbatt_low_mv = DEFAULT_VBATT_LOW_MV;
1995 else
1996 chip->dt.vbatt_low_mv = temp;
1997
1998 rc = of_property_read_u32(node, "qcom,vbatt-cutoff-mv", &temp);
1999 if (rc < 0)
2000 chip->dt.vbatt_cutoff_mv = DEFAULT_VBATT_CUTOFF_MV;
2001 else
2002 chip->dt.vbatt_cutoff_mv = temp;
2003
2004 /* IBAT thresholds */
2005 rc = of_property_read_u32(node, "qcom,qg-iterm-ma", &temp);
2006 if (rc < 0)
2007 chip->dt.iterm_ma = DEFAULT_ITERM_MA;
2008 else
2009 chip->dt.iterm_ma = temp;
2010
2011 rc = of_property_read_u32(node, "qcom,delta-soc", &temp);
2012 if (rc < 0)
2013 chip->dt.delta_soc = DEFAULT_DELTA_SOC;
2014 else
2015 chip->dt.delta_soc = temp;
2016
2017 rc = of_property_read_u32(node, "qcom,rbat-conn-mohm", &temp);
2018 if (rc < 0)
2019 chip->dt.rbat_conn_mohm = 0;
2020 else
2021 chip->dt.rbat_conn_mohm = temp;
2022
2023 qg_dbg(chip, QG_DEBUG_PON, "DT: vbatt_empty_mv=%dmV vbatt_low_mv=%dmV delta_soc=%d\n",
2024 chip->dt.vbatt_empty_mv, chip->dt.vbatt_low_mv,
2025 chip->dt.delta_soc);
2026
2027 return 0;
2028}
2029
2030static int process_suspend(struct qpnp_qg *chip)
2031{
2032 int rc;
2033 u32 fifo_rt_length = 0, sleep_fifo_length = 0;
2034
2035 /* ignore any suspend processing if we are charging */
2036 if (chip->charge_status == POWER_SUPPLY_STATUS_CHARGING) {
2037 qg_dbg(chip, QG_DEBUG_PM, "Charging @ suspend - ignore processing\n");
2038 return 0;
2039 }
2040
2041 rc = get_fifo_length(chip, &fifo_rt_length, true);
2042 if (rc < 0) {
2043 pr_err("Failed to read FIFO RT count, rc=%d\n", rc);
2044 return rc;
2045 }
2046
2047 rc = qg_read(chip, chip->qg_base + QG_S3_SLEEP_OCV_IBAT_CTL1_REG,
2048 (u8 *)&sleep_fifo_length, 1);
2049 if (rc < 0) {
2050 pr_err("Failed to read sleep FIFO count, rc=%d\n", rc);
2051 return rc;
2052 }
2053 sleep_fifo_length &= SLEEP_IBAT_QUALIFIED_LENGTH_MASK;
2054 /*
2055 * If the real-time FIFO count is greater than
2056 * the the #fifo to enter sleep, save the FIFO data
2057 * and reset the fifo count.
2058 */
2059 if (fifo_rt_length >= (chip->dt.s2_fifo_length - sleep_fifo_length)) {
2060 rc = qg_master_hold(chip, true);
2061 if (rc < 0) {
2062 pr_err("Failed to hold master, rc=%d\n", rc);
2063 return rc;
2064 }
2065
2066 rc = qg_process_rt_fifo(chip);
2067 if (rc < 0) {
2068 pr_err("Failed to process FIFO real-time, rc=%d\n", rc);
2069 qg_master_hold(chip, false);
2070 return rc;
2071 }
2072
2073 rc = qg_master_hold(chip, false);
2074 if (rc < 0) {
2075 pr_err("Failed to release master, rc=%d\n", rc);
2076 return rc;
2077 }
2078 /* FIFOs restarted */
2079 chip->last_fifo_update_time = ktime_get();
2080
2081 chip->suspend_data = true;
2082 }
2083
2084 qg_dbg(chip, QG_DEBUG_PM, "FIFO rt_length=%d sleep_fifo_length=%d default_s2_count=%d suspend_data=%d\n",
2085 fifo_rt_length, sleep_fifo_length,
2086 chip->dt.s2_fifo_length, chip->suspend_data);
2087
2088 return rc;
2089}
2090
2091static int process_resume(struct qpnp_qg *chip)
2092{
2093 int rc, batt_temp = 0;
2094 u8 status2 = 0, rt_status = 0;
2095 u32 ocv_uv = 0, soc = 0;
2096
2097 rc = qg_read(chip, chip->qg_base + QG_STATUS2_REG, &status2, 1);
2098 if (rc < 0) {
2099 pr_err("Failed to read status2 register, rc=%d\n", rc);
2100 return rc;
2101 }
2102
2103 if (status2 & GOOD_OCV_BIT) {
2104 rc = qg_read_ocv(chip, &ocv_uv, GOOD_OCV);
2105 if (rc < 0) {
2106 pr_err("Failed to read good_ocv, rc=%d\n", rc);
2107 return rc;
2108 }
2109 rc = qg_get_battery_temp(chip, &batt_temp);
2110 if (rc < 0) {
2111 pr_err("Failed to read BATT_TEMP, rc=%d\n", rc);
2112 return rc;
2113 }
2114
2115 chip->kdata.param[QG_GOOD_OCV_UV].data = ocv_uv;
2116 chip->kdata.param[QG_GOOD_OCV_UV].valid = true;
2117 chip->suspend_data = false;
2118 rc = lookup_soc_ocv(&soc, ocv_uv, batt_temp, false);
2119 if (rc < 0) {
2120 pr_err("Failed to lookup OCV, rc=%d\n", rc);
2121 return rc;
2122 }
2123 chip->catch_up_soc = soc;
2124 /* update the SOC immediately */
2125 qg_scale_soc(chip, true);
2126
2127 qg_dbg(chip, QG_DEBUG_PM, "GOOD OCV @ resume good_ocv=%d uV soc=%d\n",
2128 ocv_uv, soc);
2129 }
2130 /*
2131 * If the wakeup was not because of FIFO_DONE
2132 * send the pending data collected during suspend.
2133 */
2134 rc = qg_read(chip, chip->qg_base + QG_INT_LATCHED_STS_REG,
2135 &rt_status, 1);
2136 if (rc < 0) {
2137 pr_err("Failed to read latched status register, rc=%d\n", rc);
2138 return rc;
2139 }
2140 rt_status &= FIFO_UPDATE_DONE_INT_LAT_STS_BIT;
2141
2142 if (!rt_status && chip->suspend_data) {
2143 vote(chip->awake_votable, SUSPEND_DATA_VOTER, true, 0);
2144 /* signal the read thread */
2145 chip->data_ready = true;
2146 wake_up_interruptible(&chip->qg_wait_q);
2147 }
2148
2149 qg_dbg(chip, QG_DEBUG_PM, "fifo_done rt_status=%d suspend_data=%d data_ready=%d\n",
2150 !!rt_status, chip->suspend_data, chip->data_ready);
2151
2152 chip->suspend_data = false;
2153
2154 return rc;
2155}
2156
2157static int qpnp_qg_suspend_noirq(struct device *dev)
2158{
2159 int rc;
2160 struct qpnp_qg *chip = dev_get_drvdata(dev);
2161
2162 mutex_lock(&chip->data_lock);
2163
2164 rc = process_suspend(chip);
2165 if (rc < 0)
2166 pr_err("Failed to process QG suspend, rc=%d\n", rc);
2167
2168 mutex_unlock(&chip->data_lock);
2169
2170 return 0;
2171}
2172
2173static int qpnp_qg_resume_noirq(struct device *dev)
2174{
2175 int rc;
2176 struct qpnp_qg *chip = dev_get_drvdata(dev);
2177
2178 mutex_lock(&chip->data_lock);
2179
2180 rc = process_resume(chip);
2181 if (rc < 0)
2182 pr_err("Failed to process QG resume, rc=%d\n", rc);
2183
2184 mutex_unlock(&chip->data_lock);
2185
2186 return 0;
2187}
2188
2189static const struct dev_pm_ops qpnp_qg_pm_ops = {
2190 .suspend_noirq = qpnp_qg_suspend_noirq,
2191 .resume_noirq = qpnp_qg_resume_noirq,
2192};
2193
2194static int qpnp_qg_probe(struct platform_device *pdev)
2195{
2196 int rc = 0, soc = 0;
2197 struct qpnp_qg *chip;
2198
2199 chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL);
2200 if (!chip)
2201 return -ENOMEM;
2202
2203 chip->regmap = dev_get_regmap(pdev->dev.parent, NULL);
2204 if (!chip->regmap) {
2205 pr_err("Parent regmap is unavailable\n");
2206 return -ENXIO;
2207 }
2208
2209 /* VADC for BID */
2210 chip->vadc_dev = qpnp_get_vadc(&pdev->dev, "qg");
2211 if (IS_ERR(chip->vadc_dev)) {
2212 rc = PTR_ERR(chip->vadc_dev);
2213 if (rc != -EPROBE_DEFER)
2214 pr_err("Failed to find VADC node, rc=%d\n", rc);
2215
2216 return rc;
2217 }
2218
2219 chip->dev = &pdev->dev;
2220 chip->debug_mask = &qg_debug_mask;
2221 platform_set_drvdata(pdev, chip);
2222 INIT_WORK(&chip->udata_work, process_udata_work);
2223 INIT_WORK(&chip->qg_status_change_work, qg_status_change_work);
2224 mutex_init(&chip->bus_lock);
2225 mutex_init(&chip->soc_lock);
2226 mutex_init(&chip->data_lock);
2227 init_waitqueue_head(&chip->qg_wait_q);
2228
2229 rc = qg_parse_dt(chip);
2230 if (rc < 0) {
2231 pr_err("Failed to parse DT, rc=%d\n", rc);
2232 return rc;
2233 }
2234
2235 rc = qg_hw_init(chip);
2236 if (rc < 0) {
2237 pr_err("Failed to hw_init, rc=%d\n", rc);
2238 return rc;
2239 }
2240
2241 rc = qg_setup_battery(chip);
2242 if (rc < 0) {
2243 pr_err("Failed to setup battery, rc=%d\n", rc);
2244 return rc;
2245 }
2246
2247 rc = qg_register_device(chip);
2248 if (rc < 0) {
2249 pr_err("Failed to register QG char device, rc=%d\n", rc);
2250 return rc;
2251 }
2252
2253 rc = qg_sdam_init(chip->dev);
2254 if (rc < 0) {
2255 pr_err("Failed to initialize QG SDAM, rc=%d\n", rc);
2256 return rc;
2257 }
2258
2259 rc = qg_soc_init(chip);
2260 if (rc < 0) {
2261 pr_err("Failed to initialize SOC scaling init rc=%d\n", rc);
2262 return rc;
2263 }
2264
2265 rc = qg_determine_pon_soc(chip);
2266 if (rc < 0) {
2267 pr_err("Failed to determine initial state, rc=%d\n", rc);
2268 goto fail_device;
2269 }
2270
2271 chip->awake_votable = create_votable("QG_WS", VOTE_SET_ANY,
2272 qg_awake_cb, chip);
2273 if (IS_ERR(chip->awake_votable)) {
2274 rc = PTR_ERR(chip->awake_votable);
2275 chip->awake_votable = NULL;
2276 goto fail_device;
2277 }
2278
2279 chip->vbatt_irq_disable_votable = create_votable("QG_VBATT_IRQ_DISABLE",
2280 VOTE_SET_ANY, qg_vbatt_irq_disable_cb, chip);
2281 if (IS_ERR(chip->vbatt_irq_disable_votable)) {
2282 rc = PTR_ERR(chip->vbatt_irq_disable_votable);
2283 chip->vbatt_irq_disable_votable = NULL;
2284 goto fail_device;
2285 }
2286
2287 chip->fifo_irq_disable_votable = create_votable("QG_FIFO_IRQ_DISABLE",
2288 VOTE_SET_ANY, qg_fifo_irq_disable_cb, chip);
2289 if (IS_ERR(chip->fifo_irq_disable_votable)) {
2290 rc = PTR_ERR(chip->fifo_irq_disable_votable);
2291 chip->fifo_irq_disable_votable = NULL;
2292 goto fail_device;
2293 }
2294
2295 chip->good_ocv_irq_disable_votable =
2296 create_votable("QG_GOOD_IRQ_DISABLE",
2297 VOTE_SET_ANY, qg_good_ocv_irq_disable_cb, chip);
2298 if (IS_ERR(chip->good_ocv_irq_disable_votable)) {
2299 rc = PTR_ERR(chip->good_ocv_irq_disable_votable);
2300 chip->good_ocv_irq_disable_votable = NULL;
2301 goto fail_device;
2302 }
2303
2304 rc = qg_init_psy(chip);
2305 if (rc < 0) {
2306 pr_err("Failed to initialize QG psy, rc=%d\n", rc);
2307 goto fail_votable;
2308 }
2309
2310 rc = qg_request_irqs(chip);
2311 if (rc < 0) {
2312 pr_err("Failed to register QG interrupts, rc=%d\n", rc);
2313 goto fail_votable;
2314 }
2315
2316 rc = qg_post_init(chip);
2317 if (rc < 0) {
2318 pr_err("Failed in qg_post_init rc=%d\n", rc);
2319 goto fail_votable;
2320 }
2321
2322 qg_get_battery_capacity(chip, &soc);
2323 pr_info("QG initialized! battery_profile=%s SOC=%d\n",
2324 qg_get_battery_type(chip), soc);
2325
2326 return rc;
2327
2328fail_votable:
2329 destroy_votable(chip->awake_votable);
2330fail_device:
2331 device_destroy(chip->qg_class, chip->dev_no);
2332 cdev_del(&chip->qg_cdev);
2333 unregister_chrdev_region(chip->dev_no, 1);
2334 return rc;
2335}
2336
2337static int qpnp_qg_remove(struct platform_device *pdev)
2338{
2339 struct qpnp_qg *chip = platform_get_drvdata(pdev);
2340
2341 qg_batterydata_exit();
2342 qg_soc_exit(chip);
2343
2344 cancel_work_sync(&chip->udata_work);
2345 cancel_work_sync(&chip->qg_status_change_work);
2346 device_destroy(chip->qg_class, chip->dev_no);
2347 cdev_del(&chip->qg_cdev);
2348 unregister_chrdev_region(chip->dev_no, 1);
2349 mutex_destroy(&chip->bus_lock);
2350 mutex_destroy(&chip->data_lock);
2351 mutex_destroy(&chip->soc_lock);
2352 if (chip->awake_votable)
2353 destroy_votable(chip->awake_votable);
2354
2355 return 0;
2356}
2357
2358static const struct of_device_id match_table[] = {
2359 { .compatible = "qcom,qpnp-qg", },
2360 { },
2361};
2362
2363static struct platform_driver qpnp_qg_driver = {
2364 .driver = {
2365 .name = "qcom,qpnp-qg",
2366 .owner = THIS_MODULE,
2367 .of_match_table = match_table,
2368 .pm = &qpnp_qg_pm_ops,
2369 },
2370 .probe = qpnp_qg_probe,
2371 .remove = qpnp_qg_remove,
2372};
2373module_platform_driver(qpnp_qg_driver);
2374
2375MODULE_DESCRIPTION("QPNP QG Driver");
2376MODULE_LICENSE("GPL v2");