1/*
2 * Driver for Richtek RT9455WSC battery charger.
3 *
4 * Copyright (C) 2015 Intel Corporation
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 */
16
17#include <linux/module.h>
18#include <linux/interrupt.h>
19#include <linux/delay.h>
20#include <linux/of_irq.h>
21#include <linux/of_device.h>
22#include <linux/pm_runtime.h>
23#include <linux/power_supply.h>
24#include <linux/i2c.h>
25#include <linux/acpi.h>
26#include <linux/usb/phy.h>
27#include <linux/regmap.h>
28
29#define RT9455_MANUFACTURER			"Richtek"
30#define RT9455_MODEL_NAME			"RT9455"
31#define RT9455_DRIVER_NAME			"rt9455-charger"
32
33#define RT9455_IRQ_NAME				"interrupt"
34
35#define RT9455_PWR_RDY_DELAY			1 /* 1 second */
36#define RT9455_MAX_CHARGING_TIME		21600 /* 6 hrs */
37#define RT9455_BATT_PRESENCE_DELAY		60 /* 60 seconds */
38
39#define RT9455_CHARGE_MODE			0x00
40#define RT9455_BOOST_MODE			0x01
41
42#define RT9455_FAULT				0x03
43
44#define RT9455_IAICR_100MA			0x00
45#define RT9455_IAICR_500MA			0x01
46#define RT9455_IAICR_NO_LIMIT			0x03
47
48#define RT9455_CHARGE_DISABLE			0x00
49#define RT9455_CHARGE_ENABLE			0x01
50
51#define RT9455_PWR_FAULT			0x00
52#define RT9455_PWR_GOOD				0x01
53
54#define RT9455_REG_CTRL1			0x00 /* CTRL1 reg address */
55#define RT9455_REG_CTRL2			0x01 /* CTRL2 reg address */
56#define RT9455_REG_CTRL3			0x02 /* CTRL3 reg address */
57#define RT9455_REG_DEV_ID			0x03 /* DEV_ID reg address */
58#define RT9455_REG_CTRL4			0x04 /* CTRL4 reg address */
59#define RT9455_REG_CTRL5			0x05 /* CTRL5 reg address */
60#define RT9455_REG_CTRL6			0x06 /* CTRL6 reg address */
61#define RT9455_REG_CTRL7			0x07 /* CTRL7 reg address */
62#define RT9455_REG_IRQ1				0x08 /* IRQ1 reg address */
63#define RT9455_REG_IRQ2				0x09 /* IRQ2 reg address */
64#define RT9455_REG_IRQ3				0x0A /* IRQ3 reg address */
65#define RT9455_REG_MASK1			0x0B /* MASK1 reg address */
66#define RT9455_REG_MASK2			0x0C /* MASK2 reg address */
67#define RT9455_REG_MASK3			0x0D /* MASK3 reg address */
68
69enum rt9455_fields {
70	F_STAT, F_BOOST, F_PWR_RDY, F_OTG_PIN_POLARITY, /* CTRL1 reg fields */
71
72	F_IAICR, F_TE_SHDN_EN, F_HIGHER_OCP, F_TE, F_IAICR_INT, F_HIZ,
73	F_OPA_MODE, /* CTRL2 reg fields */
74
75	F_VOREG, F_OTG_PL, F_OTG_EN, /* CTRL3 reg fields */
76
77	F_VENDOR_ID, F_CHIP_REV, /* DEV_ID reg fields */
78
79	F_RST, /* CTRL4 reg fields */
80
81	F_TMR_EN, F_MIVR, F_IPREC, F_IEOC_PERCENTAGE, /* CTRL5 reg fields*/
82
83	F_IAICR_SEL, F_ICHRG, F_VPREC, /* CTRL6 reg fields */
84
85	F_BATD_EN, F_CHG_EN, F_VMREG, /* CTRL7 reg fields */
86
87	F_TSDI, F_VINOVPI, F_BATAB, /* IRQ1 reg fields */
88
89	F_CHRVPI, F_CHBATOVI, F_CHTERMI, F_CHRCHGI, F_CH32MI, F_CHTREGI,
90	F_CHMIVRI, /* IRQ2 reg fields */
91
92	F_BSTBUSOVI, F_BSTOLI, F_BSTLOWVI, F_BST32SI, /* IRQ3 reg fields */
93
94	F_TSDM, F_VINOVPIM, F_BATABM, /* MASK1 reg fields */
95
96	F_CHRVPIM, F_CHBATOVIM, F_CHTERMIM, F_CHRCHGIM, F_CH32MIM, F_CHTREGIM,
97	F_CHMIVRIM, /* MASK2 reg fields */
98
99	F_BSTVINOVIM, F_BSTOLIM, F_BSTLOWVIM, F_BST32SIM, /* MASK3 reg fields */
100
101	F_MAX_FIELDS
102};
103
104static const struct reg_field rt9455_reg_fields[] = {
105	[F_STAT]		= REG_FIELD(RT9455_REG_CTRL1, 4, 5),
106	[F_BOOST]		= REG_FIELD(RT9455_REG_CTRL1, 3, 3),
107	[F_PWR_RDY]		= REG_FIELD(RT9455_REG_CTRL1, 2, 2),
108	[F_OTG_PIN_POLARITY]	= REG_FIELD(RT9455_REG_CTRL1, 1, 1),
109
110	[F_IAICR]		= REG_FIELD(RT9455_REG_CTRL2, 6, 7),
111	[F_TE_SHDN_EN]		= REG_FIELD(RT9455_REG_CTRL2, 5, 5),
112	[F_HIGHER_OCP]		= REG_FIELD(RT9455_REG_CTRL2, 4, 4),
113	[F_TE]			= REG_FIELD(RT9455_REG_CTRL2, 3, 3),
114	[F_IAICR_INT]		= REG_FIELD(RT9455_REG_CTRL2, 2, 2),
115	[F_HIZ]			= REG_FIELD(RT9455_REG_CTRL2, 1, 1),
116	[F_OPA_MODE]		= REG_FIELD(RT9455_REG_CTRL2, 0, 0),
117
118	[F_VOREG]		= REG_FIELD(RT9455_REG_CTRL3, 2, 7),
119	[F_OTG_PL]		= REG_FIELD(RT9455_REG_CTRL3, 1, 1),
120	[F_OTG_EN]		= REG_FIELD(RT9455_REG_CTRL3, 0, 0),
121
122	[F_VENDOR_ID]		= REG_FIELD(RT9455_REG_DEV_ID, 4, 7),
123	[F_CHIP_REV]		= REG_FIELD(RT9455_REG_DEV_ID, 0, 3),
124
125	[F_RST]			= REG_FIELD(RT9455_REG_CTRL4, 7, 7),
126
127	[F_TMR_EN]		= REG_FIELD(RT9455_REG_CTRL5, 7, 7),
128	[F_MIVR]		= REG_FIELD(RT9455_REG_CTRL5, 4, 5),
129	[F_IPREC]		= REG_FIELD(RT9455_REG_CTRL5, 2, 3),
130	[F_IEOC_PERCENTAGE]	= REG_FIELD(RT9455_REG_CTRL5, 0, 1),
131
132	[F_IAICR_SEL]		= REG_FIELD(RT9455_REG_CTRL6, 7, 7),
133	[F_ICHRG]		= REG_FIELD(RT9455_REG_CTRL6, 4, 6),
134	[F_VPREC]		= REG_FIELD(RT9455_REG_CTRL6, 0, 2),
135
136	[F_BATD_EN]		= REG_FIELD(RT9455_REG_CTRL7, 6, 6),
137	[F_CHG_EN]		= REG_FIELD(RT9455_REG_CTRL7, 4, 4),
138	[F_VMREG]		= REG_FIELD(RT9455_REG_CTRL7, 0, 3),
139
140	[F_TSDI]		= REG_FIELD(RT9455_REG_IRQ1, 7, 7),
141	[F_VINOVPI]		= REG_FIELD(RT9455_REG_IRQ1, 6, 6),
142	[F_BATAB]		= REG_FIELD(RT9455_REG_IRQ1, 0, 0),
143
144	[F_CHRVPI]		= REG_FIELD(RT9455_REG_IRQ2, 7, 7),
145	[F_CHBATOVI]		= REG_FIELD(RT9455_REG_IRQ2, 5, 5),
146	[F_CHTERMI]		= REG_FIELD(RT9455_REG_IRQ2, 4, 4),
147	[F_CHRCHGI]		= REG_FIELD(RT9455_REG_IRQ2, 3, 3),
148	[F_CH32MI]		= REG_FIELD(RT9455_REG_IRQ2, 2, 2),
149	[F_CHTREGI]		= REG_FIELD(RT9455_REG_IRQ2, 1, 1),
150	[F_CHMIVRI]		= REG_FIELD(RT9455_REG_IRQ2, 0, 0),
151
152	[F_BSTBUSOVI]		= REG_FIELD(RT9455_REG_IRQ3, 7, 7),
153	[F_BSTOLI]		= REG_FIELD(RT9455_REG_IRQ3, 6, 6),
154	[F_BSTLOWVI]		= REG_FIELD(RT9455_REG_IRQ3, 5, 5),
155	[F_BST32SI]		= REG_FIELD(RT9455_REG_IRQ3, 3, 3),
156
157	[F_TSDM]		= REG_FIELD(RT9455_REG_MASK1, 7, 7),
158	[F_VINOVPIM]		= REG_FIELD(RT9455_REG_MASK1, 6, 6),
159	[F_BATABM]		= REG_FIELD(RT9455_REG_MASK1, 0, 0),
160
161	[F_CHRVPIM]		= REG_FIELD(RT9455_REG_MASK2, 7, 7),
162	[F_CHBATOVIM]		= REG_FIELD(RT9455_REG_MASK2, 5, 5),
163	[F_CHTERMIM]		= REG_FIELD(RT9455_REG_MASK2, 4, 4),
164	[F_CHRCHGIM]		= REG_FIELD(RT9455_REG_MASK2, 3, 3),
165	[F_CH32MIM]		= REG_FIELD(RT9455_REG_MASK2, 2, 2),
166	[F_CHTREGIM]		= REG_FIELD(RT9455_REG_MASK2, 1, 1),
167	[F_CHMIVRIM]		= REG_FIELD(RT9455_REG_MASK2, 0, 0),
168
169	[F_BSTVINOVIM]		= REG_FIELD(RT9455_REG_MASK3, 7, 7),
170	[F_BSTOLIM]		= REG_FIELD(RT9455_REG_MASK3, 6, 6),
171	[F_BSTLOWVIM]		= REG_FIELD(RT9455_REG_MASK3, 5, 5),
172	[F_BST32SIM]		= REG_FIELD(RT9455_REG_MASK3, 3, 3),
173};
174
175#define GET_MASK(fid)	(BIT(rt9455_reg_fields[fid].msb + 1) - \
176			 BIT(rt9455_reg_fields[fid].lsb))
177
178/*
179 * Each array initialised below shows the possible real-world values for a
180 * group of bits belonging to RT9455 registers. The arrays are sorted in
181 * ascending order. The index of each real-world value represents the value
182 * that is encoded in the group of bits belonging to RT9455 registers.
183 */
184/* REG06[6:4] (ICHRG) in uAh */
185static const int rt9455_ichrg_values[] = {
186	 500000,  650000,  800000,  950000, 1100000, 1250000, 1400000, 1550000
187};
188
189/*
190 * When the charger is in charge mode, REG02[7:2] represent battery regulation
191 * voltage.
192 */
193/* REG02[7:2] (VOREG) in uV */
194static const int rt9455_voreg_values[] = {
195	3500000, 3520000, 3540000, 3560000, 3580000, 3600000, 3620000, 3640000,
196	3660000, 3680000, 3700000, 3720000, 3740000, 3760000, 3780000, 3800000,
197	3820000, 3840000, 3860000, 3880000, 3900000, 3920000, 3940000, 3960000,
198	3980000, 4000000, 4020000, 4040000, 4060000, 4080000, 4100000, 4120000,
199	4140000, 4160000, 4180000, 4200000, 4220000, 4240000, 4260000, 4280000,
200	4300000, 4330000, 4350000, 4370000, 4390000, 4410000, 4430000, 4450000,
201	4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000,
202	4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000, 4450000
203};
204
205/*
206 * When the charger is in boost mode, REG02[7:2] represent boost output
207 * voltage.
208 */
209/* REG02[7:2] (Boost output voltage) in uV */
210static const int rt9455_boost_voltage_values[] = {
211	4425000, 4450000, 4475000, 4500000, 4525000, 4550000, 4575000, 4600000,
212	4625000, 4650000, 4675000, 4700000, 4725000, 4750000, 4775000, 4800000,
213	4825000, 4850000, 4875000, 4900000, 4925000, 4950000, 4975000, 5000000,
214	5025000, 5050000, 5075000, 5100000, 5125000, 5150000, 5175000, 5200000,
215	5225000, 5250000, 5275000, 5300000, 5325000, 5350000, 5375000, 5400000,
216	5425000, 5450000, 5475000, 5500000, 5525000, 5550000, 5575000, 5600000,
217	5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000,
218	5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000, 5600000,
219};
220
221/* REG07[3:0] (VMREG) in uV */
222static const int rt9455_vmreg_values[] = {
223	4200000, 4220000, 4240000, 4260000, 4280000, 4300000, 4320000, 4340000,
224	4360000, 4380000, 4400000, 4430000, 4450000, 4450000, 4450000, 4450000
225};
226
227/* REG05[5:4] (IEOC_PERCENTAGE) */
228static const int rt9455_ieoc_percentage_values[] = {
229	10, 30, 20, 30
230};
231
232/* REG05[1:0] (MIVR) in uV */
233static const int rt9455_mivr_values[] = {
234	4000000, 4250000, 4500000, 5000000
235};
236
237/* REG05[1:0] (IAICR) in uA */
238static const int rt9455_iaicr_values[] = {
239	100000, 500000, 1000000, 2000000
240};
241
242struct rt9455_info {
243	struct i2c_client		*client;
244	struct regmap			*regmap;
245	struct regmap_field		*regmap_fields[F_MAX_FIELDS];
246	struct power_supply		*charger;
247#if IS_ENABLED(CONFIG_USB_PHY)
248	struct usb_phy			*usb_phy;
249	struct notifier_block		nb;
250#endif
251	struct delayed_work		pwr_rdy_work;
252	struct delayed_work		max_charging_time_work;
253	struct delayed_work		batt_presence_work;
254	u32				voreg;
255	u32				boost_voltage;
256};
257
258/*
259 * Iterate through each element of the 'tbl' array until an element whose value
260 * is greater than v is found. Return the index of the respective element,
261 * or the index of the last element in the array, if no such element is found.
262 */
263static unsigned int rt9455_find_idx(const int tbl[], int tbl_size, int v)
264{
265	int i;
266
267	/*
268	 * No need to iterate until the last index in the table because
269	 * if no element greater than v is found in the table,
270	 * or if only the last element is greater than v,
271	 * function returns the index of the last element.
272	 */
273	for (i = 0; i < tbl_size - 1; i++)
274		if (v <= tbl[i])
275			return i;
276
277	return (tbl_size - 1);
278}
279
280static int rt9455_get_field_val(struct rt9455_info *info,
281				enum rt9455_fields field,
282				const int tbl[], int tbl_size, int *val)
283{
284	unsigned int v;
285	int ret;
286
287	ret = regmap_field_read(info->regmap_fields[field], &v);
288	if (ret)
289		return ret;
290
291	v = (v >= tbl_size) ? (tbl_size - 1) : v;
292	*val = tbl[v];
293
294	return 0;
295}
296
297static int rt9455_set_field_val(struct rt9455_info *info,
298				enum rt9455_fields field,
299				const int tbl[], int tbl_size, int val)
300{
301	unsigned int idx = rt9455_find_idx(tbl, tbl_size, val);
302
303	return regmap_field_write(info->regmap_fields[field], idx);
304}
305
306static int rt9455_register_reset(struct rt9455_info *info)
307{
308	struct device *dev = &info->client->dev;
309	unsigned int v;
310	int ret, limit = 100;
311
312	ret = regmap_field_write(info->regmap_fields[F_RST], 0x01);
313	if (ret) {
314		dev_err(dev, "Failed to set RST bit\n");
315		return ret;
316	}
317
318	/*
319	 * To make sure that reset operation has finished, loop until RST bit
320	 * is set to 0.
321	 */
322	do {
323		ret = regmap_field_read(info->regmap_fields[F_RST], &v);
324		if (ret) {
325			dev_err(dev, "Failed to read RST bit\n");
326			return ret;
327		}
328
329		if (!v)
330			break;
331
332		usleep_range(10, 100);
333	} while (--limit);
334
335	if (!limit)
336		return -EIO;
337
338	return 0;
339}
340
341/* Charger power supply property routines */
342static enum power_supply_property rt9455_charger_properties[] = {
343	POWER_SUPPLY_PROP_STATUS,
344	POWER_SUPPLY_PROP_HEALTH,
345	POWER_SUPPLY_PROP_PRESENT,
346	POWER_SUPPLY_PROP_ONLINE,
347	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT,
348	POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX,
349	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE,
350	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX,
351	POWER_SUPPLY_PROP_SCOPE,
352	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
353	POWER_SUPPLY_PROP_MODEL_NAME,
354	POWER_SUPPLY_PROP_MANUFACTURER,
355};
356
357static char *rt9455_charger_supplied_to[] = {
358	"main-battery",
359};
360
361static int rt9455_charger_get_status(struct rt9455_info *info,
362				     union power_supply_propval *val)
363{
364	unsigned int v, pwr_rdy;
365	int ret;
366
367	ret = regmap_field_read(info->regmap_fields[F_PWR_RDY],
368				&pwr_rdy);
369	if (ret) {
370		dev_err(&info->client->dev, "Failed to read PWR_RDY bit\n");
371		return ret;
372	}
373
374	/*
375	 * If PWR_RDY bit is unset, the battery is discharging. Otherwise,
376	 * STAT bits value must be checked.
377	 */
378	if (!pwr_rdy) {
379		val->intval = POWER_SUPPLY_STATUS_DISCHARGING;
380		return 0;
381	}
382
383	ret = regmap_field_read(info->regmap_fields[F_STAT], &v);
384	if (ret) {
385		dev_err(&info->client->dev, "Failed to read STAT bits\n");
386		return ret;
387	}
388
389	switch (v) {
390	case 0:
391		/*
392		 * If PWR_RDY bit is set, but STAT bits value is 0, the charger
393		 * may be in one of the following cases:
394		 * 1. CHG_EN bit is 0.
395		 * 2. CHG_EN bit is 1 but the battery is not connected.
396		 * In any of these cases, POWER_SUPPLY_STATUS_NOT_CHARGING is
397		 * returned.
398		 */
399		val->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
400		return 0;
401	case 1:
402		val->intval = POWER_SUPPLY_STATUS_CHARGING;
403		return 0;
404	case 2:
405		val->intval = POWER_SUPPLY_STATUS_FULL;
406		return 0;
407	default:
408		val->intval = POWER_SUPPLY_STATUS_UNKNOWN;
409		return 0;
410	}
411}
412
413static int rt9455_charger_get_health(struct rt9455_info *info,
414				     union power_supply_propval *val)
415{
416	struct device *dev = &info->client->dev;
417	unsigned int v;
418	int ret;
419
420	val->intval = POWER_SUPPLY_HEALTH_GOOD;
421
422	ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &v);
423	if (ret) {
424		dev_err(dev, "Failed to read IRQ1 register\n");
425		return ret;
426	}
427
428	if (v & GET_MASK(F_TSDI)) {
429		val->intval = POWER_SUPPLY_HEALTH_OVERHEAT;
430		return 0;
431	}
432	if (v & GET_MASK(F_VINOVPI)) {
433		val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
434		return 0;
435	}
436	if (v & GET_MASK(F_BATAB)) {
437		val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
438		return 0;
439	}
440
441	ret = regmap_read(info->regmap, RT9455_REG_IRQ2, &v);
442	if (ret) {
443		dev_err(dev, "Failed to read IRQ2 register\n");
444		return ret;
445	}
446
447	if (v & GET_MASK(F_CHBATOVI)) {
448		val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
449		return 0;
450	}
451	if (v & GET_MASK(F_CH32MI)) {
452		val->intval = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE;
453		return 0;
454	}
455
456	ret = regmap_read(info->regmap, RT9455_REG_IRQ3, &v);
457	if (ret) {
458		dev_err(dev, "Failed to read IRQ3 register\n");
459		return ret;
460	}
461
462	if (v & GET_MASK(F_BSTBUSOVI)) {
463		val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
464		return 0;
465	}
466	if (v & GET_MASK(F_BSTOLI)) {
467		val->intval = POWER_SUPPLY_HEALTH_OVERVOLTAGE;
468		return 0;
469	}
470	if (v & GET_MASK(F_BSTLOWVI)) {
471		val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
472		return 0;
473	}
474	if (v & GET_MASK(F_BST32SI)) {
475		val->intval = POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE;
476		return 0;
477	}
478
479	ret = regmap_field_read(info->regmap_fields[F_STAT], &v);
480	if (ret) {
481		dev_err(dev, "Failed to read STAT bits\n");
482		return ret;
483	}
484
485	if (v == RT9455_FAULT) {
486		val->intval = POWER_SUPPLY_HEALTH_UNSPEC_FAILURE;
487		return 0;
488	}
489
490	return 0;
491}
492
493static int rt9455_charger_get_battery_presence(struct rt9455_info *info,
494					       union power_supply_propval *val)
495{
496	unsigned int v;
497	int ret;
498
499	ret = regmap_field_read(info->regmap_fields[F_BATAB], &v);
500	if (ret) {
501		dev_err(&info->client->dev, "Failed to read BATAB bit\n");
502		return ret;
503	}
504
505	/*
506	 * Since BATAB is 1 when battery is NOT present and 0 otherwise,
507	 * !BATAB is returned.
508	 */
509	val->intval = !v;
510
511	return 0;
512}
513
514static int rt9455_charger_get_online(struct rt9455_info *info,
515				     union power_supply_propval *val)
516{
517	unsigned int v;
518	int ret;
519
520	ret = regmap_field_read(info->regmap_fields[F_PWR_RDY], &v);
521	if (ret) {
522		dev_err(&info->client->dev, "Failed to read PWR_RDY bit\n");
523		return ret;
524	}
525
526	val->intval = (int)v;
527
528	return 0;
529}
530
531static int rt9455_charger_get_current(struct rt9455_info *info,
532				      union power_supply_propval *val)
533{
534	int curr;
535	int ret;
536
537	ret = rt9455_get_field_val(info, F_ICHRG,
538				   rt9455_ichrg_values,
539				   ARRAY_SIZE(rt9455_ichrg_values),
540				   &curr);
541	if (ret) {
542		dev_err(&info->client->dev, "Failed to read ICHRG value\n");
543		return ret;
544	}
545
546	val->intval = curr;
547
548	return 0;
549}
550
551static int rt9455_charger_get_current_max(struct rt9455_info *info,
552					  union power_supply_propval *val)
553{
554	int idx = ARRAY_SIZE(rt9455_ichrg_values) - 1;
555
556	val->intval = rt9455_ichrg_values[idx];
557
558	return 0;
559}
560
561static int rt9455_charger_get_voltage(struct rt9455_info *info,
562				      union power_supply_propval *val)
563{
564	int voltage;
565	int ret;
566
567	ret = rt9455_get_field_val(info, F_VOREG,
568				   rt9455_voreg_values,
569				   ARRAY_SIZE(rt9455_voreg_values),
570				   &voltage);
571	if (ret) {
572		dev_err(&info->client->dev, "Failed to read VOREG value\n");
573		return ret;
574	}
575
576	val->intval = voltage;
577
578	return 0;
579}
580
581static int rt9455_charger_get_voltage_max(struct rt9455_info *info,
582					  union power_supply_propval *val)
583{
584	int idx = ARRAY_SIZE(rt9455_vmreg_values) - 1;
585
586	val->intval = rt9455_vmreg_values[idx];
587
588	return 0;
589}
590
591static int rt9455_charger_get_term_current(struct rt9455_info *info,
592					   union power_supply_propval *val)
593{
594	struct device *dev = &info->client->dev;
595	int ichrg, ieoc_percentage, ret;
596
597	ret = rt9455_get_field_val(info, F_ICHRG,
598				   rt9455_ichrg_values,
599				   ARRAY_SIZE(rt9455_ichrg_values),
600				   &ichrg);
601	if (ret) {
602		dev_err(dev, "Failed to read ICHRG value\n");
603		return ret;
604	}
605
606	ret = rt9455_get_field_val(info, F_IEOC_PERCENTAGE,
607				   rt9455_ieoc_percentage_values,
608				   ARRAY_SIZE(rt9455_ieoc_percentage_values),
609				   &ieoc_percentage);
610	if (ret) {
611		dev_err(dev, "Failed to read IEOC value\n");
612		return ret;
613	}
614
615	val->intval = ichrg * ieoc_percentage / 100;
616
617	return 0;
618}
619
620static int rt9455_charger_get_property(struct power_supply *psy,
621				       enum power_supply_property psp,
622				       union power_supply_propval *val)
623{
624	struct rt9455_info *info = power_supply_get_drvdata(psy);
625
626	switch (psp) {
627	case POWER_SUPPLY_PROP_STATUS:
628		return rt9455_charger_get_status(info, val);
629	case POWER_SUPPLY_PROP_HEALTH:
630		return rt9455_charger_get_health(info, val);
631	case POWER_SUPPLY_PROP_PRESENT:
632		return rt9455_charger_get_battery_presence(info, val);
633	case POWER_SUPPLY_PROP_ONLINE:
634		return rt9455_charger_get_online(info, val);
635	case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT:
636		return rt9455_charger_get_current(info, val);
637	case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
638		return rt9455_charger_get_current_max(info, val);
639	case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE:
640		return rt9455_charger_get_voltage(info, val);
641	case POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX:
642		return rt9455_charger_get_voltage_max(info, val);
643	case POWER_SUPPLY_PROP_SCOPE:
644		val->intval = POWER_SUPPLY_SCOPE_SYSTEM;
645		return 0;
646	case POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT:
647		return rt9455_charger_get_term_current(info, val);
648	case POWER_SUPPLY_PROP_MODEL_NAME:
649		val->strval = RT9455_MODEL_NAME;
650		return 0;
651	case POWER_SUPPLY_PROP_MANUFACTURER:
652		val->strval = RT9455_MANUFACTURER;
653		return 0;
654	default:
655		return -ENODATA;
656	}
657}
658
659static int rt9455_hw_init(struct rt9455_info *info, u32 ichrg,
660			  u32 ieoc_percentage,
661			  u32 mivr, u32 iaicr)
662{
663	struct device *dev = &info->client->dev;
664	int idx, ret;
665
666	ret = rt9455_register_reset(info);
667	if (ret) {
668		dev_err(dev, "Power On Reset failed\n");
669		return ret;
670	}
671
672	/* Set TE bit in order to enable end of charge detection */
673	ret = regmap_field_write(info->regmap_fields[F_TE], 1);
674	if (ret) {
675		dev_err(dev, "Failed to set TE bit\n");
676		return ret;
677	}
678
679	/* Set TE_SHDN_EN bit in order to enable end of charge detection */
680	ret = regmap_field_write(info->regmap_fields[F_TE_SHDN_EN], 1);
681	if (ret) {
682		dev_err(dev, "Failed to set TE_SHDN_EN bit\n");
683		return ret;
684	}
685
686	/*
687	 * Set BATD_EN bit in order to enable battery detection
688	 * when charging is done
689	 */
690	ret = regmap_field_write(info->regmap_fields[F_BATD_EN], 1);
691	if (ret) {
692		dev_err(dev, "Failed to set BATD_EN bit\n");
693		return ret;
694	}
695
696	/*
697	 * Disable Safety Timer. In charge mode, this timer terminates charging
698	 * if no read or write via I2C is done within 32 minutes. This timer
699	 * avoids overcharging the baterry when the OS is not loaded and the
700	 * charger is connected to a power source.
701	 * In boost mode, this timer triggers BST32SI interrupt if no read or
702	 * write via I2C is done within 32 seconds.
703	 * When the OS is loaded and the charger driver is inserted, it is used
704	 * delayed_work, named max_charging_time_work, to avoid overcharging
705	 * the battery.
706	 */
707	ret = regmap_field_write(info->regmap_fields[F_TMR_EN], 0x00);
708	if (ret) {
709		dev_err(dev, "Failed to disable Safety Timer\n");
710		return ret;
711	}
712
713	/* Set ICHRG to value retrieved from device-specific data */
714	ret = rt9455_set_field_val(info, F_ICHRG,
715				   rt9455_ichrg_values,
716				   ARRAY_SIZE(rt9455_ichrg_values), ichrg);
717	if (ret) {
718		dev_err(dev, "Failed to set ICHRG value\n");
719		return ret;
720	}
721
722	/* Set IEOC Percentage to value retrieved from device-specific data */
723	ret = rt9455_set_field_val(info, F_IEOC_PERCENTAGE,
724				   rt9455_ieoc_percentage_values,
725				   ARRAY_SIZE(rt9455_ieoc_percentage_values),
726				   ieoc_percentage);
727	if (ret) {
728		dev_err(dev, "Failed to set IEOC Percentage value\n");
729		return ret;
730	}
731
732	/* Set VOREG to value retrieved from device-specific data */
733	ret = rt9455_set_field_val(info, F_VOREG,
734				   rt9455_voreg_values,
735				   ARRAY_SIZE(rt9455_voreg_values),
736				   info->voreg);
737	if (ret) {
738		dev_err(dev, "Failed to set VOREG value\n");
739		return ret;
740	}
741
742	/* Set VMREG value to maximum (4.45V). */
743	idx = ARRAY_SIZE(rt9455_vmreg_values) - 1;
744	ret = rt9455_set_field_val(info, F_VMREG,
745				   rt9455_vmreg_values,
746				   ARRAY_SIZE(rt9455_vmreg_values),
747				   rt9455_vmreg_values[idx]);
748	if (ret) {
749		dev_err(dev, "Failed to set VMREG value\n");
750		return ret;
751	}
752
753	/*
754	 * Set MIVR to value retrieved from device-specific data.
755	 * If no value is specified, default value for MIVR is 4.5V.
756	 */
757	if (mivr == -1)
758		mivr = 4500000;
759
760	ret = rt9455_set_field_val(info, F_MIVR,
761				   rt9455_mivr_values,
762				   ARRAY_SIZE(rt9455_mivr_values), mivr);
763	if (ret) {
764		dev_err(dev, "Failed to set MIVR value\n");
765		return ret;
766	}
767
768	/*
769	 * Set IAICR to value retrieved from device-specific data.
770	 * If no value is specified, default value for IAICR is 500 mA.
771	 */
772	if (iaicr == -1)
773		iaicr = 500000;
774
775	ret = rt9455_set_field_val(info, F_IAICR,
776				   rt9455_iaicr_values,
777				   ARRAY_SIZE(rt9455_iaicr_values), iaicr);
778	if (ret) {
779		dev_err(dev, "Failed to set IAICR value\n");
780		return ret;
781	}
782
783	/*
784	 * Set IAICR_INT bit so that IAICR value is determined by IAICR bits
785	 * and not by OTG pin.
786	 */
787	ret = regmap_field_write(info->regmap_fields[F_IAICR_INT], 0x01);
788	if (ret) {
789		dev_err(dev, "Failed to set IAICR_INT bit\n");
790		return ret;
791	}
792
793	/*
794	 * Disable CHMIVRI interrupt. Because the driver sets MIVR value,
795	 * CHMIVRI is triggered, but there is no action to be taken by the
796	 * driver when CHMIVRI is triggered.
797	 */
798	ret = regmap_field_write(info->regmap_fields[F_CHMIVRIM], 0x01);
799	if (ret) {
800		dev_err(dev, "Failed to mask CHMIVRI interrupt\n");
801		return ret;
802	}
803
804	return 0;
805}
806
807#if IS_ENABLED(CONFIG_USB_PHY)
808/*
809 * Before setting the charger into boost mode, boost output voltage is
810 * set. This is needed because boost output voltage may differ from battery
811 * regulation voltage. F_VOREG bits represent either battery regulation voltage
812 * or boost output voltage, depending on the mode the charger is. Both battery
813 * regulation voltage and boost output voltage are read from DT/ACPI during
814 * probe.
815 */
816static int rt9455_set_boost_voltage_before_boost_mode(struct rt9455_info *info)
817{
818	struct device *dev = &info->client->dev;
819	int ret;
820
821	ret = rt9455_set_field_val(info, F_VOREG,
822				   rt9455_boost_voltage_values,
823				   ARRAY_SIZE(rt9455_boost_voltage_values),
824				   info->boost_voltage);
825	if (ret) {
826		dev_err(dev, "Failed to set boost output voltage value\n");
827		return ret;
828	}
829
830	return 0;
831}
832#endif
833
834/*
835 * Before setting the charger into charge mode, battery regulation voltage is
836 * set. This is needed because boost output voltage may differ from battery
837 * regulation voltage. F_VOREG bits represent either battery regulation voltage
838 * or boost output voltage, depending on the mode the charger is. Both battery
839 * regulation voltage and boost output voltage are read from DT/ACPI during
840 * probe.
841 */
842static int rt9455_set_voreg_before_charge_mode(struct rt9455_info *info)
843{
844	struct device *dev = &info->client->dev;
845	int ret;
846
847	ret = rt9455_set_field_val(info, F_VOREG,
848				   rt9455_voreg_values,
849				   ARRAY_SIZE(rt9455_voreg_values),
850				   info->voreg);
851	if (ret) {
852		dev_err(dev, "Failed to set VOREG value\n");
853		return ret;
854	}
855
856	return 0;
857}
858
859static int rt9455_irq_handler_check_irq1_register(struct rt9455_info *info,
860						  bool *_is_battery_absent,
861						  bool *_alert_userspace)
862{
863	unsigned int irq1, mask1, mask2;
864	struct device *dev = &info->client->dev;
865	bool is_battery_absent = false;
866	bool alert_userspace = false;
867	int ret;
868
869	ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &irq1);
870	if (ret) {
871		dev_err(dev, "Failed to read IRQ1 register\n");
872		return ret;
873	}
874
875	ret = regmap_read(info->regmap, RT9455_REG_MASK1, &mask1);
876	if (ret) {
877		dev_err(dev, "Failed to read MASK1 register\n");
878		return ret;
879	}
880
881	if (irq1 & GET_MASK(F_TSDI)) {
882		dev_err(dev, "Thermal shutdown fault occurred\n");
883		alert_userspace = true;
884	}
885
886	if (irq1 & GET_MASK(F_VINOVPI)) {
887		dev_err(dev, "Overvoltage input occurred\n");
888		alert_userspace = true;
889	}
890
891	if (irq1 & GET_MASK(F_BATAB)) {
892		dev_err(dev, "Battery absence occurred\n");
893		is_battery_absent = true;
894		alert_userspace = true;
895
896		if ((mask1 & GET_MASK(F_BATABM)) == 0) {
897			ret = regmap_field_write(info->regmap_fields[F_BATABM],
898						 0x01);
899			if (ret) {
900				dev_err(dev, "Failed to mask BATAB interrupt\n");
901				return ret;
902			}
903		}
904
905		ret = regmap_read(info->regmap, RT9455_REG_MASK2, &mask2);
906		if (ret) {
907			dev_err(dev, "Failed to read MASK2 register\n");
908			return ret;
909		}
910
911		if (mask2 & GET_MASK(F_CHTERMIM)) {
912			ret = regmap_field_write(
913				info->regmap_fields[F_CHTERMIM], 0x00);
914			if (ret) {
915				dev_err(dev, "Failed to unmask CHTERMI interrupt\n");
916				return ret;
917			}
918		}
919
920		if (mask2 & GET_MASK(F_CHRCHGIM)) {
921			ret = regmap_field_write(
922				info->regmap_fields[F_CHRCHGIM], 0x00);
923			if (ret) {
924				dev_err(dev, "Failed to unmask CHRCHGI interrupt\n");
925				return ret;
926			}
927		}
928
929		/*
930		 * When the battery is absent, max_charging_time_work is
931		 * cancelled, since no charging is done.
932		 */
933		cancel_delayed_work_sync(&info->max_charging_time_work);
934		/*
935		 * Since no interrupt is triggered when the battery is
936		 * reconnected, max_charging_time_work is not rescheduled.
937		 * Therefore, batt_presence_work is scheduled to check whether
938		 * the battery is still absent or not.
939		 */
940		queue_delayed_work(system_power_efficient_wq,
941				   &info->batt_presence_work,
942				   RT9455_BATT_PRESENCE_DELAY * HZ);
943	}
944
945	*_is_battery_absent = is_battery_absent;
946
947	if (alert_userspace)
948		*_alert_userspace = alert_userspace;
949
950	return 0;
951}
952
953static int rt9455_irq_handler_check_irq2_register(struct rt9455_info *info,
954						  bool is_battery_absent,
955						  bool *_alert_userspace)
956{
957	unsigned int irq2, mask2;
958	struct device *dev = &info->client->dev;
959	bool alert_userspace = false;
960	int ret;
961
962	ret = regmap_read(info->regmap, RT9455_REG_IRQ2, &irq2);
963	if (ret) {
964		dev_err(dev, "Failed to read IRQ2 register\n");
965		return ret;
966	}
967
968	ret = regmap_read(info->regmap, RT9455_REG_MASK2, &mask2);
969	if (ret) {
970		dev_err(dev, "Failed to read MASK2 register\n");
971		return ret;
972	}
973
974	if (irq2 & GET_MASK(F_CHRVPI)) {
975		dev_dbg(dev, "Charger fault occurred\n");
976		/*
977		 * CHRVPI bit is set in 2 cases:
978		 * 1. when the power source is connected to the charger.
979		 * 2. when the power source is disconnected from the charger.
980		 * To identify the case, PWR_RDY bit is checked. Because
981		 * PWR_RDY bit is set / cleared after CHRVPI interrupt is
982		 * triggered, it is used delayed_work to later read PWR_RDY bit.
983		 * Also, do not set to true alert_userspace, because there is no
984		 * need to notify userspace when CHRVPI interrupt has occurred.
985		 * Userspace will be notified after PWR_RDY bit is read.
986		 */
987		queue_delayed_work(system_power_efficient_wq,
988				   &info->pwr_rdy_work,
989				   RT9455_PWR_RDY_DELAY * HZ);
990	}
991	if (irq2 & GET_MASK(F_CHBATOVI)) {
992		dev_err(dev, "Battery OVP occurred\n");
993		alert_userspace = true;
994	}
995	if (irq2 & GET_MASK(F_CHTERMI)) {
996		dev_dbg(dev, "Charge terminated\n");
997		if (!is_battery_absent) {
998			if ((mask2 & GET_MASK(F_CHTERMIM)) == 0) {
999				ret = regmap_field_write(
1000					info->regmap_fields[F_CHTERMIM], 0x01);
1001				if (ret) {
1002					dev_err(dev, "Failed to mask CHTERMI interrupt\n");
1003					return ret;
1004				}
1005				/*
1006				 * Update MASK2 value, since CHTERMIM bit is
1007				 * set.
1008				 */
1009				mask2 = mask2 | GET_MASK(F_CHTERMIM);
1010			}
1011			cancel_delayed_work_sync(&info->max_charging_time_work);
1012			alert_userspace = true;
1013		}
1014	}
1015	if (irq2 & GET_MASK(F_CHRCHGI)) {
1016		dev_dbg(dev, "Recharge request\n");
1017		ret = regmap_field_write(info->regmap_fields[F_CHG_EN],
1018					 RT9455_CHARGE_ENABLE);
1019		if (ret) {
1020			dev_err(dev, "Failed to enable charging\n");
1021			return ret;
1022		}
1023		if (mask2 & GET_MASK(F_CHTERMIM)) {
1024			ret = regmap_field_write(
1025				info->regmap_fields[F_CHTERMIM], 0x00);
1026			if (ret) {
1027				dev_err(dev, "Failed to unmask CHTERMI interrupt\n");
1028				return ret;
1029			}
1030			/* Update MASK2 value, since CHTERMIM bit is cleared. */
1031			mask2 = mask2 & ~GET_MASK(F_CHTERMIM);
1032		}
1033		if (!is_battery_absent) {
1034			/*
1035			 * No need to check whether the charger is connected to
1036			 * power source when CHRCHGI is received, since CHRCHGI
1037			 * is not triggered if the charger is not connected to
1038			 * the power source.
1039			 */
1040			queue_delayed_work(system_power_efficient_wq,
1041					   &info->max_charging_time_work,
1042					   RT9455_MAX_CHARGING_TIME * HZ);
1043			alert_userspace = true;
1044		}
1045	}
1046	if (irq2 & GET_MASK(F_CH32MI)) {
1047		dev_err(dev, "Charger fault. 32 mins timeout occurred\n");
1048		alert_userspace = true;
1049	}
1050	if (irq2 & GET_MASK(F_CHTREGI)) {
1051		dev_warn(dev,
1052			 "Charger warning. Thermal regulation loop active\n");
1053		alert_userspace = true;
1054	}
1055	if (irq2 & GET_MASK(F_CHMIVRI)) {
1056		dev_dbg(dev,
1057			"Charger warning. Input voltage MIVR loop active\n");
1058	}
1059
1060	if (alert_userspace)
1061		*_alert_userspace = alert_userspace;
1062
1063	return 0;
1064}
1065
1066static int rt9455_irq_handler_check_irq3_register(struct rt9455_info *info,
1067						  bool *_alert_userspace)
1068{
1069	unsigned int irq3, mask3;
1070	struct device *dev = &info->client->dev;
1071	bool alert_userspace = false;
1072	int ret;
1073
1074	ret = regmap_read(info->regmap, RT9455_REG_IRQ3, &irq3);
1075	if (ret) {
1076		dev_err(dev, "Failed to read IRQ3 register\n");
1077		return ret;
1078	}
1079
1080	ret = regmap_read(info->regmap, RT9455_REG_MASK3, &mask3);
1081	if (ret) {
1082		dev_err(dev, "Failed to read MASK3 register\n");
1083		return ret;
1084	}
1085
1086	if (irq3 & GET_MASK(F_BSTBUSOVI)) {
1087		dev_err(dev, "Boost fault. Overvoltage input occurred\n");
1088		alert_userspace = true;
1089	}
1090	if (irq3 & GET_MASK(F_BSTOLI)) {
1091		dev_err(dev, "Boost fault. Overload\n");
1092		alert_userspace = true;
1093	}
1094	if (irq3 & GET_MASK(F_BSTLOWVI)) {
1095		dev_err(dev, "Boost fault. Battery voltage too low\n");
1096		alert_userspace = true;
1097	}
1098	if (irq3 & GET_MASK(F_BST32SI)) {
1099		dev_err(dev, "Boost fault. 32 seconds timeout occurred.\n");
1100		alert_userspace = true;
1101	}
1102
1103	if (alert_userspace) {
1104		dev_info(dev, "Boost fault occurred, therefore the charger goes into charge mode\n");
1105		ret = rt9455_set_voreg_before_charge_mode(info);
1106		if (ret) {
1107			dev_err(dev, "Failed to set VOREG before entering charge mode\n");
1108			return ret;
1109		}
1110		ret = regmap_field_write(info->regmap_fields[F_OPA_MODE],
1111					 RT9455_CHARGE_MODE);
1112		if (ret) {
1113			dev_err(dev, "Failed to set charger in charge mode\n");
1114			return ret;
1115		}
1116		*_alert_userspace = alert_userspace;
1117	}
1118
1119	return 0;
1120}
1121
1122static irqreturn_t rt9455_irq_handler_thread(int irq, void *data)
1123{
1124	struct rt9455_info *info = data;
1125	struct device *dev;
1126	bool alert_userspace = false;
1127	bool is_battery_absent = false;
1128	unsigned int status;
1129	int ret;
1130
1131	if (!info)
1132		return IRQ_NONE;
1133
1134	dev = &info->client->dev;
1135
1136	if (irq != info->client->irq) {
1137		dev_err(dev, "Interrupt is not for RT9455 charger\n");
1138		return IRQ_NONE;
1139	}
1140
1141	ret = regmap_field_read(info->regmap_fields[F_STAT], &status);
1142	if (ret) {
1143		dev_err(dev, "Failed to read STAT bits\n");
1144		return IRQ_HANDLED;
1145	}
1146	dev_dbg(dev, "Charger status is %d\n", status);
1147
1148	/*
1149	 * Each function that processes an IRQ register receives as output
1150	 * parameter alert_userspace pointer. alert_userspace is set to true
1151	 * in such a function only if an interrupt has occurred in the
1152	 * respective interrupt register. This way, it is avoided the following
1153	 * case: interrupt occurs only in IRQ1 register,
1154	 * rt9455_irq_handler_check_irq1_register() function sets to true
1155	 * alert_userspace, but rt9455_irq_handler_check_irq2_register()
1156	 * and rt9455_irq_handler_check_irq3_register() functions set to false
1157	 * alert_userspace and power_supply_changed() is never called.
1158	 */
1159	ret = rt9455_irq_handler_check_irq1_register(info, &is_battery_absent,
1160						     &alert_userspace);
1161	if (ret) {
1162		dev_err(dev, "Failed to handle IRQ1 register\n");
1163		return IRQ_HANDLED;
1164	}
1165
1166	ret = rt9455_irq_handler_check_irq2_register(info, is_battery_absent,
1167						     &alert_userspace);
1168	if (ret) {
1169		dev_err(dev, "Failed to handle IRQ2 register\n");
1170		return IRQ_HANDLED;
1171	}
1172
1173	ret = rt9455_irq_handler_check_irq3_register(info, &alert_userspace);
1174	if (ret) {
1175		dev_err(dev, "Failed to handle IRQ3 register\n");
1176		return IRQ_HANDLED;
1177	}
1178
1179	if (alert_userspace) {
1180		/*
1181		 * Sometimes, an interrupt occurs while rt9455_probe() function
1182		 * is executing and power_supply_register() is not yet called.
1183		 * Do not call power_supply_changed() in this case.
1184		 */
1185		if (info->charger)
1186			power_supply_changed(info->charger);
1187	}
1188
1189	return IRQ_HANDLED;
1190}
1191
1192static int rt9455_discover_charger(struct rt9455_info *info, u32 *ichrg,
1193				   u32 *ieoc_percentage,
1194				   u32 *mivr, u32 *iaicr)
1195{
1196	struct device *dev = &info->client->dev;
1197	int ret;
1198
1199	if (!dev->of_node && !ACPI_HANDLE(dev)) {
1200		dev_err(dev, "No support for either device tree or ACPI\n");
1201		return -EINVAL;
1202	}
1203	/*
1204	 * ICHRG, IEOC_PERCENTAGE, VOREG and boost output voltage are mandatory
1205	 * parameters.
1206	 */
1207	ret = device_property_read_u32(dev, "richtek,output-charge-current",
1208				       ichrg);
1209	if (ret) {
1210		dev_err(dev, "Error: missing \"output-charge-current\" property\n");
1211		return ret;
1212	}
1213
1214	ret = device_property_read_u32(dev, "richtek,end-of-charge-percentage",
1215				       ieoc_percentage);
1216	if (ret) {
1217		dev_err(dev, "Error: missing \"end-of-charge-percentage\" property\n");
1218		return ret;
1219	}
1220
1221	ret = device_property_read_u32(dev,
1222				       "richtek,battery-regulation-voltage",
1223				       &info->voreg);
1224	if (ret) {
1225		dev_err(dev, "Error: missing \"battery-regulation-voltage\" property\n");
1226		return ret;
1227	}
1228
1229	ret = device_property_read_u32(dev, "richtek,boost-output-voltage",
1230				       &info->boost_voltage);
1231	if (ret) {
1232		dev_err(dev, "Error: missing \"boost-output-voltage\" property\n");
1233		return ret;
1234	}
1235
1236	/*
1237	 * MIVR and IAICR are optional parameters. Do not return error if one of
1238	 * them is not present in ACPI table or device tree specification.
1239	 */
1240	device_property_read_u32(dev, "richtek,min-input-voltage-regulation",
1241				 mivr);
1242	device_property_read_u32(dev, "richtek,avg-input-current-regulation",
1243				 iaicr);
1244
1245	return 0;
1246}
1247
1248#if IS_ENABLED(CONFIG_USB_PHY)
1249static int rt9455_usb_event_none(struct rt9455_info *info,
1250				 u8 opa_mode, u8 iaicr)
1251{
1252	struct device *dev = &info->client->dev;
1253	int ret;
1254
1255	if (opa_mode == RT9455_BOOST_MODE) {
1256		ret = rt9455_set_voreg_before_charge_mode(info);
1257		if (ret) {
1258			dev_err(dev, "Failed to set VOREG before entering charge mode\n");
1259			return ret;
1260		}
1261		/*
1262		 * If the charger is in boost mode, and it has received
1263		 * USB_EVENT_NONE, this means the consumer device powered by the
1264		 * charger is not connected anymore.
1265		 * In this case, the charger goes into charge mode.
1266		 */
1267		dev_dbg(dev, "USB_EVENT_NONE received, therefore the charger goes into charge mode\n");
1268		ret = regmap_field_write(info->regmap_fields[F_OPA_MODE],
1269					 RT9455_CHARGE_MODE);
1270		if (ret) {
1271			dev_err(dev, "Failed to set charger in charge mode\n");
1272			return NOTIFY_DONE;
1273		}
1274	}
1275
1276	dev_dbg(dev, "USB_EVENT_NONE received, therefore IAICR is set to its minimum value\n");
1277	if (iaicr != RT9455_IAICR_100MA) {
1278		ret = regmap_field_write(info->regmap_fields[F_IAICR],
1279					 RT9455_IAICR_100MA);
1280		if (ret) {
1281			dev_err(dev, "Failed to set IAICR value\n");
1282			return NOTIFY_DONE;
1283		}
1284	}
1285
1286	return NOTIFY_OK;
1287}
1288
1289static int rt9455_usb_event_vbus(struct rt9455_info *info,
1290				 u8 opa_mode, u8 iaicr)
1291{
1292	struct device *dev = &info->client->dev;
1293	int ret;
1294
1295	if (opa_mode == RT9455_BOOST_MODE) {
1296		ret = rt9455_set_voreg_before_charge_mode(info);
1297		if (ret) {
1298			dev_err(dev, "Failed to set VOREG before entering charge mode\n");
1299			return ret;
1300		}
1301		/*
1302		 * If the charger is in boost mode, and it has received
1303		 * USB_EVENT_VBUS, this means the consumer device powered by the
1304		 * charger is not connected anymore.
1305		 * In this case, the charger goes into charge mode.
1306		 */
1307		dev_dbg(dev, "USB_EVENT_VBUS received, therefore the charger goes into charge mode\n");
1308		ret = regmap_field_write(info->regmap_fields[F_OPA_MODE],
1309					 RT9455_CHARGE_MODE);
1310		if (ret) {
1311			dev_err(dev, "Failed to set charger in charge mode\n");
1312			return NOTIFY_DONE;
1313		}
1314	}
1315
1316	dev_dbg(dev, "USB_EVENT_VBUS received, therefore IAICR is set to 500 mA\n");
1317	if (iaicr != RT9455_IAICR_500MA) {
1318		ret = regmap_field_write(info->regmap_fields[F_IAICR],
1319					 RT9455_IAICR_500MA);
1320		if (ret) {
1321			dev_err(dev, "Failed to set IAICR value\n");
1322			return NOTIFY_DONE;
1323		}
1324	}
1325
1326	return NOTIFY_OK;
1327}
1328
1329static int rt9455_usb_event_id(struct rt9455_info *info,
1330			       u8 opa_mode, u8 iaicr)
1331{
1332	struct device *dev = &info->client->dev;
1333	int ret;
1334
1335	if (opa_mode == RT9455_CHARGE_MODE) {
1336		ret = rt9455_set_boost_voltage_before_boost_mode(info);
1337		if (ret) {
1338			dev_err(dev, "Failed to set boost output voltage before entering boost mode\n");
1339			return ret;
1340		}
1341		/*
1342		 * If the charger is in charge mode, and it has received
1343		 * USB_EVENT_ID, this means a consumer device is connected and
1344		 * it should be powered by the charger.
1345		 * In this case, the charger goes into boost mode.
1346		 */
1347		dev_dbg(dev, "USB_EVENT_ID received, therefore the charger goes into boost mode\n");
1348		ret = regmap_field_write(info->regmap_fields[F_OPA_MODE],
1349					 RT9455_BOOST_MODE);
1350		if (ret) {
1351			dev_err(dev, "Failed to set charger in boost mode\n");
1352			return NOTIFY_DONE;
1353		}
1354	}
1355
1356	dev_dbg(dev, "USB_EVENT_ID received, therefore IAICR is set to its minimum value\n");
1357	if (iaicr != RT9455_IAICR_100MA) {
1358		ret = regmap_field_write(info->regmap_fields[F_IAICR],
1359					 RT9455_IAICR_100MA);
1360		if (ret) {
1361			dev_err(dev, "Failed to set IAICR value\n");
1362			return NOTIFY_DONE;
1363		}
1364	}
1365
1366	return NOTIFY_OK;
1367}
1368
1369static int rt9455_usb_event_charger(struct rt9455_info *info,
1370				    u8 opa_mode, u8 iaicr)
1371{
1372	struct device *dev = &info->client->dev;
1373	int ret;
1374
1375	if (opa_mode == RT9455_BOOST_MODE) {
1376		ret = rt9455_set_voreg_before_charge_mode(info);
1377		if (ret) {
1378			dev_err(dev, "Failed to set VOREG before entering charge mode\n");
1379			return ret;
1380		}
1381		/*
1382		 * If the charger is in boost mode, and it has received
1383		 * USB_EVENT_CHARGER, this means the consumer device powered by
1384		 * the charger is not connected anymore.
1385		 * In this case, the charger goes into charge mode.
1386		 */
1387		dev_dbg(dev, "USB_EVENT_CHARGER received, therefore the charger goes into charge mode\n");
1388		ret = regmap_field_write(info->regmap_fields[F_OPA_MODE],
1389					 RT9455_CHARGE_MODE);
1390		if (ret) {
1391			dev_err(dev, "Failed to set charger in charge mode\n");
1392			return NOTIFY_DONE;
1393		}
1394	}
1395
1396	dev_dbg(dev, "USB_EVENT_CHARGER received, therefore IAICR is set to no current limit\n");
1397	if (iaicr != RT9455_IAICR_NO_LIMIT) {
1398		ret = regmap_field_write(info->regmap_fields[F_IAICR],
1399					 RT9455_IAICR_NO_LIMIT);
1400		if (ret) {
1401			dev_err(dev, "Failed to set IAICR value\n");
1402			return NOTIFY_DONE;
1403		}
1404	}
1405
1406	return NOTIFY_OK;
1407}
1408
1409static int rt9455_usb_event(struct notifier_block *nb,
1410			    unsigned long event, void *power)
1411{
1412	struct rt9455_info *info = container_of(nb, struct rt9455_info, nb);
1413	struct device *dev = &info->client->dev;
1414	unsigned int opa_mode, iaicr;
1415	int ret;
1416
1417	/*
1418	 * Determine whether the charger is in charge mode
1419	 * or in boost mode.
1420	 */
1421	ret = regmap_field_read(info->regmap_fields[F_OPA_MODE],
1422				&opa_mode);
1423	if (ret) {
1424		dev_err(dev, "Failed to read OPA_MODE value\n");
1425		return NOTIFY_DONE;
1426	}
1427
1428	ret = regmap_field_read(info->regmap_fields[F_IAICR],
1429				&iaicr);
1430	if (ret) {
1431		dev_err(dev, "Failed to read IAICR value\n");
1432		return NOTIFY_DONE;
1433	}
1434
1435	dev_dbg(dev, "Received USB event %lu\n", event);
1436	switch (event) {
1437	case USB_EVENT_NONE:
1438		return rt9455_usb_event_none(info, opa_mode, iaicr);
1439	case USB_EVENT_VBUS:
1440		return rt9455_usb_event_vbus(info, opa_mode, iaicr);
1441	case USB_EVENT_ID:
1442		return rt9455_usb_event_id(info, opa_mode, iaicr);
1443	case USB_EVENT_CHARGER:
1444		return rt9455_usb_event_charger(info, opa_mode, iaicr);
1445	default:
1446		dev_err(dev, "Unknown USB event\n");
1447	}
1448	return NOTIFY_DONE;
1449}
1450#endif
1451
1452static void rt9455_pwr_rdy_work_callback(struct work_struct *work)
1453{
1454	struct rt9455_info *info = container_of(work, struct rt9455_info,
1455						pwr_rdy_work.work);
1456	struct device *dev = &info->client->dev;
1457	unsigned int pwr_rdy;
1458	int ret;
1459
1460	ret = regmap_field_read(info->regmap_fields[F_PWR_RDY], &pwr_rdy);
1461	if (ret) {
1462		dev_err(dev, "Failed to read PWR_RDY bit\n");
1463		return;
1464	}
1465	switch (pwr_rdy) {
1466	case RT9455_PWR_FAULT:
1467		dev_dbg(dev, "Charger disconnected from power source\n");
1468		cancel_delayed_work_sync(&info->max_charging_time_work);
1469		break;
1470	case RT9455_PWR_GOOD:
1471		dev_dbg(dev, "Charger connected to power source\n");
1472		ret = regmap_field_write(info->regmap_fields[F_CHG_EN],
1473					 RT9455_CHARGE_ENABLE);
1474		if (ret) {
1475			dev_err(dev, "Failed to enable charging\n");
1476			return;
1477		}
1478		queue_delayed_work(system_power_efficient_wq,
1479				   &info->max_charging_time_work,
1480				   RT9455_MAX_CHARGING_TIME * HZ);
1481		break;
1482	}
1483	/*
1484	 * Notify userspace that the charger has been either connected to or
1485	 * disconnected from the power source.
1486	 */
1487	power_supply_changed(info->charger);
1488}
1489
1490static void rt9455_max_charging_time_work_callback(struct work_struct *work)
1491{
1492	struct rt9455_info *info = container_of(work, struct rt9455_info,
1493						max_charging_time_work.work);
1494	struct device *dev = &info->client->dev;
1495	int ret;
1496
1497	dev_err(dev, "Battery has been charging for at least 6 hours and is not yet fully charged. Battery is dead, therefore charging is disabled.\n");
1498	ret = regmap_field_write(info->regmap_fields[F_CHG_EN],
1499				 RT9455_CHARGE_DISABLE);
1500	if (ret)
1501		dev_err(dev, "Failed to disable charging\n");
1502}
1503
1504static void rt9455_batt_presence_work_callback(struct work_struct *work)
1505{
1506	struct rt9455_info *info = container_of(work, struct rt9455_info,
1507						batt_presence_work.work);
1508	struct device *dev = &info->client->dev;
1509	unsigned int irq1, mask1;
1510	int ret;
1511
1512	ret = regmap_read(info->regmap, RT9455_REG_IRQ1, &irq1);
1513	if (ret) {
1514		dev_err(dev, "Failed to read IRQ1 register\n");
1515		return;
1516	}
1517
1518	/*
1519	 * If the battery is still absent, batt_presence_work is rescheduled.
1520	 * Otherwise, max_charging_time is scheduled.
1521	 */
1522	if (irq1 & GET_MASK(F_BATAB)) {
1523		queue_delayed_work(system_power_efficient_wq,
1524				   &info->batt_presence_work,
1525				   RT9455_BATT_PRESENCE_DELAY * HZ);
1526	} else {
1527		queue_delayed_work(system_power_efficient_wq,
1528				   &info->max_charging_time_work,
1529				   RT9455_MAX_CHARGING_TIME * HZ);
1530
1531		ret = regmap_read(info->regmap, RT9455_REG_MASK1, &mask1);
1532		if (ret) {
1533			dev_err(dev, "Failed to read MASK1 register\n");
1534			return;
1535		}
1536
1537		if (mask1 & GET_MASK(F_BATABM)) {
1538			ret = regmap_field_write(info->regmap_fields[F_BATABM],
1539						 0x00);
1540			if (ret)
1541				dev_err(dev, "Failed to unmask BATAB interrupt\n");
1542		}
1543		/*
1544		 * Notify userspace that the battery is now connected to the
1545		 * charger.
1546		 */
1547		power_supply_changed(info->charger);
1548	}
1549}
1550
1551static const struct power_supply_desc rt9455_charger_desc = {
1552	.name			= RT9455_DRIVER_NAME,
1553	.type			= POWER_SUPPLY_TYPE_USB,
1554	.properties		= rt9455_charger_properties,
1555	.num_properties		= ARRAY_SIZE(rt9455_charger_properties),
1556	.get_property		= rt9455_charger_get_property,
1557};
1558
1559static bool rt9455_is_writeable_reg(struct device *dev, unsigned int reg)
1560{
1561	switch (reg) {
1562	case RT9455_REG_DEV_ID:
1563	case RT9455_REG_IRQ1:
1564	case RT9455_REG_IRQ2:
1565	case RT9455_REG_IRQ3:
1566		return false;
1567	default:
1568		return true;
1569	}
1570}
1571
1572static bool rt9455_is_volatile_reg(struct device *dev, unsigned int reg)
1573{
1574	switch (reg) {
1575	case RT9455_REG_DEV_ID:
1576	case RT9455_REG_CTRL5:
1577	case RT9455_REG_CTRL6:
1578		return false;
1579	default:
1580		return true;
1581	}
1582}
1583
1584static const struct regmap_config rt9455_regmap_config = {
1585	.reg_bits	= 8,
1586	.val_bits	= 8,
1587	.writeable_reg	= rt9455_is_writeable_reg,
1588	.volatile_reg	= rt9455_is_volatile_reg,
1589	.max_register	= RT9455_REG_MASK3,
1590	.cache_type	= REGCACHE_RBTREE,
1591};
1592
1593static int rt9455_probe(struct i2c_client *client,
1594			const struct i2c_device_id *id)
1595{
1596	struct i2c_adapter *adapter = to_i2c_adapter(client->dev.parent);
1597	struct device *dev = &client->dev;
1598	struct rt9455_info *info;
1599	struct power_supply_config rt9455_charger_config = {};
1600	/*
1601	 * Mandatory device-specific data values. Also, VOREG and boost output
1602	 * voltage are mandatory values, but they are stored in rt9455_info
1603	 * structure.
1604	 */
1605	u32 ichrg, ieoc_percentage;
1606	/* Optional device-specific data values. */
1607	u32 mivr = -1, iaicr = -1;
1608	int i, ret;
1609
1610	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
1611		dev_err(dev, "No support for SMBUS_BYTE_DATA\n");
1612		return -ENODEV;
1613	}
1614	info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
1615	if (!info)
1616		return -ENOMEM;
1617
1618	info->client = client;
1619	i2c_set_clientdata(client, info);
1620
1621	info->regmap = devm_regmap_init_i2c(client,
1622					    &rt9455_regmap_config);
1623	if (IS_ERR(info->regmap)) {
1624		dev_err(dev, "Failed to initialize register map\n");
1625		return -EINVAL;
1626	}
1627
1628	for (i = 0; i < F_MAX_FIELDS; i++) {
1629		info->regmap_fields[i] =
1630			devm_regmap_field_alloc(dev, info->regmap,
1631						rt9455_reg_fields[i]);
1632		if (IS_ERR(info->regmap_fields[i])) {
1633			dev_err(dev,
1634				"Failed to allocate regmap field = %d\n", i);
1635			return PTR_ERR(info->regmap_fields[i]);
1636		}
1637	}
1638
1639	ret = rt9455_discover_charger(info, &ichrg, &ieoc_percentage,
1640				      &mivr, &iaicr);
1641	if (ret) {
1642		dev_err(dev, "Failed to discover charger\n");
1643		return ret;
1644	}
1645
1646#if IS_ENABLED(CONFIG_USB_PHY)
1647	info->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
1648	if (IS_ERR(info->usb_phy)) {
1649		dev_err(dev, "Failed to get USB transceiver\n");
1650	} else {
1651		info->nb.notifier_call = rt9455_usb_event;
1652		ret = usb_register_notifier(info->usb_phy, &info->nb);
1653		if (ret) {
1654			dev_err(dev, "Failed to register USB notifier\n");
1655			/*
1656			 * If usb_register_notifier() fails, set notifier_call
1657			 * to NULL, to avoid calling usb_unregister_notifier().
1658			 */
1659			info->nb.notifier_call = NULL;
1660		}
1661	}
1662#endif
1663
1664	INIT_DEFERRABLE_WORK(&info->pwr_rdy_work, rt9455_pwr_rdy_work_callback);
1665	INIT_DEFERRABLE_WORK(&info->max_charging_time_work,
1666			     rt9455_max_charging_time_work_callback);
1667	INIT_DEFERRABLE_WORK(&info->batt_presence_work,
1668			     rt9455_batt_presence_work_callback);
1669
1670	rt9455_charger_config.of_node		= dev->of_node;
1671	rt9455_charger_config.drv_data		= info;
1672	rt9455_charger_config.supplied_to	= rt9455_charger_supplied_to;
1673	rt9455_charger_config.num_supplicants	=
1674					ARRAY_SIZE(rt9455_charger_supplied_to);
1675	ret = devm_request_threaded_irq(dev, client->irq, NULL,
1676					rt9455_irq_handler_thread,
1677					IRQF_TRIGGER_LOW | IRQF_ONESHOT,
1678					RT9455_DRIVER_NAME, info);
1679	if (ret) {
1680		dev_err(dev, "Failed to register IRQ handler\n");
1681		goto put_usb_notifier;
1682	}
1683
1684	ret = rt9455_hw_init(info, ichrg, ieoc_percentage, mivr, iaicr);
1685	if (ret) {
1686		dev_err(dev, "Failed to set charger to its default values\n");
1687		goto put_usb_notifier;
1688	}
1689
1690	info->charger = devm_power_supply_register(dev, &rt9455_charger_desc,
1691						   &rt9455_charger_config);
1692	if (IS_ERR(info->charger)) {
1693		dev_err(dev, "Failed to register charger\n");
1694		ret = PTR_ERR(info->charger);
1695		goto put_usb_notifier;
1696	}
1697
1698	return 0;
1699
1700put_usb_notifier:
1701#if IS_ENABLED(CONFIG_USB_PHY)
1702	if (info->nb.notifier_call)  {
1703		usb_unregister_notifier(info->usb_phy, &info->nb);
1704		info->nb.notifier_call = NULL;
1705	}
1706#endif
1707	return ret;
1708}
1709
1710static int rt9455_remove(struct i2c_client *client)
1711{
1712	int ret;
1713	struct rt9455_info *info = i2c_get_clientdata(client);
1714
1715	ret = rt9455_register_reset(info);
1716	if (ret)
1717		dev_err(&info->client->dev, "Failed to set charger to its default values\n");
1718
1719#if IS_ENABLED(CONFIG_USB_PHY)
1720	if (info->nb.notifier_call)
1721		usb_unregister_notifier(info->usb_phy, &info->nb);
1722#endif
1723
1724	cancel_delayed_work_sync(&info->pwr_rdy_work);
1725	cancel_delayed_work_sync(&info->max_charging_time_work);
1726	cancel_delayed_work_sync(&info->batt_presence_work);
1727
1728	return ret;
1729}
1730
1731static const struct i2c_device_id rt9455_i2c_id_table[] = {
1732	{ RT9455_DRIVER_NAME, 0 },
1733	{ },
1734};
1735MODULE_DEVICE_TABLE(i2c, rt9455_i2c_id_table);
1736
1737static const struct of_device_id rt9455_of_match[] = {
1738	{ .compatible = "richtek,rt9455", },
1739	{ },
1740};
1741MODULE_DEVICE_TABLE(of, rt9455_of_match);
1742
1743static const struct acpi_device_id rt9455_i2c_acpi_match[] = {
1744	{ "RT945500", 0 },
1745	{ }
1746};
1747MODULE_DEVICE_TABLE(acpi, rt9455_i2c_acpi_match);
1748
1749static struct i2c_driver rt9455_driver = {
1750	.probe		= rt9455_probe,
1751	.remove		= rt9455_remove,
1752	.id_table	= rt9455_i2c_id_table,
1753	.driver = {
1754		.name		= RT9455_DRIVER_NAME,
1755		.of_match_table	= of_match_ptr(rt9455_of_match),
1756		.acpi_match_table = ACPI_PTR(rt9455_i2c_acpi_match),
1757	},
1758};
1759module_i2c_driver(rt9455_driver);
1760
1761MODULE_LICENSE("GPL");
1762MODULE_AUTHOR("Anda-Maria Nicolae <anda-maria.nicolae@intel.com>");
1763MODULE_DESCRIPTION("Richtek RT9455 Charger Driver");
1764