blob: 9914071cc94d761e84b1d1ea61457df017350575 [file] [log] [blame]
xjb04a4022021-11-25 15:01:52 +08001// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (c) 2020 MediaTek Inc.
4 */
5
6#include <linux/module.h>
7#include <linux/init.h>
8#include <linux/i2c.h>
9#include <linux/of_device.h>
10#include <linux/of_irq.h>
11#include <linux/of_gpio.h>
12#include <linux/slab.h>
13#include <linux/errno.h>
14#include <linux/delay.h>
15#include <linux/mutex.h>
16#include <linux/workqueue.h>
17#include <linux/interrupt.h>
18#include <linux/irq.h>
19#include <linux/pm_runtime.h>
20#include <linux/power_supply.h>
21
22#include <linux/regulator/driver.h>
23#include <linux/regulator/machine.h>
24#ifdef CONFIG_REGMAP
25#include <linux/regmap.h>
26#endif
27
28#include "rt9467.h"
29#define I2C_ACCESS_MAX_RETRY 5
30#define RT9467_DRV_VERSION "1.0.19_MTK"
31
32/* ======================= */
33/* RT9467 Parameter */
34/* ======================= */
35
36
37static const u32 rt9467_boost_oc_threshold[] = {
38 500000, 700000, 1100000, 1300000, 1800000, 2100000, 2400000,
39}; /* uA */
40
41enum rt9467_irq_idx {
42 RT9467_IRQIDX_CHG_STATC = 0,
43 RT9467_IRQIDX_CHG_FAULT,
44 RT9467_IRQIDX_TS_STATC,
45 RT9467_IRQIDX_CHG_IRQ1,
46 RT9467_IRQIDX_CHG_IRQ2,
47 RT9467_IRQIDX_CHG_IRQ3,
48 RT9467_IRQIDX_DPDM_IRQ,
49 RT9467_IRQIDX_MAX,
50};
51
52enum rt9467_irq_stat {
53 RT9467_IRQSTAT_CHG_STATC = 0,
54 RT9467_IRQSTAT_CHG_FAULT,
55 RT9467_IRQSTAT_TS_STATC,
56 RT9467_IRQSTAT_MAX,
57};
58
59enum rt9467_chg_type {
60 RT9467_CHG_TYPE_NOVBUS = 0,
61 RT9467_CHG_TYPE_UNDER_GOING,
62 RT9467_CHG_TYPE_SDP,
63 RT9467_CHG_TYPE_SDPNSTD,
64 RT9467_CHG_TYPE_DCP,
65 RT9467_CHG_TYPE_CDP,
66 RT9467_CHG_TYPE_MAX,
67};
68
69static const u8 rt9467_irq_maskall[RT9467_IRQIDX_MAX] = {
70 0xF0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
71};
72
73struct irq_mapping_tbl {
74 const char *name;
75 const int id;
76};
77
78#define RT9467_IRQ_MAPPING(_name, _id) {.name = #_name, .id = _id}
79static const struct irq_mapping_tbl rt9467_irq_mapping_tbl[] = {
80 RT9467_IRQ_MAPPING(chg_treg, 4),
81 RT9467_IRQ_MAPPING(chg_aicr, 5),
82 RT9467_IRQ_MAPPING(chg_mivr, 6),
83 RT9467_IRQ_MAPPING(pwr_rdy, 7),
84 RT9467_IRQ_MAPPING(chg_vsysuv, 12),
85 RT9467_IRQ_MAPPING(chg_vsysov, 13),
86 RT9467_IRQ_MAPPING(chg_vbatov, 14),
87 RT9467_IRQ_MAPPING(chg_vbusov, 15),
88 RT9467_IRQ_MAPPING(ts_batcold, 20),
89 RT9467_IRQ_MAPPING(ts_batcool, 21),
90 RT9467_IRQ_MAPPING(ts_batwarm, 22),
91 RT9467_IRQ_MAPPING(ts_bathot, 23),
92 RT9467_IRQ_MAPPING(ts_statci, 24),
93 RT9467_IRQ_MAPPING(chg_faulti, 25),
94 RT9467_IRQ_MAPPING(chg_statci, 26),
95 RT9467_IRQ_MAPPING(chg_tmri, 27),
96 RT9467_IRQ_MAPPING(chg_batabsi, 28),
97 RT9467_IRQ_MAPPING(chg_adpbadi, 29),
98 RT9467_IRQ_MAPPING(chg_rvpi, 30),
99 RT9467_IRQ_MAPPING(otpi, 31),
100 RT9467_IRQ_MAPPING(chg_aiclmeasi, 32),
101 RT9467_IRQ_MAPPING(chg_ichgmeasi, 33),
102 RT9467_IRQ_MAPPING(chgdet_donei, 34),
103 RT9467_IRQ_MAPPING(wdtmri, 35),
104 RT9467_IRQ_MAPPING(ssfinishi, 36),
105 RT9467_IRQ_MAPPING(chg_rechgi, 37),
106 RT9467_IRQ_MAPPING(chg_termi, 38),
107 RT9467_IRQ_MAPPING(chg_ieoci, 39),
108 RT9467_IRQ_MAPPING(adc_donei, 40),
109 RT9467_IRQ_MAPPING(pumpx_donei, 41),
110 RT9467_IRQ_MAPPING(bst_batuvi, 45),
111 RT9467_IRQ_MAPPING(bst_midovi, 46),
112 RT9467_IRQ_MAPPING(bst_olpi, 47),
113 RT9467_IRQ_MAPPING(attachi, 48),
114 RT9467_IRQ_MAPPING(detachi, 49),
115 RT9467_IRQ_MAPPING(chgdeti, 54),
116 RT9467_IRQ_MAPPING(dcdti, 55),
117};
118
119enum rt9467_charging_status {
120 RT9467_CHG_STATUS_READY = 0,
121 RT9467_CHG_STATUS_PROGRESS,
122 RT9467_CHG_STATUS_DONE,
123 RT9467_CHG_STATUS_FAULT,
124 RT9467_CHG_STATUS_MAX,
125};
126
127static const u8 rt9467_val_en_hidden_mode[] = {
128 0x49, 0x32, 0xB6, 0x27, 0x48, 0x18, 0x03, 0xE2,
129};
130
131enum rt9467_adc_sel {
132 RT9467_ADC_VBUS_DIV5 = 1,
133 RT9467_ADC_VBUS_DIV2,
134 RT9467_ADC_VSYS,
135 RT9467_ADC_VBAT,
136 RT9467_ADC_TS_BAT = 6,
137 RT9467_ADC_IBUS = 8,
138 RT9467_ADC_IBAT,
139 RT9467_ADC_REGN = 11,
140 RT9467_ADC_TEMP_JC,
141 RT9467_ADC_MAX,
142};
143
144/*
145 * Unit for each ADC parameter
146 * 0 stands for reserved
147 * For TS_BAT, the real unit is 0.25.
148 * Here we use 25, please remember to divide 100 while showing the value
149 */
150static const int rt9467_adc_unit[RT9467_ADC_MAX] = {
151 0,
152 RT9467_ADC_UNIT_VBUS_DIV5,
153 RT9467_ADC_UNIT_VBUS_DIV2,
154 RT9467_ADC_UNIT_VSYS,
155 RT9467_ADC_UNIT_VBAT,
156 0,
157 RT9467_ADC_UNIT_TS_BAT,
158 0,
159 RT9467_ADC_UNIT_IBUS,
160 RT9467_ADC_UNIT_IBAT,
161 0,
162 RT9467_ADC_UNIT_REGN,
163 RT9467_ADC_UNIT_TEMP_JC,
164};
165
166static const int rt9467_adc_offset[RT9467_ADC_MAX] = {
167 0,
168 RT9467_ADC_OFFSET_VBUS_DIV5,
169 RT9467_ADC_OFFSET_VBUS_DIV2,
170 RT9467_ADC_OFFSET_VSYS,
171 RT9467_ADC_OFFSET_VBAT,
172 0,
173 RT9467_ADC_OFFSET_TS_BAT,
174 0,
175 RT9467_ADC_OFFSET_IBUS,
176 RT9467_ADC_OFFSET_IBAT,
177 0,
178 RT9467_ADC_OFFSET_REGN,
179 RT9467_ADC_OFFSET_TEMP_JC,
180};
181
182struct rt9467_desc {
183 bool en_wdt;
184 bool en_irq_pulse;
185 const char *chg_dev_name;
186};
187
188/* These default values will be applied if there's no property in dts */
189static struct rt9467_desc rt9467_default_desc = {
190 .en_wdt = true,
191 .en_irq_pulse = false,
192 .chg_dev_name = "primary_chg",
193};
194
195struct rt9467_info {
196 struct i2c_client *client;
197 struct mutex i2c_access_lock;
198 struct mutex adc_access_lock;
199 struct mutex irq_access_lock;
200 struct mutex aicr_access_lock;
201 struct mutex ichg_access_lock;
202 struct mutex hidden_mode_lock;
203 struct device *dev;
204 struct rt9467_desc *desc;
205 int irq;
206 u32 intr_gpio;
207 u8 chip_rev;
208 u8 irq_flag[RT9467_IRQIDX_MAX];
209 u8 irq_stat[RT9467_IRQSTAT_MAX];
210 u8 irq_mask[RT9467_IRQIDX_MAX];
211 u32 hidden_mode_cnt;
212 struct regulator_dev *otg_rdev;
213};
214
215/* ======================= */
216/* Register Address */
217/* ======================= */
218
219static const unsigned char rt9467_reg_addr[] = {
220 RT9467_REG_CORE_CTRL0,
221 RT9467_REG_CHG_CTRL1,
222 RT9467_REG_CHG_CTRL2,
223 RT9467_REG_CHG_CTRL3,
224 RT9467_REG_CHG_CTRL4,
225 RT9467_REG_CHG_CTRL5,
226 RT9467_REG_CHG_CTRL6,
227 RT9467_REG_CHG_CTRL7,
228 RT9467_REG_CHG_CTRL8,
229 RT9467_REG_CHG_CTRL9,
230 RT9467_REG_CHG_CTRL10,
231 RT9467_REG_CHG_CTRL11,
232 RT9467_REG_CHG_CTRL12,
233 RT9467_REG_CHG_CTRL13,
234 RT9467_REG_CHG_CTRL14,
235 RT9467_REG_CHG_CTRL15,
236 RT9467_REG_CHG_CTRL16,
237 RT9467_REG_CHG_ADC,
238 RT9467_REG_CHG_DPDM1,
239 RT9467_REG_CHG_DPDM2,
240 RT9467_REG_CHG_DPDM3,
241 RT9467_REG_CHG_CTRL19,
242 RT9467_REG_CHG_CTRL17,
243 RT9467_REG_CHG_CTRL18,
244 RT9467_REG_DEVICE_ID,
245 RT9467_REG_CHG_STAT,
246 RT9467_REG_CHG_NTC,
247 RT9467_REG_ADC_DATA_H,
248 RT9467_REG_ADC_DATA_L,
249 RT9467_REG_ADC_DATA_TUNE_H,
250 RT9467_REG_ADC_DATA_TUNE_L,
251 RT9467_REG_ADC_DATA_ORG_H,
252 RT9467_REG_ADC_DATA_ORG_L,
253 RT9467_REG_CHG_STATC,
254 RT9467_REG_CHG_FAULT,
255 RT9467_REG_TS_STATC,
256 /* Skip IRQ evt to prevent reading clear while dumping registers */
257 RT9467_REG_CHG_STATC_CTRL,
258 RT9467_REG_CHG_FAULT_CTRL,
259 RT9467_REG_TS_STATC_CTRL,
260 RT9467_REG_CHG_IRQ1_CTRL,
261 RT9467_REG_CHG_IRQ2_CTRL,
262 RT9467_REG_CHG_IRQ3_CTRL,
263 RT9467_REG_DPDM_IRQ_CTRL,
264};
265
266
267/* ========================= */
268/* I2C operations */
269/* ========================= */
270
271#ifdef CONFIG_REGMAP
272static const struct regmap_config rt9467_regmap_config = {
273 .reg_bits = 8,
274 .val_bits = 8,
275 .max_register = RT9467_REG_MAX,
276 .cache_type = REGCACHE_NONE,
277};
278#endif /* CONFIG_REGMAP */
279
280static int rt9467_device_read(void *client, u32 addr, int leng, void *dst)
281{
282 struct i2c_client *i2c = (struct i2c_client *)client;
283
284 return i2c_smbus_read_i2c_block_data(i2c, addr, leng, dst);
285}
286
287static int rt9467_device_write(void *client, u32 addr, int leng,
288 const void *src)
289{
290 struct i2c_client *i2c = (struct i2c_client *)client;
291
292 return i2c_smbus_write_i2c_block_data(i2c, addr, leng, src);
293}
294
295static inline int __rt9467_i2c_write_byte(struct rt9467_info *info, u8 cmd,
296 u8 data)
297{
298 int ret = 0, retry = 0;
299
300 do {
301 ret = rt9467_device_write(info->client, cmd, 1, &data);
302 retry++;
303 if (ret < 0)
304 udelay(10);
305 } while (ret < 0 && retry < I2C_ACCESS_MAX_RETRY);
306
307 if (ret < 0)
308 dev_notice(info->dev, "%s: I2CW[0x%02X] = 0x%02X fail\n",
309 __func__, cmd, data);
310 else
311 dev_dbg(info->dev, "%s: I2CW[0x%02X] = 0x%02X\n", __func__,
312 cmd, data);
313
314 return ret;
315}
316
317static int rt9467_i2c_write_byte(struct rt9467_info *info, u8 cmd, u8 data)
318{
319 int ret = 0;
320
321 mutex_lock(&info->i2c_access_lock);
322 ret = __rt9467_i2c_write_byte(info, cmd, data);
323 mutex_unlock(&info->i2c_access_lock);
324
325 return ret;
326}
327
328static inline int __rt9467_i2c_read_byte(struct rt9467_info *info, u8 cmd)
329{
330 int ret = 0, ret_val = 0, retry = 0;
331
332 do {
333 ret = rt9467_device_read(info->client, cmd, 1, &ret_val);
334 retry++;
335 if (ret < 0)
336 udelay(10);
337 } while (ret < 0 && retry < I2C_ACCESS_MAX_RETRY);
338
339 if (ret < 0) {
340 dev_notice(info->dev, "%s: I2CR[0x%02X] fail\n", __func__, cmd);
341 return ret;
342 }
343
344 ret_val = ret_val & 0xFF;
345
346 dev_dbg(info->dev, "%s: I2CR[0x%02X] = 0x%02X\n", __func__, cmd,
347 ret_val);
348
349 return ret_val;
350}
351
352static int rt9467_i2c_read_byte(struct rt9467_info *info, u8 cmd)
353{
354 int ret = 0;
355
356 mutex_lock(&info->i2c_access_lock);
357 ret = __rt9467_i2c_read_byte(info, cmd);
358 mutex_unlock(&info->i2c_access_lock);
359
360 if (ret < 0)
361 return ret;
362
363 return (ret & 0xFF);
364}
365
366static inline int __rt9467_i2c_block_write(struct rt9467_info *info, u8 cmd,
367 u32 leng, const u8 *data)
368{
369 int ret = 0;
370
371 ret = rt9467_device_write(info->client, cmd, leng, data);
372
373 return ret;
374}
375
376
377static int rt9467_i2c_block_write(struct rt9467_info *info, u8 cmd, u32 leng,
378 const u8 *data)
379{
380 int ret = 0;
381
382 mutex_lock(&info->i2c_access_lock);
383 ret = __rt9467_i2c_block_write(info, cmd, leng, data);
384 mutex_unlock(&info->i2c_access_lock);
385
386 return ret;
387}
388
389static inline int __rt9467_i2c_block_read(struct rt9467_info *info, u8 cmd,
390 u32 leng, u8 *data)
391{
392 int ret = 0;
393
394 ret = rt9467_device_read(info->client, cmd, leng, data);
395
396 return ret;
397}
398
399
400static int rt9467_i2c_block_read(struct rt9467_info *info, u8 cmd, u32 leng,
401 u8 *data)
402{
403 int ret = 0;
404
405 mutex_lock(&info->i2c_access_lock);
406 ret = __rt9467_i2c_block_read(info, cmd, leng, data);
407 mutex_unlock(&info->i2c_access_lock);
408
409 return ret;
410}
411
412
413static int rt9467_i2c_test_bit(struct rt9467_info *info, u8 cmd, u8 shift,
414 bool *is_one)
415{
416 int ret = 0;
417 u8 data = 0;
418
419 ret = rt9467_i2c_read_byte(info, cmd);
420 if (ret < 0) {
421 *is_one = false;
422 return ret;
423 }
424
425 data = ret & (1 << shift);
426 *is_one = (data == 0 ? false : true);
427
428 return ret;
429}
430
431static int rt9467_i2c_update_bits(struct rt9467_info *info, u8 cmd, u8 data,
432 u8 mask)
433{
434 int ret = 0;
435 u8 reg_data = 0;
436
437 mutex_lock(&info->i2c_access_lock);
438 ret = __rt9467_i2c_read_byte(info, cmd);
439 if (ret < 0) {
440 mutex_unlock(&info->i2c_access_lock);
441 return ret;
442 }
443
444 reg_data = ret & 0xFF;
445 reg_data &= ~mask;
446 reg_data |= (data & mask);
447
448 ret = __rt9467_i2c_write_byte(info, cmd, reg_data);
449 mutex_unlock(&info->i2c_access_lock);
450
451 return ret;
452}
453
454static inline int rt9467_set_bit(struct rt9467_info *info, u8 reg, u8 mask)
455{
456 return rt9467_i2c_update_bits(info, reg, mask, mask);
457}
458
459static inline int rt9467_clr_bit(struct rt9467_info *info, u8 reg, u8 mask)
460{
461 return rt9467_i2c_update_bits(info, reg, 0x00, mask);
462}
463
464/* ================== */
465/* Internal Functions */
466/* ================== */
467static int rt9467_kick_wdt(struct rt9467_info *info);
468static int rt9467_enable_hidden_mode(struct rt9467_info *info, bool en);
469
470static inline void rt9467_irq_set_flag(struct rt9467_info *info, u8 *irq,
471 u8 mask)
472{
473 mutex_lock(&info->irq_access_lock);
474 *irq |= mask;
475 mutex_unlock(&info->irq_access_lock);
476}
477
478static inline void rt9467_irq_clr_flag(struct rt9467_info *info, u8 *irq,
479 u8 mask)
480{
481 mutex_lock(&info->irq_access_lock);
482 *irq &= ~mask;
483 mutex_unlock(&info->irq_access_lock);
484}
485
486static inline const char *rt9467_get_irq_name(struct rt9467_info *info,
487 int irqnum)
488{
489 int i = 0;
490
491 for (i = 0; i < ARRAY_SIZE(rt9467_irq_mapping_tbl); i++) {
492 if (rt9467_irq_mapping_tbl[i].id == irqnum)
493 return rt9467_irq_mapping_tbl[i].name;
494 }
495
496 return "not found";
497}
498
499static inline void rt9467_irq_mask(struct rt9467_info *info, int irqnum)
500{
501 dev_dbg(info->dev, "%s: irq = %d, %s\n", __func__, irqnum,
502 rt9467_get_irq_name(info, irqnum));
503 info->irq_mask[irqnum / 8] |= (1 << (irqnum % 8));
504}
505
506static inline void rt9467_irq_unmask(struct rt9467_info *info, int irqnum)
507{
508 dev_dbg(info->dev, "%s: irq = %d, %s\n", __func__, irqnum,
509 rt9467_get_irq_name(info, irqnum));
510 info->irq_mask[irqnum / 8] &= ~(1 << (irqnum % 8));
511}
512
513static inline u8 rt9467_closest_reg(u32 min, u32 max, u32 step, u32 target)
514{
515 /* Smaller than minimum supported value, use minimum one */
516 if (target < min)
517 return 0;
518
519 /* Greater than maximum supported value, use maximum one */
520 if (target >= max)
521 return (max - min) / step;
522
523 return (target - min) / step;
524}
525
526static inline u8 rt9467_closest_reg_via_tbl(const u32 *tbl, u32 tbl_size,
527 u32 target)
528{
529 u32 i = 0;
530
531 /* Smaller than minimum supported value, use minimum one */
532 if (target < tbl[0])
533 return 0;
534
535 for (i = 0; i < tbl_size - 1; i++) {
536 if (target >= tbl[i] && target < tbl[i + 1])
537 return i;
538 }
539
540 /* Greater than maximum supported value, use maximum one */
541 return tbl_size - 1;
542}
543
544static inline u32 rt9467_closest_value(u32 min, u32 max, u32 step, u8 reg_val)
545{
546 u32 ret_val = 0;
547
548 ret_val = min + reg_val * step;
549 if (ret_val > max)
550 ret_val = max;
551
552 return ret_val;
553}
554
555static int rt9467_get_aicr(struct rt9467_info *info, u32 *aicr);
556static int rt9467_get_ichg(struct rt9467_info *info, u32 *ichg);
557static int rt9467_get_adc(struct rt9467_info *info,
558 enum rt9467_adc_sel adc_sel, int *adc_val)
559{
560 int ret = 0, i = 0;
561 const int max_wait_times = 6;
562 u8 adc_data[6] = {0};
563 u32 aicr = 0, ichg = 0;
564 bool adc_start = false;
565
566 mutex_lock(&info->adc_access_lock);
567
568 rt9467_enable_hidden_mode(info, true);
569
570 /* Select ADC to desired channel */
571 ret = rt9467_i2c_update_bits(info, RT9467_REG_CHG_ADC,
572 adc_sel << RT9467_SHIFT_ADC_IN_SEL, RT9467_MASK_ADC_IN_SEL);
573 if (ret < 0) {
574 dev_notice(info->dev, "%s: select ch to %d fail(%d)\n",
575 __func__, adc_sel, ret);
576 goto out;
577 }
578
579 /* Workaround for IBUS & IBAT */
580 if (adc_sel == RT9467_ADC_IBUS) {
581 mutex_lock(&info->aicr_access_lock);
582 ret = rt9467_get_aicr(info, &aicr);
583 if (ret < 0) {
584 dev_notice(info->dev, "%s: get aicr fail\n", __func__);
585 goto out_unlock_all;
586 }
587 } else if (adc_sel == RT9467_ADC_IBAT) {
588 mutex_lock(&info->ichg_access_lock);
589 ret = rt9467_get_ichg(info, &ichg);
590 if (ret < 0) {
591 dev_notice(info->dev, "%s: get ichg fail\n", __func__);
592 goto out_unlock_all;
593 }
594 }
595
596 /* Start ADC conversation */
597 ret = rt9467_set_bit(info, RT9467_REG_CHG_ADC, RT9467_MASK_ADC_START);
598 if (ret < 0) {
599 dev_notice(info->dev, "%s: start con fail(%d), sel = %d\n",
600 __func__, ret, adc_sel);
601 goto out_unlock_all;
602 }
603
604 for (i = 0; i < max_wait_times; i++) {
605 msleep(35);
606 ret = rt9467_i2c_test_bit(info, RT9467_REG_CHG_ADC,
607 RT9467_SHIFT_ADC_START, &adc_start);
608 if (ret >= 0 && !adc_start)
609 break;
610 }
611 if (i == max_wait_times) {
612 dev_notice(info->dev, "%s: wait con fail(%d), sel = %d\n",
613 __func__, ret, adc_sel);
614 ret = -EINVAL;
615 goto out_unlock_all;
616 }
617
618 mdelay(1);
619
620 /* Read ADC data high/low byte */
621 ret = rt9467_i2c_block_read(info, RT9467_REG_ADC_DATA_H, 6, adc_data);
622 if (ret < 0) {
623 dev_notice(info->dev, "%s: read ADC data fail\n", __func__);
624 goto out_unlock_all;
625 }
626 dev_dbg(info->dev,
627 "%s: adc_tune = (0x%02X, 0x%02X), adc_org = (0x%02X, 0x%02X)\n",
628 __func__, adc_data[2], adc_data[3], adc_data[4], adc_data[5]);
629
630 /* Calculate ADC value */
631 *adc_val = ((adc_data[0] << 8) + adc_data[1]) * rt9467_adc_unit[adc_sel]
632 + rt9467_adc_offset[adc_sel];
633
634 dev_dbg(info->dev,
635 "%s: adc_sel = %d, adc_h = 0x%02X, adc_l = 0x%02X, val = %d\n",
636 __func__, adc_sel, adc_data[0], adc_data[1], *adc_val);
637
638 ret = 0;
639
640out_unlock_all:
641 /* Coefficient of IBUS & IBAT */
642 if (adc_sel == RT9467_ADC_IBUS) {
643 if (aicr < 400000) /* 400mA */
644 *adc_val = *adc_val * 67 / 100;
645 mutex_unlock(&info->aicr_access_lock);
646 } else if (adc_sel == RT9467_ADC_IBAT) {
647 if (ichg >= 100000 && ichg <= 450000) /* 100~450mA */
648 *adc_val = *adc_val * 57 / 100;
649 else if (ichg >= 500000 && ichg <= 850000) /* 500~850mA */
650 *adc_val = *adc_val * 63 / 100;
651 mutex_unlock(&info->ichg_access_lock);
652 }
653
654out:
655 rt9467_enable_hidden_mode(info, false);
656 mutex_unlock(&info->adc_access_lock);
657 return ret;
658}
659
660static inline int __rt9467_enable_chgdet_flow(struct rt9467_info *info, bool en)
661{
662 int ret = 0;
663
664 dev_info(info->dev, "%s: en = %d\n", __func__, en);
665 ret = (en ? rt9467_set_bit : rt9467_clr_bit)
666 (info, RT9467_REG_CHG_DPDM1, RT9467_MASK_USBCHGEN);
667 return ret;
668}
669
670/* Prevent back boost */
671static int rt9467_toggle_cfo(struct rt9467_info *info)
672{
673 int ret = 0;
674 u8 data = 0;
675
676 dev_info(info->dev, "%s\n", __func__);
677 mutex_lock(&info->i2c_access_lock);
678 ret = rt9467_device_read(info->client, RT9467_REG_CHG_CTRL2, 1, &data);
679 if (ret < 0) {
680 dev_notice(info->dev, "%s read cfo fail(%d)\n", __func__, ret);
681 goto out;
682 }
683
684 /* CFO off */
685 data &= ~RT9467_MASK_CFO_EN;
686 ret = rt9467_device_write(info->client, RT9467_REG_CHG_CTRL2, 1, &data);
687 if (ret < 0) {
688 dev_notice(info->dev, "%s cfo off fail(%d)\n", __func__, ret);
689 goto out;
690 }
691
692 /* CFO on */
693 data |= RT9467_MASK_CFO_EN;
694 ret = rt9467_device_write(info->client, RT9467_REG_CHG_CTRL2, 1, &data);
695 if (ret < 0)
696 dev_notice(info->dev, "%s cfo on fail(%d)\n", __func__, ret);
697
698out:
699 mutex_unlock(&info->i2c_access_lock);
700 return ret;
701}
702
703/* IRQ handlers */
704static int rt9467_pwr_rdy_irq_handler(struct rt9467_info *info)
705{
706#ifndef CONFIG_TCPC_CLASS
707 int ret = 0;
708 bool pwr_rdy = false;
709#endif /* CONFIG_TCPC_CLASS */
710
711 dev_notice(info->dev, "%s\n", __func__);
712
713#ifndef CONFIG_TCPC_CLASS
714 ret = rt9467_i2c_test_bit(info, RT9467_REG_CHG_STATC,
715 RT9467_SHIFT_PWR_RDY, &pwr_rdy);
716 if (ret < 0) {
717 dev_notice(info->dev, "%s: read pwr rdy fail\n", __func__);
718 goto out;
719 }
720
721 if (!pwr_rdy) {
722 dev_info(info->dev, "%s: pwr rdy = 0\n", __func__);
723 goto out;
724 }
725
726out:
727#endif /* CONFIG_TCPC_CLASS */
728
729 return 0;
730}
731
732static int rt9467_chg_mivr_irq_handler(struct rt9467_info *info)
733{
734 int ret = 0;
735 bool mivr_act = false;
736 int adc_ibus = 0;
737
738 dev_notice(info->dev, "%s\n", __func__);
739
740 /* Check whether MIVR loop is active */
741 ret = rt9467_i2c_test_bit(info, RT9467_REG_CHG_STATC,
742 RT9467_SHIFT_CHG_MIVR, &mivr_act);
743 if (ret < 0) {
744 dev_notice(info->dev, "%s: read mivr stat fail\n", __func__);
745 goto out;
746 }
747
748 if (!mivr_act) {
749 dev_info(info->dev, "%s: mivr loop is not active\n", __func__);
750 goto out;
751 }
752
753 if (strcmp(info->desc->chg_dev_name, "primary_chg") == 0) {
754 /* Check IBUS ADC */
755 ret = rt9467_get_adc(info, RT9467_ADC_IBUS, &adc_ibus);
756 if (ret < 0) {
757 dev_notice(info->dev, "%s: get ibus fail\n", __func__);
758 return ret;
759 }
760 if (adc_ibus < 100000) { /* 100mA */
761 ret = rt9467_toggle_cfo(info);
762 return ret;
763 }
764 }
765out:
766 return 0;
767}
768
769static int rt9467_chg_aicr_irq_handler(struct rt9467_info *info)
770{
771 dev_notice(info->dev, "%s\n", __func__);
772 return 0;
773}
774
775static int rt9467_chg_treg_irq_handler(struct rt9467_info *info)
776{
777 dev_notice(info->dev, "%s\n", __func__);
778 return 0;
779}
780
781static int rt9467_chg_vsysuv_irq_handler(struct rt9467_info *info)
782{
783 dev_notice(info->dev, "%s\n", __func__);
784 return 0;
785}
786
787static int rt9467_chg_vsysov_irq_handler(struct rt9467_info *info)
788{
789 dev_notice(info->dev, "%s\n", __func__);
790 return 0;
791}
792
793static int rt9467_chg_vbatov_irq_handler(struct rt9467_info *info)
794{
795 dev_notice(info->dev, "%s\n", __func__);
796 return 0;
797}
798
799static int rt9467_chg_vbusov_irq_handler(struct rt9467_info *info)
800{
801 int ret = 0;
802 bool vbusov = false;
803
804 dev_notice(info->dev, "%s\n", __func__);
805 ret = rt9467_i2c_test_bit(info, RT9467_REG_CHG_FAULT,
806 RT9467_SHIFT_VBUSOV, &vbusov);
807 if (ret < 0)
808 return ret;
809
810 dev_info(info->dev, "%s: vbusov = %d\n", __func__, vbusov);
811
812 return 0;
813}
814
815static int rt9467_ts_bat_cold_irq_handler(struct rt9467_info *info)
816{
817 dev_notice(info->dev, "%s\n", __func__);
818 return 0;
819}
820
821static int rt9467_ts_bat_cool_irq_handler(struct rt9467_info *info)
822{
823 dev_notice(info->dev, "%s\n", __func__);
824 return 0;
825}
826
827static int rt9467_ts_bat_warm_irq_handler(struct rt9467_info *info)
828{
829 dev_notice(info->dev, "%s\n", __func__);
830 return 0;
831}
832
833static int rt9467_ts_bat_hot_irq_handler(struct rt9467_info *info)
834{
835 dev_notice(info->dev, "%s\n", __func__);
836 return 0;
837}
838
839static int rt9467_ts_statci_irq_handler(struct rt9467_info *info)
840{
841 dev_notice(info->dev, "%s\n", __func__);
842 return 0;
843}
844
845static int rt9467_chg_faulti_irq_handler(struct rt9467_info *info)
846{
847 dev_notice(info->dev, "%s\n", __func__);
848 return 0;
849}
850
851static int rt9467_chg_statci_irq_handler(struct rt9467_info *info)
852{
853 dev_notice(info->dev, "%s\n", __func__);
854 return 0;
855}
856
857static int rt9467_chg_tmri_irq_handler(struct rt9467_info *info)
858{
859 dev_notice(info->dev, "%s\n", __func__);
860 return 0;
861}
862
863static int rt9467_chg_batabsi_irq_handler(struct rt9467_info *info)
864{
865 dev_notice(info->dev, "%s\n", __func__);
866 return 0;
867}
868
869static int rt9467_chg_adpbadi_irq_handler(struct rt9467_info *info)
870{
871 dev_notice(info->dev, "%s\n", __func__);
872 return 0;
873}
874
875static int rt9467_chg_rvpi_irq_handler(struct rt9467_info *info)
876{
877 dev_notice(info->dev, "%s\n", __func__);
878 return 0;
879}
880
881static int rt9467_chg_otpi_irq_handler(struct rt9467_info *info)
882{
883 dev_notice(info->dev, "%s\n", __func__);
884 return 0;
885}
886
887static int rt9467_chg_aiclmeasi_irq_handler(struct rt9467_info *info)
888{
889 dev_notice(info->dev, "%s\n", __func__);
890 return 0;
891}
892
893static int rt9467_chg_ichgmeasi_irq_handler(struct rt9467_info *info)
894{
895 dev_notice(info->dev, "%s\n", __func__);
896 return 0;
897}
898
899static int rt9467_chgdet_donei_irq_handler(struct rt9467_info *info)
900{
901 dev_notice(info->dev, "%s\n", __func__);
902 return 0;
903}
904
905static int rt9467_wdtmri_irq_handler(struct rt9467_info *info)
906{
907 int ret = 0;
908
909 dev_notice(info->dev, "%s\n", __func__);
910 ret = rt9467_kick_wdt(info);
911 if (ret < 0)
912 dev_notice(info->dev, "%s: kick wdt fail\n", __func__);
913
914 return ret;
915}
916
917static int rt9467_ssfinishi_irq_handler(struct rt9467_info *info)
918{
919 dev_notice(info->dev, "%s\n", __func__);
920 return 0;
921}
922
923static int rt9467_chg_rechgi_irq_handler(struct rt9467_info *info)
924{
925 dev_notice(info->dev, "%s\n", __func__);
926 return 0;
927}
928
929static int rt9467_chg_termi_irq_handler(struct rt9467_info *info)
930{
931 dev_notice(info->dev, "%s\n", __func__);
932 return 0;
933}
934
935static int rt9467_chg_ieoci_irq_handler(struct rt9467_info *info)
936{
937 dev_notice(info->dev, "%s\n", __func__);
938 return 0;
939}
940
941static int rt9467_adc_donei_irq_handler(struct rt9467_info *info)
942{
943 dev_notice(info->dev, "%s\n", __func__);
944 return 0;
945}
946
947static int rt9467_pumpx_donei_irq_handler(struct rt9467_info *info)
948{
949 dev_notice(info->dev, "%s\n", __func__);
950 return 0;
951}
952
953static int rt9467_bst_batuvi_irq_handler(struct rt9467_info *info)
954{
955 dev_notice(info->dev, "%s\n", __func__);
956 return 0;
957}
958
959static int rt9467_bst_midovi_irq_handler(struct rt9467_info *info)
960{
961 dev_notice(info->dev, "%s\n", __func__);
962 return 0;
963}
964
965static int rt9467_bst_olpi_irq_handler(struct rt9467_info *info)
966{
967 dev_notice(info->dev, "%s\n", __func__);
968 return 0;
969}
970
971static int rt9467_attachi_irq_handler(struct rt9467_info *info)
972{
973 int ret = 0;
974
975 dev_notice(info->dev, "%s\n", __func__);
976 return ret;
977}
978
979static int rt9467_detachi_irq_handler(struct rt9467_info *info)
980{
981 int ret = 0;
982
983 dev_notice(info->dev, "%s\n", __func__);
984 return ret;
985}
986
987static int rt9467_chgdeti_irq_handler(struct rt9467_info *info)
988{
989 dev_notice(info->dev, "%s\n", __func__);
990 return 0;
991}
992
993static int rt9467_dcdti_irq_handler(struct rt9467_info *info)
994{
995 dev_notice(info->dev, "%s\n", __func__);
996 return 0;
997}
998
999typedef int (*rt9467_irq_fptr)(struct rt9467_info *);
1000static rt9467_irq_fptr rt9467_irq_handler_tbl[56] = {
1001 NULL,
1002 NULL,
1003 NULL,
1004 NULL,
1005 rt9467_chg_treg_irq_handler,
1006 rt9467_chg_aicr_irq_handler,
1007 rt9467_chg_mivr_irq_handler,
1008 rt9467_pwr_rdy_irq_handler,
1009 NULL,
1010 NULL,
1011 NULL,
1012 NULL,
1013 rt9467_chg_vsysuv_irq_handler,
1014 rt9467_chg_vsysov_irq_handler,
1015 rt9467_chg_vbatov_irq_handler,
1016 rt9467_chg_vbusov_irq_handler,
1017 NULL,
1018 NULL,
1019 NULL,
1020 NULL,
1021 rt9467_ts_bat_cold_irq_handler,
1022 rt9467_ts_bat_cool_irq_handler,
1023 rt9467_ts_bat_warm_irq_handler,
1024 rt9467_ts_bat_hot_irq_handler,
1025 rt9467_ts_statci_irq_handler,
1026 rt9467_chg_faulti_irq_handler,
1027 rt9467_chg_statci_irq_handler,
1028 rt9467_chg_tmri_irq_handler,
1029 rt9467_chg_batabsi_irq_handler,
1030 rt9467_chg_adpbadi_irq_handler,
1031 rt9467_chg_rvpi_irq_handler,
1032 rt9467_chg_otpi_irq_handler,
1033 rt9467_chg_aiclmeasi_irq_handler,
1034 rt9467_chg_ichgmeasi_irq_handler,
1035 rt9467_chgdet_donei_irq_handler,
1036 rt9467_wdtmri_irq_handler,
1037 rt9467_ssfinishi_irq_handler,
1038 rt9467_chg_rechgi_irq_handler,
1039 rt9467_chg_termi_irq_handler,
1040 rt9467_chg_ieoci_irq_handler,
1041 rt9467_adc_donei_irq_handler,
1042 rt9467_pumpx_donei_irq_handler,
1043 NULL,
1044 NULL,
1045 NULL,
1046 rt9467_bst_batuvi_irq_handler,
1047 rt9467_bst_midovi_irq_handler,
1048 rt9467_bst_olpi_irq_handler,
1049 rt9467_attachi_irq_handler,
1050 rt9467_detachi_irq_handler,
1051 NULL,
1052 NULL,
1053 NULL,
1054 rt9467_chgdeti_irq_handler,
1055 rt9467_dcdti_irq_handler,
1056};
1057
1058static inline int rt9467_enable_irqrez(struct rt9467_info *info, bool en)
1059{
1060 dev_info(info->dev, "%s: en = %d\n", __func__, en);
1061 return (en ? rt9467_set_bit : rt9467_clr_bit)
1062 (info, RT9467_REG_CHG_CTRL13, RT9467_MASK_IRQ_REZ);
1063}
1064
1065static int __rt9467_irq_handler(struct rt9467_info *info)
1066{
1067 int ret = 0, i = 0, j = 0;
1068 u8 evt[RT9467_IRQIDX_MAX] = {0};
1069 u8 mask[RT9467_IRQIDX_MAX] = {0};
1070 u8 stat[RT9467_IRQSTAT_MAX] = {0};
1071 u8 usb_status_old = 0, usb_status_new = 0;
1072
1073 dev_info(info->dev, "%s\n", __func__);
1074
1075 /* Read DPDM status before reading evts */
1076 ret = rt9467_i2c_read_byte(info, RT9467_REG_CHG_DPDM2);
1077 if (ret < 0) {
1078 dev_notice(info->dev, "%s: read type fail\n", __func__);
1079 goto err_read_irq;
1080 }
1081 usb_status_old = (ret & RT9467_MASK_USB_STATUS) >>
1082 RT9467_SHIFT_USB_STATUS;
1083
1084 /* Read event and skip CHG_IRQ3 */
1085 ret = rt9467_i2c_block_read(info, RT9467_REG_CHG_IRQ1, 2, &evt[3]);
1086 if (ret < 0) {
1087 dev_notice(info->dev, "%s: read evt1 fail(%d)\n", __func__,
1088 ret);
1089 goto err_read_irq;
1090 }
1091
1092 ret = rt9467_i2c_block_read(info, RT9467_REG_DPDM_IRQ, 1, &evt[6]);
1093 if (ret < 0) {
1094 dev_notice(info->dev, "%s: read evt2 fail(%d)\n", __func__,
1095 ret);
1096 goto err_read_irq;
1097 }
1098
1099 ret = rt9467_i2c_block_read(info, RT9467_REG_CHG_STATC, 3, evt);
1100 if (ret < 0) {
1101 dev_notice(info->dev, "%s: read stat fail(%d)\n", __func__,
1102 ret);
1103 goto err_read_irq;
1104 }
1105
1106 /* Read DPDM status after reading evts */
1107 ret = rt9467_i2c_read_byte(info, RT9467_REG_CHG_DPDM2);
1108 if (ret < 0) {
1109 dev_notice(info->dev, "%s: read type fail\n", __func__);
1110 goto err_read_irq;
1111 }
1112 usb_status_new = (ret & RT9467_MASK_USB_STATUS) >>
1113 RT9467_SHIFT_USB_STATUS;
1114
1115 /* Read mask */
1116 ret = rt9467_i2c_block_read(info, RT9467_REG_CHG_STATC_CTRL,
1117 ARRAY_SIZE(mask), mask);
1118 if (ret < 0) {
1119 dev_notice(info->dev, "%s: read mask fail(%d)\n", __func__,
1120 ret);
1121 goto err_read_irq;
1122 }
1123
1124 /* Detach */
1125 if (usb_status_old != RT9467_CHG_TYPE_NOVBUS &&
1126 usb_status_new == RT9467_CHG_TYPE_NOVBUS)
1127 evt[RT9467_IRQIDX_DPDM_IRQ] |= 0x02;
1128
1129 /* Attach */
1130 if (usb_status_new >= RT9467_CHG_TYPE_SDP &&
1131 usb_status_new <= RT9467_CHG_TYPE_CDP &&
1132 usb_status_old != usb_status_new)
1133 evt[RT9467_IRQIDX_DPDM_IRQ] |= 0x01;
1134
1135 /* Store/Update stat */
1136 memcpy(stat, info->irq_stat, RT9467_IRQSTAT_MAX);
1137
1138 for (i = 0; i < RT9467_IRQIDX_MAX; i++) {
1139 evt[i] &= ~mask[i];
1140 if (i < RT9467_IRQSTAT_MAX) {
1141 info->irq_stat[i] = evt[i];
1142 evt[i] ^= stat[i];
1143 }
1144 for (j = 0; j < 8; j++) {
1145 if (!(evt[i] & (1 << j)))
1146 continue;
1147 if (rt9467_irq_handler_tbl[i * 8 + j])
1148 rt9467_irq_handler_tbl[i * 8 + j](info);
1149 }
1150 }
1151
1152err_read_irq:
1153 return ret;
1154}
1155
1156static irqreturn_t rt9467_irq_handler(int irq, void *data)
1157{
1158 int ret = 0;
1159 struct rt9467_info *info = (struct rt9467_info *)data;
1160
1161 dev_info(info->dev, "%s\n", __func__);
1162
1163 ret = __rt9467_irq_handler(info);
1164 ret = rt9467_enable_irqrez(info, true);
1165 if (ret < 0)
1166 dev_notice(info->dev, "%s: en irqrez fail\n", __func__);
1167
1168 return IRQ_HANDLED;
1169}
1170
1171static int rt9467_irq_register(struct rt9467_info *info)
1172{
1173 int ret = 0, len = 0;
1174 char *name = NULL;
1175
1176 if (strcmp(info->desc->chg_dev_name, "secondary_chg") == 0)
1177 return 0;
1178
1179 dev_info(info->dev, "%s\n", __func__);
1180
1181 /* request gpio */
1182 len = strlen(info->desc->chg_dev_name);
1183 name = devm_kzalloc(info->dev, len + 10, GFP_KERNEL);
1184 snprintf(name, len + 10, "%s_irq_gpio", info->desc->chg_dev_name);
1185 ret = devm_gpio_request_one(info->dev, info->intr_gpio, GPIOF_IN, name);
1186 if (ret < 0) {
1187 dev_notice(info->dev, "%s: gpio request fail\n", __func__);
1188 return ret;
1189 }
1190
1191 ret = gpio_to_irq(info->intr_gpio);
1192 if (ret < 0) {
1193 dev_notice(info->dev, "%s: irq mapping fail\n", __func__);
1194 return ret;
1195 }
1196 info->irq = ret;
1197 dev_info(info->dev, "%s: irq = %d\n", __func__, info->irq);
1198
1199 /* Request threaded IRQ */
1200 name = devm_kzalloc(info->dev, len + 5, GFP_KERNEL);
1201 snprintf(name, len + 5, "%s_irq", info->desc->chg_dev_name);
1202 ret = devm_request_threaded_irq(info->dev, info->irq, NULL,
1203 rt9467_irq_handler, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, name,
1204 info);
1205 if (ret < 0) {
1206 dev_notice(info->dev, "%s: request thread irq fail\n",
1207 __func__);
1208 return ret;
1209 }
1210 device_init_wakeup(info->dev, true);
1211
1212 return 0;
1213}
1214
1215static inline int rt9467_maskall_irq(struct rt9467_info *info)
1216{
1217 dev_info(info->dev, "%s\n", __func__);
1218 return rt9467_i2c_block_write(info, RT9467_REG_CHG_STATC_CTRL,
1219 ARRAY_SIZE(rt9467_irq_maskall), rt9467_irq_maskall);
1220}
1221
1222static inline int rt9467_irq_init(struct rt9467_info *info)
1223{
1224 dev_info(info->dev, "%s\n", __func__);
1225 return rt9467_i2c_block_write(info, RT9467_REG_CHG_STATC_CTRL,
1226 ARRAY_SIZE(info->irq_mask), info->irq_mask);
1227}
1228
1229static bool rt9467_is_hw_exist(struct rt9467_info *info)
1230{
1231 int ret = 0;
1232 u8 vendor_id = 0, chip_rev = 0;
1233
1234 ret = i2c_smbus_read_byte_data(info->client, RT9467_REG_DEVICE_ID);
1235 if (ret < 0)
1236 return false;
1237
1238 vendor_id = ret & 0xF0;
1239 chip_rev = ret & 0x0F;
1240 if (vendor_id != RT9467_VENDOR_ID) {
1241 dev_notice(info->dev, "%s: vendor id is incorrect (0x%02X)\n",
1242 __func__, vendor_id);
1243 return false;
1244 }
1245
1246 dev_info(info->dev, "%s: 0x%02X\n", __func__, chip_rev);
1247 info->chip_rev = chip_rev;
1248
1249 return true;
1250}
1251
1252static inline int rt9467_enable_wdt(struct rt9467_info *info, bool en)
1253{
1254 dev_info(info->dev, "%s: en = %d\n", __func__, en);
1255 return (en ? rt9467_set_bit : rt9467_clr_bit)
1256 (info, RT9467_REG_CHG_CTRL13, RT9467_MASK_WDT_EN);
1257}
1258
1259static int rt9467_enable_hidden_mode(struct rt9467_info *info, bool en)
1260{
1261 int ret = 0;
1262
1263 mutex_lock(&info->hidden_mode_lock);
1264
1265 if (en) {
1266 if (info->hidden_mode_cnt == 0) {
1267 ret = rt9467_i2c_block_write(info, 0x70,
1268 ARRAY_SIZE(rt9467_val_en_hidden_mode),
1269 rt9467_val_en_hidden_mode);
1270 if (ret < 0)
1271 goto err;
1272 }
1273 info->hidden_mode_cnt++;
1274 } else {
1275 if (info->hidden_mode_cnt == 1) /* last one */
1276 ret = rt9467_i2c_write_byte(info, 0x70, 0x00);
1277 info->hidden_mode_cnt--;
1278 if (ret < 0)
1279 goto err;
1280 }
1281 dev_dbg(info->dev, "%s: en = %d\n", __func__, en);
1282 goto out;
1283
1284err:
1285 dev_notice(info->dev, "%s: en = %d fail(%d)\n", __func__, en, ret);
1286out:
1287 mutex_unlock(&info->hidden_mode_lock);
1288 return ret;
1289}
1290
1291static int rt9467_sw_workaround(struct rt9467_info *info)
1292{
1293 int ret = 0;
1294
1295 dev_info(info->dev, "%s\n", __func__);
1296
1297 rt9467_enable_hidden_mode(info, true);
1298
1299 /* Modify UG driver */
1300 ret = rt9467_i2c_update_bits(info, RT9467_REG_CHG_HIDDEN_CTRL4, 0xC0,
1301 0xF0);
1302 if (ret < 0)
1303 dev_notice(info->dev, "%s: set UG driver fail\n", __func__);
1304
1305 ret = rt9467_i2c_read_byte(info, RT9467_REG_CHG_HIDDEN_CTRL4);
1306 dev_info(info->dev, "%s: reg0x23 = 0x%02X\n", __func__, ret);
1307
1308 /* Disable TS auto sensing */
1309 ret = rt9467_clr_bit(info, RT9467_REG_CHG_HIDDEN_CTRL15, 0x01);
1310 if (ret < 0)
1311 goto out;
1312
1313 /* Only revision <= E1 needs the following workaround */
1314 if (info->chip_rev > RT9467_CHIP_REV_E1)
1315 goto out;
1316
1317 /* ICC: modify sensing node, make it more accurate */
1318 ret = rt9467_i2c_write_byte(info, RT9467_REG_CHG_HIDDEN_CTRL8, 0x00);
1319 if (ret < 0)
1320 goto out;
1321
1322 /* DIMIN level */
1323 ret = rt9467_i2c_write_byte(info, RT9467_REG_CHG_HIDDEN_CTRL9, 0x86);
1324
1325out:
1326 rt9467_enable_hidden_mode(info, false);
1327 return ret;
1328}
1329
1330static inline int rt9467_enable_hz(struct rt9467_info *info, bool en)
1331{
1332 dev_info(info->dev, "%s: en = %d\n", __func__, en);
1333 return (en ? rt9467_set_bit : rt9467_clr_bit)
1334 (info, RT9467_REG_CHG_CTRL1, RT9467_MASK_HZ_EN);
1335}
1336
1337/* Reset all registers' value to default */
1338static int rt9467_reset_chip(struct rt9467_info *info)
1339{
1340 int ret = 0;
1341
1342 dev_info(info->dev, "%s\n", __func__);
1343
1344 /* disable hz before reset chip */
1345 ret = rt9467_enable_hz(info, false);
1346 if (ret < 0) {
1347 dev_notice(info->dev, "%s: disable hz fail\n", __func__);
1348 return ret;
1349 }
1350
1351 return rt9467_set_bit(info, RT9467_REG_CORE_CTRL0, RT9467_MASK_RST);
1352}
1353
1354static inline int rt9467_enable_jeita(struct rt9467_info *info, bool en)
1355{
1356 dev_info(info->dev, "%s: en = %d\n", __func__, en);
1357 return (en ? rt9467_set_bit : rt9467_clr_bit)
1358 (info, RT9467_REG_CHG_CTRL16, RT9467_MASK_JEITA_EN);
1359}
1360
1361
1362static int rt9467_get_charging_status(struct rt9467_info *info,
1363 enum rt9467_charging_status *chg_stat)
1364{
1365 int ret = 0;
1366
1367 ret = rt9467_i2c_read_byte(info, RT9467_REG_CHG_STAT);
1368 if (ret < 0)
1369 return ret;
1370
1371 *chg_stat = (ret & RT9467_MASK_CHG_STAT) >> RT9467_SHIFT_CHG_STAT;
1372
1373 return ret;
1374}
1375
1376static inline int __rt9467_is_charging_enable(struct rt9467_info *info,
1377 bool *en)
1378{
1379 return rt9467_i2c_test_bit(info, RT9467_REG_CHG_CTRL2,
1380 RT9467_SHIFT_CHG_EN, en);
1381}
1382
1383static int __rt9467_get_ichg(struct rt9467_info *info, u32 *ichg)
1384{
1385 int ret = 0;
1386 u8 reg_ichg = 0;
1387
1388 ret = rt9467_i2c_read_byte(info, RT9467_REG_CHG_CTRL7);
1389 if (ret < 0)
1390 return ret;
1391
1392 reg_ichg = (ret & RT9467_MASK_ICHG) >> RT9467_SHIFT_ICHG;
1393 *ichg = rt9467_closest_value(RT9467_ICHG_MIN, RT9467_ICHG_MAX,
1394 RT9467_ICHG_STEP, reg_ichg);
1395
1396 return ret;
1397}
1398
1399static inline int rt9467_enable_irq_pulse(struct rt9467_info *info, bool en)
1400{
1401 dev_info(info->dev, "%s: en = %d\n", __func__, en);
1402 return (en ? rt9467_set_bit : rt9467_clr_bit)
1403 (info, RT9467_REG_CHG_CTRL1, RT9467_MASK_IRQ_PULSE);
1404}
1405
1406static inline int rt9467_get_irq_number(struct rt9467_info *info,
1407 const char *name)
1408{
1409 int i = 0;
1410
1411 if (!name) {
1412 dev_notice(info->dev, "%s: null name\n", __func__);
1413 return -EINVAL;
1414 }
1415
1416 for (i = 0; i < ARRAY_SIZE(rt9467_irq_mapping_tbl); i++) {
1417 if (!strcmp(name, rt9467_irq_mapping_tbl[i].name))
1418 return rt9467_irq_mapping_tbl[i].id;
1419 }
1420
1421 return -EINVAL;
1422}
1423
1424static int rt9467_parse_dt(struct rt9467_info *info, struct device *dev)
1425{
1426 int ret = 0, irq_cnt = 0;
1427 struct rt9467_desc *desc = NULL;
1428 struct device_node *np = dev->of_node;
1429 const char *name = NULL;
1430 int irqnum = 0;
1431
1432 dev_info(info->dev, "%s\n", __func__);
1433
1434 if (!np) {
1435 dev_notice(info->dev, "%s: no device node\n", __func__);
1436 return -EINVAL;
1437 }
1438
1439 info->desc = &rt9467_default_desc;
1440
1441 desc = devm_kzalloc(dev, sizeof(struct rt9467_desc), GFP_KERNEL);
1442 if (!desc)
1443 return -ENOMEM;
1444 memcpy(desc, &rt9467_default_desc, sizeof(struct rt9467_desc));
1445
1446 if (of_property_read_string(np, "charger_name",
1447 &desc->chg_dev_name) < 0)
1448 dev_notice(info->dev, "%s: no charger name\n", __func__);
1449
1450#if (!defined(CONFIG_MTK_GPIO) || defined(CONFIG_MTK_GPIOLIB_STAND))
1451 ret = of_get_named_gpio(np, "rt,intr_gpio", 0);
1452 if (ret < 0)
1453 return ret;
1454 info->intr_gpio = ret;
1455#else
1456 ret = of_property_read_u32(np, "rt,intr_gpio_num", &info->intr_gpio);
1457 if (ret < 0)
1458 return ret;
1459#endif
1460
1461 dev_info(info->dev, "%s: intr gpio = %d\n", __func__,
1462 info->intr_gpio);
1463
1464 desc->en_wdt = of_property_read_bool(np, "en_wdt");
1465 desc->en_irq_pulse = of_property_read_bool(np, "en_irq_pulse");
1466
1467 while (true) {
1468 ret = of_property_read_string_index(np, "interrupt-names",
1469 irq_cnt, &name);
1470 if (ret < 0)
1471 break;
1472 irq_cnt++;
1473 irqnum = rt9467_get_irq_number(info, name);
1474 if (irqnum >= 0)
1475 rt9467_irq_unmask(info, irqnum);
1476 }
1477
1478 info->desc = desc;
1479
1480 return 0;
1481}
1482
1483
1484/* =========================================================== */
1485/* Released interfaces */
1486/* =========================================================== */
1487
1488static int rt9467_set_boost_current_limit(struct rt9467_info *info,
1489 u32 current_limit)
1490{
1491 u8 reg_ilimit = 0;
1492 int ret = 0;
1493
1494 reg_ilimit = rt9467_closest_reg_via_tbl(rt9467_boost_oc_threshold,
1495 ARRAY_SIZE(rt9467_boost_oc_threshold), current_limit);
1496
1497 dev_info(info->dev, "%s: boost ilimit = %d(0x%02X)\n", __func__,
1498 current_limit, reg_ilimit);
1499
1500 /*adjust inducer ocp level with different current limit*/
1501 ret = ((current_limit >= 2100000) ? rt9467_set_bit :rt9467_clr_bit)
1502 (info, RT9467_REG_CHG_CTRL13, RT9467_MASK_OCP);
1503 if (ret < 0) {
1504 dev_notice(info->dev, "%s: set ocp fail\n", __func__);
1505 return ret;
1506 }
1507
1508 return rt9467_i2c_update_bits(info, RT9467_REG_CHG_CTRL10,
1509 reg_ilimit << RT9467_SHIFT_BOOST_OC, RT9467_MASK_BOOST_OC);
1510}
1511
1512static int rt9467_enable_otg(struct rt9467_info *info, bool en)
1513{
1514 int ret = 0;
1515 bool en_otg = false;
1516 u8 hidden_val = en ? 0x00 : 0x0F;
1517 u8 lg_slew_rate = en ? 0xCC : 0xC3;
1518
1519 dev_info(info->dev, "%s: en = %d\n", __func__, en);
1520
1521 rt9467_enable_hidden_mode(info, true);
1522
1523 /* Set OTG_OC to 1300mA */
1524 ret = rt9467_set_boost_current_limit(info, 1300000);
1525 if (ret < 0) {
1526 dev_notice(info->dev, "%s: set current limit fail\n", __func__);
1527 return ret;
1528 }
1529
1530 /*
1531 * Woraround : slow Low side mos Gate driver slew rate
1532 * for decline VBUS noise
1533 * reg[0x23] = 0xCC after entering OTG mode
1534 * reg[0x23] = 0xC3 after leaving OTG mode
1535 */
1536 ret = rt9467_i2c_write_byte(info, RT9467_REG_CHG_HIDDEN_CTRL4,
1537 lg_slew_rate);
1538 if (ret < 0) {
1539 dev_notice(info->dev,
1540 "%s: set Low side mos Gate drive speed fail(%d)\n",
1541 __func__, ret);
1542 goto out;
1543 }
1544
1545 /* Enable WDT */
1546 if (en && info->desc->en_wdt) {
1547 ret = rt9467_enable_wdt(info, true);
1548 if (ret < 0) {
1549 dev_notice(info->dev, "%s: en wdt fail\n", __func__);
1550 goto err_en_otg;
1551 }
1552 }
1553
1554 /* Switch OPA mode */
1555 ret = (en ? rt9467_set_bit : rt9467_clr_bit)
1556 (info, RT9467_REG_CHG_CTRL1, RT9467_MASK_OPA_MODE);
1557
1558 msleep(20);
1559
1560 if (en) {
1561 ret = rt9467_i2c_test_bit(info, RT9467_REG_CHG_CTRL1,
1562 RT9467_SHIFT_OPA_MODE, &en_otg);
1563 if (ret < 0 || !en_otg) {
1564 dev_notice(info->dev, "%s: otg fail(%d)\n", __func__,
1565 ret);
1566 goto err_en_otg;
1567 }
1568 }
1569
1570 /*
1571 * Woraround reg[0x25] = 0x00 after entering OTG mode
1572 * reg[0x25] = 0x0F after leaving OTG mode
1573 */
1574 ret = rt9467_i2c_write_byte(info, RT9467_REG_CHG_HIDDEN_CTRL6,
1575 hidden_val);
1576 if (ret < 0)
1577 dev_notice(info->dev, "%s: workaroud fail(%d)\n", __func__,
1578 ret);
1579
1580 /* Disable WDT */
1581 if (!en) {
1582 ret = rt9467_enable_wdt(info, false);
1583 if (ret < 0)
1584 dev_notice(info->dev, "%s: disable wdt fail\n",
1585 __func__);
1586 }
1587 goto out;
1588
1589err_en_otg:
1590 /* Disable WDT */
1591 ret = rt9467_enable_wdt(info, false);
1592 if (ret < 0)
1593 dev_notice(info->dev, "%s: disable wdt fail\n", __func__);
1594
1595 /* Recover Low side mos Gate slew rate */
1596 ret = rt9467_i2c_write_byte(info, RT9467_REG_CHG_HIDDEN_CTRL4, 0x73);
1597 if (ret < 0)
1598 dev_notice(info->dev,
1599 "%s: recover Low side mos Gate drive speed fail(%d)\n",
1600 __func__, ret);
1601 ret = -EIO;
1602out:
1603 rt9467_enable_hidden_mode(info, false);
1604 return ret;
1605}
1606
1607static int rt9467_enable_discharge(struct rt9467_info *info, bool en)
1608{
1609 int ret = 0, i = 0;
1610 const int check_dischg_max = 3;
1611 bool is_dischg = true;
1612
1613 dev_info(info->dev, "%s: en = %d\n", __func__, en);
1614
1615 ret = rt9467_enable_hidden_mode(info, true);
1616 if (ret < 0)
1617 return ret;
1618
1619 /* Set bit2 of reg[0x21] to 1 to enable discharging */
1620 ret = (en ? rt9467_set_bit : rt9467_clr_bit)(info,
1621 RT9467_REG_CHG_HIDDEN_CTRL2, 0x04);
1622 if (ret < 0) {
1623 dev_notice(info->dev, "%s: en = %d, fail\n", __func__, en);
1624 return ret;
1625 }
1626
1627 if (!en) {
1628 for (i = 0; i < check_dischg_max; i++) {
1629 ret = rt9467_i2c_test_bit(info,
1630 RT9467_REG_CHG_HIDDEN_CTRL2, 2, &is_dischg);
1631 if (ret >= 0 && !is_dischg)
1632 break;
1633 /* Disable discharging */
1634 ret = rt9467_clr_bit(info, RT9467_REG_CHG_HIDDEN_CTRL2,
1635 0x04);
1636 }
1637 if (i == check_dischg_max)
1638 dev_notice(info->dev, "%s: disable dischg fail(%d)\n",
1639 __func__, ret);
1640 }
1641
1642 rt9467_enable_hidden_mode(info, false);
1643 return ret;
1644}
1645
1646static int rt9467_get_ichg(struct rt9467_info *info, u32 *ichg)
1647{
1648 return __rt9467_get_ichg(info, ichg);
1649}
1650
1651static int rt9467_get_aicr(struct rt9467_info *info, u32 *aicr)
1652{
1653 int ret = 0;
1654 u8 reg_aicr = 0;
1655
1656 ret = rt9467_i2c_read_byte(info, RT9467_REG_CHG_CTRL3);
1657 if (ret < 0)
1658 return ret;
1659
1660 reg_aicr = (ret & RT9467_MASK_AICR) >> RT9467_SHIFT_AICR;
1661 *aicr = rt9467_closest_value(RT9467_AICR_MIN, RT9467_AICR_MAX,
1662 RT9467_AICR_STEP, reg_aicr);
1663
1664 return ret;
1665}
1666
1667
1668#if 0
1669static int rt9467_get_ibat(struct charger_device *chg_dev, u32 *ibat)
1670{
1671 int ret = 0, adc_ibat = 0;
1672 struct rt9467_info *info = dev_get_drvdata(&chg_dev->dev);
1673
1674 /* Get value from ADC */
1675 ret = rt9467_get_adc(info, RT9467_ADC_IBAT, &adc_ibat);
1676 if (ret < 0)
1677 return ret;
1678
1679 *ibat = adc_ibat;
1680
1681 dev_info(info->dev, "%s: ibat = %dmA\n", __func__, adc_ibat);
1682 return ret;
1683}
1684#endif
1685
1686#if 0 /* Uncomment if you need this API */
1687static int rt9467_get_vbus(struct charger_device *chg_dev, u32 *vbus)
1688{
1689 int ret = 0, adc_vbus = 0;
1690 struct rt9467_info *info = dev_get_drvdata(&chg_dev->dev);
1691
1692 /* Get value from ADC */
1693 ret = rt9467_get_adc(info, RT9467_ADC_VBUS_DIV2, &adc_vbus);
1694 if (ret < 0)
1695 return ret;
1696
1697 *vbus = adc_vbus;
1698
1699 dev_info(info->dev, "%s: vbus = %dmA\n", __func__, adc_vbus);
1700 return ret;
1701}
1702#endif
1703
1704static int rt9467_kick_wdt(struct rt9467_info *info)
1705{
1706 enum rt9467_charging_status chg_status = RT9467_CHG_STATUS_READY;
1707
1708 /* Any I2C communication can reset watchdog timer */
1709 return rt9467_get_charging_status(info, &chg_status);
1710}
1711
1712static int __rt9467_enable_auto_sensing(struct rt9467_info *info, bool en)
1713{
1714 int ret = 0;
1715 u8 auto_sense = 0;
1716 u8 *data = 0x00;
1717
1718 /* enter hidden mode */
1719 ret = rt9467_device_write(info->client, 0x70,
1720 ARRAY_SIZE(rt9467_val_en_hidden_mode),
1721 rt9467_val_en_hidden_mode);
1722 if (ret < 0)
1723 return ret;
1724
1725 ret = rt9467_device_read(info->client, RT9467_REG_CHG_HIDDEN_CTRL15, 1,
1726 &auto_sense);
1727 if (ret < 0) {
1728 dev_notice(info->dev, "%s: read auto sense fail\n", __func__);
1729 goto out;
1730 }
1731
1732 if (en)
1733 auto_sense &= 0xFE; /* clear bit0 */
1734 else
1735 auto_sense |= 0x01; /* set bit0 */
1736 ret = rt9467_device_write(info->client, RT9467_REG_CHG_HIDDEN_CTRL15, 1,
1737 &auto_sense);
1738 if (ret < 0)
1739 dev_notice(info->dev, "%s: en = %d fail\n", __func__, en);
1740
1741out:
1742 return rt9467_device_write(info->client, 0x70, 1, &data);
1743}
1744
1745/*
1746 * This function is used in shutdown function
1747 * Use i2c smbus directly
1748 */
1749static int rt9467_sw_reset(struct rt9467_info *info)
1750{
1751 int ret = 0;
1752 u8 evt[RT9467_IRQIDX_MAX] = {0};
1753
1754 /* Register 0x01 ~ 0x10 */
1755 u8 reg_data[] = {
1756 0x10, 0x03, 0x23, 0x3C, 0x67, 0x0B, 0x4C, 0xA1,
1757 0x3C, 0x58, 0x2C, 0x02, 0x52, 0x05, 0x00, 0x10
1758 };
1759
1760 dev_info(info->dev, "%s\n", __func__);
1761
1762 /* Disable auto sensing/Enable HZ,ship mode of secondary charger */
1763 if (strcmp(info->desc->chg_dev_name, "secondary_chg") == 0) {
1764 mutex_lock(&info->hidden_mode_lock);
1765 mutex_lock(&info->i2c_access_lock);
1766 __rt9467_enable_auto_sensing(info, false);
1767 mutex_unlock(&info->i2c_access_lock);
1768 mutex_unlock(&info->hidden_mode_lock);
1769
1770 reg_data[0] = 0x14; /* HZ */
1771 reg_data[1] = 0x83; /* Shipping mode */
1772 }
1773
1774 /* Mask all irq */
1775 mutex_lock(&info->i2c_access_lock);
1776 ret = rt9467_device_write(info->client, RT9467_REG_CHG_STATC_CTRL,
1777 ARRAY_SIZE(rt9467_irq_maskall), rt9467_irq_maskall);
1778 if (ret < 0)
1779 dev_notice(info->dev, "%s: mask all irq fail\n", __func__);
1780
1781 /* Read all irq */
1782 ret = rt9467_device_read(info->client, RT9467_REG_CHG_STATC, 5, evt);
1783 if (ret < 0)
1784 dev_notice(info->dev, "%s: read evt1 fail(%d)\n", __func__,
1785 ret);
1786
1787 ret = rt9467_device_read(info->client, RT9467_REG_DPDM_IRQ, 1, &evt[6]);
1788 if (ret < 0)
1789 dev_notice(info->dev, "%s: read evt2 fail(%d)\n", __func__,
1790 ret);
1791
1792 /* Reset necessary registers */
1793 ret = rt9467_device_write(info->client, RT9467_REG_CHG_CTRL1,
1794 ARRAY_SIZE(reg_data), reg_data);
1795 if (ret < 0)
1796 dev_notice(info->dev, "%s: reset registers fail\n", __func__);
1797 mutex_unlock(&info->i2c_access_lock);
1798
1799 return ret;
1800}
1801
1802static int rt9467_init_setting(struct rt9467_info *info)
1803{
1804 int ret = 0;
1805 struct rt9467_desc *desc = info->desc;
1806 u8 evt[RT9467_IRQIDX_MAX] = {0};
1807
1808 dev_info(info->dev, "%s\n", __func__);
1809
1810 ret = rt9467_clr_bit(info, RT9467_REG_CHG_CTRL2, RT9467_MASK_CHG_EN);
1811 if (ret < 0) {
1812 dev_notice(info->dev, "%s: disable chg_en fail\n",
1813 __func__);
1814 goto err;
1815 }
1816
1817 /* disable USB charger type detection before reset IRQ */
1818 ret = __rt9467_enable_chgdet_flow(info, false);
1819 if (ret < 0) {
1820 dev_notice(info->dev, "%s: disable usb chrdet fail\n",
1821 __func__);
1822 goto err;
1823 }
1824
1825 ret = rt9467_clr_bit(info, RT9467_REG_CHG_DPDM1, 0x40);
1826 if (ret < 0) {
1827 dev_notice(info->dev, "%s: disable attach delay fail\n",
1828 __func__);
1829 goto err;
1830 }
1831
1832 /* mask all irq */
1833 ret = rt9467_maskall_irq(info);
1834 if (ret < 0) {
1835 dev_notice(info->dev, "%s: mask all irq fail\n", __func__);
1836 goto err;
1837 }
1838
1839 /* clear event */
1840 ret = rt9467_i2c_block_read(info, RT9467_REG_CHG_STATC, ARRAY_SIZE(evt),
1841 evt);
1842 if (ret < 0) {
1843 dev_notice(info->dev, "%s: clr evt fail(%d)\n", __func__, ret);
1844 goto err;
1845 }
1846
1847 ret = rt9467_enable_irq_pulse(info, desc->en_irq_pulse);
1848 if (ret < 0)
1849 dev_notice(info->dev, "%s: set irq pulse fail\n", __func__);
1850
1851 ret = rt9467_sw_workaround(info);
1852 if (ret < 0) {
1853 dev_notice(info->dev, "%s: workaround fail\n", __func__);
1854 return ret;
1855 }
1856
1857err:
1858 return ret;
1859}
1860
1861int rt9467_enable_regulator_otg(struct regulator_dev *rdev)
1862{
1863 int ret = 0;
1864 struct rt9467_info *info = rdev_get_drvdata(rdev);
1865
1866 dev_info(info->dev, "%s\n", __func__);
1867
1868 ret = rt9467_enable_discharge(info, false);
1869 if (ret < 0) {
1870 dev_notice(info->dev, "%s: disable discharge fail\n", __func__);
1871 return ret;
1872 }
1873
1874 return rt9467_enable_otg(info, true);
1875}
1876
1877int rt9467_disable_regulator_otg(struct regulator_dev *rdev)
1878{
1879 int ret = 0;
1880 struct rt9467_info *info = rdev_get_drvdata(rdev);
1881
1882 dev_info(info->dev, "%s\n", __func__);
1883
1884 ret = rt9467_enable_otg(info, false);
1885 if (ret < 0) {
1886 dev_notice(info->dev, "%s: disable otg fail\n", __func__);
1887 return ret;
1888 }
1889
1890 return rt9467_enable_discharge(info, true);
1891}
1892
1893static int rt9467_set_current_limit(struct regulator_dev *rdev,
1894 int min_uA, int max_uA)
1895{
1896 struct rt9467_info *info = rdev_get_drvdata(rdev);
1897 int num = ARRAY_SIZE(rt9467_boost_oc_threshold);
1898
1899 if (min_uA < rt9467_boost_oc_threshold[0])
1900 min_uA = rt9467_boost_oc_threshold[0];
1901 else if (min_uA > rt9467_boost_oc_threshold[num - 1])
1902 min_uA = rt9467_boost_oc_threshold[num - 1];
1903
1904 return rt9467_set_boost_current_limit(info, min_uA);
1905}
1906
1907static int rt9467_get_current_limit(struct regulator_dev *rdev)
1908{
1909 int ret = 0, val = 0;
1910 struct rt9467_info *info = rdev_get_drvdata(rdev);
1911
1912 ret = rt9467_i2c_read_byte(info, RT9467_REG_CHG_CTRL10);
1913 if (ret < 0) {
1914 dev_notice(info->dev, "%s: read otg_cc fail\n", __func__);
1915 return ret;
1916 }
1917 val = (ret & RT9467_MASK_BOOST_OC) >> RT9467_SHIFT_BOOST_OC;
1918 return rt9467_boost_oc_threshold[val];
1919}
1920
1921static const struct regulator_ops rt9467_chg_otg_ops = {
1922 .enable = rt9467_enable_regulator_otg,
1923 .disable = rt9467_disable_regulator_otg,
1924 .is_enabled = regulator_is_enabled_regmap,
1925 .list_voltage = regulator_list_voltage_linear,
1926 .set_voltage_sel = regulator_set_voltage_sel_regmap,
1927 .get_voltage_sel = regulator_get_voltage_sel_regmap,
1928 .set_current_limit = rt9467_set_current_limit,
1929 .get_current_limit = rt9467_get_current_limit,
1930};
1931
1932static const struct regulator_desc rt9467_otg_rdesc = {
1933 .of_match = "usb-otg-vbus",
1934 .name = "usb-otg-vbus",
1935 .ops = &rt9467_chg_otg_ops,
1936 .owner = THIS_MODULE,
1937 .type = REGULATOR_VOLTAGE,
1938 .min_uV = 4425000,
1939 .uV_step = 25000, /* step 25mV */
1940 .n_voltages = 57, /* 4425mV to 5825mV */
1941 .vsel_reg = RT9467_REG_CHG_CTRL5,
1942 .vsel_mask = RT9467_MASK_BOOST_VOREG,
1943 .enable_reg = RT9467_REG_CHG_CTRL1,
1944 .enable_mask = RT9467_MASK_OPA_MODE,
1945};
1946/* ========================= */
1947/* I2C driver function */
1948/* ========================= */
1949
1950static int rt9467_probe(struct i2c_client *client,
1951 const struct i2c_device_id *dev_id)
1952{
1953 int ret = 0;
1954 struct rt9467_info *info = NULL;
1955 struct regulator_config config = { };
1956
1957 pr_info("%s(%s)\n", __func__, RT9467_DRV_VERSION);
1958
1959 info = devm_kzalloc(&client->dev, sizeof(struct rt9467_info),
1960 GFP_KERNEL);
1961 if (!info)
1962 return -ENOMEM;
1963
1964 mutex_init(&info->i2c_access_lock);
1965 mutex_init(&info->adc_access_lock);
1966 mutex_init(&info->irq_access_lock);
1967 mutex_init(&info->aicr_access_lock);
1968 mutex_init(&info->ichg_access_lock);
1969 mutex_init(&info->hidden_mode_lock);
1970
1971 info->client = client;
1972 info->dev = &client->dev;
1973 info->hidden_mode_cnt = 0;
1974 memcpy(info->irq_mask, rt9467_irq_maskall, RT9467_IRQIDX_MAX);
1975
1976 /* Is HW exist */
1977 if (!rt9467_is_hw_exist(info)) {
1978 dev_notice(info->dev, "%s: no rt9467 exists\n", __func__);
1979 ret = -ENODEV;
1980 goto err_no_dev;
1981 }
1982 i2c_set_clientdata(client, info);
1983
1984 ret = rt9467_parse_dt(info, &client->dev);
1985 if (ret < 0) {
1986 dev_notice(info->dev, "%s: parse dt fail\n", __func__);
1987 goto err_parse_dt;
1988 }
1989
1990 ret = rt9467_reset_chip(info);
1991 if (ret < 0) {
1992 dev_notice(info->dev, "%s: reset chip fail\n", __func__);
1993 goto err_reset_chip;
1994 }
1995
1996 ret = rt9467_init_setting(info);
1997 if (ret < 0) {
1998 dev_notice(info->dev, "%s: init setting fail\n", __func__);
1999 goto err_init_setting;
2000 }
2001
2002 ret = rt9467_irq_register(info);
2003 if (ret < 0) {
2004 dev_notice(info->dev, "%s: irq register fail\n", __func__);
2005 goto err_irq_register;
2006 }
2007
2008 ret = rt9467_irq_init(info);
2009 if (ret < 0) {
2010 dev_notice(info->dev, "%s: irq init fail\n", __func__);
2011 goto err_irq_init;
2012 }
2013
2014 /* otg regulator */
2015 config.dev = info->dev;
2016 config.driver_data = info;
2017 config.regmap = devm_regmap_init_i2c(info->client,
2018 &rt9467_regmap_config);
2019
2020 info->otg_rdev = devm_regulator_register(info->dev, &rt9467_otg_rdesc,
2021 &config);
2022 if (IS_ERR(info->otg_rdev)) {
2023 dev_notice(info->dev, "%s : regulator register fail\n", __func__);
2024 goto err_regulator_dev;
2025 }
2026
2027 dev_info(info->dev, "%s: successfully\n", __func__);
2028 return ret;
2029
2030err_regulator_dev:
2031err_irq_init:
2032err_irq_register:
2033err_init_setting:
2034err_reset_chip:
2035err_parse_dt:
2036err_no_dev:
2037 mutex_destroy(&info->i2c_access_lock);
2038 mutex_destroy(&info->adc_access_lock);
2039 mutex_destroy(&info->irq_access_lock);
2040 mutex_destroy(&info->aicr_access_lock);
2041 mutex_destroy(&info->ichg_access_lock);
2042 mutex_destroy(&info->hidden_mode_lock);
2043 return ret;
2044}
2045
2046
2047static int rt9467_remove(struct i2c_client *client)
2048{
2049 int ret = 0;
2050 struct rt9467_info *info = i2c_get_clientdata(client);
2051
2052 pr_info("%s\n", __func__);
2053
2054 if (info) {
2055 mutex_destroy(&info->i2c_access_lock);
2056 mutex_destroy(&info->adc_access_lock);
2057 mutex_destroy(&info->irq_access_lock);
2058 mutex_destroy(&info->aicr_access_lock);
2059 mutex_destroy(&info->ichg_access_lock);
2060 mutex_destroy(&info->hidden_mode_lock);
2061 }
2062
2063 return ret;
2064}
2065
2066static void rt9467_shutdown(struct i2c_client *client)
2067{
2068 int ret = 0;
2069 struct rt9467_info *info = i2c_get_clientdata(client);
2070
2071 pr_info("%s\n", __func__);
2072 if (info) {
2073 ret = rt9467_sw_reset(info);
2074 if (ret < 0)
2075 pr_notice("%s: sw reset fail\n", __func__);
2076 }
2077}
2078
2079static int rt9467_suspend(struct device *dev)
2080{
2081 struct rt9467_info *info = dev_get_drvdata(dev);
2082
2083 dev_info(dev, "%s\n", __func__);
2084 if (device_may_wakeup(dev))
2085 enable_irq_wake(info->irq);
2086
2087 return 0;
2088}
2089
2090static int rt9467_resume(struct device *dev)
2091{
2092 struct rt9467_info *info = dev_get_drvdata(dev);
2093
2094 dev_info(dev, "%s\n", __func__);
2095 if (device_may_wakeup(dev))
2096 disable_irq_wake(info->irq);
2097
2098 return 0;
2099}
2100
2101static SIMPLE_DEV_PM_OPS(rt9467_pm_ops, rt9467_suspend, rt9467_resume);
2102
2103static const struct i2c_device_id rt9467_i2c_id[] = {
2104 {"rt9467", 0},
2105 {}
2106};
2107MODULE_DEVICE_TABLE(i2c, rt9467_i2c_id);
2108
2109static const struct of_device_id rt9467_of_match[] = {
2110 { .compatible = "richtek,rt9467", },
2111 {},
2112};
2113MODULE_DEVICE_TABLE(of, rt9467_of_match);
2114
2115#ifndef CONFIG_OF
2116#define RT9467_BUSNUM 1
2117
2118static struct i2c_board_info rt9467_i2c_board_info __initdata = {
2119 I2C_BOARD_INFO("rt9467", RT9467_SALVE_ADDR)
2120};
2121#endif /* CONFIG_OF */
2122
2123
2124static struct i2c_driver rt9467_i2c_driver = {
2125 .driver = {
2126 .name = "rt9467",
2127 .owner = THIS_MODULE,
2128 .of_match_table = of_match_ptr(rt9467_of_match),
2129 .pm = &rt9467_pm_ops,
2130 },
2131 .probe = rt9467_probe,
2132 .remove = rt9467_remove,
2133 .shutdown = rt9467_shutdown,
2134 .id_table = rt9467_i2c_id,
2135};
2136
2137static int __init rt9467_init(void)
2138{
2139 int ret = 0;
2140
2141#ifdef CONFIG_OF
2142 pr_info("%s: with dts\n", __func__);
2143#else
2144 pr_info("%s: without dts\n", __func__);
2145 i2c_register_board_info(RT9467_BUSNUM, &rt9467_i2c_board_info, 1);
2146#endif
2147
2148 ret = i2c_add_driver(&rt9467_i2c_driver);
2149 if (ret < 0)
2150 pr_notice("%s: register i2c driver fail\n", __func__);
2151
2152 return ret;
2153}
2154module_init(rt9467_init);
2155
2156
2157static void __exit rt9467_exit(void)
2158{
2159 i2c_del_driver(&rt9467_i2c_driver);
2160}
2161module_exit(rt9467_exit);
2162
2163
2164MODULE_LICENSE("GPL");
2165MODULE_AUTHOR("ShuFanLee <shufan_lee@richtek.com>");
2166MODULE_DESCRIPTION("RT9467 Charger Driver");
2167MODULE_VERSION(RT9467_DRV_VERSION);
2168
2169/*
2170 * Release Note
2171 * 1.0.19
2172 * (1) Fast toggle chgdet flow
2173 * (2) When chg_type is DCP, enable chgdet for D+ 0.6V
2174 * (3) mutex_unlock() once in rt9467_attachi_irq_handler()
2175 * (4) Lower UG driver slew rate
2176 * (5) Show VBUS, CV in rt9467_dump_register()
2177 *
2178 * 1.0.18
2179 * (1) Check tchg 3 times if it >= 120 degree
2180 *
2181 * 1.0.17
2182 * (1) Add ichg workaround
2183 *
2184 * 1.0.16
2185 * (1) Fix type error of enable_auto_sensing in sw_reset
2186 * (2) Move irq_mask to info structure
2187 * (3) Remove config of Charger_Detect_Init/Release
2188 *
2189 * 1.0.15
2190 * (1) Do ilim select in WQ and register charger class in probe
2191 *
2192 * 1.0.14
2193 * (1) Disable attach delay
2194 * (2) Enable IRQ_RZE at the end of irq handler
2195 * (3) Remove IRQ related registers from reg_addr
2196 * (4) Recheck status in irq handler
2197 * (5) Use bc12_access_lock instead of chgdet_lock
2198 *
2199 * 1.0.13
2200 * (1) Add do event interface for polling mode
2201 * (2) Check INT pin after reading evt
2202 *
2203 * 1.0.12
2204 * (1) Add MTK_SSUSB config for Charger_Detect_Init/Release
2205 *
2206 * 1.0.11
2207 * (1) Disable psk mode in pep20_reest
2208 * (2) For secondary chg, enter shipping mode before shdn
2209 * (3) Add BC12 sdp workaround
2210 * (4) Remove enabling/disabling ILIM in chgdet_handler
2211 *
2212 * 1.0.10
2213 * (1) Add IEOC workaround
2214 * (2) Release set_ieoc/enable_te interface
2215 * (3) Fix type errors
2216 *
2217 * 1.0.9
2218 * (1) Add USB workaround for CDP port
2219 * (2) Plug in -> usbsw to charger, after chgdet usbsw to AP
2220 * Plug out -> usbsw to AP
2221 * (3) Filter out not changed irq state
2222 * (4) Not to use CHG_IRQ3
2223 *
2224 * 1.0.8
2225 * (1) Set irq to wake up system
2226 * (2) Refine I2C driver related table
2227 *
2228 * 1.0.7
2229 * (1) Enable/Disable ILIM in chgdet_handler
2230 *
2231 * 1.0.6
2232 * (1) Prevent backboot
2233 * (2) Add CEB pin control for secondary charger
2234 * (3) After PE pattern -> Enable skip mode
2235 * Disable skip mode -> Start PE pattern
2236 * (4) Disable BC12 detection before reset IRQ in init_setting
2237 *
2238 * 1.0.5
2239 * (1) Remove wait CDP flow
2240 * (2) Add rt9467_chgdet_handler for attachi/detachi
2241 * (3) Set secondary chg to HZ if it is not in charging mode
2242 * (4) Add is_charging_enabled, get_min_ichg OPS
2243 *
2244 * 1.0.4
2245 * (1) Set ichg&aicr, enable chg before sending PE+ series pattern
2246 * (2) Add enable_cable_drop_com OPS
2247 *
2248 * 1.0.3
2249 * (1) IRQs are default unmasked before E4, need to mask them manually
2250 *
2251 * 1.0.2
2252 * (1) Fix AICL workqueue lock issue
2253 *
2254 * 1.0.1
2255 * (1) Fix IRQ init sequence
2256 *
2257 * 1.0.0
2258 * (1) Initial released
2259 */