1 1.18 thorpej /* $NetBSD: dbcool_var.h,v 1.18 2025/09/21 13:54:56 thorpej Exp $ */ 2 1.1 pgoyette 3 1.1 pgoyette /*- 4 1.1 pgoyette * Copyright (c) 2008 The NetBSD Foundation, Inc. 5 1.1 pgoyette * All rights reserved. 6 1.1 pgoyette * 7 1.1 pgoyette * This code is derived from software contributed to The NetBSD Foundation 8 1.1 pgoyette * by Paul Goyette 9 1.1 pgoyette * 10 1.1 pgoyette * Redistribution and use in source and binary forms, with or without 11 1.1 pgoyette * modification, are permitted provided that the following conditions 12 1.1 pgoyette * are met: 13 1.1 pgoyette * 1. Redistributions of source code must retain the above copyright 14 1.1 pgoyette * notice, this list of conditions and the following disclaimer. 15 1.1 pgoyette * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 pgoyette * notice, this list of conditions and the following disclaimer in the 17 1.1 pgoyette * documentation and/or other materials provided with the distribution. 18 1.1 pgoyette * 19 1.1 pgoyette * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 pgoyette * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 pgoyette * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 pgoyette * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 pgoyette * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 pgoyette * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 pgoyette * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 pgoyette * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 pgoyette * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 pgoyette * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 pgoyette * POSSIBILITY OF SUCH DAMAGE. 30 1.1 pgoyette */ 31 1.1 pgoyette 32 1.1 pgoyette /* 33 1.1 pgoyette * A driver for dbCool(tm) family of environmental controllers 34 1.1 pgoyette */ 35 1.1 pgoyette 36 1.1 pgoyette #ifndef DBCOOLVAR_H 37 1.1 pgoyette #define DBCOOLVAR_H 38 1.1 pgoyette 39 1.13 pgoyette #ifdef DEBUG 40 1.1 pgoyette #define DBCOOL_DEBUG 41 1.13 pgoyette #endif 42 1.1 pgoyette 43 1.16 rin #include <sys/cdefs.h> 44 1.18 thorpej __KERNEL_RCSID(0, "$NetBSD: dbcool_var.h,v 1.18 2025/09/21 13:54:56 thorpej Exp $"); 45 1.16 rin 46 1.1 pgoyette #include <dev/i2c/i2cvar.h> 47 1.1 pgoyette 48 1.1 pgoyette #include <dev/sysmon/sysmonvar.h> 49 1.1 pgoyette 50 1.1 pgoyette #include <dev/i2c/dbcool_reg.h> 51 1.1 pgoyette 52 1.1 pgoyette enum dbc_pwm_params { 53 1.1 pgoyette DBC_PWM_BEHAVIOR = 0, 54 1.1 pgoyette DBC_PWM_MIN_DUTY, 55 1.1 pgoyette DBC_PWM_MAX_DUTY, 56 1.1 pgoyette DBC_PWM_CUR_DUTY, 57 1.1 pgoyette DBC_PWM_LAST_PARAM 58 1.1 pgoyette }; 59 1.1 pgoyette 60 1.1 pgoyette enum dbc_sensor_type { 61 1.1 pgoyette DBC_CTL = 0, 62 1.1 pgoyette DBC_TEMP, 63 1.1 pgoyette DBC_VOLT, 64 1.1 pgoyette DBC_FAN, 65 1.9 pgoyette DBC_VID, 66 1.1 pgoyette DBC_EOF 67 1.1 pgoyette }; 68 1.1 pgoyette 69 1.1 pgoyette #define DBCFLAG_TEMPOFFSET 0x0001 70 1.1 pgoyette #define DBCFLAG_HAS_MAXDUTY 0x0002 71 1.1 pgoyette #define DBCFLAG_HAS_SHDN 0x0004 72 1.1 pgoyette #define DBCFLAG_MULTI_VCC 0x0008 73 1.1 pgoyette #define DBCFLAG_4BIT_VER 0x0010 74 1.9 pgoyette #define DBCFLAG_OBSOLETE 0x0020 /* was DBCFLAG_HAS_VID */ 75 1.1 pgoyette #define DBCFLAG_HAS_VID_SEL 0x0040 76 1.2 pgoyette #define DBCFLAG_HAS_PECI 0x0080 77 1.9 pgoyette #define DBCFLAG_NO_READBYTE 0x1000 78 1.1 pgoyette #define DBCFLAG_ADM1030 0x2000 79 1.1 pgoyette #define DBCFLAG_ADT7466 0x4000 80 1.1 pgoyette 81 1.1 pgoyette /* Maximum sensors for any dbCool device */ 82 1.9 pgoyette #define DBCOOL_MAXSENSORS 16 83 1.1 pgoyette 84 1.1 pgoyette struct reg_list { 85 1.1 pgoyette uint8_t val_reg; 86 1.1 pgoyette uint8_t hi_lim_reg; 87 1.1 pgoyette uint8_t lo_lim_reg; 88 1.1 pgoyette }; 89 1.1 pgoyette 90 1.1 pgoyette struct dbcool_sensor { 91 1.1 pgoyette enum dbc_sensor_type type; 92 1.1 pgoyette struct reg_list reg; 93 1.1 pgoyette int name_index; 94 1.1 pgoyette int sysctl_index; 95 1.2 pgoyette int nom_volt_index; 96 1.1 pgoyette }; 97 1.1 pgoyette 98 1.1 pgoyette /* 99 1.1 pgoyette * The members of dbcool_power_control need to stay in the same order 100 1.1 pgoyette * as the enum dbc_pwm_params above 101 1.1 pgoyette */ 102 1.1 pgoyette struct dbcool_power_control { 103 1.2 pgoyette uint8_t power_regs[DBC_PWM_LAST_PARAM]; 104 1.1 pgoyette const char *desc; 105 1.1 pgoyette }; 106 1.1 pgoyette 107 1.1 pgoyette struct chip_id; 108 1.1 pgoyette 109 1.6 christos struct dbcool_chipset { 110 1.6 christos i2c_tag_t dc_tag; 111 1.6 christos i2c_addr_t dc_addr; 112 1.6 christos void (*dc_writereg)(struct dbcool_chipset *, uint8_t, uint8_t); 113 1.6 christos uint8_t (*dc_readreg)(struct dbcool_chipset *, uint8_t); 114 1.6 christos struct chip_id *dc_chip; 115 1.6 christos }; 116 1.6 christos 117 1.1 pgoyette struct dbcool_softc { 118 1.5 cegger device_t sc_dev; 119 1.1 pgoyette struct sysmon_envsys *sc_sme; 120 1.6 christos struct dbcool_chipset sc_dc; 121 1.1 pgoyette envsys_data_t sc_sensor[DBCOOL_MAXSENSORS]; 122 1.12 pgoyette sysmon_envsys_lim_t sc_deflims[DBCOOL_MAXSENSORS]; 123 1.12 pgoyette uint32_t sc_defprops[DBCOOL_MAXSENSORS]; 124 1.11 pgoyette int sc_root_sysctl_num; 125 1.1 pgoyette int sc_sysctl_num[DBCOOL_MAXSENSORS]; 126 1.1 pgoyette struct reg_list *sc_regs[DBCOOL_MAXSENSORS]; 127 1.2 pgoyette int sc_nom_volt[DBCOOL_MAXSENSORS]; 128 1.2 pgoyette int sc_temp_offset; 129 1.2 pgoyette int64_t sc_supply_voltage; 130 1.2 pgoyette bool sc_suspend; 131 1.14 pgoyette struct sysctllog *sc_sysctl_log; 132 1.1 pgoyette #ifdef DBCOOL_DEBUG 133 1.1 pgoyette uint8_t sc_user_reg; 134 1.1 pgoyette #endif 135 1.1 pgoyette }; 136 1.1 pgoyette 137 1.1 pgoyette struct chip_id { 138 1.1 pgoyette uint8_t company; 139 1.1 pgoyette uint8_t device; 140 1.1 pgoyette uint8_t rev; 141 1.1 pgoyette struct dbcool_sensor *table; 142 1.1 pgoyette struct dbcool_power_control *power; 143 1.1 pgoyette int flags; 144 1.1 pgoyette int rpm_dividend; 145 1.1 pgoyette const char *name; 146 1.1 pgoyette }; 147 1.1 pgoyette 148 1.1 pgoyette /* 149 1.1 pgoyette * Expose some routines for the macppc's ki2c match/attach routines 150 1.1 pgoyette */ 151 1.6 christos uint8_t dbcool_readreg(struct dbcool_chipset *, uint8_t); 152 1.6 christos void dbcool_writereg(struct dbcool_chipset *, uint8_t, uint8_t); 153 1.1 pgoyette void dbcool_setup(device_t); 154 1.6 christos int dbcool_chip_ident(struct dbcool_chipset *); 155 1.8 dyoung bool dbcool_pmf_suspend(device_t, const pmf_qual_t *); 156 1.8 dyoung bool dbcool_pmf_resume(device_t, const pmf_qual_t *); 157 1.1 pgoyette 158 1.1 pgoyette #endif /* def DBCOOLVAR_H */ 159