summaryrefslogtreecommitdiff
path: root/src/drivers/i2c/nct7802y/chip.h
blob: c4a767debfa805c7ea436e6ad7d760b659cd3cd1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/* SPDX-License-Identifier: GPL-2.0-only */

#ifndef DRIVERS_I2C_NCT7802Y_CHIP_H
#define DRIVERS_I2C_NCT7802Y_CHIP_H

#include <stdint.h>

#define NCT7802Y_PECI_CNT	2
#define NCT7802Y_FAN_CNT	3
#define NCT7802Y_RTD_CNT	3

/* Remote temperature diode sensors mode */
enum nct7802y_rtd_mode {
	RTD_CLOSED = 0,
	RTD_CURRENT_MODE,
	RTD_THERMISTOR_MODE,
	RTD_VOLTAGE_MODE,
};

enum nct7802y_peci_mode {
	PECI_DISABLED = 0,
	PECI_DOMAIN_0,
	PECI_DOMAIN_1,
	PECI_HIGHEST,
};

struct nct7802y_peci_config {
	enum nct7802y_peci_mode mode;
	u8 base_temp;
};

enum nct7802y_fan_mode {
	FAN_IGNORE = 0,
	FAN_MANUAL,
	FAN_SMART,
};

enum nct7802y_fan_smartmode {
	SMART_FAN_DUTY = 0,	/* Target values given in duty cycle %. */
	SMART_FAN_RPM,		/* Target values given in RPM. */
};

enum nct7802y_fan_speed {
	FAN_SPEED_NORMAL = 0,	/* RPM values <= 12,750. */
	FAN_SPPED_HIGHSPEED,	/* RPM values <= 25,500. */
};

enum nct7802y_fan_pecierror {
	PECI_ERROR_KEEP = 0,	/* Keep current value. */
	PECI_ERROR_VALUE,	/* Use `pecierror_minduty`. */
	PECI_ERROR_FULLSPEED,	/* Run PWM at 100% duty cycle. */
};

enum nct7802y_temp_source {
	TEMP_SOURCE_REMOTE_1 = 0,
	TEMP_SOURCE_REMOTE_2,
	TEMP_SOURCE_REMOTE_3,
	TEMP_SOURCE_LOCAL,
	TEMP_SOURCE_PECI_0,
	TEMP_SOURCE_PECI_1,
	TEMP_SOURCE_PROGRAMMABLE_0,
	TEMP_SOURCE_PROGRAMMABLE_1,
};

struct nct7802y_sensors_config {
	bool local_enable;
	enum nct7802y_rtd_mode rtd[NCT7802Y_RTD_CNT];
};

struct nct7802y_fan_smartconfig {
	enum nct7802y_fan_smartmode mode;
	enum nct7802y_fan_speed speed;
	enum nct7802y_temp_source tempsrc;
	struct {
		u8 temp;
		u16 target;
	} table[4];
	u8 critical_temp;
};

struct nct7802y_fan_config {
	enum nct7802y_fan_mode mode;
	union {
		u8 duty_cycle;
		struct nct7802y_fan_smartconfig smart;
	};
};

/* Implements only those parts currently used by coreboot mainboards. */
struct drivers_i2c_nct7802y_config {
	struct nct7802y_peci_config peci[NCT7802Y_PECI_CNT];
	struct nct7802y_fan_config fan[NCT7802Y_FAN_CNT];
	struct nct7802y_sensors_config sensors;
	enum nct7802y_fan_pecierror on_pecierror;
	u8 pecierror_minduty;
};

#endif /* DRIVERS_I2C_NCT7802Y_CHIP_H */