/* $NetBSD: emcfanctlconst.h,v 1.1 2025/03/11 13:56:48 brad Exp $ */
/*
* Copyright (c) 2025 Brad Spencer <
[email protected]>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _EMCFANCTLCONST_H_
#define _EMCFANCTLCONST_H_
/* These structures describe the command line command structure */
static const struct emcfanctlcmd emcfanctlcmds[] = {
{
.cmd = "info",
.id = EMCFANCTL_INFO,
.helpargs = ""
},
{
.cmd = "register",
.id = EMCFANCTL_REGISTER,
.helpargs = "list|read|write"
},
{
.cmd = "fan",
.id = EMCFANCTL_FAN,
.helpargs = "<n> drive|divider|min_expected_rpm|edges|polarity read|write|inverted|non-inverted <write value>"
},
{
.cmd = "apd",
.id = EMCFANCTL_APD,
.helpargs = "read|on|off"
},
{
.cmd = "smbus_timeout",
.id = EMCFANCTL_SMBUSTO,
.helpargs = "read|on|off"
}
};
static const struct emcfanctlcmd emcfanctlregistercmds[] = {
{
.cmd = "list",
.id = EMCFANCTL_REGISTER_LIST,
.helpargs = "list"
},
{
.cmd = "read",
.id = EMCFANCTL_REGISTER_READ,
.helpargs = "read start_register [end_register]"
},
{
.cmd = "write",
.id = EMCFANCTL_REGISTER_WRITE,
.helpargs = "write register value"
}
};
static const struct emcfanctlcmd emcfanctlfancmds[] = {
{
.cmd = "status",
.id = EMCFANCTL_FAN_STATUS,
.helpargs = "<n> status"
},
{
.cmd = "drive",
.id = EMCFANCTL_FAN_DRIVE,
.helpargs = "drive"
},
{
.cmd = "divider",
.id = EMCFANCTL_FAN_DIVIDER,
.helpargs = "divider"
},
{
.cmd = "min_expected_rpm",
.id = EMCFANCTL_FAN_MINEXPECTED_RPM,
.helpargs = "min_expected_rpm"
},
{
.cmd = "edges",
.id = EMCFANCTL_FAN_EDGES,
.helpargs = "edges"
},
{
.cmd = "polarity",
.id = EMCFANCTL_FAN_POLARITY,
.helpargs = "polarity read|inverted|non-inverted"
},
{
.cmd = "pwm_base_frequency",
.id = EMCFANCTL_FAN_PWM_BASEFREQ,
.helpargs = "pwm_base_frequency read|write"
},
{
.cmd = "pwm_output_type",
.id = EMCFANCTL_FAN_PWM_OUTPUTTYPE,
.helpargs = "pwm_output_type read|push-pull|open-drain"
}
};
static const struct emcfanctlcmd emcfanctlddcmds[] = {
{
.cmd = "read",
.id = EMCFANCTL_FAN_DD_READ,
.helpargs = "read"
},
{
.cmd = "write",
.id = EMCFANCTL_FAN_DD_WRITE,
.helpargs = "write"
}
};
static const struct emcfanctlcmd emcfanctlpcmds[] = {
{
.cmd = "read",
.id = EMCFANCTL_FAN_P_READ,
.helpargs = "read"
},
{
.cmd = "inverted",
.id = EMCFANCTL_FAN_P_INVERTED,
.helpargs = "inverted"
},
{
.cmd = "non-inverted",
.id = EMCFANCTL_FAN_P_NONINVERTED,
.helpargs = "non-inverted"
}
};
static const struct emcfanctlcmd emcfanctlotcmds[] = {
{
.cmd = "read",
.id = EMCFANCTL_FAN_OT_READ,
.helpargs = "read"
},
{
.cmd = "push-pull",
.id = EMCFANCTL_FAN_OT_PUSHPULL,
.helpargs = "push-pull"
},
{
.cmd = "open-drain",
.id = EMCFANCTL_FAN_OT_OPENDRAIN,
.helpargs = "open-drain"
}
};
static const struct emcfanctlcmd emcfanctlapdsmtocmds[] = {
{
.cmd = "read",
.id = EMCFANCTL_APD_READ,
.helpargs = "read"
},
{
.cmd = "on",
.id = EMCFANCTL_APD_ON,
.helpargs = "on"
},
{
.cmd = "off",
.id = EMCFANCTL_APD_OFF,
.helpargs = "off"
}
};
/* Name the registers for each of the chip types */
static const struct emcfan_registers emcfanctl_2101_registers[] = {
{
.name = "internal_temperature",
.reg = 0x00
},
{
.name = "external_diode_temperature_high_byte",
.reg = 0x01
},
{
.name = "status",
.reg = 0x02
},
{
.name = "configuration",
.reg = 0x03
},
{
.name = "conversion_rate",
.reg = 0x04
},
{
.name = "internal_temp_limit",
.reg = 0x05
},
{
.name = "external_temp_high_limit_high_byte",
.reg = 0x07
},
{
.name = "external_temp_low_limit_high_byte",
.reg = 0x08
},
{
.name = "configuration_alt",
.reg = 0x09
},
{
.name = "conversion_rate_alt",
.reg = 0x0A
},
{
.name = "internal_temp_limit_alt",
.reg = 0x0B
},
{
.name = "external_temp_high_limit_high_byte_alt",
.reg = 0x0D
},
{
.name = "external_temp_low_limit_high_byte_alt",
.reg = 0x0E
},
{
.name = "external_temperature_force",
.reg = 0x0C
},
{
.name = "one_shot",
.reg = 0x0F
},
{
.name = "external_diode_temperature_low_byte",
.reg = 0x10
},
{
.name = "scratchpad1",
.reg = 0x11
},
{
.name = "scratchpad2",
.reg = 0x12
},
{
.name = "external_diode_high_limit_low_byte",
.reg = 0x13
},
{
.name = "external_diode_low_limit_low_byte",
.reg = 0x14
},
{
.name = "alert_mask",
.reg = 0x16
},
{
.name = "external_diode_ideality_factor",
.reg = 0x17
},
{
.name = "beta_compensation_factor",
.reg = 0x18
},
{
.name = "tcrit_temp_limit",
.reg = 0x19
},
{
.name = "tcrit_hysteresis",
.reg = 0x21
},
{
.name = "tach_reading_low_byte",
.reg = 0x46
},
{
.name = "tach_reading_high_byte",
.reg = 0x47
},
{
.name = "tach_limit_low_byte",
.reg = 0x48
},
{
.name = "tach_limit_high_byte",
.reg = 0x49
},
{
.name = "fan_configuration",
.reg = 0x4A
},
{
.name = "fan_spin-up",
.reg = 0x4B
},
{
.name = "fan_setting",
.reg = 0x4C
},
{
.name = "pwm_frequency",
.reg = 0x4D
},
{
.name = "pwm_frequency_divide",
.reg = 0x4E
},
{
.name = "lookup_table_hysteresis",
.reg = 0x4F
},
{
.name = "lookup_table_temp_setting_1",
.reg = 0x50
},
{
.name = "lookup_table_fan_setting_1",
.reg = 0x51
},
{
.name = "lookup_table_temp_setting_2",
.reg = 0x52
},
{
.name = "lookup_table_fan_setting_2",
.reg = 0x53
},
{
.name = "lookup_table_temp_setting_3",
.reg = 0x54
},
{
.name = "lookup_table_fan_setting_3",
.reg = 0x55
},
{
.name = "lookup_table_temp_setting_4",
.reg = 0x56
},
{
.name = "lookup_table_fan_setting_4",
.reg = 0x57
},
{
.name = "lookup_table_temp_setting_5",
.reg = 0x58
},
{
.name = "lookup_table_fan_setting_5",
.reg = 0x59
},
{
.name = "lookup_table_temp_setting_6",
.reg = 0x5A
},
{
.name = "lookup_table_fan_setting_6",
.reg = 0x5B
},
{
.name = "lookup_table_temp_setting_7",
.reg = 0x5C
},
{
.name = "lookup_table_fan_setting_7",
.reg = 0x5D
},
{
.name = "lookup_table_temp_setting_8",
.reg = 0x5E
},
{
.name = "lookup_table_fan_setting_8",
.reg = 0x5F
},
{
.name = "averaging_filter",
.reg = 0xBF
},
{
.name = "product_id",
.reg = 0xFD
},
{
.name = "manufacturer_id",
.reg = 0xFE
},
{
.name = "revision_register",
.reg = 0xFF
}
};
static const struct emcfan_registers emcfanctl_2103_1_registers[] = {
{
.name = "internal_temp_reading_high_byte",
.reg = 0x00
},
{
.name = "internal_temp_reading_low_byte",
.reg = 0x01
},
{
.name = "external_diode_1_temp_reading_high_byte",
.reg = 0x02
},
{
.name = "external_diode_1_temp_reading_low_byte",
.reg = 0x03
},
{
.name = "critical/thermal_shutdown_temperature",
.reg = 0x0A
},
{
.name = "pushed_temperature_1",
.reg = 0x0C
},
{
.name = "pushed_temperature_2",
.reg = 0x0D
},
{
.name = "trip_set_voltage",
.reg = 0x10
},
{
.name = "external_diode_1_ideality_register",
.reg = 0x11
},
{
.name = "external_diode_1_beta_configuration",
.reg = 0x14
},
{
.name = "external_diode_rec_configuration",
.reg = 0x17
},
{
.name = "external_diode_1_tcrit_limit",
.reg = 0x19
},
{
.name = "internal_diode_tcrit_limit",
.reg = 0x1D
},
{
.name = "tcrit_status",
.reg = 0x1F
},
{
.name = "configuration",
.reg = 0x20
},
{
.name = "configuration_2",
.reg = 0x21
},
{
.name = "interrupt_status",
.reg = 0x23
},
{
.name = "high_limit_status",
.reg = 0x24
},
{
.name = "low_limit_status",
.reg = 0x25
},
{
.name = "diode_fault",
.reg = 0x26
},
{
.name = "fan_status",
.reg = 0x27
},
{
.name = "interrupt_enable_register",
.reg = 0x28
},
{
.name = "fan_interrupt_enable_register",
.reg = 0x29
},
{
.name = "pwm_config",
.reg = 0x2A
},
{
.name = "pwm_base_frequency",
.reg = 0x2B
},
{
.name = "external_diode_1_temp_high_limit",
.reg = 0x30
},
{
.name = "internal_diode_high_limit",
.reg = 0x34
},
{
.name = "external_diode_1_temp_low_limit",
.reg = 0x38
},
{
.name = "internal_diode_low_limit",
.reg = 0x3C
},
{
.name = "fan_setting",
.reg = 0x40
},
{
.name = "pwm_divide",
.reg = 0x41
},
{
.name = "fan_configuration_1",
.reg = 0x42
},
{
.name = "fan_configuration_2",
.reg = 0x43
},
{
.name = "gain",
.reg = 0x45
},
{
.name = "fan_spin_up_configuration",
.reg = 0x46
},
{
.name = "fan_step",
.reg = 0x47
},
{
.name = "fan_minimum_drive",
.reg = 0x48
},
{
.name = "fan_valid_tach_count",
.reg = 0x49
},
{
.name = "fan_drive_fail_band_low_byte",
.reg = 0x4A
},
{
.name = "fan_drive_fail_band_high_byte",
.reg = 0x4B
},
{
.name = "tach_target_low_byte",
.reg = 0x4C
},
{
.name = "tach_target_high_byte",
.reg = 0x4D
},
{
.name = "tach_reading_high_byte",
.reg = 0x4E
},
{
.name = "tach_reading_low_byte",
.reg = 0x4F
},
{
.name = "lut_configuration",
.reg = 0x50
},
{
.name = "lut_drive_1",
.reg = 0x51
},
{
.name = "lut_temp_1_setting_1",
.reg = 0x52
},
{
.name = "lut_temp_2_setting_1",
.reg = 0x53
},
{
.name = "lut_temp_3_setting_1",
.reg = 0x54
},
{
.name = "lut_temp_4_setting_1",
.reg = 0x55
},
{
.name = "lut_drive_2",
.reg = 0x56
},
{
.name = "lut_temp_1_setting_2",
.reg = 0x57
},
{
.name = "lut_temp_2_setting_2",
.reg = 0x58
},
{
.name = "lut_temp_3_setting_2",
.reg = 0x59
},
{
.name = "lut_temp_4_setting_2",
.reg = 0x5A
},
{
.name = "lut_drive_3",
.reg = 0x5B
},
{
.name = "lut_temp_1_setting_3",
.reg = 0x5C
},
{
.name = "lut_temp_2_setting_3",
.reg = 0x5D
},
{
.name = "lut_temp_3_setting_3",
.reg = 0x5E
},
{
.name = "lut_temp_4_setting_3",
.reg = 0x5F
},
{
.name = "lut_drive_4",
.reg = 0x60
},
{
.name = "lut_temp_1_setting_4",
.reg = 0x61
},
{
.name = "lut_temp_2_setting_4",
.reg = 0x62
},
{
.name = "lut_temp_3_setting_4",
.reg = 0x63
},
{
.name = "lut_temp_4_setting_4",
.reg = 0x64
},
{
.name = "lut_drive_5",
.reg = 0x65
},
{
.name = "lut_temp_1_setting_5",
.reg = 0x66
},
{
.name = "lut_temp_2_setting_5",
.reg = 0x67
},
{
.name = "lut_temp_3_setting_5",
.reg = 0x68
},
{
.name = "lut_temp_4_setting_5",
.reg = 0x69
},
{
.name = "lut_drive_6",
.reg = 0x6A
},
{
.name = "lut_temp_1_setting_6",
.reg = 0x6B
},
{
.name = "lut_temp_2_setting_6",
.reg = 0x6C
},
{
.name = "lut_temp_3_setting_6",
.reg = 0x6D
},
{
.name = "lut_temp_4_setting_6",
.reg = 0x6E
},
{
.name = "lut_drive_7",
.reg = 0x6F
},
{
.name = "lut_temp_1_setting_7",
.reg = 0x70
},
{
.name = "lut_temp_2_setting_7",
.reg = 0x71
},
{
.name = "lut_temp_3_setting_7",
.reg = 0x72
},
{
.name = "lut_temp_4_setting_7",
.reg = 0x73
},
{
.name = "lut_drive_8",
.reg = 0x74
},
{
.name = "lut_temp_1_setting_8",
.reg = 0x75
},
{
.name = "lut_temp_2_setting_8",
.reg = 0x76
},
{
.name = "lut_temp_3_setting_8",
.reg = 0x77
},
{
.name = "lut_temp_4_setting_8",
.reg = 0x78
},
{
.name = "lut_temp_hysteresis",
.reg = 0x79
},
{
.name = "software_lock",
.reg = 0xEF
},
{
.name = "product_features",
.reg = 0xFC
},
{
.name = "product_id",
.reg = 0xFD
},
{
.name = "manufacturer_id",
.reg = 0xFE
},
{
.name = "revision",
.reg = 0xFF
}
};
static const struct emcfan_registers emcfanctl_2103_24_registers[] = {
{
.name = "internal_temp_reading_high_byte",
.reg = 0x00
},
{
.name = "internal_temp_reading_low_byte",
.reg = 0x01
},
{
.name = "external_diode_1_temp_reading_high_byte",
.reg = 0x02
},
{
.name = "external_diode_1_temp_reading_low_byte",
.reg = 0x03
},
{
.name = "external_diode_2_temp_reading_high_byte",
.reg = 0x04
},
{
.name = "external_diode_2_temp_reading_low_byte",
.reg = 0x05
},
{
.name = "external_diode_3_temp_reading_high_byte",
.reg = 0x06
},
{
.name = "external_diode_3_temp_reading_low_byte",
.reg = 0x07
},
{
.name = "critical/thermal_shutdown_temperature",
.reg = 0x0A
},
{
.name = "pushed_temperature_1",
.reg = 0x0C
},
{
.name = "pushed_temperature_2",
.reg = 0x0D
},
{
.name = "trip_set_voltage",
.reg = 0x10
},
{
.name = "external_diode_1_ideality_register",
.reg = 0x11
},
{
.name = "external_diode_2_ideality_register",
.reg = 0x12
},
{
.name = "external_diode_1_beta_configuration",
.reg = 0x14
},
{
.name = "external_diode_2_beta_configuration",
.reg = 0x15
},
{
.name = "external_diode_rec_configuration",
.reg = 0x17
},
{
.name = "external_diode_1_tcrit_limit",
.reg = 0x19
},
{
.name = "external_diode_2_tcrit_limit",
.reg = 0x1A
},
{
.name = "external_diode_3_tcrit_limit",
.reg = 0x1B
},
{
.name = "internal_diode_tcrit_limit",
.reg = 0x1D
},
{
.name = "tcrit_status",
.reg = 0x1F
},
{
.name = "configuration",
.reg = 0x20
},
{
.name = "configuration_2",
.reg = 0x21
},
{
.name = "interrupt_status",
.reg = 0x23
},
{
.name = "high_limit_status",
.reg = 0x24
},
{
.name = "low_limit_status",
.reg = 0x25
},
{
.name = "diode_fault",
.reg = 0x26
},
{
.name = "fan_status",
.reg = 0x27
},
{
.name = "interrupt_enable_register",
.reg = 0x28
},
{
.name = "fan_interrupt_enable_register",
.reg = 0x29
},
{
.name = "pwm_config",
.reg = 0x2A
},
{
.name = "pwm_base_frequency",
.reg = 0x2B
},
{
.name = "external_diode_1_temp_high_limit",
.reg = 0x30
},
{
.name = "external_diode_2_temp_high_limit",
.reg = 0x31
},
{
.name = "external_diode_3_temp_high_limit",
.reg = 0x32
},
{
.name = "internal_diode_high_limit",
.reg = 0x34
},
{
.name = "external_diode_1_temp_low_limit",
.reg = 0x38
},
{
.name = "external_diode_2_temp_low_limit",
.reg = 0x39
},
{
.name = "external_diode_3_temp_low_limit",
.reg = 0x3A
},
{
.name = "internal_diode_low_limit",
.reg = 0x3C
},
{
.name = "fan_setting",
.reg = 0x40
},
{
.name = "pwm_divide",
.reg = 0x41
},
{
.name = "fan_configuration_1",
.reg = 0x42
},
{
.name = "fan_configuration_2",
.reg = 0x43
},
{
.name = "gain",
.reg = 0x45
},
{
.name = "fan_spin_up_configuration",
.reg = 0x46
},
{
.name = "fan_step",
.reg = 0x47
},
{
.name = "fan_minimum_drive",
.reg = 0x48
},
{
.name = "fan_valid_tach_count",
.reg = 0x49
},
{
.name = "fan_drive_fail_band_low_byte",
.reg = 0x4A
},
{
.name = "fan_drive_fail_band_high_byte",
.reg = 0x4B
},
{
.name = "tach_target_low_byte",
.reg = 0x4C
},
{
.name = "tach_target_high_byte",
.reg = 0x4D
},
{
.name = "tach_reading_high_byte",
.reg = 0x4E
},
{
.name = "tach_reading_low_byte",
.reg = 0x4F
},
{
.name = "lut_configuration",
.reg = 0x50
},
{
.name = "lut_drive_1",
.reg = 0x51
},
{
.name = "lut_temp_1_setting_1",
.reg = 0x52
},
{
.name = "lut_temp_2_setting_1",
.reg = 0x53
},
{
.name = "lut_temp_3_setting_1",
.reg = 0x54
},
{
.name = "lut_temp_4_setting_1",
.reg = 0x55
},
{
.name = "lut_drive_2",
.reg = 0x56
},
{
.name = "lut_temp_1_setting_2",
.reg = 0x57
},
{
.name = "lut_temp_2_setting_2",
.reg = 0x58
},
{
.name = "lut_temp_3_setting_2",
.reg = 0x59
},
{
.name = "lut_temp_4_setting_2",
.reg = 0x5A
},
{
.name = "lut_drive_3",
.reg = 0x5B
},
{
.name = "lut_temp_1_setting_3",
.reg = 0x5C
},
{
.name = "lut_temp_2_setting_3",
.reg = 0x5D
},
{
.name = "lut_temp_3_setting_3",
.reg = 0x5E
},
{
.name = "lut_temp_4_setting_3",
.reg = 0x5F
},
{
.name = "lut_drive_4",
.reg = 0x60
},
{
.name = "lut_temp_1_setting_4",
.reg = 0x61
},
{
.name = "lut_temp_2_setting_4",
.reg = 0x62
},
{
.name = "lut_temp_3_setting_4",
.reg = 0x63
},
{
.name = "lut_temp_4_setting_4",
.reg = 0x64
},
{
.name = "lut_drive_5",
.reg = 0x65
},
{
.name = "lut_temp_1_setting_5",
.reg = 0x66
},
{
.name = "lut_temp_2_setting_5",
.reg = 0x67
},
{
.name = "lut_temp_3_setting_5",
.reg = 0x68
},
{
.name = "lut_temp_4_setting_5",
.reg = 0x69
},
{
.name = "lut_drive_6",
.reg = 0x6A
},
{
.name = "lut_temp_1_setting_6",
.reg = 0x6B
},
{
.name = "lut_temp_2_setting_6",
.reg = 0x6C
},
{
.name = "lut_temp_3_setting_6",
.reg = 0x6D
},
{
.name = "lut_temp_4_setting_6",
.reg = 0x6E
},
{
.name = "lut_drive_7",
.reg = 0x6F
},
{
.name = "lut_temp_1_setting_7",
.reg = 0x70
},
{
.name = "lut_temp_2_setting_7",
.reg = 0x71
},
{
.name = "lut_temp_3_setting_7",
.reg = 0x72
},
{
.name = "lut_temp_4_setting_7",
.reg = 0x73
},
{
.name = "lut_drive_8",
.reg = 0x74
},
{
.name = "lut_temp_1_setting_8",
.reg = 0x75
},
{
.name = "lut_temp_2_setting_8",
.reg = 0x76
},
{
.name = "lut_temp_3_setting_8",
.reg = 0x77
},
{
.name = "lut_temp_4_setting_8",
.reg = 0x78
},
{
.name = "lut_temp_hysteresis",
.reg = 0x79
},
{
.name = "gpio_direction_register",
.reg = 0xE1
},
{
.name = "gpio_output_configuration_register",
.reg = 0xE2
},
{
.name = "gpio_input_register",
.reg = 0xE3
},
{
.name = "gpio_output_register",
.reg = 0xE4
},
{
.name = "gpio_interrupt_enable_register",
.reg = 0xE5
},
{
.name = "gpio_status",
.reg = 0xE6
},
{
.name = "software_lock",
.reg = 0xEF
},
{
.name = "product_features",
.reg = 0xFC
},
{
.name = "product_id",
.reg = 0xFD
},
{
.name = "manufacturer_id",
.reg = 0xFE
},
{
.name = "revision",
.reg = 0xFF
}
};
static const struct emcfan_registers emcfanctl_2104_registers[] = {
{
.name = "internal_temp_reading_high_byte",
.reg = 0x00
},
{
.name = "internal_temp_reading_low_byte",
.reg = 0x01
},
{
.name = "external_diode_1_temp_reading_high_byte",
.reg = 0x02
},
{
.name = "external_diode_1_temp_reading_low_byte",
.reg = 0x03
},
{
.name = "external_diode_2_temp_reading_high_byte",
.reg = 0x04
},
{
.name = "external_diode_2_temp_reading_low_byte",
.reg = 0x05
},
{
.name = "external_diode_3_temp_reading_high_byte",
.reg = 0x06
},
{
.name = "external_diode_3_temp_reading_low_byte",
.reg = 0x07
},
{
.name = "external_diode_4_temp_reading_high_byte",
.reg = 0x08
},
{
.name = "external_diode_4_temp_reading_low_byte",
.reg = 0x09
},
{
.name = "critical/thermal_shutdown_temperature",
.reg = 0x0A
},
{
.name = "pushed_temperature_1",
.reg = 0x0C
},
{
.name = "pushed_temperature_2",
.reg = 0x0D
},
{
.name = "pushed_temperature_3",
.reg = 0x0E
},
{
.name = "pushed_temperature_4",
.reg = 0x0F
},
{
.name = "trip_set_voltage",
.reg = 0x10
},
{
.name = "external_diode_1_beta_configuration",
.reg = 0x14
},
{
.name = "external_diode_2_beta_configuration",
.reg = 0x15
},
{
.name = "external_diode_3_beta_configuration",
.reg = 0x16
},
{
.name = "external_diode_rec_configuration",
.reg = 0x17
},
{
.name = "external_diode_1_tcrit_limit",
.reg = 0x19
},
{
.name = "external_diode_2_tcrit_limit",
.reg = 0x1A
},
{
.name = "external_diode_3_tcrit_limit",
.reg = 0x1B
},
{
.name = "external_diode_4_tcrit_limit",
.reg = 0x1C
},
{
.name = "internal_diode_tcrit_limit",
.reg = 0x1D
},
{
.name = "tcrit_limit_status",
.reg = 0x1F
},
{
.name = "configuration",
.reg = 0x20
},
{
.name = "configuration_2",
.reg = 0x21
},
{
.name = "configuration_3",
.reg = 0x22
},
{
.name = "interrupt_status",
.reg = 0x23
},
{
.name = "high_limit_status",
.reg = 0x24
},
{
.name = "low_limit_status",
.reg = 0x25
},
{
.name = "diode_fault",
.reg = 0x26
},
{
.name = "fan_status",
.reg = 0x27
},
{
.name = "interrupt_enable_register",
.reg = 0x28
},
{
.name = "fan_interrupt_enable_register",
.reg = 0x29
},
{
.name = "pwm_config",
.reg = 0x2A
},
{
.name = "pwm_base_frequency",
.reg = 0x2B
},
{
.name = "external_diode_1_temp_high_limit",
.reg = 0x30
},
{
.name = "external_diode_2_temp_high_limit",
.reg = 0x31
},
{
.name = "external_diode_3_temp_high_limit",
.reg = 0x32
},
{
.name = "external_diode_4_temp_high_limit",
.reg = 0x33
},
{
.name = "internal_diode_high_limit",
.reg = 0x34
},
{
.name = "voltage_4_high_limit",
.reg = 0x35
},
{
.name = "external_diode_1_temp_low_limit",
.reg = 0x38
},
{
.name = "external_diode_2_temp_low_limit",
.reg = 0x39
},
{
.name = "external_diode_3_temp_low_limit",
.reg = 0x3A
},
{
.name = "external_diode_4_temp_low_limit",
.reg = 0x3B
},
{
.name = "internal_diode_low_limit",
.reg = 0x3C
},
{
.name = "voltage_4_low_limit",
.reg = 0x3D
},
{
.name = "fan_1_setting",
.reg = 0x40
},
{
.name = "pwm_1_divide",
.reg = 0x41
},
{
.name = "fan_1_configuration_1",
.reg = 0x42
},
{
.name = "fan_1_configuration_2",
.reg = 0x43
},
{
.name = "gain_1",
.reg = 0x45
},
{
.name = "fan_1_spin_up_configuration",
.reg = 0x46
},
{
.name = "fan_1_step",
.reg = 0x47
},
{
.name = "fan_1_minimum_drive",
.reg = 0x48
},
{
.name = "fan_1_valid_tach_count",
.reg = 0x49
},
{
.name = "fan_1_drive_fail_band_low_byte",
.reg = 0x4A
},
{
.name = "fan_1_drive_fail_band_high_byte",
.reg = 0x4B
},
{
.name = "tach_1_target_low_byte",
.reg = 0x4C
},
{
.name = "tach_1_target_high_byte",
.reg = 0x4D
},
{
.name = "tach_1_readinghigh_byte",
.reg = 0x4E
},
{
.name = "tach_1_reading_low_byte",
.reg = 0x4F
},
{
.name = "lut_1_configuration",
.reg = 0x50
},
{
.name = "lut_1_drive_1",
.reg = 0x51
},
{
.name = "lut_1_temp_1_setting_1",
.reg = 0x52
},
{
.name = "lut_1_temp_2_setting_1",
.reg = 0x53
},
{
.name = "lut_1_temp_3_setting_1",
.reg = 0x54
},
{
.name = "lut_1_temp_4_setting_1",
.reg = 0x55
},
{
.name = "lut_1_drive_2",
.reg = 0x56
},
{
.name = "lut_1_temp_1_setting_2",
.reg = 0x57
},
{
.name = "lut_1_temp_2_setting_2",
.reg = 0x58
},
{
.name = "lut_1_temp_3_setting_2",
.reg = 0x59
},
{
.name = "lut_1_temp_4_setting_2",
.reg = 0x5A
},
{
.name = "lut_1_drive_3",
.reg = 0x5B
},
{
.name = "lut_1_temp_1_setting_3",
.reg = 0x5C
},
{
.name = "lut_1_temp_2_setting_3",
.reg = 0x5D
},
{
.name = "lut_1_temp_3_setting_3",
.reg = 0x5E
},
{
.name = "lut_1_temp_4_setting_3",
.reg = 0x5F
},
{
.name = "lut_1_drive_4",
.reg = 0x60
},
{
.name = "lut_1_temp_1_setting_4",
.reg = 0x61
},
{
.name = "lut_1_temp_2_setting_4",
.reg = 0x62
},
{
.name = "lut_1_temp_3_setting_4",
.reg = 0x63
},
{
.name = "lut_1_temp_4_setting_4",
.reg = 0x64
},
{
.name = "lut_1_drive_5",
.reg = 0x65
},
{
.name = "lut_1_temp_1_setting_5",
.reg = 0x66
},
{
.name = "lut_1_temp_2_setting_5",
.reg = 0x67
},
{
.name = "lut_1_temp_3_setting_5",
.reg = 0x68
},
{
.name = "lut_1_temp_4_setting_5",
.reg = 0x69
},
{
.name = "lut_1_drive_6",
.reg = 0x6A
},
{
.name = "lut_1_temp_1_setting_6",
.reg = 0x6B
},
{
.name = "lut_1_temp_2_setting_6",
.reg = 0x6C
},
{
.name = "lut_1_temp_3_setting_6",
.reg = 0x6D
},
{
.name = "lut_1_temp_4_setting_6",
.reg = 0x6E
},
{
.name = "lut_1_drive_7",
.reg = 0x6F
},
{
.name = "lut_1_temp_1_setting_7",
.reg = 0x70
},
{
.name = "lut_1_temp_2_setting_7",
.reg = 0x71
},
{
.name = "lut_1_temp_3_setting_7",
.reg = 0x72
},
{
.name = "lut_1_temp_4_setting_7",
.reg = 0x73
},
{
.name = "lut_1_drive_8",
.reg = 0x74
},
{
.name = "lut_1_temp_1_setting_8",
.reg = 0x75
},
{
.name = "lut_1_temp_2_setting_8",
.reg = 0x76
},
{
.name = "lut_1_temp_3_setting_8",
.reg = 0x77
},
{
.name = "lut_1_temp_4_setting_8",
.reg = 0x78
},
{
.name = "lut_1_temp_hysteresis",
.reg = 0x79
},
{
.name = "fan_2_setting",
.reg = 0x80
},
{
.name = "pwm2_divide",
.reg = 0x81
},
{
.name = "fan_2_configuration_1",
.reg = 0x82
},
{
.name = "fan_2_configuration_2",
.reg = 0x83
},
{
.name = "gain_2",
.reg = 0x85
},
{
.name = "fan_2_spin_up_configuration",
.reg = 0x86
},
{
.name = "fan_2_step",
.reg = 0x87
},
{
.name = "fan_2_minimum_drive",
.reg = 0x88
},
{
.name = "fan_2_valid_tach_count",
.reg = 0x89
},
{
.name = "fan_2_drive_fail_band_low_byte",
.reg = 0x8A
},
{
.name = "fan_2_drive_fail_band_high_byte",
.reg = 0x8B
},
{
.name = "tach_2_target_low_byte",
.reg = 0x8C
},
{
.name = "tach_2_target_high_byte",
.reg = 0x8D
},
{
.name = "tach_2_reading_high_byte",
.reg = 0x8E
},
{
.name = "tach_2_reading_low_byte",
.reg = 0x8F
},
{
.name = "lut_2_configuration",
.reg = 0x90
},
{
.name = "lut_2_drive_1",
.reg = 0x91
},
{
.name = "lut_2_temp_1_setting_1",
.reg = 0x92
},
{
.name = "lut_2_temp_2_setting_1",
.reg = 0x93
},
{
.name = "lut_2_temp_3_setting_1",
.reg = 0x94
},
{
.name = "lut_2_temp_4_setting_1",
.reg = 0x95
},
{
.name = "lut_2_drive_2",
.reg = 0x96
},
{
.name = "lut_2_temp_1_setting_2",
.reg = 0x97
},
{
.name = "lut_2_temp_2_setting_2",
.reg = 0x98
},
{
.name = "lut_2_temp_3_setting_2",
.reg = 0x99
},
{
.name = "lut_2_temp_4_setting_2",
.reg = 0x9A
},
{
.name = "lut_2_drive_3",
.reg = 0x9B
},
{
.name = "lut_2_temp_1_setting_3",
.reg = 0x9C
},
{
.name = "lut_2_temp_2_setting_3",
.reg = 0x9D
},
{
.name = "lut_2_temp_3_setting_3",
.reg = 0x9E
},
{
.name = "lut_2_temp_4_setting_3",
.reg = 0x9F
},
{
.name = "lut_2_drive_4",
.reg = 0xA0
},
{
.name = "lut_2_temp_1_setting_4",
.reg = 0xA1
},
{
.name = "lut_2_temp_2_setting_4",
.reg = 0xA2
},
{
.name = "lut_2_temp_3_setting_4",
.reg = 0xA3
},
{
.name = "lut_2_temp_4_setting_4",
.reg = 0xA4
},
{
.name = "lut_2_drive_5",
.reg = 0xA5
},
{
.name = "lut_2_temp_1_setting_5",
.reg = 0xA6
},
{
.name = "lut_2_temp_2_setting_5",
.reg = 0xA7
},
{
.name = "lut_2_temp_3_setting_5",
.reg = 0xA8
},
{
.name = "lut_2_temp_4_setting_5",
.reg = 0xA9
},
{
.name = "lut_2_drive_6",
.reg = 0xAA
},
{
.name = "lut_2_temp_1_setting_6",
.reg = 0xAB
},
{
.name = "lut_2_temp_2_setting_6",
.reg = 0xAC
},
{
.name = "lut_2_temp_3_setting_6",
.reg = 0xAD
},
{
.name = "lut_2_temp_4_setting_6",
.reg = 0xAE
},
{
.name = "lut_2_drive_7",
.reg = 0xAF
},
{
.name = "lut_2_temp_1_setting_6",
.reg = 0xB0
},
{
.name = "lut_2_temp_2_setting_6",
.reg = 0xB1
},
{
.name = "lut_2_temp_3_setting_6",
.reg = 0xB2
},
{
.name = "lut_2_temp_4_setting_6",
.reg = 0xB3
},
{
.name = "lut_2_drive_8",
.reg = 0xB4
},
{
.name = "lut_2_temp_1_setting_8",
.reg = 0xB5
},
{
.name = "lut_2_temp_2_setting_8",
.reg = 0xB6
},
{
.name = "lut_2_temp_3_setting_8",
.reg = 0xB7
},
{
.name = "lut_2_temp_4_setting_8",
.reg = 0xB8
},
{
.name = "lut_2_temp_hysteresis",
.reg = 0xB9
},
{
.name = "muxed_pin_configuration_register",
.reg = 0xE0
},
{
.name = "gpio_direction_register",
.reg = 0xE1
},
{
.name = "gpio_output_configuration_register",
.reg = 0xE2
},
{
.name = "gpio_input_register",
.reg = 0xE3
},
{
.name = "gpio_output_register",
.reg = 0xE4
},
{
.name = "gpio_interrupt_enable_register",
.reg = 0xE5
},
{
.name = "gpio_status",
.reg = 0xE6
},
{
.name = "software_lock",
.reg = 0xEF
},
{
.name = "product_features",
.reg = 0xFC
},
{
.name = "product_id",
.reg = 0xFD
},
{
.name = "manufacturer_id",
.reg = 0xFE
},
{
.name = "revision",
.reg = 0xFF
}
};
static const struct emcfan_registers emcfanctl_2106_registers[] = {
{
.name = "internal_temp_reading_high_byte",
.reg = 0x00
},
{
.name = "internal_temp_reading_low_byte",
.reg = 0x01
},
{
.name = "external_diode_1_temp_reading_high_byte",
.reg = 0x02
},
{
.name = "external_diode_1_temp_reading_low_byte",
.reg = 0x03
},
{
.name = "external_diode_2_temp_reading_high_byte",
.reg = 0x04
},
{
.name = "external_diode_2_temp_reading_low_byte",
.reg = 0x05
},
{
.name = "external_diode_3_temp_reading_high_byte",
.reg = 0x06
},
{
.name = "external_diode_3_temp_reading_low_byte",
.reg = 0x07
},
{
.name = "external_diode_4_temp_reading_high_byte",
.reg = 0x08
},
{
.name = "external_diode_4_temp_reading_low_byte",
.reg = 0x09
},
{
.name = "critical/thermal_shutdown_temperature",
.reg = 0x0A
},
{
.name = "pushed_temperature_1",
.reg = 0x0C
},
{
.name = "pushed_temperature_2",
.reg = 0x0D
},
{
.name = "pushed_temperature_3",
.reg = 0x0E
},
{
.name = "pushed_temperature_4",
.reg = 0x0F
},
{
.name = "trip_set_voltage",
.reg = 0x10
},
{
.name = "external_diode_1_beta_configuration",
.reg = 0x14
},
{
.name = "external_diode_2_beta_configuration",
.reg = 0x15
},
{
.name = "external_diode_3_beta_configuration",
.reg = 0x16
},
{
.name = "external_diode_rec_configuration",
.reg = 0x17
},
{
.name = "external_diode_1_tcrit_limit",
.reg = 0x19
},
{
.name = "external_diode_2_tcrit_limit",
.reg = 0x1A
},
{
.name = "external_diode_3_tcrit_limit",
.reg = 0x1B
},
{
.name = "external_diode_4_tcrit_limit",
.reg = 0x1C
},
{
.name = "internal_diode_tcrit_limit",
.reg = 0x1D
},
{
.name = "tcrit_limit_status",
.reg = 0x1F
},
{
.name = "configuration",
.reg = 0x20
},
{
.name = "configuration_2",
.reg = 0x21
},
{
.name = "configuration_3",
.reg = 0x22
},
{
.name = "interrupt_status",
.reg = 0x23
},
{
.name = "high_limit_status",
.reg = 0x24
},
{
.name = "low_limit_status",
.reg = 0x25
},
{
.name = "diode_fault",
.reg = 0x26
},
{
.name = "fan_status",
.reg = 0x27
},
{
.name = "interrupt_enable_register",
.reg = 0x28
},
{
.name = "fan_interruptenable_register",
.reg = 0x29
},
{
.name = "pwm_config",
.reg = 0x2A
},
{
.name = "pwm_base_frequency",
.reg = 0x2B
},
{
.name = "pwm_3_frequency_divide",
.reg = 0x2C
},
{
.name = "pwm3_setting",
.reg = 0x2D
},
{
.name = "pwm4_setting",
.reg = 0x2E
},
{
.name = "pwm4_frequency_divide",
.reg = 0x2F
},
{
.name = "external_diode_1_temp_high_limit",
.reg = 0x30
},
{
.name = "external_diode_2_temp_high_limit",
.reg = 0x31
},
{
.name = "external_diode_3_temp_high_limit",
.reg = 0x32
},
{
.name = "external_diode_4_temp_high_limit",
.reg = 0x33
},
{
.name = "internal_diode_high_limit",
.reg = 0x34
},
{
.name = "voltage_4_high_limit",
.reg = 0x35
},
{
.name = "external_diode_1_temp_low_limit",
.reg = 0x38
},
{
.name = "external_diode_2_temp_low_limit",
.reg = 0x39
},
{
.name = "external_diode_3_temp_low_limit",
.reg = 0x3A
},
{
.name = "external_diode_4_temp_low_limit",
.reg = 0x3B
},
{
.name = "internal_diode_low_limit",
.reg = 0x3C
},
{
.name = "voltage_4_low_limit",
.reg = 0x3D
},
{
.name = "fan_1_setting",
.reg = 0x40
},
{
.name = "pwm_1_divide",
.reg = 0x41
},
{
.name = "fan_1_configuration_1",
.reg = 0x42
},
{
.name = "fan_1_configuration_2",
.reg = 0x43
},
{
.name = "gain_1",
.reg = 0x45
},
{
.name = "fan_1_spin_up_configuration",
.reg = 0x46
},
{
.name = "fan_1_step",
.reg = 0x47
},
{
.name = "fan_1_minimum_drive",
.reg = 0x48
},
{
.name = "fan_1_valid_tach_count",
.reg = 0x49
},
{
.name = "fan_1_drive_fail_band_low_byte",
.reg = 0x4A
},
{
.name = "fan_1_drive_fail_band_high_byte",
.reg = 0x4B
},
{
.name = "tach_1_target_low_byte",
.reg = 0x4C
},
{
.name = "tach_1_target_high_byte",
.reg = 0x4D
},
{
.name = "tach_1_readinghigh_byte",
.reg = 0x4E
},
{
.name = "tach_1_reading_low_byte",
.reg = 0x4F
},
{
.name = "lut_1_configuration",
.reg = 0x50
},
{
.name = "lut_1_drive_1",
.reg = 0x51
},
{
.name = "lut_1_temp_1_setting_1",
.reg = 0x52
},
{
.name = "lut_1_temp_2_setting_1",
.reg = 0x53
},
{
.name = "lut_1_temp_3_setting_1",
.reg = 0x54
},
{
.name = "lut_1_temp_4_setting_1",
.reg = 0x55
},
{
.name = "lut_1_drive_2",
.reg = 0x56
},
{
.name = "lut_1_temp_1_setting_2",
.reg = 0x57
},
{
.name = "lut_1_temp_2_setting_2",
.reg = 0x58
},
{
.name = "lut_1_temp_3_setting_2",
.reg = 0x59
},
{
.name = "lut_1_temp_4_setting_2",
.reg = 0x5A
},
{
.name = "lut_1_drive_3",
.reg = 0x5B
},
{
.name = "lut_1_temp_1_setting_3",
.reg = 0x5C
},
{
.name = "lut_1_temp_2_setting_3",
.reg = 0x5D
},
{
.name = "lut_1_temp_3_setting_3",
.reg = 0x5E
},
{
.name = "lut_1_temp_4_setting_3",
.reg = 0x5F
},
{
.name = "lut_1_drive_4",
.reg = 0x60
},
{
.name = "lut_1_temp_1_setting_4",
.reg = 0x61
},
{
.name = "lut_1_temp_2_setting_4",
.reg = 0x62
},
{
.name = "lut_1_temp_3_setting_4",
.reg = 0x63
},
{
.name = "lut_1_temp_4_setting_4",
.reg = 0x64
},
{
.name = "lut_1_drive_5",
.reg = 0x65
},
{
.name = "lut_1_temp_1_setting_5",
.reg = 0x66
},
{
.name = "lut_1_temp_2_setting_5",
.reg = 0x67
},
{
.name = "lut_1_temp_3_setting_5",
.reg = 0x68
},
{
.name = "lut_1_temp_4_setting_5",
.reg = 0x69
},
{
.name = "lut_1_drive_6",
.reg = 0x6A
},
{
.name = "lut_1_temp_1_setting_6",
.reg = 0x6B
},
{
.name = "lut_1_temp_2_setting_6",
.reg = 0x6C
},
{
.name = "lut_1_temp_3_setting_6",
.reg = 0x6D
},
{
.name = "lut_1_temp_4_setting_6",
.reg = 0x6E
},
{
.name = "lut_1_drive_7",
.reg = 0x6F
},
{
.name = "lut_1_temp_1_setting_7",
.reg = 0x70
},
{
.name = "lut_1_temp_2_setting_7",
.reg = 0x71
},
{
.name = "lut_1_temp_3_setting_7",
.reg = 0x72
},
{
.name = "lut_1_temp_4_setting_7",
.reg = 0x73
},
{
.name = "lut_1_drive_8",
.reg = 0x74
},
{
.name = "lut_1_temp_1_setting_8",
.reg = 0x75
},
{
.name = "lut_1_temp_2_setting_8",
.reg = 0x76
},
{
.name = "lut_1_temp_3_setting_8",
.reg = 0x77
},
{
.name = "lut_1_temp_4_setting_8",
.reg = 0x78
},
{
.name = "lut_1_temp_hysteresis",
.reg = 0x79
},
{
.name = "fan_2_setting",
.reg = 0x80
},
{
.name = "pwm2_divide",
.reg = 0x81
},
{
.name = "fan_2_configuration_1",
.reg = 0x82
},
{
.name = "fan_2_configuration_2",
.reg = 0x83
},
{
.name = "gain_2",
.reg = 0x85
},
{
.name = "fan_2_spin_up_configuration",
.reg = 0x86
},
{
.name = "fan_2_step",
.reg = 0x87
},
{
.name = "fan_2_minimum_drive",
.reg = 0x88
},
{
.name = "fan_2_valid_tach_count",
.reg = 0x89
},
{
.name = "fan_2_drive_fail_band_low_byte",
.reg = 0x8A
},
{
.name = "fan_2_drive_fail_band_high_byte",
.reg = 0x8B
},
{
.name = "tach_2_targetlow_byte",
.reg = 0x8C
},
{
.name = "tach_2_target_high_byte",
.reg = 0x8D
},
{
.name = "tach_2_reading_high_byte",
.reg = 0x8E
},
{
.name = "tach_2_reading_low_byte",
.reg = 0x8F
},
{
.name = "lut_2_configuration",
.reg = 0x90
},
{
.name = "lut_2_drive_1",
.reg = 0x91
},
{
.name = "lut_2_temp_1_setting_1",
.reg = 0x92
},
{
.name = "lut_2_temp_2_setting_1",
.reg = 0x93
},
{
.name = "lut_2_temp_3_setting_1",
.reg = 0x94
},
{
.name = "lut_2_temp_4_setting_1",
.reg = 0x95
},
{
.name = "lut_2_drive_2",
.reg = 0x96
},
{
.name = "lut_2_temp_1_setting_2",
.reg = 0x97
},
{
.name = "lut_2_temp_2_setting_2",
.reg = 0x98
},
{
.name = "lut_2_temp_3_setting_2",
.reg = 0x99
},
{
.name = "lut_2_temp_4_setting_2",
.reg = 0x9A
},
{
.name = "lut_2_drive_3",
.reg = 0x9B
},
{
.name = "lut_2_temp_1_setting_3",
.reg = 0x9C
},
{
.name = "lut_2_temp_2_setting_3",
.reg = 0x9D
},
{
.name = "lut_2_temp_3_setting_3",
.reg = 0x9E
},
{
.name = "lut_2_temp_4_setting_3",
.reg = 0x9F
},
{
.name = "lut_2_drive_4",
.reg = 0xA0
},
{
.name = "lut_2_temp_1_setting_4",
.reg = 0xA1
},
{
.name = "lut_2_temp_2_setting_4",
.reg = 0xA2
},
{
.name = "lut_2_temp_3_setting_4",
.reg = 0xA3
},
{
.name = "lut_2_temp_4_setting_4",
.reg = 0xA4
},
{
.name = "lut_2_drive_5",
.reg = 0xA5
},
{
.name = "lut_2_temp_1_setting_5",
.reg = 0xA6
},
{
.name = "lut_2_temp_2_setting_5",
.reg = 0xA7
},
{
.name = "lut_2_temp_3_setting_5",
.reg = 0xA8
},
{
.name = "lut_2_temp_4_setting_5",
.reg = 0xA9
},
{
.name = "lut_2_drive_6",
.reg = 0xAA
},
{
.name = "lut_2_temp_1_setting_6",
.reg = 0xAB
},
{
.name = "lut_2_temp_2_setting_6",
.reg = 0xAC
},
{
.name = "lut_2_temp_3_setting_6",
.reg = 0xAD
},
{
.name = "lut_2_temp_4_setting_6",
.reg = 0xAE
},
{
.name = "lut_2_drive_7",
.reg = 0xAF
},
{
.name = "lut_2_temp_1_setting_6",
.reg = 0xB0
},
{
.name = "lut_2_temp_2_setting_6",
.reg = 0xB1
},
{
.name = "lut_2_temp_3setting_6",
.reg = 0xB2
},
{
.name = "lut_2_temp_4_setting_6",
.reg = 0xB3
},
{
.name = "lut_2_drive_8",
.reg = 0xB4
},
{
.name = "lut_2_temp_1_setting_8",
.reg = 0xB5
},
{
.name = "lut_2_temp_2_setting_8",
.reg = 0xB6
},
{
.name = "lut_2_temp_3_setting_8",
.reg = 0xB7
},
{
.name = "lut_2_temp_4_setting_8",
.reg = 0xB8
},
{
.name = "lut_2_temp_hysteresis",
.reg = 0xB9
},
{
.name = "muxed_pin_configuration_register",
.reg = 0xE0
},
{
.name = "gpio_direction_register",
.reg = 0xE1
},
{
.name = "gpio_output_configuration_register",
.reg = 0xE2
},
{
.name = "gpio_input_register",
.reg = 0xE3
},
{
.name = "gpio_output_register",
.reg = 0xE4
},
{
.name = "gpio_interrupt_enable_register",
.reg = 0xE5
},
{
.name = "gpio_status",
.reg = 0xE6
},
{
.name = "software_lock",
.reg = 0xEF
},
{
.name = "product_features",
.reg = 0xFC
},
{
.name = "product_id",
.reg = 0xFD
},
{
.name = "manufacturer_id",
.reg = 0xFE
},
{
.name = "revision",
.reg = 0xFF
}
};
static const struct emcfan_registers emcfanctl_230x_registers[] = {
{
.name = "configuration",
.reg = 0x20
},
{
.name = "fan_status",
.reg = 0x24
},
{
.name = "fan_stall_status",
.reg = 0x25
},
{
.name = "fan_spin_status",
.reg = 0x26
},
{
.name = "drive_fail_status",
.reg = 0x27
},
{
.name = "fan_interrupt_enable_register",
.reg = 0x29
},
{
.name = "pwm_polarity_config",
.reg = 0x2A
},
{
.name = "pwm_output_config",
.reg = 0x2B
},
{
.name = "pwm_basef45",
.reg = 0x2C
},
{
.name = "pwm_basef123",
.reg = 0x2D
},
{
.name = "fan_1_setting",
.reg = 0x30
},
{
.name = "pwm_1_divide",
.reg = 0x31
},
{
.name = "fan_1_configuration_1",
.reg = 0x32
},
{
.name = "fan_1_configuration_2",
.reg = 0x33
},
{
.name = "gain_1",
.reg = 0x35
},
{
.name = "fan_1_spin_up_configuration",
.reg = 0x36
},
{
.name = "fan_1_max_step",
.reg = 0x37
},
{
.name = "fan_1_minimum_drive",
.reg = 0x38
},
{
.name = "fan_1_valid_tach_count",
.reg = 0x39
},
{
.name = "fan_1_drive_fail_band_low_byte",
.reg = 0x3A
},
{
.name = "fan_1_drive_fail_band_high_byte",
.reg = 0x3B
},
{
.name = "tach_1_target_low_byte",
.reg = 0x3C
},
{
.name = "tach_1_target_high_byte",
.reg = 0x3D
},
{
.name = "tach_1_reading_high_byte",
.reg = 0x3E
},
{
.name = "tach_1_reading_low_byte",
.reg = 0x3F
},
{
.name = "fan_2_setting",
.reg = 0x40
},
{
.name = "pwm_2_divide",
.reg = 0x41
},
{
.name = "fan_2_configuration_1",
.reg = 0x42
},
{
.name = "fan_2_configuration_2",
.reg = 0x43
},
{
.name = "gain_2",
.reg = 0x45
},
{
.name = "fan_2_spin_up_configuration",
.reg = 0x46
},
{
.name = "fan_2_max_step",
.reg = 0x47
},
{
.name = "fan_2_minimum_drive",
.reg = 0x48
},
{
.name = "fan_2_valid_tach_count",
.reg = 0x49
},
{
.name = "fan_2_drive_fail_band_low_byte",
.reg = 0x4A
},
{
.name = "fan_2_drive_fail_band_high_byte",
.reg = 0x4B
},
{
.name = "tach_2_target_low_byte",
.reg = 0x4C
},
{
.name = "tach_2_target_high_byte",
.reg = 0x4D
},
{
.name = "tach_2_reading_high_byte",
.reg = 0x4E
},
{
.name = "tach_2_reading_low_byte",
.reg = 0x4F
},
{
.name = "fan_3_setting",
.reg = 0x50
},
{
.name = "pwm_3_divide",
.reg = 0x51
},
{
.name = "fan_3_configuration_1",
.reg = 0x52
},
{
.name = "fan_3_configuration_2",
.reg = 0x53
},
{
.name = "gain_3",
.reg = 0x55
},
{
.name = "fan_3_spin_up_configuration",
.reg = 0x56
},
{
.name = "fan_3_max_step",
.reg = 0x57
},
{
.name = "fan_3_minimum_drive",
.reg = 0x58
},
{
.name = "fan_3_valid_tach_count",
.reg = 0x59
},
{
.name = "fan_3_drive_fail_band_low_byte",
.reg = 0x5A
},
{
.name = "fan_3_drive_fail_band_high_byte",
.reg = 0x5B
},
{
.name = "tach_3_target_low_byte",
.reg = 0x5C
},
{
.name = "tach_3_target_high_byte",
.reg = 0x5D
},
{
.name = "tach_3_reading_high_byte",
.reg = 0x5E
},
{
.name = "tach_3_reading_low_byte",
.reg = 0x5F
},
{
.name = "fan_4_setting",
.reg = 0x60
},
{
.name = "pwm_4_divide",
.reg = 0x61
},
{
.name = "fan_4_configuration_1",
.reg = 0x62
},
{
.name = "fan_4_configuration_2",
.reg = 0x63
},
{
.name = "gain_4",
.reg = 0x65
},
{
.name = "fan_4_spin_up_configuration",
.reg = 0x66
},
{
.name = "fan_4_max_step",
.reg = 0x67
},
{
.name = "fan_4_minimum_drive",
.reg = 0x68
},
{
.name = "fan_4_valid_tach_count",
.reg = 0x69
},
{
.name = "fan_4_drive_fail_band_low_byte",
.reg = 0x6A
},
{
.name = "fan_4_drive_fail_band_high_byte",
.reg = 0x6B
},
{
.name = "tach_4_target_low_byte",
.reg = 0x6C
},
{
.name = "tach_4_target_high_byte",
.reg = 0x6D
},
{
.name = "tach_4_reading_high_byte",
.reg = 0x6E
},
{
.name = "tach_4_reading_low_byte",
.reg = 0x6F
},
{
.name = "fan_5_setting",
.reg = 0x70
},
{
.name = "pwm_5_divide",
.reg = 0x71
},
{
.name = "fan_5_configuration_1",
.reg = 0x72
},
{
.name = "fan_5_configuration_2",
.reg = 0x73
},
{
.name = "gain_5",
.reg = 0x75
},
{
.name = "fan_5_spin_up_configuration",
.reg = 0x76
},
{
.name = "fan_5_max_step",
.reg = 0x77
},
{
.name = "fan_5_minimum_drive",
.reg = 0x78
},
{
.name = "fan_5_valid_tach_count",
.reg = 0x79
},
{
.name = "fan_5_drive_fail_band_low_byte",
.reg = 0x7A
},
{
.name = "fan_5_drive_fail_band_high_byte",
.reg = 0x7B
},
{
.name = "tach_5_target_low_byte",
.reg = 0x7C
},
{
.name = "tach_5_target_high_byte",
.reg = 0x7D
},
{
.name = "tach_5_reading_high_byte",
.reg = 0x7E
},
{
.name = "tach_5_reading_low_byte",
.reg = 0x7F
},
{
.name = "software_lock",
.reg = 0xEF
},
{
.name = "product_features",
.reg = 0xFC
},
{
.name = "product_id",
.reg = 0xFD
},
{
.name = "manufacturer_id",
.reg = 0xFE
},
{
.name = "revision",
.reg = 0xFF
}
};
static const struct emcfan_bits_translate fan_polarity[] = {
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000001,
.bit_mask = 0b00000001,
.human_str = "inverted",
.instance = 0
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000001,
.bit_mask = 0b00000000,
.human_str = "non-inverted",
.instance = 0
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000010,
.bit_mask = 0b00000010,
.human_str = "inverted",
.instance = 1
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000010,
.bit_mask = 0b00000000,
.human_str = "non-inverted",
.instance = 1
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000100,
.bit_mask = 0b00000100,
.human_str = "inverted",
.instance = 2
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000100,
.bit_mask = 0b00000000,
.human_str = "non-inverted",
.instance = 2
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00001000,
.bit_mask = 0b00001000,
.human_str = "inverted",
.instance = 3
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00001000,
.bit_mask = 0b00000000,
.human_str = "non-inverted",
.instance = 3
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00010000,
.bit_mask = 0b00010000,
.human_str = "inverted",
.instance = 4
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00010000,
.bit_mask = 0b00000000,
.human_str = "non-inverted",
.instance = 4
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00010000,
.bit_mask = 0b00010000,
.human_str = "inverted",
.instance = 2101
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00010000,
.bit_mask = 0b00000000,
.human_str = "non-inverted",
.instance = 2101
}
};
static const struct emcfan_bits_translate fan_minexpectedrpm[] = {
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b01100000,
.bit_mask = 0b00000000,
.human_int = 500
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b01100000,
.bit_mask = 0b00100000,
.human_int = 1000
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b01100000,
.bit_mask = 0b01000000,
.human_int = 2000
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b01100000,
.bit_mask = 0b01100000,
.human_int = 4000
}
};
static const struct emcfan_bits_translate fan_numedges[] = {
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00011000,
.bit_mask = 0b00000000,
.human_int = 3
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00011000,
.bit_mask = 0b00001000,
.human_int = 5
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00011000,
.bit_mask = 0b00010000,
.human_int = 7
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00011000,
.bit_mask = 0b00011000,
.human_int = 9
}
};
static const struct emcfan_bits_translate fan_pwm_basefreq[] = {
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00000011,
.bit_mask = 0b00000000,
.human_int = 26000,
.instance = 0
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00000011,
.bit_mask = 0b00000001,
.human_int = 19531,
.instance = 0
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00000011,
.bit_mask = 0b00000010,
.human_int = 4882,
.instance = 0
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00000011,
.bit_mask = 0b00000011,
.human_int = 2441,
.instance = 0
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00001100,
.bit_mask = 0b00000000,
.human_int = 26000,
.instance = 1
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00001100,
.bit_mask = 0b00000100,
.human_int = 19531,
.instance = 1
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00001100,
.bit_mask = 0b00001000,
.human_int = 4882,
.instance = 1
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00001100,
.bit_mask = 0b00001100,
.human_int = 2441,
.instance = 1
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00110000,
.bit_mask = 0b00000000,
.human_int = 26000,
.instance = 2
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00110000,
.bit_mask = 0b00010000,
.human_int = 19531,
.instance = 2
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00110000,
.bit_mask = 0b00100000,
.human_int = 4882,
.instance = 2
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00110000,
.bit_mask = 0b00110000,
.human_int = 2441,
.instance = 2
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b11000000,
.bit_mask = 0b00000000,
.human_int = 26000,
.instance = 3
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b11000000,
.bit_mask = 0b01000000,
.human_int = 19531,
.instance = 3
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b11000000,
.bit_mask = 0b10000000,
.human_int = 4882,
.instance = 3
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b11000000,
.bit_mask = 0b11000000,
.human_int = 2441,
.instance = 3
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00000011,
.bit_mask = 0b00000000,
.human_int = 26000,
.instance = 23053
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00000011,
.bit_mask = 0b00000001,
.human_int = 19531,
.instance = 23053
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00000011,
.bit_mask = 0b00000010,
.human_int = 4882,
.instance = 23053
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00000011,
.bit_mask = 0b00000011,
.human_int = 2441,
.instance = 23053
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00001100,
.bit_mask = 0b00000000,
.human_int = 26000,
.instance = 23054
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00001100,
.bit_mask = 0b00000100,
.human_int = 19531,
.instance = 23054
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00001100,
.bit_mask = 0b00001000,
.human_int = 4882,
.instance = 23054
},
{
.type = EMCFAN_TRANSLATE_INT,
.clear_mask = 0b00001100,
.bit_mask = 0b00001100,
.human_int = 2441,
.instance = 23054
}
};
static const struct emcfan_bits_translate fan_pwm_output_type[] = {
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000001,
.bit_mask = 0b00000001,
.human_str = "push-pull",
.instance = 0
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000001,
.bit_mask = 0b00000000,
.human_str = "open-drain",
.instance = 0
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000010,
.bit_mask = 0b00000010,
.human_str = "push-pull",
.instance = 1
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000010,
.bit_mask = 0b00000000,
.human_str = "open-drain",
.instance = 1
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000100,
.bit_mask = 0b00000100,
.human_str = "push-pull",
.instance = 2
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000100,
.bit_mask = 0b00000000,
.human_str = "open-drain",
.instance = 2
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00001000,
.bit_mask = 0b00001000,
.human_str = "push-pull",
.instance = 3
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00001000,
.bit_mask = 0b00000000,
.human_str = "open-drain",
.instance = 3
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00010000,
.bit_mask = 0b00010000,
.human_str = "push-pull",
.instance = 4
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00010000,
.bit_mask = 0b00000000,
.human_str = "open-drain",
.instance = 4
}
};
static const struct emcfan_bits_translate smbus_timeout[] = {
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00001000,
.bit_mask = 0b00000000,
.human_str = "on",
.instance = 2101
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00001000,
.bit_mask = 0b00001000,
.human_str = "off",
.instance = 2101
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00100000,
.bit_mask = 0b00000000,
.human_str = "on",
.instance = 2103
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00100000,
.bit_mask = 0b00100000,
.human_str = "off",
.instance = 2103
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b01000000,
.bit_mask = 0b00000000,
.human_str = "on",
.instance = 2301
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b01000000,
.bit_mask = 0b01000000,
.human_str = "off",
.instance = 2301
}
};
static const struct emcfan_bits_translate apd[] = {
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000001,
.bit_mask = 0b00000001,
.human_str = "on"
},
{
.type = EMCFAN_TRANSLATE_STR,
.clear_mask = 0b00000001,
.bit_mask = 0b00000000,
.human_str = "off"
}
};
#endif