xref: /openbmc/linux/drivers/acpi/fan.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1b9370dceSRafael J. Wysocki /* SPDX-License-Identifier: GPL-2.0-only */
2b9370dceSRafael J. Wysocki 
3b9370dceSRafael J. Wysocki /*
4b9370dceSRafael J. Wysocki  * ACPI fan device IDs are shared between the fan driver and the device power
5b9370dceSRafael J. Wysocki  * management code.
6b9370dceSRafael J. Wysocki  *
7b9370dceSRafael J. Wysocki  * Add new device IDs before the generic ACPI fan one.
8b9370dceSRafael J. Wysocki  */
900ae053aSSrinivas Pandruvada 
1000ae053aSSrinivas Pandruvada #ifndef _ACPI_FAN_H_
1100ae053aSSrinivas Pandruvada #define _ACPI_FAN_H_
1200ae053aSSrinivas Pandruvada 
13b9370dceSRafael J. Wysocki #define ACPI_FAN_DEVICE_IDS	\
14b9370dceSRafael J. Wysocki 	{"INT3404", }, /* Fan */ \
15b9370dceSRafael J. Wysocki 	{"INTC1044", }, /* Fan for Tiger Lake generation */ \
16b9370dceSRafael J. Wysocki 	{"INTC1048", }, /* Fan for Alder Lake generation */ \
17*657b95d3SSumeet Pawnikar 	{"INTC1063", }, /* Fan for Meteor Lake generation */ \
18a510c78eSSrinivas Pandruvada 	{"INTC10A2", }, /* Fan for Raptor Lake generation */ \
19b9370dceSRafael J. Wysocki 	{"PNP0C0B", } /* Generic ACPI fan */
2000ae053aSSrinivas Pandruvada 
2100ae053aSSrinivas Pandruvada #define ACPI_FPS_NAME_LEN	20
2200ae053aSSrinivas Pandruvada 
2300ae053aSSrinivas Pandruvada struct acpi_fan_fps {
2400ae053aSSrinivas Pandruvada 	u64 control;
2500ae053aSSrinivas Pandruvada 	u64 trip_point;
2600ae053aSSrinivas Pandruvada 	u64 speed;
2700ae053aSSrinivas Pandruvada 	u64 noise_level;
2800ae053aSSrinivas Pandruvada 	u64 power;
2900ae053aSSrinivas Pandruvada 	char name[ACPI_FPS_NAME_LEN];
3000ae053aSSrinivas Pandruvada 	struct device_attribute dev_attr;
3100ae053aSSrinivas Pandruvada };
3200ae053aSSrinivas Pandruvada 
3300ae053aSSrinivas Pandruvada struct acpi_fan_fif {
34d445571fSSrinivas Pandruvada 	u8 revision;
35d445571fSSrinivas Pandruvada 	u8 fine_grain_ctrl;
36d445571fSSrinivas Pandruvada 	u8 step_size;
37d445571fSSrinivas Pandruvada 	u8 low_speed_notification;
3800ae053aSSrinivas Pandruvada };
3900ae053aSSrinivas Pandruvada 
40bea2d986SSrinivas Pandruvada struct acpi_fan_fst {
41bea2d986SSrinivas Pandruvada 	u64 revision;
42bea2d986SSrinivas Pandruvada 	u64 control;
43bea2d986SSrinivas Pandruvada 	u64 speed;
44bea2d986SSrinivas Pandruvada };
45bea2d986SSrinivas Pandruvada 
4600ae053aSSrinivas Pandruvada struct acpi_fan {
4700ae053aSSrinivas Pandruvada 	bool acpi4;
4800ae053aSSrinivas Pandruvada 	struct acpi_fan_fif fif;
4900ae053aSSrinivas Pandruvada 	struct acpi_fan_fps *fps;
5000ae053aSSrinivas Pandruvada 	int fps_count;
5100ae053aSSrinivas Pandruvada 	struct thermal_cooling_device *cdev;
52f1197343SSrinivas Pandruvada 	struct device_attribute fst_speed;
53f1197343SSrinivas Pandruvada 	struct device_attribute fine_grain_control;
5400ae053aSSrinivas Pandruvada };
5500ae053aSSrinivas Pandruvada 
56f1197343SSrinivas Pandruvada int acpi_fan_get_fst(struct acpi_device *device, struct acpi_fan_fst *fst);
5700ae053aSSrinivas Pandruvada int acpi_fan_create_attributes(struct acpi_device *device);
5800ae053aSSrinivas Pandruvada void acpi_fan_delete_attributes(struct acpi_device *device);
5900ae053aSSrinivas Pandruvada #endif
60