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  
119  enum {
120  	LTC4282_CHAN_VSOURCE,
121  	LTC4282_CHAN_VDD,
122  	LTC4282_CHAN_VGPIO,
123  };
124  
125  struct 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  
133  struct 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  
152  enum {
153  	LTC4282_CLKOUT_NONE,
154  	LTC4282_CLKOUT_INT,
155  	LTC4282_CLKOUT_TICK,
156  };
157  
ltc4282_set_rate(struct clk_hw * hw,unsigned long rate,unsigned long parent_rate)158  static 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   */
176  static const unsigned int ltc4282_out_rates[] = {
177  	LTC4282_CLKOUT_CNV, LTC4282_CLKOUT_SYSTEM
178  };
179  
ltc4282_round_rate(struct clk_hw * hw,unsigned long rate,unsigned long * parent_rate)180  static 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  
ltc4282_recalc_rate(struct clk_hw * hw,unsigned long parent)189  static 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  
ltc4282_disable(struct clk_hw * clk_hw)210  static 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  
ltc4282_read_voltage_word(const struct ltc4282_state * st,u32 reg,u32 fs,long * val)218  static 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  
ltc4282_read_voltage_byte_cached(const struct ltc4282_state * st,u32 reg,u32 fs,long * val,u32 * cached_raw)236  static 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  
ltc4282_read_voltage_byte(const struct ltc4282_state * st,u32 reg,u32 fs,long * val)255  static 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  
__ltc4282_read_alarm(struct ltc4282_state * st,u32 reg,u32 mask,long * val)261  static 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  
ltc4282_read_alarm(struct ltc4282_state * st,u32 reg,u32 mask,long * val)280  static 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  
ltc4282_vdd_source_read_in(struct ltc4282_state * st,u32 channel,long * val)287  static 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  
ltc4282_vdd_source_read_hist(struct ltc4282_state * st,u32 reg,u32 channel,long * cached,long * val)297  static 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  
ltc4282_vdd_source_read_lim(struct ltc4282_state * st,u32 reg,u32 channel,u32 * cached,long * val)316  static 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  
ltc4282_vdd_source_read_alm(struct ltc4282_state * st,u32 mask,u32 channel,long * val)327  static 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  
ltc4282_read_in(struct ltc4282_state * st,u32 attr,long * val,u32 channel)347  static 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  
ltc4282_read_current_word(const struct ltc4282_state * st,u32 reg,long * val)430  static 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  
ltc4282_read_current_byte(const struct ltc4282_state * st,u32 reg,long * val)449  static 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  
ltc4282_read_curr(struct ltc4282_state * st,const u32 attr,long * val)464  static 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  
ltc4282_read_power_word(const struct ltc4282_state * st,u32 reg,long * val)494  static 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  
ltc4282_read_power_byte(const struct ltc4282_state * st,u32 reg,long * val)524  static 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  
ltc4282_read_energy(const struct ltc4282_state * st,u64 * val)542  static 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  
ltc4282_read_power(struct ltc4282_state * st,const u32 attr,long * val)576  static 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  
ltc4282_read(struct device * dev,enum hwmon_sensor_types type,u32 attr,int channel,long * val)601  static 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  
ltc4282_write_power_byte(const struct ltc4282_state * st,u32 reg,long val)623  static 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  
ltc4282_write_power_word(const struct ltc4282_state * st,u32 reg,long val)639  static 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  
__ltc4282_in_write_history(const struct ltc4282_state * st,u32 reg,long lowest,long highest,u32 fs)659  static 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  
ltc4282_in_write_history(struct ltc4282_state * st,u32 reg,long lowest,long highest,u32 fs)681  static 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  
ltc4282_power_reset_hist(struct ltc4282_state * st)688  static 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  
ltc4282_write_power(struct ltc4282_state * st,u32 attr,long val)708  static 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  
ltc4282_write_voltage_byte_cached(const struct ltc4282_state * st,u32 reg,u32 fs,long val,u32 * cache_raw)723  static 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  
ltc4282_write_voltage_byte(const struct ltc4282_state * st,u32 reg,u32 fs,long val)740  static 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  
ltc4282_cache_history(struct ltc4282_state * st,u32 channel)746  static 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  
ltc4282_cache_sync(struct ltc4282_state * st,u32 channel)774  static 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  
ltc4282_vdd_source_write_lim(struct ltc4282_state * st,u32 reg,int channel,u32 * cache,long val)794  static 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  
ltc4282_vdd_source_reset_hist(struct ltc4282_state * st,int channel)809  static 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   */
ltc4282_vdd_source_enable(struct ltc4282_state * st,int channel,long val)851  static 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  
ltc4282_write_in(struct ltc4282_state * st,u32 attr,long val,int channel)896  static 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  
ltc4282_curr_reset_hist(struct ltc4282_state * st)930  static 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  
ltc4282_write_curr(struct ltc4282_state * st,u32 attr,long val)946  static 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  
ltc4282_energy_enable_set(struct ltc4282_state * st,long val)966  static 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  
ltc4282_write(struct device * dev,enum hwmon_sensor_types type,u32 attr,int channel,long val)983  static 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  
ltc4282_in_is_visible(const struct ltc4282_state * st,u32 attr)1003  static 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  
ltc4282_curr_is_visible(u32 attr)1026  static 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  
ltc4282_power_is_visible(u32 attr)1046  static 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  
ltc4282_is_visible(const void * data,enum hwmon_sensor_types type,u32 attr,int channel)1065  static 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  
1084  static const char * const ltc4282_in_strs[] = {
1085  	"VSOURCE", "VDD", "VGPIO"
1086  };
1087  
ltc4282_read_labels(struct device * dev,enum hwmon_sensor_types type,u32 attr,int channel,const char ** str)1088  static 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  
ltc4282_energy_show(struct device * dev,struct device_attribute * da,char * buf)1107  static 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  
1125  static 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  
ltc428_clk_provider_setup(struct ltc4282_state * st,struct device * dev)1132  static 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  
ltc428_clks_setup(struct ltc4282_state * st,struct device * dev)1158  static 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  
1194  static const int ltc4282_curr_lim_uv[] = {
1195  	12500, 15625, 18750, 21875, 25000, 28125, 31250, 34375
1196  };
1197  
ltc4282_get_defaults(struct ltc4282_state * st,u32 * vin_mode)1198  static 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   */
ltc4282_set_max_limits(struct ltc4282_state * st)1244  static 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  
1270  static const char * const ltc4282_gpio1_modes[] = {
1271  	"power_bad", "power_good"
1272  };
1273  
1274  static const char * const ltc4282_gpio2_modes[] = {
1275  	"adc_input", "stress_fet"
1276  };
1277  
ltc4282_gpio_setup(struct ltc4282_state * st,struct device * dev)1278  static 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  
1332  static 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 */
1337  static const u16 ltc4282_vfs_milli[] = { 5540, 8320, 16640, 33280 };
1338  
1339  static const u16 ltc4282_vdd_milli[] = { 3300, 5000, 12000, 24000 };
1340  
1341  enum {
1342  	LTC4282_VIN_3_3V,
1343  	LTC4282_VIN_5V,
1344  	LTC4282_VIN_12V,
1345  	LTC4282_VIN_24V,
1346  };
1347  
ltc4282_setup(struct ltc4282_state * st,struct device * dev)1348  static 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  
ltc4282_readable_reg(struct device * dev,unsigned int reg)1542  static 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  
ltc4282_writable_reg(struct device * dev,unsigned int reg)1550  static 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  
1560  static 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  
1568  static 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  
1599  static 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  
1606  static 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 */
1612  static SENSOR_DEVICE_ATTR_RO(energy1_input, ltc4282_energy, 0);
1613  
1614  static struct attribute *ltc4282_attrs[] = {
1615  	&sensor_dev_attr_energy1_input.dev_attr.attr,
1616  	NULL
1617  };
1618  ATTRIBUTE_GROUPS(ltc4282);
1619  
ltc4282_show_fault_log(void * arg,u64 * val,u32 mask)1620  static 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  
ltc4282_show_curr1_crit_fault_log(void * arg,u64 * val)1635  static 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  }
1639  DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_curr1_crit_fault_log,
1640  			 ltc4282_show_curr1_crit_fault_log, NULL, "%llu\n");
1641  
ltc4282_show_in1_lcrit_fault_log(void * arg,u64 * val)1642  static 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  }
1646  DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_in1_lcrit_fault_log,
1647  			 ltc4282_show_in1_lcrit_fault_log, NULL, "%llu\n");
1648  
ltc4282_show_in1_crit_fault_log(void * arg,u64 * val)1649  static 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  }
1653  DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_in1_crit_fault_log,
1654  			 ltc4282_show_in1_crit_fault_log, NULL, "%llu\n");
1655  
ltc4282_show_fet_bad_fault_log(void * arg,u64 * val)1656  static 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  }
1660  DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_fet_bad_fault_log,
1661  			 ltc4282_show_fet_bad_fault_log, NULL, "%llu\n");
1662  
ltc4282_show_fet_short_fault_log(void * arg,u64 * val)1663  static 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  }
1667  DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_fet_short_fault_log,
1668  			 ltc4282_show_fet_short_fault_log, NULL, "%llu\n");
1669  
ltc4282_show_power1_bad_fault_log(void * arg,u64 * val)1670  static 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  }
1674  DEFINE_DEBUGFS_ATTRIBUTE(ltc4282_power1_bad_fault_log,
1675  			 ltc4282_show_power1_bad_fault_log, NULL, "%llu\n");
1676  
ltc4282_debugfs_remove(void * dir)1677  static void ltc4282_debugfs_remove(void *dir)
1678  {
1679  	debugfs_remove_recursive(dir);
1680  }
1681  
ltc4282_debugfs_init(struct ltc4282_state * st,struct i2c_client * i2c,const struct device * hwmon)1682  static 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  
ltc4282_probe(struct i2c_client * i2c)1721  static 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  
1765  static const struct of_device_id ltc4282_of_match[] = {
1766  	{ .compatible = "adi,ltc4282" },
1767  	{}
1768  };
1769  MODULE_DEVICE_TABLE(of, ltc4282_of_match);
1770  
1771  static struct i2c_driver ltc4282_driver = {
1772  	.driver = {
1773  		.name = "ltc4282",
1774  		.of_match_table = ltc4282_of_match,
1775  	},
1776  	.probe = ltc4282_probe,
1777  };
1778  module_i2c_driver(ltc4282_driver);
1779  
1780  MODULE_AUTHOR("Nuno Sa <nuno.sa@analog.com>");
1781  MODULE_DESCRIPTION("LTC4282 I2C High Current Hot Swap Controller");
1782  MODULE_LICENSE("GPL");
1783