1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Analog Devices LTC4282 I2C High Current Hot Swap Controller over I2C
4 *
5 * Copyright 2023 Analog Devices Inc.
6 */
7#include <linux/bitfield.h>
8#include <linux/cleanup.h>
9#include <linux/clk.h>
10#include <linux/clk-provider.h>
11#include <linux/debugfs.h>
12#include <linux/delay.h>
13#include <linux/device.h>
14#include <linux/hwmon.h>
15#include <linux/hwmon-sysfs.h>
16#include <linux/i2c.h>
17#include <linux/math.h>
18#include <linux/minmax.h>
19#include <linux/module.h>
20#include <linux/mod_devicetable.h>
21#include <linux/mutex.h>
22#include <linux/regmap.h>
23#include <linux/property.h>
24#include <linux/string.h>
25#include <linux/units.h>
26#include <linux/util_macros.h>
27
28#define LTC4282_CTRL_LSB			0x00
29  #define LTC4282_CTRL_OV_RETRY_MASK		BIT(0)
30  #define LTC4282_CTRL_UV_RETRY_MASK		BIT(1)
31  #define LTC4282_CTRL_OC_RETRY_MASK		BIT(2)
32  #define LTC4282_CTRL_ON_ACTIVE_LOW_MASK	BIT(5)
33  #define LTC4282_CTRL_ON_DELAY_MASK		BIT(6)
34#define LTC4282_CTRL_MSB			0x01
35  #define LTC4282_CTRL_VIN_MODE_MASK		GENMASK(1, 0)
36  #define LTC4282_CTRL_OV_MODE_MASK		GENMASK(3, 2)
37  #define LTC4282_CTRL_UV_MODE_MASK		GENMASK(5, 4)
38#define LTC4282_FAULT_LOG			0x04
39  #define LTC4282_OV_FAULT_MASK			BIT(0)
40  #define LTC4282_UV_FAULT_MASK			BIT(1)
41  #define LTC4282_VDD_FAULT_MASK \
42		(LTC4282_OV_FAULT_MASK | LTC4282_UV_FAULT_MASK)
43  #define LTC4282_OC_FAULT_MASK			BIT(2)
44  #define LTC4282_POWER_BAD_FAULT_MASK		BIT(3)
45  #define LTC4282_FET_SHORT_FAULT_MASK		BIT(5)
46  #define LTC4282_FET_BAD_FAULT_MASK		BIT(6)
47  #define LTC4282_FET_FAILURE_FAULT_MASK \
48		(LTC4282_FET_SHORT_FAULT_MASK | LTC4282_FET_BAD_FAULT_MASK)
49#define LTC4282_ADC_ALERT_LOG			0x05
50  #define LTC4282_GPIO_ALARM_L_MASK		BIT(0)
51  #define LTC4282_GPIO_ALARM_H_MASK		BIT(1)
52  #define LTC4282_VSOURCE_ALARM_L_MASK		BIT(2)
53  #define LTC4282_VSOURCE_ALARM_H_MASK		BIT(3)
54  #define LTC4282_VSENSE_ALARM_L_MASK		BIT(4)
55  #define LTC4282_VSENSE_ALARM_H_MASK		BIT(5)
56  #define LTC4282_POWER_ALARM_L_MASK		BIT(6)
57  #define LTC4282_POWER_ALARM_H_MASK		BIT(7)
58#define LTC4282_FET_BAD_FAULT_TIMEOUT		0x06
59  #define LTC4282_FET_BAD_MAX_TIMEOUT		255
60#define LTC4282_GPIO_CONFIG			0x07
61  #define LTC4282_GPIO_2_FET_STRESS_MASK	BIT(1)
62  #define LTC4282_GPIO_1_CONFIG_MASK		GENMASK(5, 4)
63#define LTC4282_VGPIO_MIN			0x08
64#define LTC4282_VGPIO_MAX			0x09
65#define LTC4282_VSOURCE_MIN			0x0a
66#define LTC4282_VSOURCE_MAX			0x0b
67#define LTC4282_VSENSE_MIN			0x0c
68#define LTC4282_VSENSE_MAX			0x0d
69#define LTC4282_POWER_MIN			0x0e
70#define LTC4282_POWER_MAX			0x0f
71#define LTC4282_CLK_DIV				0x10
72  #define LTC4282_CLK_DIV_MASK			GENMASK(4, 0)
73  #define LTC4282_CLKOUT_MASK			GENMASK(6, 5)
74#define LTC4282_ILIM_ADJUST			0x11
75  #define LTC4282_GPIO_MODE_MASK		BIT(1)
76  #define LTC4282_VDD_MONITOR_MASK		BIT(2)
77  #define LTC4282_FOLDBACK_MODE_MASK		GENMASK(4, 3)
78  #define LTC4282_ILIM_ADJUST_MASK		GENMASK(7, 5)
79#define LTC4282_ENERGY				0x12
80#define LTC4282_TIME_COUNTER			0x18
81#define LTC4282_ALERT_CTRL			0x1c
82  #define LTC4282_ALERT_OUT_MASK		BIT(6)
83#define LTC4282_ADC_CTRL			0x1d
84  #define LTC4282_FAULT_LOG_EN_MASK		BIT(2)
85  #define LTC4282_METER_HALT_MASK		BIT(5)
86  #define LTC4282_METER_RESET_MASK		BIT(6)
87  #define LTC4282_RESET_MASK			BIT(7)
88#define LTC4282_STATUS_LSB			0x1e
89  #define LTC4282_OV_STATUS_MASK		BIT(0)
90  #define LTC4282_UV_STATUS_MASK		BIT(1)
91  #define LTC4282_VDD_STATUS_MASK \
92		(LTC4282_OV_STATUS_MASK | LTC4282_UV_STATUS_MASK)
93  #define LTC4282_OC_STATUS_MASK		BIT(2)
94  #define LTC4282_POWER_GOOD_MASK		BIT(3)
95  #define LTC4282_FET_FAILURE_MASK		GENMASK(6, 5)
96#define LTC4282_STATUS_MSB			0x1f
97#define LTC4282_RESERVED_1			0x32
98#define LTC4282_RESERVED_2			0x33
99#define LTC4282_VGPIO				0x34
100#define LTC4282_VGPIO_LOWEST			0x36
101#define LTC4282_VGPIO_HIGHEST			0x38
102#define LTC4282_VSOURCE				0x3a
103#define LTC4282_VSOURCE_LOWEST			0x3c
104#define LTC4282_VSOURCE_HIGHEST			0x3e
105#define LTC4282_VSENSE				0x40
106#define LTC4282_VSENSE_LOWEST			0x42
107#define LTC4282_VSENSE_HIGHEST			0x44
108#define LTC4282_POWER				0x46
109#define LTC4282_POWER_LOWEST			0x48
110#define LTC4282_POWER_HIGHEST			0x4a
111#define LTC4282_RESERVED_3			0x50
112
113#define LTC4282_CLKIN_MIN	(250 * KILO)
114#define LTC4282_CLKIN_MAX	(15500 * KILO)
115#define LTC4282_CLKIN_RANGE	(LTC4282_CLKIN_MAX - LTC4282_CLKIN_MIN + 1)
116#define LTC4282_CLKOUT_SYSTEM	(250 * KILO)
117#define LTC4282_CLKOUT_CNV	15
118
119enum {
120	LTC4282_CHAN_VSOURCE,
121	LTC4282_CHAN_VDD,
122	LTC4282_CHAN_VGPIO,
123};
124
125struct ltc4282_cache {
126	u32 in_max_raw;
127	u32 in_min_raw;
128	long in_highest;
129	long in_lowest;
130	bool en;
131};
132
133struct ltc4282_state {
134	struct regmap *map;
135	/* Protect against multiple accesses to the device registers */
136	struct mutex lock;
137	struct clk_hw clk_hw;
138	/*
139	 * Used to cache values for VDD/VSOURCE depending which will be used
140	 * when hwmon is not enabled for that channel. Needed because they share
141	 * the same registers.
142	 */
143	struct ltc4282_cache in0_1_cache[LTC4282_CHAN_VGPIO];
144	u32 vsense_max;
145	long power_max;
146	u32 rsense;
147	u16 vdd;
148	u16 vfs_out;
149	bool energy_en;
150};
151
152enum {
153	LTC4282_CLKOUT_NONE,
154	LTC4282_CLKOUT_INT,
155	LTC4282_CLKOUT_TICK,
156};
157
158static int ltc4282_set_rate(struct clk_hw *hw,
159			    unsigned long rate, unsigned long parent_rate)
160{
161	struct ltc4282_state *st = container_of(hw, struct ltc4282_state,
162						clk_hw);
163	u32 val = LTC4282_CLKOUT_INT;
164
165	if (rate == LTC4282_CLKOUT_CNV)
166		val = LTC4282_CLKOUT_TICK;
167
168	return regmap_update_bits(st->map, LTC4282_CLK_DIV, LTC4282_CLKOUT_MASK,
169				  FIELD_PREP(LTC4282_CLKOUT_MASK, val));
170}
171
172/*
173 * Note the 15HZ conversion rate assumes 12bit ADC which is what we are
174 * supporting for now.
175 */
176static const unsigned int ltc4282_out_rates[] = {
177	LTC4282_CLKOUT_CNV, LTC4282_CLKOUT_SYSTEM
178};
179
180static long ltc4282_round_rate(struct clk_hw *hw, unsigned long rate,
181			       unsigned long *parent_rate)
182{
183	int idx = find_closest(rate, ltc4282_out_rates,
184			       ARRAY_SIZE(ltc4282_out_rates));
185
186	return ltc4282_out_rates[idx];
187}
188
189static unsigned long ltc4282_recalc_rate(struct clk_hw *hw,
190					 unsigned long parent)
191{
192	struct ltc4282_state *st = container_of(hw, struct ltc4282_state,
193						clk_hw);
194	u32 clkdiv;
195	int ret;
196
197	ret = regmap_read(st->map, LTC4282_CLK_DIV, &clkdiv);
198	if (ret)
199		return 0;
200
201	clkdiv = FIELD_GET(LTC4282_CLKOUT_MASK, clkdiv);
202	if (!clkdiv)
203		return 0;
204	if (clkdiv == LTC4282_CLKOUT_INT)
205		return LTC4282_CLKOUT_SYSTEM;
206
207	return LTC4282_CLKOUT_CNV;
208}
209
210static void ltc4282_disable(struct clk_hw *clk_hw)
211{
212	struct ltc4282_state *st = container_of(clk_hw, struct ltc4282_state,
213						clk_hw);
214
215	regmap_clear_bits(st->map, LTC4282_CLK_DIV, LTC4282_CLKOUT_MASK);
216}
217
218static int ltc4282_read_voltage_word(const struct ltc4282_state *st, u32 reg,
219				     u32 fs, long *val)
220{
221	__be16 in;
222	int ret;
223
224	ret = regmap_bulk_read(st->map, reg, &in, sizeof(in));
225	if (ret)
226		return ret;
227
228	/*
229	 * This is also used to calculate current in which case fs comes in
230	 * 10 * uV. Hence the ULL usage.
231	 */
232	*val = DIV_ROUND_CLOSEST_ULL(be16_to_cpu(in) * (u64)fs, U16_MAX);
233	return 0;
234}
235
236static int ltc4282_read_voltage_byte_cached(const struct ltc4282_state *st,
237					    u32 reg, u32 fs, long *val,
238					    u32 *cached_raw)
239{
240	int ret;
241	u32 in;
242
243	if (cached_raw) {
244		in = *cached_raw;
245	} else {
246		ret = regmap_read(st->map, reg, &in);
247		if (ret)
248			return ret;
249	}
250
251	*val = DIV_ROUND_CLOSEST(in * fs, U8_MAX);
252	return 0;
253}
254
255static int ltc4282_read_voltage_byte(const struct ltc4282_state *st, u32 reg,
256				     u32 fs, long *val)
257{
258	return ltc4282_read_voltage_byte_cached(st, reg, fs, val, NULL);
259}
260
261static int __ltc4282_read_alarm(struct ltc4282_state *st, u32 reg, u32 mask,
262				long *val)
263{
264	u32 alarm;
265	int ret;
266
267	ret = regmap_read(st->map, reg, &alarm);
268	if (ret)
269		return ret;
270
271	*val = !!(alarm & mask);
272
273	/* if not status/fault logs, clear the alarm after reading it */
274	if (reg != LTC4282_STATUS_LSB && reg != LTC4282_FAULT_LOG)
275		return regmap_clear_bits(st->map, reg, mask);
276
277	return 0;
278}
279
280static int ltc4282_read_alarm(struct ltc4282_state *st, u32 reg, u32 mask,
281			      long *val)
282{
283	guard(mutex)(&st->lock);
284	return __ltc4282_read_alarm(st, reg, mask, val);
285}
286
287static int ltc4282_vdd_source_read_in(struct ltc4282_state *st, u32 channel,
288				      long *val)
289{
290	guard(mutex)(&st->lock);
291	if (!st->in0_1_cache[channel].en)
292		return -ENODATA;
293
294	return ltc4282_read_voltage_word(st, LTC4282_VSOURCE, st->vfs_out, val);
295}
296
297static int ltc4282_vdd_source_read_hist(struct ltc4282_state *st, u32 reg,
298					u32 channel, long *cached, long *val)
299{
300	int ret;
301
302	guard(mutex)(&st->lock);
303	if (!st->in0_1_cache[channel].en) {
304		*val = *cached;
305		return 0;
306	}
307
308	ret = ltc4282_read_voltage_word(st, reg, st->vfs_out, val);
309	if (ret)
310		return ret;
311
312	*cached = *val;
313	return 0;
314}
315
316static int ltc4282_vdd_source_read_lim(struct ltc4282_state *st, u32 reg,
317				       u32 channel, u32 *cached, long *val)
318{
319	guard(mutex)(&st->lock);
320	if (!st->in0_1_cache[channel].en)
321		return ltc4282_read_voltage_byte_cached(st, reg, st->vfs_out,
322							val, cached);
323
324	return ltc4282_read_voltage_byte(st, reg, st->vfs_out, val);
325}
326
327static int ltc4282_vdd_source_read_alm(struct ltc4282_state *st, u32 mask,
328				       u32 channel, long *val)
329{
330	guard(mutex)(&st->lock);
331	if (!st->in0_1_cache[channel].en) {
332		/*
333		 * Do this otherwise alarms can get confused because we clear
334		 * them after reading them. So, if someone mistakenly reads
335		 * VSOURCE right before VDD (or the other way around), we might
336		 * get no alarm just because it was cleared when reading VSOURCE
337		 * and had no time for a new conversion and thus having the
338		 * alarm again.
339		 */
340		*val = 0;
341		return 0;
342	}
343
344	return __ltc4282_read_alarm(st, LTC4282_ADC_ALERT_LOG, mask, val);
345}
346
347static int ltc4282_read_in(struct ltc4282_state *st, u32 attr, long *val,
348			   u32 channel)
349{
350	switch (attr) {
351	case hwmon_in_input:
352		if (channel == LTC4282_CHAN_VGPIO)
353			return ltc4282_read_voltage_word(st, LTC4282_VGPIO,
354							 1280, val);
355
356		return ltc4282_vdd_source_read_in(st, channel, val);
357	case hwmon_in_highest:
358		if (channel == LTC4282_CHAN_VGPIO)
359			return ltc4282_read_voltage_word(st,
360							 LTC4282_VGPIO_HIGHEST,
361							 1280, val);
362
363		return ltc4282_vdd_source_read_hist(st, LTC4282_VSOURCE_HIGHEST,
364						    channel,
365						    &st->in0_1_cache[channel].in_highest, val);
366	case hwmon_in_lowest:
367		if (channel == LTC4282_CHAN_VGPIO)
368			return ltc4282_read_voltage_word(st, LTC4282_VGPIO_LOWEST,
369							 1280, val);
370
371		return ltc4282_vdd_source_read_hist(st, LTC4282_VSOURCE_LOWEST,
372						    channel,
373						    &st->in0_1_cache[channel].in_lowest, val);
374	case hwmon_in_max_alarm:
375		if (channel == LTC4282_CHAN_VGPIO)
376			return ltc4282_read_alarm(st, LTC4282_ADC_ALERT_LOG,
377						  LTC4282_GPIO_ALARM_H_MASK,
378						  val);
379
380		return ltc4282_vdd_source_read_alm(st,
381						   LTC4282_VSOURCE_ALARM_H_MASK,
382						   channel, val);
383	case hwmon_in_min_alarm:
384		if (channel == LTC4282_CHAN_VGPIO)
385			ltc4282_read_alarm(st, LTC4282_ADC_ALERT_LOG,
386					   LTC4282_GPIO_ALARM_L_MASK, val);
387
388		return ltc4282_vdd_source_read_alm(st,
389						   LTC4282_VSOURCE_ALARM_L_MASK,
390						   channel, val);
391	case hwmon_in_crit_alarm:
392		return ltc4282_read_alarm(st, LTC4282_STATUS_LSB,
393					  LTC4282_OV_STATUS_MASK, val);
394	case hwmon_in_lcrit_alarm:
395		return ltc4282_read_alarm(st, LTC4282_STATUS_LSB,
396					  LTC4282_UV_STATUS_MASK, val);
397	case hwmon_in_max:
398		if (channel == LTC4282_CHAN_VGPIO)
399			return ltc4282_read_voltage_byte(st, LTC4282_VGPIO_MAX,
400							 1280, val);
401
402		return ltc4282_vdd_source_read_lim(st, LTC4282_VSOURCE_MAX,
403						   channel,
404						   &st->in0_1_cache[channel].in_max_raw, val);
405	case hwmon_in_min:
406		if (channel == LTC4282_CHAN_VGPIO)
407			return ltc4282_read_voltage_byte(st, LTC4282_VGPIO_MIN,
408							 1280, val);
409
410		return ltc4282_vdd_source_read_lim(st, LTC4282_VSOURCE_MIN,
411						   channel,
412						   &st->in0_1_cache[channel].in_min_raw, val);
413	case hwmon_in_enable:
414		scoped_guard(mutex, &st->lock) {
415			*val = st->in0_1_cache[channel].en;
416		}
417		return 0;
418	case hwmon_in_fault:
419		/*
420		 * We report failure if we detect either a fer_bad or a
421		 * fet_short in the status register.
422		 */
423		return ltc4282_read_alarm(st, LTC4282_STATUS_LSB,
424					  LTC4282_FET_FAILURE_MASK, val);
425	default:
426		return -EOPNOTSUPP;
427	}
428}
429
430static int ltc4282_read_current_word(const struct ltc4282_state *st, u32 reg,
431				     long *val)
432{
433	long in;
434	int ret;
435
436	/*
437	 * We pass in full scale in 10 * micro (note that 40 is already
438	 * millivolt) so we have better approximations to calculate current.
439	 */
440	ret = ltc4282_read_voltage_word(st, reg, DECA * 40 * MILLI, &in);
441	if (ret)
442		return ret;
443
444	*val = DIV_ROUND_CLOSEST(in * MILLI, st->rsense);
445
446	return 0;
447}
448
449static int ltc4282_read_current_byte(const struct ltc4282_state *st, u32 reg,
450				     long *val)
451{
452	long in;
453	int ret;
454
455	ret = ltc4282_read_voltage_byte(st, reg, DECA * 40 * MILLI, &in);
456	if (ret)
457		return ret;
458
459	*val = DIV_ROUND_CLOSEST(in * MILLI, st->rsense);
460
461	return 0;
462}
463
464static int ltc4282_read_curr(struct ltc4282_state *st, const u32 attr,
465			     long *val)
466{
467	switch (attr) {
468	case hwmon_curr_input:
469		return ltc4282_read_current_word(st, LTC4282_VSENSE, val);
470	case hwmon_curr_highest:
471		return ltc4282_read_current_word(st, LTC4282_VSENSE_HIGHEST,
472						 val);
473	case hwmon_curr_lowest:
474		return ltc4282_read_current_word(st, LTC4282_VSENSE_LOWEST,
475						 val);
476	case hwmon_curr_max:
477		return ltc4282_read_current_byte(st, LTC4282_VSENSE_MAX, val);
478	case hwmon_curr_min:
479		return ltc4282_read_current_byte(st, LTC4282_VSENSE_MIN, val);
480	case hwmon_curr_max_alarm:
481		return ltc4282_read_alarm(st, LTC4282_ADC_ALERT_LOG,
482					  LTC4282_VSENSE_ALARM_H_MASK, val);
483	case hwmon_curr_min_alarm:
484		return ltc4282_read_alarm(st, LTC4282_ADC_ALERT_LOG,
485					  LTC4282_VSENSE_ALARM_L_MASK, val);
486	case hwmon_curr_crit_alarm:
487		return ltc4282_read_alarm(st, LTC4282_STATUS_LSB,
488					  LTC4282_OC_STATUS_MASK, val);
489	default:
490		return -EOPNOTSUPP;
491	}
492}
493
494static int ltc4282_read_power_word(const struct ltc4282_state *st, u32 reg,
495				   long *val)
496{
497	u64 temp =  DECA * 40ULL * st->vfs_out * BIT(16), temp_2;
498	__be16 raw;
499	u16 power;
500	int ret;
501
502	ret = regmap_bulk_read(st->map, reg, &raw, sizeof(raw));
503	if (ret)
504		return ret;
505
506	power = be16_to_cpu(raw);
507	/*
508	 * Power is given by:
509	 *     P = CODE(16b) * 0.040 * Vfs(out) * 2^16 / ((2^16 - 1)^2 * Rsense)
510	 */
511	if (check_mul_overflow(power * temp, MICRO, &temp_2)) {
512		temp = DIV_ROUND_CLOSEST_ULL(power * temp, U16_MAX);
513		*val = DIV64_U64_ROUND_CLOSEST(temp * MICRO,
514					       U16_MAX * (u64)st->rsense);
515		return 0;
516	}
517
518	*val = DIV64_U64_ROUND_CLOSEST(temp_2,
519				       st->rsense * int_pow(U16_MAX, 2));
520
521	return 0;
522}
523
524static int ltc4282_read_power_byte(const struct ltc4282_state *st, u32 reg,
525				   long *val)
526{
527	u32 power;
528	u64 temp;
529	int ret;
530
531	ret = regmap_read(st->map, reg, &power);
532	if (ret)
533		return ret;
534
535	temp = power * 40 * DECA * st->vfs_out * BIT_ULL(8);
536	*val = DIV64_U64_ROUND_CLOSEST(temp * MICRO,
537				       int_pow(U8_MAX, 2) * st->rsense);
538
539	return 0;
540}
541
542static int ltc4282_read_energy(const struct ltc4282_state *st, u64 *val)
543{
544	u64 temp, energy;
545	__be64 raw;
546	int ret;
547
548	ret = regmap_bulk_read(st->map, LTC4282_ENERGY, &raw, 6);
549	if (ret)
550		return ret;
551
552	energy =  be64_to_cpu(raw) >> 16;
553	/*
554	 * The formula for energy is given by:
555	 *	E = CODE(48b) * 0.040 * Vfs(out) * Tconv * 256 /
556	 *						((2^16 - 1)^2 * Rsense)
557	 *
558	 * Since we only support 12bit ADC, Tconv = 0.065535s. Passing Vfs(out)
559	 * and 0.040 to mV and Tconv to us, we can simplify the formula to:
560	 *	E = CODE(48b) * 40 * Vfs(out) * 256 / (U16_MAX * Rsense)
561	 *
562	 * As Rsense can have tenths of micro-ohm resolution, we need to
563	 * multiply by DECA to get microujoule.
564	 */
565	if (check_mul_overflow(DECA * st->vfs_out * 40 * BIT(8), energy, &temp)) {
566		temp = DIV_ROUND_CLOSEST(DECA * st->vfs_out * 40 * BIT(8), U16_MAX);
567		*val = DIV_ROUND_CLOSEST_ULL(temp * energy, st->rsense);
568		return 0;
569	}
570
571	*val = DIV64_U64_ROUND_CLOSEST(temp, U16_MAX * (u64)st->rsense);
572
573	return 0;
574}
575
576static int ltc4282_read_power(struct ltc4282_state *st, const u32 attr,
577			      long *val)
578{
579	switch (attr) {
580	case hwmon_power_input:
581		return ltc4282_read_power_word(st, LTC4282_POWER, val);
582	case hwmon_power_input_highest:
583		return ltc4282_read_power_word(st, LTC4282_POWER_HIGHEST, val);
584	case hwmon_power_input_lowest:
585		return ltc4282_read_power_word(st, LTC4282_POWER_LOWEST, val);
586	case hwmon_power_max_alarm:
587		return ltc4282_read_alarm(st, LTC4282_ADC_ALERT_LOG,
588					  LTC4282_POWER_ALARM_H_MASK, val);
589	case hwmon_power_min_alarm:
590		return ltc4282_read_alarm(st, LTC4282_ADC_ALERT_LOG,
591					  LTC4282_POWER_ALARM_L_MASK, val);
592	case hwmon_power_max:
593		return ltc4282_read_power_byte(st, LTC4282_POWER_MAX, val);
594	case hwmon_power_min:
595		return ltc4282_read_power_byte(st, LTC4282_POWER_MIN, val);
596	default:
597		return -EOPNOTSUPP;
598	}
599}
600
601static int ltc4282_read(struct device *dev, enum hwmon_sensor_types type,
602			u32 attr, int channel, long *val)
603{
604	struct ltc4282_state *st = dev_get_drvdata(dev);
605
606	switch (type) {
607	case hwmon_in:
608		return ltc4282_read_in(st, attr, val, channel);
609	case hwmon_curr:
610		return ltc4282_read_curr(st, attr, val);
611	case hwmon_power:
612		return ltc4282_read_power(st, attr, val);
613	case hwmon_energy:
614		scoped_guard(mutex, &st->lock) {
615			*val = st->energy_en;
616		}
617		return 0;
618	default:
619		return -EOPNOTSUPP;
620	}
621}
622
623static int ltc4282_write_power_byte(const struct ltc4282_state *st, u32 reg,
624				    long val)
625{
626	u32 power;
627	u64 temp;
628
629	if (val > st->power_max)
630		val = st->power_max;
631
632	temp = val * int_pow(U8_MAX, 2) * st->rsense;
633	power = DIV64_U64_ROUND_CLOSEST(temp,
634					MICRO * DECA * 256ULL * st->vfs_out * 40);
635
636	return regmap_write(st->map, reg, power);
637}
638
639static int ltc4282_write_power_word(const struct ltc4282_state *st, u32 reg,
640				    long val)
641{
642	u64 temp = int_pow(U16_MAX, 2) * st->rsense, temp_2;
643	__be16 __raw;
644	u16 code;
645
646	if (check_mul_overflow(temp, val, &temp_2)) {
647		temp = DIV_ROUND_CLOSEST_ULL(temp, DECA * MICRO);
648		code = DIV64_U64_ROUND_CLOSEST(temp * val,
649					       40ULL * BIT(16) * st->vfs_out);
650	} else {
651		temp =  DECA * MICRO * 40ULL * BIT(16) * st->vfs_out;
652		code = DIV64_U64_ROUND_CLOSEST(temp_2, temp);
653	}
654
655	__raw = cpu_to_be16(code);
656	return regmap_bulk_write(st->map, reg, &__raw, sizeof(__raw));
657}
658
659static int __ltc4282_in_write_history(const struct ltc4282_state *st, u32 reg,
660				      long lowest, long highest, u32 fs)
661{
662	__be16 __raw;
663	u16 tmp;
664	int ret;
665
666	tmp = DIV_ROUND_CLOSEST(U16_MAX * lowest, fs);
667
668	__raw = cpu_to_be16(tmp);
669
670	ret = regmap_bulk_write(st->map, reg, &__raw, 2);
671	if (ret)
672		return ret;
673
674	tmp = DIV_ROUND_CLOSEST(U16_MAX * highest, fs);
675
676	__raw = cpu_to_be16(tmp);
677
678	return regmap_bulk_write(st->map, reg + 2, &__raw, 2);
679}
680
681static int ltc4282_in_write_history(struct ltc4282_state *st, u32 reg,
682				    long lowest, long highest, u32 fs)
683{
684	guard(mutex)(&st->lock);
685	return __ltc4282_in_write_history(st, reg, lowest, highest, fs);
686}
687
688static int ltc4282_power_reset_hist(struct ltc4282_state *st)
689{
690	int ret;
691
692	guard(mutex)(&st->lock);
693
694	ret = ltc4282_write_power_word(st, LTC4282_POWER_LOWEST,
695				       st->power_max);
696	if (ret)
697		return ret;
698
699	ret = ltc4282_write_power_word(st, LTC4282_POWER_HIGHEST, 0);
700	if (ret)
701		return ret;
702
703	/* now, let's also clear possible power_bad fault logs */
704	return regmap_clear_bits(st->map, LTC4282_FAULT_LOG,
705				 LTC4282_POWER_BAD_FAULT_MASK);
706}
707
708static int ltc4282_write_power(struct ltc4282_state *st, u32 attr,
709			       long val)
710{
711	switch (attr) {
712	case hwmon_power_max:
713		return ltc4282_write_power_byte(st, LTC4282_POWER_MAX, val);
714	case hwmon_power_min:
715		return ltc4282_write_power_byte(st, LTC4282_POWER_MIN, val);
716	case hwmon_power_reset_history:
717		return ltc4282_power_reset_hist(st);
718	default:
719		return -EOPNOTSUPP;
720	}
721}
722
723static int ltc4282_write_voltage_byte_cached(const struct ltc4282_state *st,
724					     u32 reg, u32 fs, long val,
725					     u32 *cache_raw)
726{
727	u32 in;
728
729	val = clamp_val(val, 0, fs);
730	in = DIV_ROUND_CLOSEST(val * U8_MAX, fs);
731
732	if (cache_raw) {
733		*cache_raw = in;
734		return 0;
735	}
736
737	return regmap_write(st->map, reg, in);
738}
739
740static int ltc4282_write_voltage_byte(const struct ltc4282_state *st, u32 reg,
741				      u32 fs, long val)
742{
743	return ltc4282_write_voltage_byte_cached(st, reg, fs, val, NULL);
744}
745
746static int ltc4282_cache_history(struct ltc4282_state *st, u32 channel)
747{
748	long val;
749	int ret;
750
751	ret = ltc4282_read_voltage_word(st, LTC4282_VSOURCE_LOWEST, st->vfs_out,
752					&val);
753	if (ret)
754		return ret;
755
756	st->in0_1_cache[channel].in_lowest = val;
757
758	ret = ltc4282_read_voltage_word(st, LTC4282_VSOURCE_HIGHEST,
759					st->vfs_out, &val);
760	if (ret)
761		return ret;
762
763	st->in0_1_cache[channel].in_highest = val;
764
765	ret = regmap_read(st->map, LTC4282_VSOURCE_MIN,
766			  &st->in0_1_cache[channel].in_min_raw);
767	if (ret)
768		return ret;
769
770	return regmap_read(st->map, LTC4282_VSOURCE_MAX,
771			  &st->in0_1_cache[channel].in_max_raw);
772}
773
774static int ltc4282_cache_sync(struct ltc4282_state *st, u32 channel)
775{
776	int ret;
777
778	ret = __ltc4282_in_write_history(st, LTC4282_VSOURCE_LOWEST,
779					 st->in0_1_cache[channel].in_lowest,
780					 st->in0_1_cache[channel].in_highest,
781					 st->vfs_out);
782	if (ret)
783		return ret;
784
785	ret = regmap_write(st->map, LTC4282_VSOURCE_MIN,
786			   st->in0_1_cache[channel].in_min_raw);
787	if (ret)
788		return ret;
789
790	return regmap_write(st->map, LTC4282_VSOURCE_MAX,
791			    st->in0_1_cache[channel].in_max_raw);
792}
793
794static int ltc4282_vdd_source_write_lim(struct ltc4282_state *st, u32 reg,
795					int channel, u32 *cache, long val)
796{
797	int ret;
798
799	guard(mutex)(&st->lock);
800	if (st->in0_1_cache[channel].en)
801		ret = ltc4282_write_voltage_byte(st, reg, st->vfs_out, val);
802	else
803		ret = ltc4282_write_voltage_byte_cached(st, reg, st->vfs_out,
804							val, cache);
805
806	return ret;
807}
808
809static int ltc4282_vdd_source_reset_hist(struct ltc4282_state *st, int channel)
810{
811	long lowest = st->vfs_out;
812	int ret;
813
814	if (channel == LTC4282_CHAN_VDD)
815		lowest = st->vdd;
816
817	guard(mutex)(&st->lock);
818	if (st->in0_1_cache[channel].en) {
819		ret = __ltc4282_in_write_history(st, LTC4282_VSOURCE_LOWEST,
820						 lowest, 0, st->vfs_out);
821		if (ret)
822			return ret;
823	}
824
825	st->in0_1_cache[channel].in_lowest = lowest;
826	st->in0_1_cache[channel].in_highest = 0;
827
828	/*
829	 * We are also clearing possible fault logs in reset_history. Clearing
830	 * the logs might be important when the auto retry bits are not enabled
831	 * as the chip only enables the output again after having these logs
832	 * cleared. As some of these logs are related to limits, it makes sense
833	 * to clear them in here. For VDD, we need to clear under/over voltage
834	 * events. For VSOURCE, fet_short and fet_bad...
835	 */
836	if (channel == LTC4282_CHAN_VSOURCE)
837		return regmap_clear_bits(st->map, LTC4282_FAULT_LOG,
838					 LTC4282_FET_FAILURE_FAULT_MASK);
839
840	return regmap_clear_bits(st->map, LTC4282_FAULT_LOG,
841				 LTC4282_VDD_FAULT_MASK);
842}
843
844/*
845 * We need to mux between VSOURCE and VDD which means they are mutually
846 * exclusive. Moreover, we can't really disable both VDD and VSOURCE as the ADC
847 * is continuously running (we cannot independently halt it without also
848 * stopping VGPIO). Hence, the logic is that disabling or enabling VDD will
849 * automatically have the reverse effect on VSOURCE and vice-versa.
850 */
851static int ltc4282_vdd_source_enable(struct ltc4282_state *st, int channel,
852				     long val)
853{
854	int ret, other_chan = ~channel & 0x1;
855	u8 __val = val;
856
857	guard(mutex)(&st->lock);
858	if (st->in0_1_cache[channel].en == !!val)
859		return 0;
860
861	/* clearing the bit makes the ADC to monitor VDD */
862	if (channel == LTC4282_CHAN_VDD)
863		__val = !__val;
864
865	ret = regmap_update_bits(st->map, LTC4282_ILIM_ADJUST,
866				 LTC4282_VDD_MONITOR_MASK,
867				 FIELD_PREP(LTC4282_VDD_MONITOR_MASK, !!__val));
868	if (ret)
869		return ret;
870
871	st->in0_1_cache[channel].en = !!val;
872	st->in0_1_cache[other_chan].en = !val;
873
874	if (st->in0_1_cache[channel].en) {
875		/*
876		 * Then, we are disabling @other_chan. Let's save it's current
877		 * history.
878		 */
879		ret = ltc4282_cache_history(st, other_chan);
880		if (ret)
881			return ret;
882
883		return ltc4282_cache_sync(st, channel);
884	}
885	/*
886	 * Then, we are enabling @other_chan. We need to do the opposite from
887	 * above.
888	 */
889	ret = ltc4282_cache_history(st, channel);
890	if (ret)
891		return ret;
892
893	return ltc4282_cache_sync(st, other_chan);
894}
895
896static int ltc4282_write_in(struct ltc4282_state *st, u32 attr, long val,
897			    int channel)
898{
899	switch (attr) {
900	case hwmon_in_max:
901		if (channel == LTC4282_CHAN_VGPIO)
902			return ltc4282_write_voltage_byte(st, LTC4282_VGPIO_MAX,
903							  1280, val);
904
905		return ltc4282_vdd_source_write_lim(st, LTC4282_VSOURCE_MAX,
906						    channel,
907						    &st->in0_1_cache[channel].in_max_raw, val);
908	case hwmon_in_min:
909		if (channel == LTC4282_CHAN_VGPIO)
910			return ltc4282_write_voltage_byte(st, LTC4282_VGPIO_MIN,
911							  1280, val);
912
913		return ltc4282_vdd_source_write_lim(st, LTC4282_VSOURCE_MIN,
914						    channel,
915						    &st->in0_1_cache[channel].in_min_raw, val);
916	case hwmon_in_reset_history:
917		if (channel == LTC4282_CHAN_VGPIO)
918			return ltc4282_in_write_history(st,
919							LTC4282_VGPIO_LOWEST,
920							1280, 0, 1280);
921
922		return ltc4282_vdd_source_reset_hist(st, channel);
923	case hwmon_in_enable:
924		return ltc4282_vdd_source_enable(st, channel, val);
925	default:
926		return -EOPNOTSUPP;
927	}
928}
929
930static int ltc4282_curr_reset_hist(struct ltc4282_state *st)
931{
932	int ret;
933
934	guard(mutex)(&st->lock);
935
936	ret = __ltc4282_in_write_history(st, LTC4282_VSENSE_LOWEST,
937					 st->vsense_max, 0, 40 * MILLI);
938	if (ret)
939		return ret;
940
941	/* now, let's also clear possible overcurrent fault logs */
942	return regmap_clear_bits(st->map, LTC4282_FAULT_LOG,
943				 LTC4282_OC_FAULT_MASK);
944}
945
946static int ltc4282_write_curr(struct ltc4282_state *st, u32 attr,
947			      long val)
948{
949	/* need to pass it in millivolt */
950	u32 in = DIV_ROUND_CLOSEST_ULL((u64)val * st->rsense, DECA * MICRO);
951
952	switch (attr) {
953	case hwmon_curr_max:
954		return ltc4282_write_voltage_byte(st, LTC4282_VSENSE_MAX, 40,
955						  in);
956	case hwmon_curr_min:
957		return ltc4282_write_voltage_byte(st, LTC4282_VSENSE_MIN, 40,
958						  in);
959	case hwmon_curr_reset_history:
960		return ltc4282_curr_reset_hist(st);
961	default:
962		return -EOPNOTSUPP;
963	}
964}
965
966static int ltc4282_energy_enable_set(struct ltc4282_state *st, long val)
967{
968	int ret;
969
970	guard(mutex)(&st->lock);
971	/* setting the bit halts the meter */
972	ret = regmap_update_bits(st->map, LTC4282_ADC_CTRL,
973				 LTC4282_METER_HALT_MASK,
974				 FIELD_PREP(LTC4282_METER_HALT_MASK, !val));
975	if (ret)
976		return ret;
977
978	st->energy_en = !!val;
979
980	return 0;
981}
982
983static int ltc4282_write(struct device *dev,
984			 enum hwmon_sensor_types type,
985			 u32 attr, int channel, long val)
986{
987	struct ltc4282_state *st = dev_get_drvdata(dev);
988
989	switch (type) {
990	case hwmon_power:
991		return ltc4282_write_power(st, attr, val);
992	case hwmon_in:
993		return ltc4282_write_in(st, attr, val, channel);
994	case hwmon_curr:
995		return ltc4282_write_curr(st, attr, val);
996	case hwmon_energy:
997		return ltc4282_energy_enable_set(st, val);
998	default:
999		return -EOPNOTSUPP;
1000	}
1001}
1002
1003static umode_t ltc4282_in_is_visible(const struct ltc4282_state *st, u32 attr)
1004{
1005	switch (attr) {
1006	case hwmon_in_input:
1007	case hwmon_in_highest:
1008	case hwmon_in_lowest:
1009	case hwmon_in_max_alarm:
1010	case hwmon_in_min_alarm:
1011	case hwmon_in_label:
1012	case hwmon_in_lcrit_alarm:
1013	case hwmon_in_crit_alarm:
1014	case hwmon_in_fault:
1015		return 0444;
1016	case hwmon_in_max:
1017	case hwmon_in_min:
1018	case hwmon_in_enable:
1019	case hwmon_in_reset_history:
1020		return 0644;
1021	default:
1022		return 0;
1023	}
1024}
1025
1026static umode_t ltc4282_curr_is_visible(u32 attr)
1027{
1028	switch (attr) {
1029	case hwmon_curr_input:
1030	case hwmon_curr_highest:
1031	case hwmon_curr_lowest:
1032	case hwmon_curr_max_alarm:
1033	case hwmon_curr_min_alarm:
1034	case hwmon_curr_crit_alarm:
1035	case hwmon_curr_label:
1036		return 0444;
1037	case hwmon_curr_max:
1038	case hwmon_curr_min:
1039	case hwmon_curr_reset_history:
1040		return 0644;
1041	default:
1042		return 0;
1043	}
1044}
1045
1046static umode_t ltc4282_power_is_visible(u32 attr)
1047{
1048	switch (attr) {
1049	case hwmon_power_input:
1050	case hwmon_power_input_highest:
1051	case hwmon_power_input_lowest:
1052	case hwmon_power_label:
1053	case hwmon_power_max_alarm:
1054	case hwmon_power_min_alarm:
1055		return 0444;
1056	case hwmon_power_max:
1057	case hwmon_power_min:
1058	case hwmon_power_reset_history:
1059		return 0644;
1060	default:
1061		return 0;
1062	}
1063}
1064
1065static umode_t ltc4282_is_visible(const void *data,
1066				  enum hwmon_sensor_types type,
1067				  u32 attr, int channel)
1068{
1069	switch (type) {
1070	case hwmon_in:
1071		return ltc4282_in_is_visible(data, attr);
1072	case hwmon_curr:
1073		return ltc4282_curr_is_visible(attr);
1074	case hwmon_power:
1075		return ltc4282_power_is_visible(attr);
1076	case hwmon_energy:
1077		/* hwmon_energy_enable */
1078		return 0644;
1079	default:
1080		return 0;
1081	}
1082}
1083
1084static const char * const ltc4282_in_strs[] = {
1085	"VSOURCE", "VDD", "VGPIO"
1086};
1087
1088static int ltc4282_read_labels(struct device *dev,
1089			       enum hwmon_sensor_types type,
1090			       u32 attr, int channel, const char **str)
1091{
1092	switch (type) {
1093	case hwmon_in:
1094		*str = ltc4282_in_strs[channel];
1095		return 0;
1096	case hwmon_curr:
1097		*str = "ISENSE";
1098		return 0;
1099	case hwmon_power:
1100		*str = "Power";
1101		return 0;
1102	default:
1103		return -EOPNOTSUPP;
1104	}
1105}
1106
1107static ssize_t ltc4282_energy_show(struct device *dev,
1108				   struct device_attribute *da, char *buf)
1109{
1110	struct ltc4282_state *st = dev_get_drvdata(dev);
1111	u64 energy;
1112	int ret;
1113
1114	guard(mutex)(&st->lock);
1115	if (!st->energy_en)
1116		return -ENODATA;
1117
1118	ret = ltc4282_read_energy(st, &energy);
1119	if (ret < 0)
1120		return ret;
1121
1122	return sysfs_emit(buf, "%llu\n", energy);
1123}
1124
1125static const struct clk_ops ltc4282_ops = {
1126	.recalc_rate = ltc4282_recalc_rate,
1127	.round_rate = ltc4282_round_rate,
1128	.set_rate = ltc4282_set_rate,
1129	.disable = ltc4282_disable,
1130};
1131
1132static int ltc428_clk_provider_setup(struct ltc4282_state *st,
1133				     struct device *dev)
1134{
1135	struct clk_init_data init;
1136	int ret;
1137
1138	if (!IS_ENABLED(CONFIG_COMMON_CLK))
1139		return 0;
1140
1141	init.name =  devm_kasprintf(dev, GFP_KERNEL, "%s-clk",
1142				    fwnode_get_name(dev_fwnode(dev)));
1143	if (!init.name)
1144		return -ENOMEM;
1145
1146	init.ops = &ltc4282_ops;
1147	init.flags = CLK_GET_RATE_NOCACHE;
1148	st->clk_hw.init = &init;
1149
1150	ret = devm_clk_hw_register(dev, &st->clk_hw);
1151	if (ret)
1152		return ret;
1153
1154	return devm_of_clk_add_hw_provider(dev, of_clk_hw_simple_get,
1155					   &st->clk_hw);
1156}
1157
1158static int ltc428_clks_setup(struct ltc4282_state *st, struct device *dev)
1159{
1160	unsigned long rate;
1161	struct clk *clkin;
1162	u32 val;
1163	int ret;
1164
1165	ret = ltc428_clk_provider_setup(st, dev);
1166	if (ret)
1167		return ret;
1168
1169	clkin = devm_clk_get_optional_enabled(dev, NULL);
1170	if (IS_ERR(clkin))
1171		return dev_err_probe(dev, PTR_ERR(clkin),
1172				     "Failed to get clkin");
1173	if (!clkin)
1174		return 0;
1175
1176	rate = clk_get_rate(clkin);
1177	if (!in_range(rate, LTC4282_CLKIN_MIN, LTC4282_CLKIN_RANGE))
1178		return dev_err_probe(dev, -EINVAL,
1179				     "Invalid clkin range(%lu) [%lu %lu]\n",
1180				     rate, LTC4282_CLKIN_MIN,
1181				     LTC4282_CLKIN_MAX);
1182
1183	/*
1184	 * Clocks faster than 250KHZ should be reduced to 250KHZ. The clock
1185	 * frequency is divided by twice the value in the register.
1186	 */
1187	val = rate / (2 * LTC4282_CLKIN_MIN);
1188
1189	return regmap_update_bits(st->map, LTC4282_CLK_DIV,
1190				  LTC4282_CLK_DIV_MASK,
1191				  FIELD_PREP(LTC4282_CLK_DIV_MASK, val));
1192}
1193
1194static const int ltc4282_curr_lim_uv[] = {
1195	12500, 15625, 18750, 21875, 25000, 28125, 31250, 34375
1196};
1197
1198static int ltc4282_get_defaults(struct ltc4282_state *st, u32 *vin_mode)
1199{
1200	u32 reg_val, ilm_adjust;
1201	int ret;
1202
1203	ret = regmap_read(st->map, LTC4282_ADC_CTRL, &reg_val);
1204	if (ret)
1205		return ret;
1206
1207	st->energy_en = !FIELD_GET(LTC4282_METER_HALT_MASK, reg_val);
1208
1209	ret = regmap_read(st->map, LTC4282_CTRL_MSB, &reg_val);
1210	if (ret)
1211		return ret;
1212
1213	*vin_mode = FIELD_GET(LTC4282_CTRL_VIN_MODE_MASK, reg_val);
1214
1215	ret = regmap_read(st->map, LTC4282_ILIM_ADJUST, &reg_val);
1216	if (ret)
1217		return ret;
1218
1219	ilm_adjust = FIELD_GET(LTC4282_ILIM_ADJUST_MASK, reg_val);
1220	st->vsense_max = ltc4282_curr_lim_uv[ilm_adjust];
1221
1222	st->in0_1_cache[LTC4282_CHAN_VSOURCE].en = FIELD_GET(LTC4282_VDD_MONITOR_MASK,
1223							     ilm_adjust);
1224	if (!st->in0_1_cache[LTC4282_CHAN_VSOURCE].en) {
1225		st->in0_1_cache[LTC4282_CHAN_VDD].en = true;
1226		return regmap_read(st->map, LTC4282_VSOURCE_MAX,
1227				   &st->in0_1_cache[LTC4282_CHAN_VSOURCE].in_max_raw);
1228	}
1229
1230	return regmap_read(st->map, LTC4282_VSOURCE_MAX,
1231			   &st->in0_1_cache[LTC4282_CHAN_VDD].in_max_raw);
1232}
1233
1234/*
1235 * Set max limits for ISENSE and Power as that depends on the max voltage on
1236 * rsense that is defined in ILIM_ADJUST. This is specially important for power
1237 * because for some rsense and vfsout values, if we allow the default raw 255
1238 * value, that would overflow long in 32bit archs when reading back the max
1239 * power limit.
1240 *
1241 * Also set meaningful historic values for VDD and VSOURCE
1242 * (0 would not mean much).
1243 */
1244static int ltc4282_set_max_limits(struct ltc4282_state *st)
1245{
1246	int ret;
1247
1248	ret = ltc4282_write_voltage_byte(st, LTC4282_VSENSE_MAX, 40 * MILLI,
1249					 st->vsense_max);
1250	if (ret)
1251		return ret;
1252
1253	/* Power is given by ISENSE * Vout. */
1254	st->power_max = DIV_ROUND_CLOSEST(st->vsense_max * DECA * MILLI, st->rsense) * st->vfs_out;
1255	ret = ltc4282_write_power_byte(st, LTC4282_POWER_MAX, st->power_max);
1256	if (ret)
1257		return ret;
1258
1259	if (st->in0_1_cache[LTC4282_CHAN_VDD].en) {
1260		st->in0_1_cache[LTC4282_CHAN_VSOURCE].in_lowest = st->vfs_out;
1261		return __ltc4282_in_write_history(st, LTC4282_VSOURCE_LOWEST,
1262						  st->vdd, 0, st->vfs_out);
1263	}
1264
1265	st->in0_1_cache[LTC4282_CHAN_VDD].in_lowest = st->vdd;
1266	return __ltc4282_in_write_history(st, LTC4282_VSOURCE_LOWEST,
1267					  st->vfs_out, 0, st->vfs_out);
1268}
1269
1270static const char * const ltc4282_gpio1_modes[] = {
1271	"power_bad", "power_good"
1272};
1273
1274static const char * const ltc4282_gpio2_modes[] = {
1275	"adc_input", "stress_fet"
1276};
1277
1278static int ltc4282_gpio_setup(struct ltc4282_state *st, struct device *dev)
1279{
1280	const char *func = NULL;
1281	int ret;
1282
1283	ret = device_property_read_string(dev, "adi,gpio1-mode", &func);
1284	if (!ret) {
1285		ret = match_string(ltc4282_gpio1_modes,
1286				   ARRAY_SIZE(ltc4282_gpio1_modes), func);
1287		if (ret < 0)
1288			return dev_err_probe(dev, ret,
1289					     "Invalid func(%s) for gpio1\n",
1290					     func);
1291
1292		ret = regmap_update_bits(st->map, LTC4282_GPIO_CONFIG,
1293					 LTC4282_GPIO_1_CONFIG_MASK,
1294					 FIELD_PREP(LTC4282_GPIO_1_CONFIG_MASK, ret));
1295		if (ret)
1296			return ret;
1297	}
1298
1299	ret = device_property_read_string(dev, "adi,gpio2-mode", &func);
1300	if (!ret) {
1301		ret = match_string(ltc4282_gpio2_modes,
1302				   ARRAY_SIZE(ltc4282_gpio2_modes), func);
1303		if (ret < 0)
1304			return dev_err_probe(dev, ret,
1305					     "Invalid func(%s) for gpio2\n",
1306					     func);
1307		if (!ret) {
1308			/* setting the bit to 1 so the ADC to monitors GPIO2 */
1309			ret = regmap_set_bits(st->map, LTC4282_ILIM_ADJUST,
1310					      LTC4282_GPIO_MODE_MASK);
1311		} else {
1312			ret = regmap_update_bits(st->map, LTC4282_GPIO_CONFIG,
1313						 LTC4282_GPIO_2_FET_STRESS_MASK,
1314						 FIELD_PREP(LTC4282_GPIO_2_FET_STRESS_MASK, 1));
1315		}
1316
1317		if (ret)
1318			return ret;
1319	}
1320
1321	if (!device_property_read_bool(dev, "adi,gpio3-monitor-enable"))
1322		return 0;
1323
1324	if (func && !strcmp(func, "adc_input"))
1325		return dev_err_probe(dev, -EINVAL,
1326				     "Cannot have both gpio2 and gpio3 muxed into the ADC");
1327
1328	return regmap_clear_bits(st->map, LTC4282_ILIM_ADJUST,
1329				 LTC4282_GPIO_MODE_MASK);
1330}
1331
1332static const char * const ltc4282_dividers[] = {
1333	"external", "vdd_5_percent", "vdd_10_percent", "vdd_15_percent"
1334};
1335
1336/* This maps the Vout full scale for the given Vin mode */
1337static const u16 ltc4282_vfs_milli[] = { 5540, 8320, 16640, 33280 };
1338
1339static const u16 ltc4282_vdd_milli[] = { 3300, 5000, 12000, 24000 };
1340
1341enum {
1342	LTC4282_VIN_3_3V,
1343	LTC4282_VIN_5V,
1344	LTC4282_VIN_12V,
1345	LTC4282_VIN_24V,
1346};
1347
1348static int ltc4282_setup(struct ltc4282_state *st, struct device *dev)
1349{
1350	const char *divider;
1351	u32 val, vin_mode;
1352	int ret;
1353
1354	/* The part has an eeprom so let's get the needed defaults from it */
1355	ret = ltc4282_get_defaults(st, &vin_mode);
1356	if (ret)
1357		return ret;
1358
1359	ret = device_property_read_u32(dev, "adi,rsense-nano-ohms",
1360				       &st->rsense);
1361	if (ret)
1362		return dev_err_probe(dev, ret,
1363				     "Failed to read adi,rsense-nano-ohms\n");
1364	if (st->rsense < CENTI)
1365		return dev_err_probe(dev, -EINVAL,
1366				     "adi,rsense-nano-ohms too small (< %lu)\n",
1367				     CENTI);
1368
1369	/*
1370	 * The resolution for rsense is tenths of micro (eg: 62.5 uOhm) which
1371	 * means we need nano in the bindings. However, to make things easier to
1372	 * handle (with respect to overflows) we divide it by 100 as we don't
1373	 * really need the last two digits.
1374	 */
1375	st->rsense /= CENTI;
1376
1377	val = vin_mode;
1378	ret = device_property_read_u32(dev, "adi,vin-mode-microvolt", &val);
1379	if (!ret) {
1380		switch (val) {
1381		case 3300000:
1382			val = LTC4282_VIN_3_3V;
1383			break;
1384		case 5000000:
1385			val = LTC4282_VIN_5V;
1386			break;
1387		case 12000000:
1388			val = LTC4282_VIN_12V;
1389			break;
1390		case 24000000:
1391			val = LTC4282_VIN_24V;
1392			break;
1393		default:
1394			return dev_err_probe(dev, -EINVAL,
1395					     "Invalid val(%u) for vin-mode-microvolt\n",
1396					     val);
1397		}
1398
1399		ret = regmap_update_bits(st->map, LTC4282_CTRL_MSB,
1400					 LTC4282_CTRL_VIN_MODE_MASK,
1401					 FIELD_PREP(LTC4282_CTRL_VIN_MODE_MASK, val));
1402		if (ret)
1403			return ret;
1404
1405		/* Foldback mode should also be set to the input voltage */
1406		ret = regmap_update_bits(st->map, LTC4282_ILIM_ADJUST,
1407					 LTC4282_FOLDBACK_MODE_MASK,
1408					 FIELD_PREP(LTC4282_FOLDBACK_MODE_MASK, val));
1409		if (ret)
1410			return ret;
1411	}
1412
1413	st->vfs_out = ltc4282_vfs_milli[val];
1414	st->vdd = ltc4282_vdd_milli[val];
1415
1416	ret = device_property_read_u32(dev, "adi,current-limit-sense-microvolt",
1417				       &st->vsense_max);
1418	if (!ret) {
1419		int reg_val;
1420
1421		switch (val) {
1422		case 12500:
1423			reg_val = 0;
1424			break;
1425		case 15625:
1426			reg_val = 1;
1427			break;
1428		case 18750:
1429			reg_val = 2;
1430			break;
1431		case 21875:
1432			reg_val = 3;
1433			break;
1434		case 25000:
1435			reg_val = 4;
1436			break;
1437		case 28125:
1438			reg_val = 5;
1439			break;
1440		case 31250:
1441			reg_val = 6;
1442			break;
1443		case 34375:
1444			reg_val = 7;
1445			break;
1446		default:
1447			return dev_err_probe(dev, -EINVAL,
1448					     "Invalid val(%u) for adi,current-limit-microvolt\n",
1449					     st->vsense_max);
1450		}
1451
1452		ret = regmap_update_bits(st->map, LTC4282_ILIM_ADJUST,
1453					 LTC4282_ILIM_ADJUST_MASK,
1454					 FIELD_PREP(LTC4282_ILIM_ADJUST_MASK, reg_val));
1455		if (ret)
1456			return ret;
1457	}
1458
1459	ret = ltc4282_set_max_limits(st);
1460	if (ret)
1461		return ret;
1462
1463	ret = device_property_read_string(dev, "adi,overvoltage-dividers",
1464					  &divider);
1465	if (!ret) {
1466		int div = match_string(ltc4282_dividers,
1467				       ARRAY_SIZE(ltc4282_dividers), divider);
1468		if (div < 0)
1469			return dev_err_probe(dev, -EINVAL,
1470					     "Invalid val(%s) for adi,overvoltage-divider\n",
1471					     divider);
1472
1473		ret = regmap_update_bits(st->map, LTC4282_CTRL_MSB,
1474					 LTC4282_CTRL_OV_MODE_MASK,
1475					 FIELD_PREP(LTC4282_CTRL_OV_MODE_MASK, div));
1476	}
1477
1478	ret = device_property_read_string(dev, "adi,undervoltage-dividers",
1479					  &divider);
1480	if (!ret) {
1481		int div = match_string(ltc4282_dividers,
1482				       ARRAY_SIZE(ltc4282_dividers), divider);
1483		if (div < 0)
1484			return dev_err_probe(dev, -EINVAL,
1485					     "Invalid val(%s) for adi,undervoltage-divider\n",
1486					     divider);
1487
1488		ret = regmap_update_bits(st->map, LTC4282_CTRL_MSB,
1489					 LTC4282_CTRL_UV_MODE_MASK,
1490					 FIELD_PREP(LTC4282_CTRL_UV_MODE_MASK, div));
1491	}
1492
1493	if (device_property_read_bool(dev, "adi,overcurrent-retry")) {
1494		ret = regmap_set_bits(st->map, LTC4282_CTRL_LSB,
1495				      LTC4282_CTRL_OC_RETRY_MASK);
1496		if (ret)
1497			return ret;
1498	}
1499
1500	if (device_property_read_bool(dev, "adi,overvoltage-retry-disable")) {
1501		ret = regmap_clear_bits(st->map, LTC4282_CTRL_LSB,
1502					LTC4282_CTRL_OV_RETRY_MASK);
1503		if (ret)
1504			return ret;
1505	}
1506
1507	if (device_property_read_bool(dev, "adi,undervoltage-retry-disable")) {
1508		ret = regmap_clear_bits(st->map, LTC4282_CTRL_LSB,
1509					LTC4282_CTRL_UV_RETRY_MASK);
1510		if (ret)
1511			return ret;
1512	}
1513
1514	if (device_property_read_bool(dev, "adi,fault-log-enable")) {
1515		ret = regmap_set_bits(st->map, LTC4282_ADC_CTRL,
1516				      LTC4282_FAULT_LOG_EN_MASK);
1517		if (ret)
1518			return ret;
1519	}
1520
1521	if (device_property_read_bool(dev, "adi,fault-log-enable")) {
1522		ret = regmap_set_bits(st->map, LTC4282_ADC_CTRL, LTC4282_FAULT_LOG_EN_MASK);
1523		if (ret)
1524			return ret;
1525	}
1526
1527	ret = device_property_read_u32(dev, "adi,fet-bad-timeout-ms", &val);
1528	if (!ret) {
1529		if (val > LTC4282_FET_BAD_MAX_TIMEOUT)
1530			return dev_err_probe(dev, -EINVAL,
1531					     "Invalid value(%u) for adi,fet-bad-timeout-ms",
1532					     val);
1533
1534		ret = regmap_write(st->map, LTC4282_FET_BAD_FAULT_TIMEOUT, val);
1535		if (ret)
1536			return ret;
1537	}
1538
1539	return ltc4282_gpio_setup(st, dev);
1540}
1541
1542static bool ltc4282_readable_reg(struct device *dev, unsigned int reg)
1543{
1544	if (reg == LTC4282_RESERVED_1 || reg == LTC4282_RESERVED_2)
1545		return false;
1546
1547	return true;
1548}
1549
1550static bool ltc4282_writable_reg(struct device *dev, unsigned int reg)
1551{
1552	if (reg == LTC4282_STATUS_LSB || reg == LTC4282_STATUS_MSB)
1553		return false;
1554	if (reg == LTC4282_RESERVED_1 || reg == LTC4282_RESERVED_2)
1555		return false;
1556
1557	return true;
1558}
1559
1560static const struct regmap_config ltc4282_regmap_config = {
1561	.reg_bits = 8,
1562	.val_bits = 8,
1563	.max_register = LTC4282_RESERVED_3,
1564	.readable_reg = ltc4282_readable_reg,
1565	.writeable_reg = ltc4282_writable_reg,
1566};
1567
1568static const struct hwmon_channel_info * const ltc4282_info[] = {
1569	HWMON_CHANNEL_INFO(in,
1570			   HWMON_I_INPUT | HWMON_I_LOWEST | HWMON_I_HIGHEST |
1571			   HWMON_I_MAX | HWMON_I_MIN | HWMON_I_MIN_ALARM |
1572			   HWMON_I_MAX_ALARM | HWMON_I_ENABLE |
1573			   HWMON_I_RESET_HISTORY | HWMON_I_FAULT |
1574			   HWMON_I_LABEL,
1575			   HWMON_I_INPUT | HWMON_I_LOWEST | HWMON_I_HIGHEST |
1576			   HWMON_I_MAX | HWMON_I_MIN | HWMON_I_MIN_ALARM |
1577			   HWMON_I_MAX_ALARM | HWMON_I_LCRIT_ALARM |
1578			   HWMON_I_CRIT_ALARM | HWMON_I_ENABLE |
1579			   HWMON_I_RESET_HISTORY | HWMON_I_LABEL,
1580			   HWMON_I_INPUT | HWMON_I_LOWEST | HWMON_I_HIGHEST |
1581			   HWMON_I_MAX | HWMON_I_MIN | HWMON_I_MIN_ALARM |
1582			   HWMON_I_RESET_HISTORY | HWMON_I_MAX_ALARM |
1583			   HWMON_I_LABEL),
1584	HWMON_CHANNEL_INFO(curr,
1585			   HWMON_C_INPUT | HWMON_C_LOWEST | HWMON_C_HIGHEST |
1586			   HWMON_C_MAX | HWMON_C_MIN | HWMON_C_MIN_ALARM |
1587			   HWMON_C_MAX_ALARM | HWMON_C_CRIT_ALARM |
1588			   HWMON_C_RESET_HISTORY | HWMON_C_LABEL),
1589	HWMON_CHANNEL_INFO(power,
1590			   HWMON_P_INPUT | HWMON_P_INPUT_LOWEST |
1591			   HWMON_P_INPUT_HIGHEST | HWMON_P_MAX | HWMON_P_MIN |
1592			   HWMON_P_MAX_ALARM | HWMON_P_MIN_ALARM |
1593			   HWMON_P_RESET_HISTORY | HWMON_P_LABEL),
1594	HWMON_CHANNEL_INFO(energy,
1595			   HWMON_E_ENABLE),
1596	NULL
1597};
1598
1599static const struct hwmon_ops ltc4282_hwmon_ops = {
1600	.read = ltc4282_read,
1601	.write = ltc4282_write,
1602	.is_visible = ltc4282_is_visible,
1603	.read_string = ltc4282_read_labels,
1604};
1605
1606static const struct hwmon_chip_info ltc2947_chip_info = {
1607	.ops = &ltc4282_hwmon_ops,
1608	.info = ltc4282_info,
1609};
1610
1611/* energy attributes are 6bytes wide so we need u64 */
1612static SENSOR_DEVICE_ATTR_RO(energy1_input, ltc4282_energy, 0);
1613
1614static struct attribute *ltc4282_attrs[] = {
1615	&sensor_dev_attr_energy1_input.dev_attr.attr,
1616	NULL
1617};
1618ATTRIBUTE_GROUPS(ltc4282);
1619
1620static int ltc4282_show_fault_log(void *arg, u64 *val, u32 mask)
1621{
1622	struct ltc4282_state *st = arg;
1623	long alarm;
1624	int ret;
1625
1626	ret = ltc4282_read_alarm(st, LTC4282_FAULT_LOG,	mask, &alarm);
1627	if (ret)
1628		return ret;
1629
1630	*val = alarm;
1631
1632	return 0;
1633}
1634
1635static int ltc4282_show_curr1_crit_fault_log(void *arg, u64 *val)
1636{
1637	return ltc4282_show_fault_log(arg, val, LTC4282_OC_FAULT_MASK);
1638}
1639DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_curr1_crit_fault_log,
1640			 ltc4282_show_curr1_crit_fault_log, NULL, "%llu\n");
1641
1642static int ltc4282_show_in1_lcrit_fault_log(void *arg, u64 *val)
1643{
1644	return ltc4282_show_fault_log(arg, val, LTC4282_UV_FAULT_MASK);
1645}
1646DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_in1_lcrit_fault_log,
1647			 ltc4282_show_in1_lcrit_fault_log, NULL, "%llu\n");
1648
1649static int ltc4282_show_in1_crit_fault_log(void *arg, u64 *val)
1650{
1651	return ltc4282_show_fault_log(arg, val, LTC4282_OV_FAULT_MASK);
1652}
1653DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_in1_crit_fault_log,
1654			 ltc4282_show_in1_crit_fault_log, NULL, "%llu\n");
1655
1656static int ltc4282_show_fet_bad_fault_log(void *arg, u64 *val)
1657{
1658	return ltc4282_show_fault_log(arg, val, LTC4282_FET_BAD_FAULT_MASK);
1659}
1660DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_fet_bad_fault_log,
1661			 ltc4282_show_fet_bad_fault_log, NULL, "%llu\n");
1662
1663static int ltc4282_show_fet_short_fault_log(void *arg, u64 *val)
1664{
1665	return ltc4282_show_fault_log(arg, val, LTC4282_FET_SHORT_FAULT_MASK);
1666}
1667DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_fet_short_fault_log,
1668			 ltc4282_show_fet_short_fault_log, NULL, "%llu\n");
1669
1670static int ltc4282_show_power1_bad_fault_log(void *arg, u64 *val)
1671{
1672	return ltc4282_show_fault_log(arg, val, LTC4282_POWER_BAD_FAULT_MASK);
1673}
1674DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_power1_bad_fault_log,
1675			 ltc4282_show_power1_bad_fault_log, NULL, "%llu\n");
1676
1677static void ltc4282_debugfs_remove(void *dir)
1678{
1679	debugfs_remove_recursive(dir);
1680}
1681
1682static void ltc4282_debugfs_init(struct ltc4282_state *st,
1683				 struct i2c_client *i2c,
1684				 const struct device *hwmon)
1685{
1686	const char *debugfs_name;
1687	struct dentry *dentry;
1688	int ret;
1689
1690	if (!IS_ENABLED(CONFIG_DEBUG_FS))
1691		return;
1692
1693	debugfs_name = devm_kasprintf(&i2c->dev, GFP_KERNEL, "ltc4282-%s",
1694				      dev_name(hwmon));
1695	if (!debugfs_name)
1696		return;
1697
1698	dentry = debugfs_create_dir(debugfs_name, NULL);
1699	if (IS_ERR(dentry))
1700		return;
1701
1702	ret = devm_add_action_or_reset(&i2c->dev, ltc4282_debugfs_remove,
1703				       dentry);
1704	if (ret)
1705		return;
1706
1707	debugfs_create_file_unsafe("power1_bad_fault_log", 0400, dentry, st,
1708				   &ltc4282_power1_bad_fault_log);
1709	debugfs_create_file_unsafe("in0_fet_short_fault_log", 0400, dentry, st,
1710				   &ltc4282_fet_short_fault_log);
1711	debugfs_create_file_unsafe("in0_fet_bad_fault_log", 0400, dentry, st,
1712				   &ltc4282_fet_bad_fault_log);
1713	debugfs_create_file_unsafe("in1_crit_fault_log", 0400, dentry, st,
1714				   &ltc4282_in1_crit_fault_log);
1715	debugfs_create_file_unsafe("in1_lcrit_fault_log", 0400, dentry, st,
1716				   &ltc4282_in1_lcrit_fault_log);
1717	debugfs_create_file_unsafe("curr1_crit_fault_log", 0400, dentry, st,
1718				   &ltc4282_curr1_crit_fault_log);
1719}
1720
1721static int ltc4282_probe(struct i2c_client *i2c)
1722{
1723	struct device *dev = &i2c->dev, *hwmon;
1724	struct ltc4282_state *st;
1725	int ret;
1726
1727	st = devm_kzalloc(dev, sizeof(*st), GFP_KERNEL);
1728	if (!st)
1729		return dev_err_probe(dev, -ENOMEM,
1730				     "Failed to allocate memory\n");
1731
1732	st->map = devm_regmap_init_i2c(i2c, &ltc4282_regmap_config);
1733	if (IS_ERR(st->map))
1734		return dev_err_probe(dev, PTR_ERR(st->map),
1735				     "failed regmap init\n");
1736
1737	/* Soft reset */
1738	ret = regmap_set_bits(st->map, LTC4282_ADC_CTRL, LTC4282_RESET_MASK);
1739	if (ret)
1740		return ret;
1741
1742	/* Yes, it's big but it is as specified in the datasheet */
1743	msleep(3200);
1744
1745	ret = ltc428_clks_setup(st, dev);
1746	if (ret)
1747		return ret;
1748
1749	ret = ltc4282_setup(st, dev);
1750	if (ret)
1751		return ret;
1752
1753	mutex_init(&st->lock);
1754	hwmon = devm_hwmon_device_register_with_info(dev, "ltc4282", st,
1755						     &ltc2947_chip_info,
1756						     ltc4282_groups);
1757	if (IS_ERR(hwmon))
1758		return PTR_ERR(hwmon);
1759
1760	ltc4282_debugfs_init(st, i2c, hwmon);
1761
1762	return 0;
1763}
1764
1765static const struct of_device_id ltc4282_of_match[] = {
1766	{ .compatible = "adi,ltc4282" },
1767	{}
1768};
1769MODULE_DEVICE_TABLE(of, ltc4282_of_match);
1770
1771static struct i2c_driver ltc4282_driver = {
1772	.driver = {
1773		.name = "ltc4282",
1774		.of_match_table = ltc4282_of_match,
1775	},
1776	.probe = ltc4282_probe,
1777};
1778module_i2c_driver(ltc4282_driver);
1779
1780MODULE_AUTHOR("Nuno Sa <nuno.sa@analog.com>");
1781MODULE_DESCRIPTION("LTC4282 I2C High Current Hot Swap Controller");
1782MODULE_LICENSE("GPL");
1783