#ifndef _DEV_I2C_EMCFANINFO_H_
#define _DEV_I2C_EMCFANINFO_H_
#include <sys/gpio.h>
struct emcfan_chip_info {
const int family;
const uint8_t product_id;
const char *name;
const int num_tachs;
const int num_fans;
const uint8_t fan_drive_registers[5];
const uint8_t fan_divider_registers[5];
const bool internal_temp_zone;
const int num_external_temp_zones;
const bool vin4_temp_zone;
const int num_gpio_pins;
const int gpio_pin_ability[6];
const char *gpio_names[6];
const uint64_t register_void[4];
};
static struct emcfan_chip_info emcfan_chip_infos[] = {
{
.family = EMCFAN_FAMILY_210X,
.product_id = EMCFAN_PRODUCT_2101,
.name = "EMC2101",
.num_tachs = 1,
.num_fans = 1,
.fan_drive_registers = { EMCFAN_2101_FAN_DRIVE },
.fan_divider_registers = { EMCFAN_2101_FAN_DIVIDE },
.internal_temp_zone = true,
.num_external_temp_zones = 1,
.vin4_temp_zone = false,
.num_gpio_pins = 0,
.register_void[0] = 0b0000000000000000000000000000001000000011110111111111111110111111,
.register_void[1] = 0b0000000000000000000000000000000011111111111111111111111111000000,
.register_void[2] = 0b1000000000000000000000000000000000000000000000000000000000000000,
.register_void[3] = 0b1110000000000000000000000000000000000000000000000000000000000000,
},
{
.family = EMCFAN_FAMILY_210X,
.product_id = EMCFAN_PRODUCT_2101R,
.name = "EMC2101-R",
.num_tachs = 1,
.num_fans = 1,
.fan_drive_registers = { EMCFAN_2101_FAN_DRIVE },
.fan_divider_registers = { EMCFAN_2101_FAN_DIVIDE },
.internal_temp_zone = true,
.num_external_temp_zones = 1,
.vin4_temp_zone = false,
.num_gpio_pins = 0,
.register_void[0] = 0b0000000000000000000000000000001000000011110111111111111110111111,
.register_void[1] = 0b0000000000000000000000000000000011111111111111111111111111000000,
.register_void[2] = 0b1000000000000000000000000000000000000000000000000000000000000000,
.register_void[3] = 0b1110000000000000000000000000000000000000000000000000000000000000,
},
{
.family = EMCFAN_FAMILY_210X,
.product_id = EMCFAN_PRODUCT_2103_1,
.name = "EMC2103-1",
.num_tachs = 1,
.num_fans = 1,
.fan_drive_registers = { EMCFAN_210_346_FAN_1_DRIVE },
.fan_divider_registers = { EMCFAN_210_346_FAN_1_DIVIDE },
.internal_temp_zone = true,
.num_external_temp_zones = 1,
.vin4_temp_zone = false,
.num_gpio_pins = 0,
.register_void[0] = 0b0001000100010001000011111111101110100010100100110011010000001111,
.register_void[1] = 0b0000001111111111111111111111111111111111111111111111111111101111,
.register_void[2] = 0b0000000000000000000000000000000000000000000000000000000000000000,
.register_void[3] = 0b1111000000000000100000000000000000000000000000000000000000000000,
},
{
.family = EMCFAN_FAMILY_210X,
.product_id = EMCFAN_PRODUCT_2103_24,
.name = "EMC2103-2/4",
.num_tachs = 1,
.num_fans = 1,
.fan_drive_registers = { EMCFAN_210_346_FAN_1_DRIVE },
.fan_divider_registers = { EMCFAN_210_346_FAN_1_DIVIDE },
.internal_temp_zone = true,
.num_external_temp_zones = 3,
.vin4_temp_zone = false,
.num_gpio_pins = 2,
.gpio_pin_ability = {
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL,
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL
},
.gpio_names = { "GPIO1", "GPIO2" },
.register_void[0] = 0b0001011100010111000011111111101110101110101101110011010011111111,
.register_void[1] = 0b0000001111111111111111111111111111111111111111111111111111101111,
.register_void[2] = 0b0000000000000000000000000000000000000000000000000000000000000000,
.register_void[3] = 0b1111000000000000100000000111111000000000000000000000000000000000,
},
{
.family = EMCFAN_FAMILY_210X,
.product_id = EMCFAN_PRODUCT_2104,
.name = "EMC2104",
.num_tachs = 2,
.num_fans = 2,
.fan_drive_registers = { EMCFAN_210_346_FAN_1_DRIVE, EMCFAN_210_346_FAN_2_DRIVE },
.fan_divider_registers = { EMCFAN_210_346_FAN_1_DIVIDE, EMCFAN_210_346_FAN_1_DIVIDE },
.internal_temp_zone = true,
.num_external_temp_zones = 4,
.vin4_temp_zone = true,
.num_gpio_pins = 3,
.gpio_pin_ability = {
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL | GPIO_PIN_ALT0,
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL | GPIO_PIN_ALT0,
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL | GPIO_PIN_ALT0
},
.gpio_names = { "CLK_IN / GPIO1", "TACH2 / GPIO2", "PWM2 / GPIO3" },
.register_void[0] = 0b0011111100111111000011111111111110111111111100011111011111111111,
.register_void[1] = 0b0000001111111111111111111111111111111111111111111111111111101111,
.register_void[2] = 0b0000001111111111111111111111111111111111111111111111111111101111,
.register_void[3] = 0b1111000000000000100000000111111100000000000000000000000000000000,
},
{
.family = EMCFAN_FAMILY_210X,
.product_id = EMCFAN_PRODUCT_2106,
.name = "EMC2106",
.num_tachs = 2,
.num_fans = 4,
.fan_drive_registers = { EMCFAN_210_346_FAN_1_DRIVE, EMCFAN_210_346_FAN_2_DRIVE, EMCFAN_2106_FAN_3_DRIVE, EMCFAN_2106_FAN_4_DRIVE },
.fan_divider_registers = { EMCFAN_210_346_FAN_1_DIVIDE, EMCFAN_210_346_FAN_1_DIVIDE, EMCFAN_2106_FAN_3_DIVIDE, EMCFAN_2106_FAN_4_DIVIDE },
.internal_temp_zone = true,
.num_external_temp_zones = 4,
.vin4_temp_zone = true,
.num_gpio_pins = 6,
.gpio_pin_ability = {
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL | GPIO_PIN_ALT0,
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL | GPIO_PIN_ALT0,
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL | GPIO_PIN_ALT0,
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL | GPIO_PIN_ALT0 | GPIO_PIN_ALT1,
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL | GPIO_PIN_ALT0 | GPIO_PIN_ALT1,
GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | GPIO_PIN_OPENDRAIN | GPIO_PIN_PUSHPULL
},
.gpio_names = { "CLK_IN / GPIO1", "TACH2 / GPIO2", "PWM2 / GPIO3", "OVERT2 / GPIO4 / PWM3", "OVERT3 / GPIO5 / PWM4", "GPIO6" },
.register_void[0] = 0b0011111100111111111111111111111110111111111100011111011111111111,
.register_void[1] = 0b0000001111111111111111111111111111111111111111111111111111101111,
.register_void[2] = 0b0000001111111111111111111111111111111111111111111111111111101111,
.register_void[3] = 0b1111000000000000100000000111111100000000000000000000000000000000,
},
{
.family = EMCFAN_FAMILY_230X,
.product_id = EMCFAN_PRODUCT_2301,
.name = "EMC2301",
.num_tachs = 1,
.num_fans = 1,
.fan_drive_registers = { EMCFAN_230X_FAN_1_DRIVE },
.fan_divider_registers = { EMCFAN_230X_FAN_1_DIVIDE },
.internal_temp_zone = false,
.num_external_temp_zones = 0,
.vin4_temp_zone = false,
.num_gpio_pins = 0,
.register_void[0] = 0b1111111111101111001111101111000100000000000000000000000000000000,
.register_void[1] = 0b0000000000000000000000000000000000000000000000000000000000000000,
.register_void[2] = 0b0000000000000000000000000000000000000000000000000000000000000000,
.register_void[3] = 0b1110000000000000100000000000000000000000000000000000000000000000,
},
{
.family = EMCFAN_FAMILY_230X,
.product_id = EMCFAN_PRODUCT_2302,
.name = "EMC2302",
.num_tachs = 2,
.num_fans = 2,
.fan_drive_registers = { EMCFAN_230X_FAN_1_DRIVE, EMCFAN_230X_FAN_2_DRIVE },
.fan_divider_registers = { EMCFAN_230X_FAN_1_DIVIDE, EMCFAN_230X_FAN_2_DIVIDE },
.internal_temp_zone = false,
.num_external_temp_zones = 0,
.vin4_temp_zone = false,
.num_gpio_pins = 0,
.register_void[0] = 0b1111111111101111001111101111000100000000000000000000000000000000,
.register_void[1] = 0b0000000000000000000000000000000000000000000000001111111111101111,
.register_void[2] = 0b0000000000000000000000000000000000000000000000000000000000000000,
.register_void[3] = 0b1110000000000000100000000000000000000000000000000000000000000000,
},
{
.family = EMCFAN_FAMILY_230X,
.product_id = EMCFAN_PRODUCT_2303,
.name = "EMC2303",
.num_tachs = 3,
.num_fans = 3,
.fan_drive_registers = { EMCFAN_230X_FAN_1_DRIVE, EMCFAN_230X_FAN_2_DRIVE, EMCFAN_230X_FAN_3_DRIVE },
.fan_divider_registers = { EMCFAN_230X_FAN_1_DIVIDE, EMCFAN_230X_FAN_2_DIVIDE, EMCFAN_230X_FAN_3_DIVIDE },
.internal_temp_zone = false,
.num_external_temp_zones = 0,
.vin4_temp_zone = false,
.num_gpio_pins = 0,
.register_void[0] = 0b1111111111101111001111101111000100000000000000000000000000000000,
.register_void[1] = 0b0000000000000000000000000000000011111111111011111111111111101111,
.register_void[2] = 0b0000000000000000000000000000000000000000000000000000000000000000,
.register_void[3] = 0b1111000000000000100000000000000000000000000000000000000000000000,
},
{
.family = EMCFAN_FAMILY_230X,
.product_id = EMCFAN_PRODUCT_2305,
.name = "EMC2305",
.num_tachs = 5,
.num_fans = 5,
.fan_drive_registers = { EMCFAN_230X_FAN_1_DRIVE, EMCFAN_230X_FAN_2_DRIVE, EMCFAN_230X_FAN_3_DRIVE, EMCFAN_230X_FAN_4_DRIVE, EMCFAN_230X_FAN_5_DRIVE },
.fan_divider_registers = { EMCFAN_230X_FAN_1_DIVIDE, EMCFAN_230X_FAN_2_DIVIDE, EMCFAN_230X_FAN_3_DIVIDE, EMCFAN_230X_FAN_4_DIVIDE, EMCFAN_230X_FAN_5_DIVIDE },
.internal_temp_zone = false,
.num_external_temp_zones = 0,
.vin4_temp_zone = false,
.num_gpio_pins = 0,
.register_void[0] = 0b1111111111101111001111101111000100000000000000000000000000000000,
.register_void[1] = 0b1111111111101111111111111110111111111111111011111111111111101111,
.register_void[2] = 0b0000000000000000000000000000000000000000000000000000000000000000,
.register_void[3] = 0b1111000000000000100000000000000000000000000000000000000000000000,
}
};
#endif