Lines Matching +full:one +full:- +full:shot
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * lm75.c - Part of lm_sensors, Linux kernel modules for hardware
14 #include <linux/hwmon-sysfs.h>
56 * struct lm75_params - lm75 configuration parameters.
73 * than one.
114 /*-----------------------------------------------------------------------*/
121 * In case of being supported multiple configurations, the default one must
126 .clr_mask = 1 << 5, /* not one-shot mode */
132 .set_mask = 2 << 5, /* 11-bit mode */
141 .set_mask = 2 << 5, /* 11-bit mode */
150 .set_mask = 2 << 5, /* 11-bit mode */
162 .set_mask = 3 << 5, /* 12-bit mode*/
212 .set_mask = 3 << 5, /* 12-bit mode */
213 .clr_mask = 1 << 7, /* not one-shot mode */
222 .set_mask = 3 << 5, /* 12-bit mode */
223 .clr_mask = 1 << 7, /* not one-shot mode */
231 .set_mask = 3 << 5, /* 12-bit mode */
232 .clr_mask = 1 << 7, /* not one-shot mode */
240 .set_mask = 3 << 5, /* 12-bit mode */
241 .clr_mask = 1 << 7, /* not one-shot mode*/
250 .clr_mask = 1 << 7, /* no one-shot mode*/
257 .set_mask = 3 << 5, /* 12-bit mode */
258 .clr_mask = 1 << 7, /* not one-shot mode*/
266 .set_mask = 3 << 5, /* 12-bit mode */
267 .clr_mask = 1 << 7, /* not one-shot mode*/
275 .set_mask = 3 << 5, /* 12-bit mode */
276 .clr_mask = 1 << 7, /* not one-shot mode*/
283 [tmp75b] = { /* not one-shot mode, Conversion rate 37Hz */
293 .clr_mask = 1 << 5, /*not one-shot mode*/
301 return ((temp >> (16 - resolution)) * 1000) >> (resolution - 8); in lm75_reg_to_mc()
310 value = data->current_conf & ~clr_mask; in lm75_write_config()
313 if (data->current_conf != value) { in lm75_write_config()
316 err = i2c_smbus_write_byte_data(data->client, LM75_REG_CONF, in lm75_write_config()
320 data->current_conf = value; in lm75_write_config()
336 *val = data->sample_time; in lm75_read()
339 return -EINVAL; in lm75_read()
354 return -EINVAL; in lm75_read()
356 err = regmap_read(data->regmap, reg, ®val); in lm75_read()
360 *val = lm75_reg_to_mc(regval, data->resolution); in lm75_read()
363 return -EINVAL; in lm75_read()
382 return -EINVAL; in lm75_write_temp()
389 if (data->params->resolution_limits) in lm75_write_temp()
390 resolution = data->params->resolution_limits; in lm75_write_temp()
392 resolution = data->resolution; in lm75_write_temp()
395 temp = DIV_ROUND_CLOSEST(temp << (resolution - 8), in lm75_write_temp()
396 1000) << (16 - resolution); in lm75_write_temp()
398 return regmap_write(data->regmap, reg, (u16)temp); in lm75_write_temp()
408 index = find_closest(val, data->params->sample_times, in lm75_update_interval()
409 (int)data->params->num_sample_times); in lm75_update_interval()
411 switch (data->kind) { in lm75_update_interval()
418 data->sample_time = data->params->sample_times[index]; in lm75_update_interval()
419 if (data->params->resolutions) in lm75_update_interval()
420 data->resolution = data->params->resolutions[index]; in lm75_update_interval()
423 err = regmap_read(data->regmap, LM75_REG_CONF, ®); in lm75_update_interval()
427 reg |= (3 - index) << 6; in lm75_update_interval()
428 err = regmap_write(data->regmap, LM75_REG_CONF, reg); in lm75_update_interval()
431 data->sample_time = data->params->sample_times[index]; in lm75_update_interval()
434 err = i2c_smbus_write_byte_data(data->client, PCT2075_REG_IDLE, in lm75_update_interval()
438 data->sample_time = data->params->sample_times[index]; in lm75_update_interval()
450 return -EINVAL; in lm75_write_chip()
464 return -EINVAL; in lm75_write()
478 if (config_data->params->num_sample_times > 1) in lm75_is_visible()
543 regulator_disable(lm75->vs); in lm75_disable_regulator()
549 struct i2c_client *client = lm75->client; in lm75_remove()
551 i2c_smbus_write_byte_data(client, LM75_REG_CONF, lm75->orig_conf); in lm75_remove()
558 struct device *dev = &client->dev; in lm75_probe()
564 if (client->dev.of_node) in lm75_probe()
565 kind = (enum lm75_type)of_device_get_match_data(&client->dev); in lm75_probe()
567 kind = i2c_match_id(lm75_ids, client)->driver_data; in lm75_probe()
569 if (!i2c_check_functionality(client->adapter, in lm75_probe()
571 return -EIO; in lm75_probe()
575 return -ENOMEM; in lm75_probe()
577 data->client = client; in lm75_probe()
578 data->kind = kind; in lm75_probe()
580 data->vs = devm_regulator_get(dev, "vs"); in lm75_probe()
581 if (IS_ERR(data->vs)) in lm75_probe()
582 return PTR_ERR(data->vs); in lm75_probe()
584 data->regmap = devm_regmap_init_i2c(client, &lm75_regmap_config); in lm75_probe()
585 if (IS_ERR(data->regmap)) in lm75_probe()
586 return PTR_ERR(data->regmap); in lm75_probe()
592 data->params = &device_params[data->kind]; in lm75_probe()
595 data->sample_time = data->params->default_sample_time; in lm75_probe()
596 data->resolution = data->params->default_resolution; in lm75_probe()
599 err = regulator_enable(data->vs); in lm75_probe()
615 data->orig_conf = status; in lm75_probe()
616 data->current_conf = status; in lm75_probe()
618 err = lm75_write_config(data, data->params->set_mask, in lm75_probe()
619 data->params->clr_mask); in lm75_probe()
627 hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, in lm75_probe()
633 dev_info(dev, "%s: sensor '%s'\n", dev_name(hwmon_dev), client->name); in lm75_probe()
780 /* Return 0 if detection is successful, -ENODEV otherwise */
784 struct i2c_adapter *adapter = new_client->adapter; in lm75_detect()
791 return -ENODEV; in lm75_detect()
794 * Now, we do the remaining detection. There is no identification- in lm75_detect()
796 * unused bits, registers cycling over 8-address boundaries, in lm75_detect()
797 * addresses 0x04-0x07 returning the last read value. in lm75_detect()
821 return -ENODEV; in lm75_detect()
832 return -ENODEV; in lm75_detect()
843 return -ENODEV; in lm75_detect()
849 return -ENODEV; in lm75_detect()
856 return -ENODEV; in lm75_detect()
863 return -ENODEV; in lm75_detect()
866 return -ENODEV; in lm75_detect()
869 strlcpy(info->type, is_lm75a ? "lm75a" : "lm75", I2C_NAME_SIZE); in lm75_detect()
882 dev_dbg(&client->dev, "Can't read config? %d\n", status); in lm75_suspend()
897 dev_dbg(&client->dev, "Can't read config? %d\n", status); in lm75_resume()