Lines Matching +full:reg +full:- +full:addr

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
80 uint8_t reg; member
85 uint8_t reg; member
93 static int ds1631_read_1(device_t dev, uint32_t addr, uint8_t reg,
95 static int ds1631_read_2(device_t dev, uint32_t addr, uint8_t reg,
97 static int ds1631_write(device_t dev, uint32_t addr, uint8_t reg,
116 ds1631_write(device_t dev, uint32_t addr, uint8_t reg, uint8_t *buff, int len) in ds1631_write() argument
122 { addr, IIC_M_WR, 0, buf } in ds1631_write()
127 buf[0] = reg; in ds1631_write()
136 return (-1); in ds1631_write()
143 ds1631_read_1(device_t dev, uint32_t addr, uint8_t reg, uint8_t *data) in ds1631_read_1() argument
149 { addr, IIC_M_WR, 1, &reg }, in ds1631_read_1()
150 { addr, IIC_M_RD, 1, buf }, in ds1631_read_1()
164 return (-1); in ds1631_read_1()
171 ds1631_read_2(device_t dev, uint32_t addr, uint8_t reg, uint16_t *data) in ds1631_read_2() argument
177 { addr, IIC_M_WR, 1, &reg }, in ds1631_read_2()
178 { addr, IIC_M_RD, 2, buf }, in ds1631_read_2()
192 return (-1); in ds1631_read_2()
210 if (strcmp(name, "temp-monitor") != 0 || in ds1631_probe()
215 sc->sc_dev = dev; in ds1631_probe()
216 sc->sc_addr = iicbus_get_addr(dev); in ds1631_probe()
218 device_set_desc(dev, "Temp-Monitor DS1631"); in ds1631_probe()
230 sc->enum_hook.ich_func = ds1631_start; in ds1631_attach()
231 sc->enum_hook.ich_arg = dev; in ds1631_attach()
237 * the master. The openpic on mac-io is controlling the htpic. in ds1631_attach()
238 * This one gets attached after the mac-io probing and then the in ds1631_attach()
242 if (config_intrhook_establish(&sc->enum_hook) != 0) in ds1631_attach()
248 ds1631_init(device_t dev, uint32_t addr) in ds1631_init() argument
256 err = ds1631_read_1(dev, addr, DS1631_CONTROL, &conf); in ds1631_init()
259 return (-1); in ds1631_init()
264 err = ds1631_write(dev, addr, DS1631_STOP, &conf, 0); in ds1631_init()
267 * Setup the resolution, 10-bit is enough. Each bit increase in in ds1631_init()
272 err = ds1631_write(dev, addr, DS1631_CONTROL, &conf, sizeof(conf)); in ds1631_init()
275 return (-1); in ds1631_init()
279 err = ds1631_write(dev, addr, DS1631_START, &conf, 0); in ds1631_init()
283 return (-1); in ds1631_init()
286 sc->init_done = 1; in ds1631_init()
313 if (OF_getprop(child, "hwsensor-zone", &sc->sc_sensor.zone, in ds1631_start()
315 sc->sc_sensor.zone = 0; in ds1631_start()
317 plen = OF_getprop(child, "hwsensor-location", sc->sc_sensor.name, in ds1631_start()
318 sizeof(sc->sc_sensor.name)); in ds1631_start()
319 if (plen == -1) { in ds1631_start()
321 * Ok, no hwsensor-location property, so let's look for a in ds1631_start()
325 plen = OF_getprop(node, "location", sc->sc_sensor.name, in ds1631_start()
326 sizeof(sc->sc_sensor.name)); in ds1631_start()
329 if (plen == -1) { in ds1631_start()
332 for (i = 0; i < strlen(sc->sc_sensor.name); i++) { in ds1631_start()
333 sysctl_name[i] = tolower(sc->sc_sensor.name[i]); in ds1631_start()
341 if (sc->sc_sensor.zone == 0) { in ds1631_start()
342 sc->sc_sensor.target_temp = 400 + ZERO_C_TO_K; in ds1631_start()
343 sc->sc_sensor.max_temp = 500 + ZERO_C_TO_K; in ds1631_start()
345 sc->sc_sensor.target_temp = 300 + ZERO_C_TO_K; in ds1631_start()
346 sc->sc_sensor.max_temp = 500 + ZERO_C_TO_K; in ds1631_start()
349 sc->sc_sensor.read = in ds1631_start()
351 pmac_thermal_sensor_register(&sc->sc_sensor); in ds1631_start()
353 sprintf(sysctl_desc,"%s %s", sc->sc_sensor.name, "(C)"); in ds1631_start()
361 config_intrhook_disestablish(&sc->enum_hook); in ds1631_start()
371 if (!sc->init_done) in ds1631_sensor_read()
372 ds1631_init(sc->sc_dev, sc->sc_addr); in ds1631_sensor_read()
374 err = ds1631_read_2(sc->sc_dev, sc->sc_addr, DS1631_TEMP, buf); in ds1631_sensor_read()
376 device_printf(sc->sc_dev, "ds1631 read TEMP failed: %x\n", err); in ds1631_sensor_read()
377 return (-1); in ds1631_sensor_read()
383 * The default mode of the ADC is 12-bit, the resolution is 0.0625 C in ds1631_sensor_read()
385 * We use 10-bit resolution which seems enough, resolution is 0.25 C. in ds1631_sensor_read()