/*      $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