Lines Matching full:data
47 #define SHT15_TSU 150 /* (nsecs) data setup time */
66 * @d1: see data sheet
119 * struct sht15_data - device instance specific data
120 * @pdata: platform data (gpio's etc).
127 * @checksumming: flag used to enable the data validation with CRC.
187 * @data: sht15 specific data.
188 * @value: sht15 retrieved data.
192 static u8 sht15_crc8(struct sht15_data *data, in sht15_crc8() argument
196 u8 crc = sht15_reverse(data->val_status & 0x0F); in sht15_crc8()
208 * @data: sht15 specific data
210 * This implements section 3.4 of the data sheet
212 static void sht15_connection_reset(struct sht15_data *data) in sht15_connection_reset() argument
216 gpio_direction_output(data->pdata->gpio_data, 1); in sht15_connection_reset()
218 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_connection_reset()
221 gpio_set_value(data->pdata->gpio_sck, 1); in sht15_connection_reset()
223 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_connection_reset()
230 * @data: device state data
233 static inline void sht15_send_bit(struct sht15_data *data, int val) in sht15_send_bit() argument
235 gpio_set_value(data->pdata->gpio_data, val); in sht15_send_bit()
237 gpio_set_value(data->pdata->gpio_sck, 1); in sht15_send_bit()
239 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_send_bit()
245 * @data: device state data
247 * Timings for this are not documented on the data sheet, so very
249 * figure 12 on the data sheet.
251 static void sht15_transmission_start(struct sht15_data *data) in sht15_transmission_start() argument
253 /* ensure data is high and output */ in sht15_transmission_start()
254 gpio_direction_output(data->pdata->gpio_data, 1); in sht15_transmission_start()
256 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_transmission_start()
258 gpio_set_value(data->pdata->gpio_sck, 1); in sht15_transmission_start()
260 gpio_set_value(data->pdata->gpio_data, 0); in sht15_transmission_start()
262 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_transmission_start()
264 gpio_set_value(data->pdata->gpio_sck, 1); in sht15_transmission_start()
266 gpio_set_value(data->pdata->gpio_data, 1); in sht15_transmission_start()
268 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_transmission_start()
274 * @data: device state
277 static void sht15_send_byte(struct sht15_data *data, u8 byte) in sht15_send_byte() argument
282 sht15_send_bit(data, !!(byte & 0x80)); in sht15_send_byte()
289 * @data: device state
291 static int sht15_wait_for_response(struct sht15_data *data) in sht15_wait_for_response() argument
293 gpio_direction_input(data->pdata->gpio_data); in sht15_wait_for_response()
294 gpio_set_value(data->pdata->gpio_sck, 1); in sht15_wait_for_response()
296 if (gpio_get_value(data->pdata->gpio_data)) { in sht15_wait_for_response()
297 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_wait_for_response()
298 dev_err(data->dev, "Command not acknowledged\n"); in sht15_wait_for_response()
299 sht15_connection_reset(data); in sht15_wait_for_response()
302 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_wait_for_response()
309 * @data: device state
312 * On entry, sck is output low, data is output pull high
315 static int sht15_send_cmd(struct sht15_data *data, u8 cmd) in sht15_send_cmd() argument
319 sht15_transmission_start(data); in sht15_send_cmd()
320 sht15_send_byte(data, cmd); in sht15_send_cmd()
321 ret = sht15_wait_for_response(data); in sht15_send_cmd()
327 * @data: sht15 specific data.
331 static int sht15_soft_reset(struct sht15_data *data) in sht15_soft_reset() argument
335 ret = sht15_send_cmd(data, SHT15_SOFT_RESET); in sht15_soft_reset()
340 data->val_status = 0; in sht15_soft_reset()
347 * @data: sht15 specific data.
349 * Each byte of data is acknowledged by pulling the data line
352 static void sht15_ack(struct sht15_data *data) in sht15_ack() argument
354 gpio_direction_output(data->pdata->gpio_data, 0); in sht15_ack()
356 gpio_set_value(data->pdata->gpio_sck, 1); in sht15_ack()
358 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_ack()
360 gpio_set_value(data->pdata->gpio_data, 1); in sht15_ack()
362 gpio_direction_input(data->pdata->gpio_data); in sht15_ack()
367 * @data: device state.
369 * This is basically a NAK (single clock pulse, data high).
371 static void sht15_end_transmission(struct sht15_data *data) in sht15_end_transmission() argument
373 gpio_direction_output(data->pdata->gpio_data, 1); in sht15_end_transmission()
375 gpio_set_value(data->pdata->gpio_sck, 1); in sht15_end_transmission()
377 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_end_transmission()
383 * @data: device state.
385 static u8 sht15_read_byte(struct sht15_data *data) in sht15_read_byte() argument
392 gpio_set_value(data->pdata->gpio_sck, 1); in sht15_read_byte()
394 byte |= !!gpio_get_value(data->pdata->gpio_data); in sht15_read_byte()
395 gpio_set_value(data->pdata->gpio_sck, 0); in sht15_read_byte()
403 * @data: sht15 specific data.
408 static int sht15_send_status(struct sht15_data *data, u8 status) in sht15_send_status() argument
412 ret = sht15_send_cmd(data, SHT15_WRITE_STATUS); in sht15_send_status()
415 gpio_direction_output(data->pdata->gpio_data, 1); in sht15_send_status()
417 sht15_send_byte(data, status); in sht15_send_status()
418 ret = sht15_wait_for_response(data); in sht15_send_status()
422 data->val_status = status; in sht15_send_status()
428 * @data: device instance specific data.
432 static int sht15_update_status(struct sht15_data *data) in sht15_update_status() argument
441 mutex_lock(&data->read_lock); in sht15_update_status()
442 if (time_after(jiffies, data->last_status + timeout) in sht15_update_status()
443 || !data->status_valid) { in sht15_update_status()
444 ret = sht15_send_cmd(data, SHT15_READ_STATUS); in sht15_update_status()
447 status = sht15_read_byte(data); in sht15_update_status()
449 if (data->checksumming) { in sht15_update_status()
450 sht15_ack(data); in sht15_update_status()
451 dev_checksum = sht15_reverse(sht15_read_byte(data)); in sht15_update_status()
454 data->checksum_ok = (sht15_crc8(data, checksum_vals, 2) in sht15_update_status()
458 sht15_end_transmission(data); in sht15_update_status()
461 * Perform checksum validation on the received data. in sht15_update_status()
465 if (data->checksumming && !data->checksum_ok) { in sht15_update_status()
466 previous_config = data->val_status & 0x07; in sht15_update_status()
467 ret = sht15_soft_reset(data); in sht15_update_status()
471 ret = sht15_send_status(data, previous_config); in sht15_update_status()
473 dev_err(data->dev, in sht15_update_status()
483 data->val_status = status; in sht15_update_status()
484 data->status_valid = true; in sht15_update_status()
485 data->last_status = jiffies; in sht15_update_status()
488 mutex_unlock(&data->read_lock); in sht15_update_status()
495 * @data: device instance specific data
500 static int sht15_measurement(struct sht15_data *data, in sht15_measurement() argument
507 ret = sht15_send_cmd(data, command); in sht15_measurement()
511 gpio_direction_input(data->pdata->gpio_data); in sht15_measurement()
512 atomic_set(&data->interrupt_handled, 0); in sht15_measurement()
514 enable_irq(gpio_to_irq(data->pdata->gpio_data)); in sht15_measurement()
515 if (gpio_get_value(data->pdata->gpio_data) == 0) { in sht15_measurement()
516 disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data)); in sht15_measurement()
518 if (!atomic_read(&data->interrupt_handled)) in sht15_measurement()
519 schedule_work(&data->read_work); in sht15_measurement()
521 ret = wait_event_timeout(data->wait_queue, in sht15_measurement()
522 (data->state == SHT15_READING_NOTHING), in sht15_measurement()
525 disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data)); in sht15_measurement()
526 sht15_connection_reset(data); in sht15_measurement()
531 * Perform checksum validation on the received data. in sht15_measurement()
535 if (data->checksumming && !data->checksum_ok) { in sht15_measurement()
536 previous_config = data->val_status & 0x07; in sht15_measurement()
537 ret = sht15_soft_reset(data); in sht15_measurement()
541 ret = sht15_send_status(data, previous_config); in sht15_measurement()
543 dev_err(data->dev, in sht15_measurement()
557 * @data: device state
559 static int sht15_update_measurements(struct sht15_data *data) in sht15_update_measurements() argument
564 mutex_lock(&data->read_lock); in sht15_update_measurements()
565 if (time_after(jiffies, data->last_measurement + timeout) in sht15_update_measurements()
566 || !data->measurements_valid) { in sht15_update_measurements()
567 data->state = SHT15_READING_HUMID; in sht15_update_measurements()
568 ret = sht15_measurement(data, SHT15_MEASURE_RH, 160); in sht15_update_measurements()
571 data->state = SHT15_READING_TEMP; in sht15_update_measurements()
572 ret = sht15_measurement(data, SHT15_MEASURE_TEMP, 400); in sht15_update_measurements()
575 data->measurements_valid = true; in sht15_update_measurements()
576 data->last_measurement = jiffies; in sht15_update_measurements()
579 mutex_unlock(&data->read_lock); in sht15_update_measurements()
586 * @data: device state
588 * As per section 4.3 of the data sheet.
590 static inline int sht15_calc_temp(struct sht15_data *data) in sht15_calc_temp() argument
593 int d2 = (data->val_status & SHT15_STATUS_LOW_RESOLUTION) ? 40 : 10; in sht15_calc_temp()
598 if (data->supply_uV > temppoints[i - 1].vdd) { in sht15_calc_temp()
599 d1 = (data->supply_uV - temppoints[i - 1].vdd) in sht15_calc_temp()
606 return data->val_temp * d2 + d1; in sht15_calc_temp()
611 * @data: device state
614 * the data sheet.
619 static inline int sht15_calc_humid(struct sht15_data *data) in sht15_calc_humid() argument
622 int temp = sht15_calc_temp(data); in sht15_calc_humid()
627 if (data->val_status & SHT15_STATUS_LOW_RESOLUTION) { in sht15_calc_humid()
638 + c2 * data->val_humid / 1000 in sht15_calc_humid()
639 + (data->val_humid * data->val_humid * c3) / 10000; in sht15_calc_humid()
640 return (temp - 25000) * (10000 + t2 * data->val_humid) in sht15_calc_humid()
659 struct sht15_data *data = dev_get_drvdata(dev); in sht15_show_status() local
662 ret = sht15_update_status(data); in sht15_show_status()
664 return ret ? ret : sprintf(buf, "%d\n", !!(data->val_status & bit)); in sht15_show_status()
672 * @count: length of the data.
682 struct sht15_data *data = dev_get_drvdata(dev); in sht15_store_heater() local
689 mutex_lock(&data->read_lock); in sht15_store_heater()
690 status = data->val_status & 0x07; in sht15_store_heater()
696 ret = sht15_send_status(data, status); in sht15_store_heater()
697 mutex_unlock(&data->read_lock); in sht15_store_heater()
716 struct sht15_data *data = dev_get_drvdata(dev); in sht15_show_temp() local
719 ret = sht15_update_measurements(data); in sht15_show_temp()
722 sht15_calc_temp(data)); in sht15_show_temp()
739 struct sht15_data *data = dev_get_drvdata(dev); in sht15_show_humidity() local
741 ret = sht15_update_measurements(data); in sht15_show_humidity()
743 return ret ? ret : sprintf(buf, "%d\n", sht15_calc_humid(data)); in sht15_show_humidity()
781 struct sht15_data *data = d; in sht15_interrupt_fired() local
785 atomic_inc(&data->interrupt_handled); in sht15_interrupt_fired()
787 if (data->state != SHT15_READING_NOTHING) in sht15_interrupt_fired()
788 schedule_work(&data->read_work); in sht15_interrupt_fired()
797 struct sht15_data *data in sht15_bh_read_data() local
802 if (gpio_get_value(data->pdata->gpio_data)) { in sht15_bh_read_data()
807 atomic_set(&data->interrupt_handled, 0); in sht15_bh_read_data()
808 enable_irq(gpio_to_irq(data->pdata->gpio_data)); in sht15_bh_read_data()
810 if (gpio_get_value(data->pdata->gpio_data) in sht15_bh_read_data()
811 || atomic_read(&data->interrupt_handled)) in sht15_bh_read_data()
815 /* Read the data back from the device */ in sht15_bh_read_data()
816 val = sht15_read_byte(data); in sht15_bh_read_data()
818 sht15_ack(data); in sht15_bh_read_data()
819 val |= sht15_read_byte(data); in sht15_bh_read_data()
821 if (data->checksumming) { in sht15_bh_read_data()
826 sht15_ack(data); in sht15_bh_read_data()
827 dev_checksum = sht15_reverse(sht15_read_byte(data)); in sht15_bh_read_data()
828 checksum_vals[0] = (data->state == SHT15_READING_TEMP) ? in sht15_bh_read_data()
832 data->checksum_ok in sht15_bh_read_data()
833 = (sht15_crc8(data, checksum_vals, 3) == dev_checksum); in sht15_bh_read_data()
837 sht15_end_transmission(data); in sht15_bh_read_data()
839 switch (data->state) { in sht15_bh_read_data()
841 data->val_temp = val; in sht15_bh_read_data()
844 data->val_humid = val; in sht15_bh_read_data()
850 data->state = SHT15_READING_NOTHING; in sht15_bh_read_data()
851 wake_up(&data->wait_queue); in sht15_bh_read_data()
856 struct sht15_data *data in sht15_update_voltage() local
859 data->supply_uV = regulator_get_voltage(data->reg); in sht15_update_voltage()
875 struct sht15_data *data = container_of(nb, struct sht15_data, nb); in sht15_invalidate_voltage() local
878 data->supply_uV_valid = false; in sht15_invalidate_voltage()
879 schedule_work(&data->update_supply_work); in sht15_invalidate_voltage()
887 struct sht15_data *data = kzalloc(sizeof(*data), GFP_KERNEL); in sht15_probe() local
890 if (!data) { in sht15_probe()
896 INIT_WORK(&data->read_work, sht15_bh_read_data); in sht15_probe()
897 INIT_WORK(&data->update_supply_work, sht15_update_voltage); in sht15_probe()
898 platform_set_drvdata(pdev, data); in sht15_probe()
899 mutex_init(&data->read_lock); in sht15_probe()
900 data->dev = &pdev->dev; in sht15_probe()
901 init_waitqueue_head(&data->wait_queue); in sht15_probe()
905 dev_err(&pdev->dev, "no platform data supplied\n"); in sht15_probe()
908 data->pdata = pdev->dev.platform_data; in sht15_probe()
909 data->supply_uV = data->pdata->supply_mv * 1000; in sht15_probe()
910 if (data->pdata->checksum) in sht15_probe()
911 data->checksumming = true; in sht15_probe()
912 if (data->pdata->no_otp_reload) in sht15_probe()
914 if (data->pdata->low_resolution) in sht15_probe()
921 data->reg = regulator_get(data->dev, "vcc"); in sht15_probe()
922 if (!IS_ERR(data->reg)) { in sht15_probe()
925 voltage = regulator_get_voltage(data->reg); in sht15_probe()
927 data->supply_uV = voltage; in sht15_probe()
929 regulator_enable(data->reg); in sht15_probe()
934 data->nb.notifier_call = &sht15_invalidate_voltage; in sht15_probe()
935 ret = regulator_register_notifier(data->reg, &data->nb); in sht15_probe()
939 regulator_disable(data->reg); in sht15_probe()
940 regulator_put(data->reg); in sht15_probe()
946 ret = gpio_request(data->pdata->gpio_sck, "SHT15 sck"); in sht15_probe()
951 gpio_direction_output(data->pdata->gpio_sck, 0); in sht15_probe()
953 ret = gpio_request(data->pdata->gpio_data, "SHT15 data"); in sht15_probe()
959 ret = request_irq(gpio_to_irq(data->pdata->gpio_data), in sht15_probe()
962 "sht15 data", in sht15_probe()
963 data); in sht15_probe()
965 dev_err(&pdev->dev, "failed to get irq for data line\n"); in sht15_probe()
968 disable_irq_nosync(gpio_to_irq(data->pdata->gpio_data)); in sht15_probe()
969 sht15_connection_reset(data); in sht15_probe()
970 ret = sht15_soft_reset(data); in sht15_probe()
974 /* write status with platform data options */ in sht15_probe()
976 ret = sht15_send_status(data, status); in sht15_probe()
987 data->hwmon_dev = hwmon_device_register(data->dev); in sht15_probe()
988 if (IS_ERR(data->hwmon_dev)) { in sht15_probe()
989 ret = PTR_ERR(data->hwmon_dev); in sht15_probe()
998 free_irq(gpio_to_irq(data->pdata->gpio_data), data); in sht15_probe()
1000 gpio_free(data->pdata->gpio_data); in sht15_probe()
1002 gpio_free(data->pdata->gpio_sck); in sht15_probe()
1004 if (!IS_ERR(data->reg)) { in sht15_probe()
1005 regulator_unregister_notifier(data->reg, &data->nb); in sht15_probe()
1006 regulator_disable(data->reg); in sht15_probe()
1007 regulator_put(data->reg); in sht15_probe()
1010 kfree(data); in sht15_probe()
1017 struct sht15_data *data = platform_get_drvdata(pdev); in sht15_remove() local
1023 mutex_lock(&data->read_lock); in sht15_remove()
1024 if (sht15_soft_reset(data)) { in sht15_remove()
1025 mutex_unlock(&data->read_lock); in sht15_remove()
1028 hwmon_device_unregister(data->hwmon_dev); in sht15_remove()
1030 if (!IS_ERR(data->reg)) { in sht15_remove()
1031 regulator_unregister_notifier(data->reg, &data->nb); in sht15_remove()
1032 regulator_disable(data->reg); in sht15_remove()
1033 regulator_put(data->reg); in sht15_remove()
1036 free_irq(gpio_to_irq(data->pdata->gpio_data), data); in sht15_remove()
1037 gpio_free(data->pdata->gpio_data); in sht15_remove()
1038 gpio_free(data->pdata->gpio_sck); in sht15_remove()
1039 mutex_unlock(&data->read_lock); in sht15_remove()
1040 kfree(data); in sht15_remove()