1 /* 2 * QTests for the ISL_PMBUS digital voltage regulators 3 * 4 * Copyright 2021 Google LLC 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the 8 * Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * for more details. 15 */ 16 17 #include "qemu/osdep.h" 18 #include <math.h> 19 #include "hw/i2c/pmbus_device.h" 20 #include "hw/sensor/isl_pmbus_vr.h" 21 #include "libqtest-single.h" 22 #include "libqos/qgraph.h" 23 #include "libqos/i2c.h" 24 #include "qapi/qmp/qdict.h" 25 #include "qapi/qmp/qnum.h" 26 #include "qemu/bitops.h" 27 28 #define TEST_ID "isl_pmbus_vr-test" 29 #define TEST_ADDR (0x43) 30 31 static uint16_t qmp_isl_pmbus_vr_get(const char *id, const char *property) 32 { 33 QDict *response; 34 uint64_t ret; 35 36 response = qmp("{ 'execute': 'qom-get', 'arguments': { 'path': %s, " 37 "'property': %s } }", id, property); 38 g_assert(qdict_haskey(response, "return")); 39 ret = qnum_get_uint(qobject_to(QNum, qdict_get(response, "return"))); 40 qobject_unref(response); 41 return ret; 42 } 43 44 static void qmp_isl_pmbus_vr_set(const char *id, 45 const char *property, 46 uint16_t value) 47 { 48 QDict *response; 49 50 response = qmp("{ 'execute': 'qom-set', 'arguments': { 'path': %s, " 51 "'property': %s, 'value': %u } }", id, property, value); 52 g_assert(qdict_haskey(response, "return")); 53 qobject_unref(response); 54 } 55 56 /* PMBus commands are little endian vs i2c_set16 in i2c.h which is big endian */ 57 static uint16_t isl_pmbus_vr_i2c_get16(QI2CDevice *i2cdev, uint8_t reg) 58 { 59 uint8_t resp[2]; 60 i2c_read_block(i2cdev, reg, resp, sizeof(resp)); 61 return (resp[1] << 8) | resp[0]; 62 } 63 64 /* PMBus commands are little endian vs i2c_set16 in i2c.h which is big endian */ 65 static void isl_pmbus_vr_i2c_set16(QI2CDevice *i2cdev, uint8_t reg, 66 uint16_t value) 67 { 68 uint8_t data[2]; 69 70 data[0] = value & 255; 71 data[1] = value >> 8; 72 i2c_write_block(i2cdev, reg, data, sizeof(data)); 73 } 74 75 static void test_defaults(void *obj, void *data, QGuestAllocator *alloc) 76 { 77 uint16_t value, i2c_value; 78 QI2CDevice *i2cdev = (QI2CDevice *)obj; 79 80 value = qmp_isl_pmbus_vr_get(TEST_ID, "vout[0]"); 81 g_assert_cmpuint(value, ==, ISL_READ_VOUT_DEFAULT); 82 83 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_IOUT); 84 g_assert_cmpuint(i2c_value, ==, ISL_READ_IOUT_DEFAULT); 85 86 value = qmp_isl_pmbus_vr_get(TEST_ID, "pout[0]"); 87 g_assert_cmpuint(value, ==, ISL_READ_POUT_DEFAULT); 88 89 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_VIN); 90 g_assert_cmpuint(i2c_value, ==, ISL_READ_VIN_DEFAULT); 91 92 value = qmp_isl_pmbus_vr_get(TEST_ID, "iin[0]"); 93 g_assert_cmpuint(value, ==, ISL_READ_IIN_DEFAULT); 94 95 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_PIN); 96 g_assert_cmpuint(i2c_value, ==, ISL_READ_PIN_DEFAULT); 97 98 value = qmp_isl_pmbus_vr_get(TEST_ID, "temp1[0]"); 99 g_assert_cmpuint(value, ==, ISL_READ_TEMP_DEFAULT); 100 101 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_2); 102 g_assert_cmpuint(i2c_value, ==, ISL_READ_TEMP_DEFAULT); 103 104 i2c_value = i2c_get8(i2cdev, PMBUS_CAPABILITY); 105 g_assert_cmphex(i2c_value, ==, ISL_CAPABILITY_DEFAULT); 106 107 i2c_value = i2c_get8(i2cdev, PMBUS_OPERATION); 108 g_assert_cmphex(i2c_value, ==, ISL_OPERATION_DEFAULT); 109 110 i2c_value = i2c_get8(i2cdev, PMBUS_ON_OFF_CONFIG); 111 g_assert_cmphex(i2c_value, ==, ISL_ON_OFF_CONFIG_DEFAULT); 112 113 i2c_value = i2c_get8(i2cdev, PMBUS_VOUT_MODE); 114 g_assert_cmphex(i2c_value, ==, ISL_VOUT_MODE_DEFAULT); 115 116 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_COMMAND); 117 g_assert_cmphex(i2c_value, ==, ISL_VOUT_COMMAND_DEFAULT); 118 119 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_MAX); 120 g_assert_cmphex(i2c_value, ==, ISL_VOUT_MAX_DEFAULT); 121 122 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_MARGIN_HIGH); 123 g_assert_cmphex(i2c_value, ==, ISL_VOUT_MARGIN_HIGH_DEFAULT); 124 125 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_MARGIN_LOW); 126 g_assert_cmphex(i2c_value, ==, ISL_VOUT_MARGIN_LOW_DEFAULT); 127 128 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_TRANSITION_RATE); 129 g_assert_cmphex(i2c_value, ==, ISL_VOUT_TRANSITION_RATE_DEFAULT); 130 131 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_OV_FAULT_LIMIT); 132 g_assert_cmphex(i2c_value, ==, ISL_VOUT_OV_FAULT_LIMIT_DEFAULT); 133 134 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_OT_FAULT_LIMIT); 135 g_assert_cmphex(i2c_value, ==, ISL_OT_FAULT_LIMIT_DEFAULT); 136 137 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_OT_WARN_LIMIT); 138 g_assert_cmphex(i2c_value, ==, ISL_OT_WARN_LIMIT_DEFAULT); 139 140 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VIN_OV_WARN_LIMIT); 141 g_assert_cmphex(i2c_value, ==, ISL_VIN_OV_WARN_LIMIT_DEFAULT); 142 143 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VIN_UV_WARN_LIMIT); 144 g_assert_cmphex(i2c_value, ==, ISL_VIN_UV_WARN_LIMIT_DEFAULT); 145 146 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_IIN_OC_FAULT_LIMIT); 147 g_assert_cmphex(i2c_value, ==, ISL_IIN_OC_FAULT_LIMIT_DEFAULT); 148 149 i2c_value = i2c_get8(i2cdev, PMBUS_REVISION); 150 g_assert_cmphex(i2c_value, ==, ISL_REVISION_DEFAULT); 151 } 152 153 /* test qmp access */ 154 static void test_tx_rx(void *obj, void *data, QGuestAllocator *alloc) 155 { 156 uint16_t i2c_value, value; 157 QI2CDevice *i2cdev = (QI2CDevice *)obj; 158 159 qmp_isl_pmbus_vr_set(TEST_ID, "vin[0]", 200); 160 value = qmp_isl_pmbus_vr_get(TEST_ID, "vin[0]"); 161 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_VIN); 162 g_assert_cmpuint(value, ==, i2c_value); 163 164 qmp_isl_pmbus_vr_set(TEST_ID, "vout[0]", 2500); 165 value = qmp_isl_pmbus_vr_get(TEST_ID, "vout[0]"); 166 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_VOUT); 167 g_assert_cmpuint(value, ==, i2c_value); 168 169 qmp_isl_pmbus_vr_set(TEST_ID, "iin[0]", 300); 170 value = qmp_isl_pmbus_vr_get(TEST_ID, "iin[0]"); 171 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_IIN); 172 g_assert_cmpuint(value, ==, i2c_value); 173 174 qmp_isl_pmbus_vr_set(TEST_ID, "iout[0]", 310); 175 value = qmp_isl_pmbus_vr_get(TEST_ID, "iout[0]"); 176 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_IOUT); 177 g_assert_cmpuint(value, ==, i2c_value); 178 179 qmp_isl_pmbus_vr_set(TEST_ID, "pin[0]", 100); 180 value = qmp_isl_pmbus_vr_get(TEST_ID, "pin[0]"); 181 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_PIN); 182 g_assert_cmpuint(value, ==, i2c_value); 183 184 qmp_isl_pmbus_vr_set(TEST_ID, "pout[0]", 95); 185 value = qmp_isl_pmbus_vr_get(TEST_ID, "pout[0]"); 186 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_POUT); 187 g_assert_cmpuint(value, ==, i2c_value); 188 189 qmp_isl_pmbus_vr_set(TEST_ID, "temp1[0]", 26); 190 value = qmp_isl_pmbus_vr_get(TEST_ID, "temp1[0]"); 191 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_1); 192 g_assert_cmpuint(value, ==, i2c_value); 193 194 qmp_isl_pmbus_vr_set(TEST_ID, "temp2[0]", 27); 195 value = qmp_isl_pmbus_vr_get(TEST_ID, "temp2[0]"); 196 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_2); 197 g_assert_cmpuint(value, ==, i2c_value); 198 199 qmp_isl_pmbus_vr_set(TEST_ID, "temp3[0]", 28); 200 value = qmp_isl_pmbus_vr_get(TEST_ID, "temp3[0]"); 201 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_3); 202 g_assert_cmpuint(value, ==, i2c_value); 203 204 } 205 206 /* test r/w registers */ 207 static void test_rw_regs(void *obj, void *data, QGuestAllocator *alloc) 208 { 209 uint16_t i2c_value; 210 QI2CDevice *i2cdev = (QI2CDevice *)obj; 211 212 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_COMMAND, 0x1234); 213 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_COMMAND); 214 g_assert_cmphex(i2c_value, ==, 0x1234); 215 216 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_TRIM, 0x4567); 217 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_TRIM); 218 g_assert_cmphex(i2c_value, ==, 0x4567); 219 220 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_MAX, 0x9876); 221 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_MAX); 222 g_assert_cmphex(i2c_value, ==, 0x9876); 223 224 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_MARGIN_HIGH, 0xABCD); 225 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_MARGIN_HIGH); 226 g_assert_cmphex(i2c_value, ==, 0xABCD); 227 228 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_MARGIN_LOW, 0xA1B2); 229 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_MARGIN_LOW); 230 g_assert_cmphex(i2c_value, ==, 0xA1B2); 231 232 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_TRANSITION_RATE, 0xDEF1); 233 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_TRANSITION_RATE); 234 g_assert_cmphex(i2c_value, ==, 0xDEF1); 235 236 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_DROOP, 0x5678); 237 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_DROOP); 238 g_assert_cmphex(i2c_value, ==, 0x5678); 239 240 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_MIN, 0x1234); 241 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_MIN); 242 g_assert_cmphex(i2c_value, ==, 0x1234); 243 244 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_OV_FAULT_LIMIT, 0x2345); 245 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_OV_FAULT_LIMIT); 246 g_assert_cmphex(i2c_value, ==, 0x2345); 247 248 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_UV_FAULT_LIMIT, 0xFA12); 249 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VOUT_UV_FAULT_LIMIT); 250 g_assert_cmphex(i2c_value, ==, 0xFA12); 251 252 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_OT_FAULT_LIMIT, 0xF077); 253 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_OT_FAULT_LIMIT); 254 g_assert_cmphex(i2c_value, ==, 0xF077); 255 256 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_OT_WARN_LIMIT, 0x7137); 257 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_OT_WARN_LIMIT); 258 g_assert_cmphex(i2c_value, ==, 0x7137); 259 260 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VIN_OV_FAULT_LIMIT, 0x3456); 261 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VIN_OV_FAULT_LIMIT); 262 g_assert_cmphex(i2c_value, ==, 0x3456); 263 264 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VIN_UV_FAULT_LIMIT, 0xBADA); 265 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_VIN_UV_FAULT_LIMIT); 266 g_assert_cmphex(i2c_value, ==, 0xBADA); 267 268 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_IIN_OC_FAULT_LIMIT, 0xB1B0); 269 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_IIN_OC_FAULT_LIMIT); 270 g_assert_cmphex(i2c_value, ==, 0xB1B0); 271 272 i2c_set8(i2cdev, PMBUS_OPERATION, 0xA); 273 i2c_value = i2c_get8(i2cdev, PMBUS_OPERATION); 274 g_assert_cmphex(i2c_value, ==, 0xA); 275 276 i2c_set8(i2cdev, PMBUS_ON_OFF_CONFIG, 0x42); 277 i2c_value = i2c_get8(i2cdev, PMBUS_ON_OFF_CONFIG); 278 g_assert_cmphex(i2c_value, ==, 0x42); 279 } 280 281 /* test that devices with multiple pages can switch between them */ 282 static void test_pages_rw(void *obj, void *data, QGuestAllocator *alloc) 283 { 284 uint16_t i2c_value; 285 QI2CDevice *i2cdev = (QI2CDevice *)obj; 286 287 i2c_set8(i2cdev, PMBUS_PAGE, 1); 288 i2c_value = i2c_get8(i2cdev, PMBUS_PAGE); 289 g_assert_cmphex(i2c_value, ==, 1); 290 291 i2c_set8(i2cdev, PMBUS_PAGE, 0); 292 i2c_value = i2c_get8(i2cdev, PMBUS_PAGE); 293 g_assert_cmphex(i2c_value, ==, 0); 294 } 295 296 /* test read-only registers */ 297 static void test_ro_regs(void *obj, void *data, QGuestAllocator *alloc) 298 { 299 uint16_t i2c_init_value, i2c_value; 300 QI2CDevice *i2cdev = (QI2CDevice *)obj; 301 302 i2c_init_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_VIN); 303 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_READ_VIN, 0xBEEF); 304 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_VIN); 305 g_assert_cmphex(i2c_init_value, ==, i2c_value); 306 307 i2c_init_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_IIN); 308 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_READ_IIN, 0xB00F); 309 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_IIN); 310 g_assert_cmphex(i2c_init_value, ==, i2c_value); 311 312 i2c_init_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_VOUT); 313 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_READ_VOUT, 0x1234); 314 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_VOUT); 315 g_assert_cmphex(i2c_init_value, ==, i2c_value); 316 317 i2c_init_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_IOUT); 318 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_READ_IOUT, 0x6547); 319 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_IOUT); 320 g_assert_cmphex(i2c_init_value, ==, i2c_value); 321 322 i2c_init_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_1); 323 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_READ_TEMPERATURE_1, 0x1597); 324 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_1); 325 g_assert_cmphex(i2c_init_value, ==, i2c_value); 326 327 i2c_init_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_2); 328 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_READ_TEMPERATURE_2, 0x1897); 329 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_2); 330 g_assert_cmphex(i2c_init_value, ==, i2c_value); 331 332 i2c_init_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_3); 333 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_READ_TEMPERATURE_3, 0x1007); 334 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_TEMPERATURE_3); 335 g_assert_cmphex(i2c_init_value, ==, i2c_value); 336 337 i2c_init_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_PIN); 338 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_READ_PIN, 0xDEAD); 339 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_PIN); 340 g_assert_cmphex(i2c_init_value, ==, i2c_value); 341 342 i2c_init_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_POUT); 343 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_READ_POUT, 0xD00D); 344 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_READ_POUT); 345 g_assert_cmphex(i2c_init_value, ==, i2c_value); 346 } 347 348 /* test voltage fault handling */ 349 static void test_voltage_faults(void *obj, void *data, QGuestAllocator *alloc) 350 { 351 uint16_t i2c_value; 352 uint8_t i2c_byte; 353 QI2CDevice *i2cdev = (QI2CDevice *)obj; 354 355 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_OV_WARN_LIMIT, 5000); 356 qmp_isl_pmbus_vr_set(TEST_ID, "vout[0]", 5100); 357 358 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_STATUS_WORD); 359 i2c_byte = i2c_get8(i2cdev, PMBUS_STATUS_VOUT); 360 g_assert_true((i2c_value & PB_STATUS_VOUT) != 0); 361 g_assert_true((i2c_byte & PB_STATUS_VOUT_OV_WARN) != 0); 362 363 qmp_isl_pmbus_vr_set(TEST_ID, "vout[0]", 4500); 364 i2c_set8(i2cdev, PMBUS_CLEAR_FAULTS, 0); 365 i2c_byte = i2c_get8(i2cdev, PMBUS_STATUS_VOUT); 366 g_assert_true((i2c_byte & PB_STATUS_VOUT_OV_WARN) == 0); 367 368 isl_pmbus_vr_i2c_set16(i2cdev, PMBUS_VOUT_UV_WARN_LIMIT, 4600); 369 370 i2c_value = isl_pmbus_vr_i2c_get16(i2cdev, PMBUS_STATUS_WORD); 371 i2c_byte = i2c_get8(i2cdev, PMBUS_STATUS_VOUT); 372 g_assert_true((i2c_value & PB_STATUS_VOUT) != 0); 373 g_assert_true((i2c_byte & PB_STATUS_VOUT_UV_WARN) != 0); 374 375 } 376 377 static void isl_pmbus_vr_register_nodes(void) 378 { 379 QOSGraphEdgeOptions opts = { 380 .extra_device_opts = "id=" TEST_ID ",address=0x43" 381 }; 382 add_qi2c_address(&opts, &(QI2CAddress) { TEST_ADDR }); 383 384 qos_node_create_driver("isl69260", i2c_device_create); 385 qos_node_consumes("isl69260", "i2c-bus", &opts); 386 387 qos_add_test("test_defaults", "isl69260", test_defaults, NULL); 388 qos_add_test("test_tx_rx", "isl69260", test_tx_rx, NULL); 389 qos_add_test("test_rw_regs", "isl69260", test_rw_regs, NULL); 390 qos_add_test("test_pages_rw", "isl69260", test_pages_rw, NULL); 391 qos_add_test("test_ro_regs", "isl69260", test_ro_regs, NULL); 392 qos_add_test("test_ov_faults", "isl69260", test_voltage_faults, NULL); 393 } 394 libqos_init(isl_pmbus_vr_register_nodes); 395