• Home
  • Raw
  • Download

Lines Matching +full:pulses +full:- +full:per +full:- +full:revolution

2  * max6650.c - Part of lm_sensors, Linux kernel modules for hardware
17 * http://pdfserv.maxim-ic.com/en/ds/MAX6650-MAX6651.pdf
40 #include <linux/hwmon-sysfs.h>
103 /* Minimum and maximum values of the FAN-RPM */
153 struct i2c_client *client = data->client; in max6650_update_device()
156 mutex_lock(&data->update_lock); in max6650_update_device()
158 if (time_after(jiffies, data->last_updated + HZ) || !data->valid) { in max6650_update_device()
159 data->speed = i2c_smbus_read_byte_data(client, in max6650_update_device()
161 data->config = i2c_smbus_read_byte_data(client, in max6650_update_device()
163 for (i = 0; i < data->nr_fans; i++) { in max6650_update_device()
164 data->tach[i] = i2c_smbus_read_byte_data(client, in max6650_update_device()
167 data->count = i2c_smbus_read_byte_data(client, in max6650_update_device()
169 data->dac = i2c_smbus_read_byte_data(client, MAX6650_REG_DAC); in max6650_update_device()
176 data->alarm |= i2c_smbus_read_byte_data(client, in max6650_update_device()
179 data->last_updated = jiffies; in max6650_update_device()
180 data->valid = 1; in max6650_update_device()
183 mutex_unlock(&data->update_lock); in max6650_update_device()
195 u8 config = data->config; in max6650_set_operating_mode()
202 result = i2c_smbus_write_byte_data(data->client, MAX6650_REG_CONFIG, in max6650_set_operating_mode()
207 data->config = config; in max6650_set_operating_mode()
224 * that the fans produce two pulses per revolution (this seems in get_fan()
228 rpm = ((data->tach[attr->index] * 120) / DIV_FROM_REG(data->count)); in get_fan()
287 kscale = DIV_FROM_REG(data->config); in fan1_target_show()
288 ktach = data->speed; in fan1_target_show()
306 * KTACH = [(fCLK x KSCALE) / (256 x FanSpeed)] - 1 in max6650_set_target()
309 kscale = DIV_FROM_REG(data->config); in max6650_set_target()
310 ktach = ((clock * kscale) / (256 * rpm / 60)) - 1; in max6650_set_target()
315 data->speed = ktach; in max6650_set_target()
317 return i2c_smbus_write_byte_data(data->client, MAX6650_REG_SPEED, in max6650_set_target()
318 data->speed); in max6650_set_target()
333 mutex_lock(&data->update_lock); in fan1_target_store()
337 mutex_unlock(&data->update_lock); in fan1_target_store()
361 * Useful range for dac is 0-180 for 12V fans and 0-76 for 5V fans. in pwm1_show()
364 if (data->config & MAX6650_CFG_V12) in pwm1_show()
365 pwm = 255 - (255 * (int)data->dac)/180; in pwm1_show()
367 pwm = 255 - (255 * (int)data->dac)/76; in pwm1_show()
380 struct i2c_client *client = data->client; in pwm1_store()
390 mutex_lock(&data->update_lock); in pwm1_store()
392 if (data->config & MAX6650_CFG_V12) in pwm1_store()
393 data->dac = 180 - (180 * pwm)/255; in pwm1_store()
395 data->dac = 76 - (76 * pwm)/255; in pwm1_store()
396 err = i2c_smbus_write_byte_data(client, MAX6650_REG_DAC, data->dac); in pwm1_store()
398 mutex_unlock(&data->update_lock); in pwm1_store()
415 int mode = (data->config & MAX6650_CFG_MODE_MASK) >> 4; in pwm1_enable_show()
440 return -EINVAL; in pwm1_enable_store()
442 mutex_lock(&data->update_lock); in pwm1_enable_store()
446 mutex_unlock(&data->update_lock); in pwm1_enable_store()
469 return sprintf(buf, "%d\n", DIV_FROM_REG(data->count)); in fan1_div_show()
477 struct i2c_client *client = data->client; in fan1_div_store()
485 mutex_lock(&data->update_lock); in fan1_div_store()
488 data->count = 0; in fan1_div_store()
491 data->count = 1; in fan1_div_store()
494 data->count = 2; in fan1_div_store()
497 data->count = 3; in fan1_div_store()
500 mutex_unlock(&data->update_lock); in fan1_div_store()
501 return -EINVAL; in fan1_div_store()
504 i2c_smbus_write_byte_data(client, MAX6650_REG_COUNT, data->count); in fan1_div_store()
505 mutex_unlock(&data->update_lock); in fan1_div_store()
522 struct i2c_client *client = data->client; in get_alarm()
525 if (data->alarm & attr->index) { in get_alarm()
526 mutex_lock(&data->update_lock); in get_alarm()
528 data->alarm &= ~attr->index; in get_alarm()
529 data->alarm |= i2c_smbus_read_byte_data(client, in get_alarm()
531 mutex_unlock(&data->update_lock); in get_alarm()
561 struct i2c_client *client = data->client; in max6650_attrs_visible()
575 if (!(alarm_en & to_sensor_dev_attr(devattr)->index)) in max6650_attrs_visible()
579 return a->mode; in max6650_attrs_visible()
619 struct device *dev = &client->dev; in max6650_init_client()
621 int err = -EIO; in max6650_init_client()
626 if (of_property_read_u32(dev->of_node, "maxim,fan-microvolt", in max6650_init_client()
631 if (of_property_read_u32(dev->of_node, "maxim,fan-prescale", in max6650_init_client()
690 data->config = config; in max6650_init_client()
691 data->count = i2c_smbus_read_byte_data(client, MAX6650_REG_COUNT); in max6650_init_client()
693 if (!of_property_read_u32(client->dev.of_node, "maxim,fan-target-rpm", in max6650_init_client()
705 struct device *dev = &client->dev; in max6650_probe()
714 return -ENOMEM; in max6650_probe()
716 data->client = client; in max6650_probe()
717 mutex_init(&data->update_lock); in max6650_probe()
718 data->nr_fans = of_id ? (int)(uintptr_t)of_id->data : id->driver_data; in max6650_probe()
727 data->groups[0] = &max6650_group; in max6650_probe()
729 if (data->nr_fans == 4) in max6650_probe()
730 data->groups[1] = &max6651_group; in max6650_probe()
733 client->name, data, in max6650_probe()
734 data->groups); in max6650_probe()