1 // SPDX-License-Identifier: GPL-2.0-or-later
5 * Copyright (c) 2004 Evgeniy Polyakov <zbr@ioremap.net>
10 #include <linux/kernel.h>
11 #include <linux/module.h>
12 #include <linux/moduleparam.h>
13 #include <linux/sched.h>
14 #include <linux/device.h>
15 #include <linux/types.h>
16 #include <linux/slab.h>
17 #include <linux/delay.h>
18 #include <linux/hwmon.h>
19 #include <linux/string.h>
20 #include <linux/jiffies.h>
24 #define W1_THERM_DS18S20 0x10
25 #define W1_THERM_DS1822 0x22
26 #define W1_THERM_DS18B20 0x28
27 #define W1_THERM_DS1825 0x3B
28 #define W1_THERM_DS28EA00 0x42
31 * Allow the strong pullup to be disabled, but default to enabled.
32 * If it was disabled a parasite powered device might not get the require
33 * current to do a temperature conversion. If it is enabled parasite powered
34 * devices have a better chance of getting the current required.
35 * In case the parasite power-detection is not working (seems to be the case
36 * for some DS18S20) the strong pullup can also be forced, regardless of the
37 * power state of the devices.
40 * - strong_pullup = 0 Disable strong pullup completely
41 * - strong_pullup = 1 Enable automatic strong pullup detection
42 * - strong_pullup = 2 Force strong pullup
44 static int w1_strong_pullup
= 1;
45 module_param_named(strong_pullup
, w1_strong_pullup
, int, 0);
47 /* Counter for devices supporting bulk reading */
48 static u16 bulk_read_device_counter
; /* =0 as per C standard */
50 /* This command should be in public header w1.h but is not */
51 #define W1_RECALL_EEPROM 0xB8
53 /* Nb of try for an operation */
54 #define W1_THERM_MAX_TRY 5
56 /* ms delay to retry bus mutex */
57 #define W1_THERM_RETRY_DELAY 20
59 /* delay in ms to write in EEPROM */
60 #define W1_THERM_EEPROM_WRITE_DELAY 10
62 #define EEPROM_CMD_WRITE "save" /* cmd for write eeprom sysfs */
63 #define EEPROM_CMD_READ "restore" /* cmd for read eeprom sysfs */
64 #define BULK_TRIGGER_CMD "trigger" /* cmd to trigger a bulk read */
66 #define MIN_TEMP -55 /* min temperature that can be measured */
67 #define MAX_TEMP 125 /* max temperature that can be measured */
69 /* Allowed values for sysfs conv_time attribute */
70 #define CONV_TIME_DEFAULT 0
71 #define CONV_TIME_MEASURE 1
73 /* Bits in sysfs "features" value */
74 #define W1_THERM_CHECK_RESULT 1 /* Enable conversion success check */
75 #define W1_THERM_POLL_COMPLETION 2 /* Poll for conversion completion */
76 #define W1_THERM_FEATURES_MASK 3 /* All values mask */
78 /* Poll period in milliseconds. Should be less then a shortest operation on the device */
79 #define W1_POLL_PERIOD 32
80 #define W1_POLL_CONVERT_TEMP 2000 /* Timeout for W1_CONVERT_TEMP, ms */
81 #define W1_POLL_RECALL_EEPROM 500 /* Timeout for W1_RECALL_EEPROM, ms*/
83 /* Masks for resolution functions, work with all devices */
84 /* Bit mask for config register for all devices, bits 7,6,5 */
85 #define W1_THERM_RESOLUTION_MASK 0xE0
86 /* Bit offset of resolution in config register for all devices */
87 #define W1_THERM_RESOLUTION_SHIFT 5
88 /* Bit offset of resolution in config register for all devices */
89 #define W1_THERM_RESOLUTION_SHIFT 5
90 /* Add this to bit value to get resolution */
91 #define W1_THERM_RESOLUTION_MIN 9
92 /* Maximum allowed value */
93 #define W1_THERM_RESOLUTION_MAX 14
98 * return a pointer on the slave w1_therm_family_converter struct:
99 * always test family data existence before using this macro
101 #define SLAVE_SPECIFIC_FUNC(sl) \
102 (((struct w1_therm_family_data *)(sl->family_data))->specific_functions)
105 * return the power mode of the sl slave : 1-ext, 0-parasite, <0 unknown
106 * always test family data existence before using this macro
108 #define SLAVE_POWERMODE(sl) \
109 (((struct w1_therm_family_data *)(sl->family_data))->external_powered)
112 * return the resolution in bit of the sl slave : <0 unknown
113 * always test family data existence before using this macro
115 #define SLAVE_RESOLUTION(sl) \
116 (((struct w1_therm_family_data *)(sl->family_data))->resolution)
119 * return the conv_time_override of the sl slave
120 * always test family data existence before using this macro
122 #define SLAVE_CONV_TIME_OVERRIDE(sl) \
123 (((struct w1_therm_family_data *)(sl->family_data))->conv_time_override)
126 * return the features of the sl slave
127 * always test family data existence before using this macro
129 #define SLAVE_FEATURES(sl) \
130 (((struct w1_therm_family_data *)(sl->family_data))->features)
133 * return whether or not a converT command has been issued to the slave
134 * * 0: no bulk read is pending
135 * * -1: conversion is in progress
136 * * 1: conversion done, result to be read
138 #define SLAVE_CONVERT_TRIGGERED(sl) \
139 (((struct w1_therm_family_data *)(sl->family_data))->convert_triggered)
141 /* return the address of the refcnt in the family data */
142 #define THERM_REFCNT(family_data) \
143 (&((struct w1_therm_family_data *)family_data)->refcnt)
145 /* Structs definition */
148 * struct w1_therm_family_converter - bind device specific functions
149 * @broken: flag for non-registred families
150 * @reserved: not used here
151 * @f: pointer to the device binding structure
152 * @convert: pointer to the device conversion function
153 * @get_conversion_time: pointer to the device conversion time function
154 * @set_resolution: pointer to the device set_resolution function
155 * @get_resolution: pointer to the device get_resolution function
156 * @write_data: pointer to the device writing function (2 or 3 bytes)
157 * @bulk_read: true if device family support bulk read, false otherwise
159 struct w1_therm_family_converter
{
163 int (*convert
)(u8 rom
[9]);
164 int (*get_conversion_time
)(struct w1_slave
*sl
);
165 int (*set_resolution
)(struct w1_slave
*sl
, int val
);
166 int (*get_resolution
)(struct w1_slave
*sl
);
167 int (*write_data
)(struct w1_slave
*sl
, const u8
*data
);
172 * struct w1_therm_family_data - device data
173 * @rom: ROM device id (64bit Lasered ROM code + 1 CRC byte)
175 * @external_powered: 1 device powered externally,
176 * 0 device parasite powered,
177 * -x error or undefined
178 * @resolution: current device resolution
179 * @convert_triggered: conversion state of the device
180 * @conv_time_override: user selected conversion time or CONV_TIME_DEFAULT
181 * @features: bit mask - enable temperature validity check, poll for completion
182 * @specific_functions: pointer to struct of device specific function
184 struct w1_therm_family_data
{
187 int external_powered
;
189 int convert_triggered
;
190 int conv_time_override
;
191 unsigned int features
;
192 struct w1_therm_family_converter
*specific_functions
;
196 * struct therm_info - store temperature reading
197 * @rom: read device data (8 data bytes + 1 CRC byte)
198 * @crc: computed crc from rom
199 * @verdict: 1 crc checked, 0 crc not matching
207 /* Hardware Functions declaration */
210 * reset_select_slave() - reset and select a slave
211 * @sl: the slave to select
213 * Resets the bus and select the slave by sending a ROM MATCH cmd
214 * w1_reset_select_slave() from w1_io.c could not be used here because
215 * it sent a SKIP ROM command if only one device is on the line.
216 * At the beginning of the such process, sl->master->slave_count is 1 even if
217 * more devices are on the line, causing collision on the line.
219 * Context: The w1 master lock must be held.
221 * Return: 0 if success, negative kernel error code otherwise.
223 static int reset_select_slave(struct w1_slave
*sl
);
226 * convert_t() - Query the device for temperature conversion and read
227 * @sl: pointer to the slave to read
228 * @info: pointer to a structure to store the read results
230 * Return: 0 if success, -kernel error code otherwise
232 static int convert_t(struct w1_slave
*sl
, struct therm_info
*info
);
235 * read_scratchpad() - read the data in device RAM
236 * @sl: pointer to the slave to read
237 * @info: pointer to a structure to store the read results
239 * Return: 0 if success, -kernel error code otherwise
241 static int read_scratchpad(struct w1_slave
*sl
, struct therm_info
*info
);
244 * write_scratchpad() - write nb_bytes in the device RAM
245 * @sl: pointer to the slave to write in
246 * @data: pointer to an array of 3 bytes, as 3 bytes MUST be written
247 * @nb_bytes: number of bytes to be written (2 for DS18S20, 3 otherwise)
249 * Return: 0 if success, -kernel error code otherwise
251 static int write_scratchpad(struct w1_slave
*sl
, const u8
*data
, u8 nb_bytes
);
254 * copy_scratchpad() - Copy the content of scratchpad in device EEPROM
255 * @sl: slave involved
257 * Return: 0 if success, -kernel error code otherwise
259 static int copy_scratchpad(struct w1_slave
*sl
);
262 * recall_eeprom() - Restore EEPROM data to device RAM
263 * @sl: slave involved
265 * Return: 0 if success, -kernel error code otherwise
267 static int recall_eeprom(struct w1_slave
*sl
);
270 * read_powermode() - Query the power mode of the slave
271 * @sl: slave to retrieve the power mode
273 * Ask the device to get its power mode (external or parasite)
274 * and store the power status in the &struct w1_therm_family_data.
277 * * 0 parasite powered device
278 * * 1 externally powered device
279 * * <0 kernel error code
281 static int read_powermode(struct w1_slave
*sl
);
284 * trigger_bulk_read() - function to trigger a bulk read on the bus
285 * @dev_master: the device master of the bus
287 * Send a SKIP ROM follow by a CONVERT T command on the bus.
288 * It also set the status flag in each slave &struct w1_therm_family_data
289 * to signal that a conversion is in progress.
291 * Return: 0 if success, -kernel error code otherwise
293 static int trigger_bulk_read(struct w1_master
*dev_master
);
295 /* Sysfs interface declaration */
297 static ssize_t
w1_slave_show(struct device
*device
,
298 struct device_attribute
*attr
, char *buf
);
300 static ssize_t
w1_slave_store(struct device
*device
,
301 struct device_attribute
*attr
, const char *buf
, size_t size
);
303 static ssize_t
w1_seq_show(struct device
*device
,
304 struct device_attribute
*attr
, char *buf
);
306 static ssize_t
temperature_show(struct device
*device
,
307 struct device_attribute
*attr
, char *buf
);
309 static ssize_t
ext_power_show(struct device
*device
,
310 struct device_attribute
*attr
, char *buf
);
312 static ssize_t
resolution_show(struct device
*device
,
313 struct device_attribute
*attr
, char *buf
);
315 static ssize_t
resolution_store(struct device
*device
,
316 struct device_attribute
*attr
, const char *buf
, size_t size
);
318 static ssize_t
eeprom_cmd_store(struct device
*device
,
319 struct device_attribute
*attr
, const char *buf
, size_t size
);
321 static ssize_t
alarms_store(struct device
*device
,
322 struct device_attribute
*attr
, const char *buf
, size_t size
);
324 static ssize_t
alarms_show(struct device
*device
,
325 struct device_attribute
*attr
, char *buf
);
327 static ssize_t
therm_bulk_read_store(struct device
*device
,
328 struct device_attribute
*attr
, const char *buf
, size_t size
);
330 static ssize_t
therm_bulk_read_show(struct device
*device
,
331 struct device_attribute
*attr
, char *buf
);
333 static ssize_t
conv_time_show(struct device
*device
,
334 struct device_attribute
*attr
, char *buf
);
336 static ssize_t
conv_time_store(struct device
*device
,
337 struct device_attribute
*attr
, const char *buf
,
340 static ssize_t
features_show(struct device
*device
,
341 struct device_attribute
*attr
, char *buf
);
343 static ssize_t
features_store(struct device
*device
,
344 struct device_attribute
*attr
, const char *buf
,
346 /* Attributes declarations */
348 static DEVICE_ATTR_RW(w1_slave
);
349 static DEVICE_ATTR_RO(w1_seq
);
350 static DEVICE_ATTR_RO(temperature
);
351 static DEVICE_ATTR_RO(ext_power
);
352 static DEVICE_ATTR_RW(resolution
);
353 static DEVICE_ATTR_WO(eeprom_cmd
);
354 static DEVICE_ATTR_RW(alarms
);
355 static DEVICE_ATTR_RW(conv_time
);
356 static DEVICE_ATTR_RW(features
);
358 static DEVICE_ATTR_RW(therm_bulk_read
); /* attribut at master level */
360 /* Interface Functions declaration */
363 * w1_therm_add_slave() - Called when a new slave is discovered
364 * @sl: slave just discovered by the master.
366 * Called by the master when the slave is discovered on the bus. Used to
367 * initialize slave state before the beginning of any communication.
369 * Return: 0 - If success, negative kernel code otherwise
371 static int w1_therm_add_slave(struct w1_slave
*sl
);
374 * w1_therm_remove_slave() - Called when a slave is removed
375 * @sl: slave to be removed.
377 * Called by the master when the slave is considered not to be on the bus
378 * anymore. Used to free memory.
380 static void w1_therm_remove_slave(struct w1_slave
*sl
);
382 /* Family attributes */
384 static struct attribute
*w1_therm_attrs
[] = {
385 &dev_attr_w1_slave
.attr
,
386 &dev_attr_temperature
.attr
,
387 &dev_attr_ext_power
.attr
,
388 &dev_attr_resolution
.attr
,
389 &dev_attr_eeprom_cmd
.attr
,
390 &dev_attr_alarms
.attr
,
391 &dev_attr_conv_time
.attr
,
392 &dev_attr_features
.attr
,
396 static struct attribute
*w1_ds18s20_attrs
[] = {
397 &dev_attr_w1_slave
.attr
,
398 &dev_attr_temperature
.attr
,
399 &dev_attr_ext_power
.attr
,
400 &dev_attr_eeprom_cmd
.attr
,
401 &dev_attr_alarms
.attr
,
402 &dev_attr_conv_time
.attr
,
403 &dev_attr_features
.attr
,
407 static struct attribute
*w1_ds28ea00_attrs
[] = {
408 &dev_attr_w1_slave
.attr
,
409 &dev_attr_w1_seq
.attr
,
410 &dev_attr_temperature
.attr
,
411 &dev_attr_ext_power
.attr
,
412 &dev_attr_resolution
.attr
,
413 &dev_attr_eeprom_cmd
.attr
,
414 &dev_attr_alarms
.attr
,
415 &dev_attr_conv_time
.attr
,
416 &dev_attr_features
.attr
,
420 /* Attribute groups */
422 ATTRIBUTE_GROUPS(w1_therm
);
423 ATTRIBUTE_GROUPS(w1_ds18s20
);
424 ATTRIBUTE_GROUPS(w1_ds28ea00
);
426 #if IS_REACHABLE(CONFIG_HWMON)
427 static int w1_read_temp(struct device
*dev
, u32 attr
, int channel
,
430 static umode_t
w1_is_visible(const void *_data
, enum hwmon_sensor_types type
,
431 u32 attr
, int channel
)
433 return attr
== hwmon_temp_input
? 0444 : 0;
436 static int w1_read(struct device
*dev
, enum hwmon_sensor_types type
,
437 u32 attr
, int channel
, long *val
)
441 return w1_read_temp(dev
, attr
, channel
, val
);
447 static const u32 w1_temp_config
[] = {
452 static const struct hwmon_channel_info w1_temp
= {
454 .config
= w1_temp_config
,
457 static const struct hwmon_channel_info
* const w1_info
[] = {
462 static const struct hwmon_ops w1_hwmon_ops
= {
463 .is_visible
= w1_is_visible
,
467 static const struct hwmon_chip_info w1_chip_info
= {
468 .ops
= &w1_hwmon_ops
,
471 #define W1_CHIPINFO (&w1_chip_info)
473 #define W1_CHIPINFO NULL
476 /* Family operations */
478 static const struct w1_family_ops w1_therm_fops
= {
479 .add_slave
= w1_therm_add_slave
,
480 .remove_slave
= w1_therm_remove_slave
,
481 .groups
= w1_therm_groups
,
482 .chip_info
= W1_CHIPINFO
,
485 static const struct w1_family_ops w1_ds18s20_fops
= {
486 .add_slave
= w1_therm_add_slave
,
487 .remove_slave
= w1_therm_remove_slave
,
488 .groups
= w1_ds18s20_groups
,
489 .chip_info
= W1_CHIPINFO
,
492 static const struct w1_family_ops w1_ds28ea00_fops
= {
493 .add_slave
= w1_therm_add_slave
,
494 .remove_slave
= w1_therm_remove_slave
,
495 .groups
= w1_ds28ea00_groups
,
496 .chip_info
= W1_CHIPINFO
,
499 /* Family binding operations struct */
501 static struct w1_family w1_therm_family_DS18S20
= {
502 .fid
= W1_THERM_DS18S20
,
503 .fops
= &w1_ds18s20_fops
,
506 static struct w1_family w1_therm_family_DS18B20
= {
507 .fid
= W1_THERM_DS18B20
,
508 .fops
= &w1_therm_fops
,
511 static struct w1_family w1_therm_family_DS1822
= {
512 .fid
= W1_THERM_DS1822
,
513 .fops
= &w1_therm_fops
,
516 static struct w1_family w1_therm_family_DS28EA00
= {
517 .fid
= W1_THERM_DS28EA00
,
518 .fops
= &w1_ds28ea00_fops
,
521 static struct w1_family w1_therm_family_DS1825
= {
522 .fid
= W1_THERM_DS1825
,
523 .fops
= &w1_therm_fops
,
526 /* Device dependent func */
528 static inline int w1_DS18B20_convert_time(struct w1_slave
*sl
)
532 if (!sl
->family_data
)
533 return -ENODEV
; /* device unknown */
535 if (SLAVE_CONV_TIME_OVERRIDE(sl
) != CONV_TIME_DEFAULT
)
536 return SLAVE_CONV_TIME_OVERRIDE(sl
);
538 /* Return the conversion time, depending on resolution,
539 * select maximum conversion time among all compatible devices
541 switch (SLAVE_RESOLUTION(sl
)) {
555 ret
= 850; /* GX20MH01 only. Datasheet says 500ms, but that's not enough. */
558 ret
= 1600; /* GX20MH01 only. Datasheet says 1000ms - not enough */
566 static inline int w1_DS18S20_convert_time(struct w1_slave
*sl
)
568 if (!sl
->family_data
)
569 return -ENODEV
; /* device unknown */
571 if (SLAVE_CONV_TIME_OVERRIDE(sl
) == CONV_TIME_DEFAULT
)
572 return 750; /* default for DS18S20 */
574 return SLAVE_CONV_TIME_OVERRIDE(sl
);
577 static inline int w1_DS1825_convert_time(struct w1_slave
*sl
)
581 if (!sl
->family_data
)
582 return -ENODEV
; /* device unknown */
584 if (SLAVE_CONV_TIME_OVERRIDE(sl
) != CONV_TIME_DEFAULT
)
585 return SLAVE_CONV_TIME_OVERRIDE(sl
);
587 /* Return the conversion time, depending on resolution,
588 * select maximum conversion time among all compatible devices
590 switch (SLAVE_RESOLUTION(sl
)) {
604 ret
= 100; /* MAX31850 only. Datasheet says 100ms */
612 static inline int w1_DS18B20_write_data(struct w1_slave
*sl
,
615 return write_scratchpad(sl
, data
, 3);
618 static inline int w1_DS18S20_write_data(struct w1_slave
*sl
,
621 /* No config register */
622 return write_scratchpad(sl
, data
, 2);
625 static inline int w1_DS18B20_set_resolution(struct w1_slave
*sl
, int val
)
628 struct therm_info info
, info2
;
630 /* DS18B20 resolution is 9 to 12 bits */
631 /* GX20MH01 resolution is 9 to 14 bits */
632 /* MAX31850 resolution is fixed 14 bits */
633 if (val
< W1_THERM_RESOLUTION_MIN
|| val
> W1_THERM_RESOLUTION_MAX
)
636 /* Calc bit value from resolution */
637 val
= (val
- W1_THERM_RESOLUTION_MIN
) << W1_THERM_RESOLUTION_SHIFT
;
640 * Read the scratchpad to change only the required bits
641 * (bit5 & bit 6 from byte 4)
643 ret
= read_scratchpad(sl
, &info
);
649 info
.rom
[4] &= ~W1_THERM_RESOLUTION_MASK
;
652 /* Write data in the device RAM */
653 ret
= w1_DS18B20_write_data(sl
, info
.rom
+ 2);
657 /* Have to read back the resolution to verify an actual value
658 * GX20MH01 and DS18B20 are indistinguishable by family number, but resolutions differ
659 * Some DS18B20 clones don't support resolution change
661 ret
= read_scratchpad(sl
, &info2
);
663 /* Scratchpad read fail */
666 if ((info2
.rom
[4] & W1_THERM_RESOLUTION_MASK
) == (info
.rom
[4] & W1_THERM_RESOLUTION_MASK
))
669 /* Resolution verify error */
673 static inline int w1_DS18B20_get_resolution(struct w1_slave
*sl
)
677 struct therm_info info
;
679 ret
= read_scratchpad(sl
, &info
);
684 resolution
= ((info
.rom
[4] & W1_THERM_RESOLUTION_MASK
) >> W1_THERM_RESOLUTION_SHIFT
)
685 + W1_THERM_RESOLUTION_MIN
;
686 /* GX20MH01 has one special case:
687 * >=14 means 14 bits when getting resolution from bit value.
688 * MAX31850 delivers fixed 15 and has 14 bits.
689 * Other devices have no more then 12 bits.
691 if (resolution
> W1_THERM_RESOLUTION_MAX
)
692 resolution
= W1_THERM_RESOLUTION_MAX
;
698 * w1_DS18B20_convert_temp() - temperature computation for DS18B20
699 * @rom: data read from device RAM (8 data bytes + 1 CRC byte)
701 * Can be called for any DS18B20 compliant device.
703 * Return: value in millidegrees Celsius.
705 static inline int w1_DS18B20_convert_temp(u8 rom
[9])
710 /* Signed 16-bit value to unsigned, cpu order */
711 bv
= le16_to_cpup((__le16
*)rom
);
713 /* Config register bit R2 = 1 - GX20MH01 in 13 or 14 bit resolution mode */
715 /* Insert two temperature bits from config register */
716 /* Avoid arithmetic shift of signed value */
717 bv
= (bv
<< 2) | (rom
[4] & 3);
718 t
= (s16
) bv
; /* Degrees, lowest bit is 2^-6 */
719 return (int)t
* 1000 / 64; /* Sign-extend to int; millidegrees */
721 t
= (s16
)bv
; /* Degrees, lowest bit is 2^-4 */
722 return (int)t
* 1000 / 16; /* Sign-extend to int; millidegrees */
726 * w1_DS18S20_convert_temp() - temperature computation for DS18S20
727 * @rom: data read from device RAM (8 data bytes + 1 CRC byte)
729 * Can be called for any DS18S20 compliant device.
731 * Return: value in millidegrees Celsius.
733 static inline int w1_DS18S20_convert_temp(u8 rom
[9])
738 pr_debug("%s: Invalid argument for conversion\n", __func__
);
743 t
= ((s32
)rom
[0] >> 1)*1000;
745 t
= 1000*(-1*(s32
)(0x100-rom
[0]) >> 1);
748 h
= 1000*((s32
)rom
[7] - (s32
)rom
[6]);
756 * w1_DS1825_convert_temp() - temperature computation for DS1825
757 * @rom: data read from device RAM (8 data bytes + 1 CRC byte)
759 * Can be called for any DS1825 compliant device.
760 * Is used by MAX31850, too
762 * Return: value in millidegrees Celsius.
765 static inline int w1_DS1825_convert_temp(u8 rom
[9])
770 /* Signed 16-bit value to unsigned, cpu order */
771 bv
= le16_to_cpup((__le16
*)rom
);
773 /* Config register bit 7 = 1 - MA31850 found, 14 bit resolution */
775 /* Mask out bits 0 (Fault) and 1 (Reserved) */
776 /* Avoid arithmetic shift of signed value */
777 bv
= (bv
& 0xFFFC); /* Degrees, lowest 4 bits are 2^-1, 2^-2 and 2 zero bits */
779 t
= (s16
)bv
; /* Degrees, lowest bit is 2^-4 */
780 return (int)t
* 1000 / 16; /* Sign-extend to int; millidegrees */
783 /* Device capability description */
784 /* GX20MH01 device shares family number and structure with DS18B20 */
786 static struct w1_therm_family_converter w1_therm_families
[] = {
788 .f
= &w1_therm_family_DS18S20
,
789 .convert
= w1_DS18S20_convert_temp
,
790 .get_conversion_time
= w1_DS18S20_convert_time
,
791 .set_resolution
= NULL
, /* no config register */
792 .get_resolution
= NULL
, /* no config register */
793 .write_data
= w1_DS18S20_write_data
,
797 .f
= &w1_therm_family_DS1822
,
798 .convert
= w1_DS18B20_convert_temp
,
799 .get_conversion_time
= w1_DS18B20_convert_time
,
800 .set_resolution
= w1_DS18B20_set_resolution
,
801 .get_resolution
= w1_DS18B20_get_resolution
,
802 .write_data
= w1_DS18B20_write_data
,
806 /* Also used for GX20MH01 */
807 .f
= &w1_therm_family_DS18B20
,
808 .convert
= w1_DS18B20_convert_temp
,
809 .get_conversion_time
= w1_DS18B20_convert_time
,
810 .set_resolution
= w1_DS18B20_set_resolution
,
811 .get_resolution
= w1_DS18B20_get_resolution
,
812 .write_data
= w1_DS18B20_write_data
,
816 .f
= &w1_therm_family_DS28EA00
,
817 .convert
= w1_DS18B20_convert_temp
,
818 .get_conversion_time
= w1_DS18B20_convert_time
,
819 .set_resolution
= w1_DS18B20_set_resolution
,
820 .get_resolution
= w1_DS18B20_get_resolution
,
821 .write_data
= w1_DS18B20_write_data
,
825 /* Also used for MAX31850 */
826 .f
= &w1_therm_family_DS1825
,
827 .convert
= w1_DS1825_convert_temp
,
828 .get_conversion_time
= w1_DS1825_convert_time
,
829 .set_resolution
= w1_DS18B20_set_resolution
,
830 .get_resolution
= w1_DS18B20_get_resolution
,
831 .write_data
= w1_DS18B20_write_data
,
836 /* Helpers Functions */
839 * device_family() - Retrieve a pointer on &struct w1_therm_family_converter
840 * @sl: slave to retrieve the device specific structure
842 * Return: pointer to the slaves's family converter, NULL if not known
844 static struct w1_therm_family_converter
*device_family(struct w1_slave
*sl
)
846 struct w1_therm_family_converter
*ret
= NULL
;
849 for (i
= 0; i
< ARRAY_SIZE(w1_therm_families
); ++i
) {
850 if (w1_therm_families
[i
].f
->fid
== sl
->family
->fid
) {
851 ret
= &w1_therm_families
[i
];
859 * bus_mutex_lock() - Acquire the mutex
860 * @lock: w1 bus mutex to acquire
862 * It try to acquire the mutex W1_THERM_MAX_TRY times and wait
863 * W1_THERM_RETRY_DELAY between 2 attempts.
865 * Return: true is mutex is acquired and lock, false otherwise
867 static inline bool bus_mutex_lock(struct mutex
*lock
)
869 int max_trying
= W1_THERM_MAX_TRY
;
871 /* try to acquire the mutex, if not, sleep retry_delay before retry) */
872 while (mutex_lock_interruptible(lock
) != 0 && max_trying
> 0) {
873 unsigned long sleep_rem
;
875 sleep_rem
= msleep_interruptible(W1_THERM_RETRY_DELAY
);
881 return false; /* Didn't acquire the bus mutex */
887 * check_family_data() - Check if family data and specific functions are present
888 * @sl: W1 device data
890 * Return: 0 - OK, negative value - error
892 static int check_family_data(struct w1_slave
*sl
)
894 if ((!sl
->family_data
) || (!SLAVE_SPECIFIC_FUNC(sl
))) {
896 "%s: Device is not supported by the driver\n", __func__
);
897 return -EINVAL
; /* No device family */
903 * bulk_read_support() - check if slave support bulk read
904 * @sl: device to check the ability
906 * Return: true if bulk read is supported, false if not or error
908 static inline bool bulk_read_support(struct w1_slave
*sl
)
910 if (SLAVE_SPECIFIC_FUNC(sl
))
911 return SLAVE_SPECIFIC_FUNC(sl
)->bulk_read
;
914 "%s: Device not supported by the driver\n", __func__
);
916 return false; /* No device family */
920 * conversion_time() - get the Tconv for the slave
921 * @sl: device to get the conversion time
923 * On device supporting resolution settings, conversion time depend
924 * on the resolution setting. This helper function get the slave timing,
925 * depending on its current setting.
927 * Return: conversion time in ms, negative values are kernel error code
929 static inline int conversion_time(struct w1_slave
*sl
)
931 if (SLAVE_SPECIFIC_FUNC(sl
))
932 return SLAVE_SPECIFIC_FUNC(sl
)->get_conversion_time(sl
);
935 "%s: Device not supported by the driver\n", __func__
);
937 return -ENODEV
; /* No device family */
941 * temperature_from_RAM() - Convert the read info to temperature
942 * @sl: device that sent the RAM data
943 * @rom: read value on the slave device RAM
945 * Device dependent, the function bind the correct computation method.
947 * Return: temperature in 1/1000degC, 0 on error.
949 static inline int temperature_from_RAM(struct w1_slave
*sl
, u8 rom
[9])
951 if (SLAVE_SPECIFIC_FUNC(sl
))
952 return SLAVE_SPECIFIC_FUNC(sl
)->convert(rom
);
955 "%s: Device not supported by the driver\n", __func__
);
957 return 0; /* No device family */
961 * int_to_short() - Safe casting of int to short
963 * @i: integer to be converted to short
965 * Device register use 1 byte to store signed integer.
966 * This helper function convert the int in a signed short,
967 * using the min/max values that device can measure as limits.
968 * min/max values are defined by macro.
970 * Return: a short in the range of min/max value
972 static inline s8
int_to_short(int i
)
974 /* Prepare to cast to short by eliminating out of range values */
975 i
= clamp(i
, MIN_TEMP
, MAX_TEMP
);
979 /* Interface Functions */
981 static int w1_therm_add_slave(struct w1_slave
*sl
)
983 struct w1_therm_family_converter
*sl_family_conv
;
985 /* Allocate memory */
986 sl
->family_data
= kzalloc(sizeof(struct w1_therm_family_data
),
988 if (!sl
->family_data
)
991 atomic_set(THERM_REFCNT(sl
->family_data
), 1);
993 /* Get a pointer to the device specific function struct */
994 sl_family_conv
= device_family(sl
);
995 if (!sl_family_conv
) {
996 kfree(sl
->family_data
);
999 /* save this pointer to the device structure */
1000 SLAVE_SPECIFIC_FUNC(sl
) = sl_family_conv
;
1002 if (bulk_read_support(sl
)) {
1004 * add the sys entry to trigger bulk_read
1005 * at master level only the 1st time
1007 if (!bulk_read_device_counter
) {
1008 int err
= device_create_file(&sl
->master
->dev
,
1009 &dev_attr_therm_bulk_read
);
1013 "%s: Device has been added, but bulk read is unavailable. err=%d\n",
1016 /* Increment the counter */
1017 bulk_read_device_counter
++;
1020 /* Getting the power mode of the device {external, parasite} */
1021 SLAVE_POWERMODE(sl
) = read_powermode(sl
);
1023 if (SLAVE_POWERMODE(sl
) < 0) {
1024 /* no error returned as device has been added */
1026 "%s: Device has been added, but power_mode may be corrupted. err=%d\n",
1027 __func__
, SLAVE_POWERMODE(sl
));
1030 /* Getting the resolution of the device */
1031 if (SLAVE_SPECIFIC_FUNC(sl
)->get_resolution
) {
1032 SLAVE_RESOLUTION(sl
) =
1033 SLAVE_SPECIFIC_FUNC(sl
)->get_resolution(sl
);
1034 if (SLAVE_RESOLUTION(sl
) < 0) {
1035 /* no error returned as device has been added */
1037 "%s:Device has been added, but resolution may be corrupted. err=%d\n",
1038 __func__
, SLAVE_RESOLUTION(sl
));
1042 /* Finally initialize convert_triggered flag */
1043 SLAVE_CONVERT_TRIGGERED(sl
) = 0;
1048 static void w1_therm_remove_slave(struct w1_slave
*sl
)
1050 int refcnt
= atomic_sub_return(1, THERM_REFCNT(sl
->family_data
));
1052 if (bulk_read_support(sl
)) {
1053 bulk_read_device_counter
--;
1054 /* Delete the entry if no more device support the feature */
1055 if (!bulk_read_device_counter
)
1056 device_remove_file(&sl
->master
->dev
,
1057 &dev_attr_therm_bulk_read
);
1062 refcnt
= atomic_read(THERM_REFCNT(sl
->family_data
));
1064 kfree(sl
->family_data
);
1065 sl
->family_data
= NULL
;
1068 /* Hardware Functions */
1070 /* Safe version of reset_select_slave - avoid using the one in w_io.c */
1071 static int reset_select_slave(struct w1_slave
*sl
)
1073 u8 match
[9] = { W1_MATCH_ROM
, };
1074 u64 rn
= le64_to_cpu(*((u64
*)&sl
->reg_num
));
1076 if (w1_reset_bus(sl
->master
))
1079 memcpy(&match
[1], &rn
, 8);
1080 w1_write_block(sl
->master
, match
, 9);
1086 * w1_poll_completion - Poll for operation completion, with timeout
1087 * @dev_master: the device master of the bus
1088 * @tout_ms: timeout in milliseconds
1090 * The device is answering 0's while an operation is in progress and 1's after it completes
1091 * Timeout may happen if the previous command was not recognised due to a line noise
1093 * Return: 0 - OK, negative error - timeout
1095 static int w1_poll_completion(struct w1_master
*dev_master
, int tout_ms
)
1099 for (i
= 0; i
< tout_ms
/W1_POLL_PERIOD
; i
++) {
1100 /* Delay is before poll, for device to recognize a command */
1101 msleep(W1_POLL_PERIOD
);
1103 /* Compare all 8 bits to mitigate a noise on the bus */
1104 if (w1_read_8(dev_master
) == 0xFF)
1107 if (i
== tout_ms
/W1_POLL_PERIOD
)
1113 static int convert_t(struct w1_slave
*sl
, struct therm_info
*info
)
1115 struct w1_master
*dev_master
= sl
->master
;
1116 int max_trying
= W1_THERM_MAX_TRY
;
1121 if (!sl
->family_data
)
1124 strong_pullup
= (w1_strong_pullup
== 2 ||
1125 (!SLAVE_POWERMODE(sl
) &&
1128 if (strong_pullup
&& SLAVE_FEATURES(sl
) & W1_THERM_POLL_COMPLETION
) {
1130 "%s: Disabling W1_THERM_POLL_COMPLETION in parasite power mode.\n",
1132 SLAVE_FEATURES(sl
) &= ~W1_THERM_POLL_COMPLETION
;
1135 /* get conversion duration device and id dependent */
1136 t_conv
= conversion_time(sl
);
1138 memset(info
->rom
, 0, sizeof(info
->rom
));
1140 /* prevent the slave from going away in sleep */
1141 atomic_inc(THERM_REFCNT(sl
->family_data
));
1143 if (!bus_mutex_lock(&dev_master
->bus_mutex
)) {
1144 ret
= -EAGAIN
; /* Didn't acquire the mutex */
1148 while (max_trying
-- && ret
) { /* ret should be 0 */
1152 /* safe version to select slave */
1153 if (!reset_select_slave(sl
)) {
1154 unsigned long sleep_rem
;
1156 /* 750ms strong pullup (or delay) after the convert */
1158 w1_next_pullup(dev_master
, t_conv
);
1160 w1_write_8(dev_master
, W1_CONVERT_TEMP
);
1162 if (SLAVE_FEATURES(sl
) & W1_THERM_POLL_COMPLETION
) {
1163 ret
= w1_poll_completion(dev_master
, W1_POLL_CONVERT_TEMP
);
1165 dev_dbg(&sl
->dev
, "%s: Timeout\n", __func__
);
1168 mutex_unlock(&dev_master
->bus_mutex
);
1169 } else if (!strong_pullup
) { /*no device need pullup */
1170 sleep_rem
= msleep_interruptible(t_conv
);
1171 if (sleep_rem
!= 0) {
1175 mutex_unlock(&dev_master
->bus_mutex
);
1176 } else { /*some device need pullup */
1177 mutex_unlock(&dev_master
->bus_mutex
);
1178 sleep_rem
= msleep_interruptible(t_conv
);
1179 if (sleep_rem
!= 0) {
1184 ret
= read_scratchpad(sl
, info
);
1186 /* If enabled, check for conversion success */
1187 if ((SLAVE_FEATURES(sl
) & W1_THERM_CHECK_RESULT
) &&
1188 (info
->rom
[6] == 0xC) &&
1189 ((info
->rom
[1] == 0x5 && info
->rom
[0] == 0x50) ||
1190 (info
->rom
[1] == 0x7 && info
->rom
[0] == 0xFF))
1192 /* Invalid reading (scratchpad byte 6 = 0xC)
1193 * due to insufficient conversion time
1205 mutex_unlock(&dev_master
->bus_mutex
);
1207 atomic_dec(THERM_REFCNT(sl
->family_data
));
1212 static int conv_time_measure(struct w1_slave
*sl
, int *conv_time
)
1214 struct therm_info inf
,
1216 struct w1_master
*dev_master
= sl
->master
;
1217 int max_trying
= W1_THERM_MAX_TRY
;
1221 if (!sl
->family_data
)
1224 strong_pullup
= (w1_strong_pullup
== 2 ||
1225 (!SLAVE_POWERMODE(sl
) &&
1228 if (strong_pullup
) {
1229 pr_info("%s: Measure with strong_pullup is not supported.\n", __func__
);
1233 memset(info
->rom
, 0, sizeof(info
->rom
));
1235 /* prevent the slave from going away in sleep */
1236 atomic_inc(THERM_REFCNT(sl
->family_data
));
1238 if (!bus_mutex_lock(&dev_master
->bus_mutex
)) {
1239 ret
= -EAGAIN
; /* Didn't acquire the mutex */
1243 while (max_trying
-- && ret
) { /* ret should be 0 */
1246 /* safe version to select slave */
1247 if (!reset_select_slave(sl
)) {
1250 /*no device need pullup */
1251 w1_write_8(dev_master
, W1_CONVERT_TEMP
);
1254 ret
= w1_poll_completion(dev_master
, W1_POLL_CONVERT_TEMP
);
1256 dev_dbg(&sl
->dev
, "%s: Timeout\n", __func__
);
1260 /* 1.2x increase for variation and changes over temperature range */
1261 *conv_time
= jiffies_to_msecs(j_end
-j_start
)*12/10;
1262 pr_debug("W1 Measure complete, conv_time = %d, HZ=%d.\n",
1264 if (*conv_time
<= CONV_TIME_MEASURE
) {
1268 mutex_unlock(&dev_master
->bus_mutex
);
1269 ret
= read_scratchpad(sl
, info
);
1275 mutex_unlock(&dev_master
->bus_mutex
);
1277 atomic_dec(THERM_REFCNT(sl
->family_data
));
1282 static int read_scratchpad(struct w1_slave
*sl
, struct therm_info
*info
)
1284 struct w1_master
*dev_master
= sl
->master
;
1285 int max_trying
= W1_THERM_MAX_TRY
;
1290 if (!sl
->family_data
)
1293 memset(info
->rom
, 0, sizeof(info
->rom
));
1295 /* prevent the slave from going away in sleep */
1296 atomic_inc(THERM_REFCNT(sl
->family_data
));
1298 if (!bus_mutex_lock(&dev_master
->bus_mutex
)) {
1299 ret
= -EAGAIN
; /* Didn't acquire the mutex */
1303 while (max_trying
-- && ret
) { /* ret should be 0 */
1304 /* safe version to select slave */
1305 if (!reset_select_slave(sl
)) {
1308 w1_write_8(dev_master
, W1_READ_SCRATCHPAD
);
1310 nb_bytes_read
= w1_read_block(dev_master
, info
->rom
, 9);
1311 if (nb_bytes_read
!= 9) {
1313 "w1_read_block(): returned %u instead of 9.\n",
1318 info
->crc
= w1_calc_crc8(info
->rom
, 8);
1320 if (info
->rom
[8] == info
->crc
) {
1324 ret
= -EIO
; /* CRC not checked */
1328 mutex_unlock(&dev_master
->bus_mutex
);
1331 atomic_dec(THERM_REFCNT(sl
->family_data
));
1336 static int write_scratchpad(struct w1_slave
*sl
, const u8
*data
, u8 nb_bytes
)
1338 struct w1_master
*dev_master
= sl
->master
;
1339 int max_trying
= W1_THERM_MAX_TRY
;
1342 if (!sl
->family_data
)
1345 /* prevent the slave from going away in sleep */
1346 atomic_inc(THERM_REFCNT(sl
->family_data
));
1348 if (!bus_mutex_lock(&dev_master
->bus_mutex
)) {
1349 ret
= -EAGAIN
; /* Didn't acquire the mutex */
1353 while (max_trying
-- && ret
) { /* ret should be 0 */
1354 /* safe version to select slave */
1355 if (!reset_select_slave(sl
)) {
1356 w1_write_8(dev_master
, W1_WRITE_SCRATCHPAD
);
1357 w1_write_block(dev_master
, data
, nb_bytes
);
1361 mutex_unlock(&dev_master
->bus_mutex
);
1364 atomic_dec(THERM_REFCNT(sl
->family_data
));
1369 static int copy_scratchpad(struct w1_slave
*sl
)
1371 struct w1_master
*dev_master
= sl
->master
;
1372 int max_trying
= W1_THERM_MAX_TRY
;
1373 int t_write
, ret
= -ENODEV
;
1376 if (!sl
->family_data
)
1379 t_write
= W1_THERM_EEPROM_WRITE_DELAY
;
1380 strong_pullup
= (w1_strong_pullup
== 2 ||
1381 (!SLAVE_POWERMODE(sl
) &&
1384 /* prevent the slave from going away in sleep */
1385 atomic_inc(THERM_REFCNT(sl
->family_data
));
1387 if (!bus_mutex_lock(&dev_master
->bus_mutex
)) {
1388 ret
= -EAGAIN
; /* Didn't acquire the mutex */
1392 while (max_trying
-- && ret
) { /* ret should be 0 */
1393 /* safe version to select slave */
1394 if (!reset_select_slave(sl
)) {
1395 unsigned long sleep_rem
;
1397 /* 10ms strong pullup (or delay) after the convert */
1399 w1_next_pullup(dev_master
, t_write
);
1401 w1_write_8(dev_master
, W1_COPY_SCRATCHPAD
);
1403 if (strong_pullup
) {
1404 sleep_rem
= msleep_interruptible(t_write
);
1405 if (sleep_rem
!= 0) {
1416 mutex_unlock(&dev_master
->bus_mutex
);
1418 atomic_dec(THERM_REFCNT(sl
->family_data
));
1423 static int recall_eeprom(struct w1_slave
*sl
)
1425 struct w1_master
*dev_master
= sl
->master
;
1426 int max_trying
= W1_THERM_MAX_TRY
;
1429 if (!sl
->family_data
)
1432 /* prevent the slave from going away in sleep */
1433 atomic_inc(THERM_REFCNT(sl
->family_data
));
1435 if (!bus_mutex_lock(&dev_master
->bus_mutex
)) {
1436 ret
= -EAGAIN
; /* Didn't acquire the mutex */
1440 while (max_trying
-- && ret
) { /* ret should be 0 */
1441 /* safe version to select slave */
1442 if (!reset_select_slave(sl
)) {
1444 w1_write_8(dev_master
, W1_RECALL_EEPROM
);
1445 ret
= w1_poll_completion(dev_master
, W1_POLL_RECALL_EEPROM
);
1450 mutex_unlock(&dev_master
->bus_mutex
);
1453 atomic_dec(THERM_REFCNT(sl
->family_data
));
1458 static int read_powermode(struct w1_slave
*sl
)
1460 struct w1_master
*dev_master
= sl
->master
;
1461 int max_trying
= W1_THERM_MAX_TRY
;
1464 if (!sl
->family_data
)
1467 /* prevent the slave from going away in sleep */
1468 atomic_inc(THERM_REFCNT(sl
->family_data
));
1470 if (!bus_mutex_lock(&dev_master
->bus_mutex
)) {
1471 ret
= -EAGAIN
; /* Didn't acquire the mutex */
1475 while ((max_trying
--) && (ret
< 0)) {
1476 /* safe version to select slave */
1477 if (!reset_select_slave(sl
)) {
1478 w1_write_8(dev_master
, W1_READ_PSUPPLY
);
1480 * Emit a read time slot and read only one bit,
1481 * 1 is externally powered,
1482 * 0 is parasite powered
1484 ret
= w1_touch_bit(dev_master
, 1);
1485 /* ret should be either 1 either 0 */
1488 mutex_unlock(&dev_master
->bus_mutex
);
1491 atomic_dec(THERM_REFCNT(sl
->family_data
));
1496 static int trigger_bulk_read(struct w1_master
*dev_master
)
1498 struct w1_slave
*sl
= NULL
; /* used to iterate through slaves */
1499 int max_trying
= W1_THERM_MAX_TRY
;
1502 bool strong_pullup
= false;
1505 * Check whether there are parasite powered device on the bus,
1506 * and compute duration of conversion for these devices
1507 * so we can apply a strong pullup if required
1509 list_for_each_entry(sl
, &dev_master
->slist
, w1_slave_entry
) {
1510 if (!sl
->family_data
)
1512 if (bulk_read_support(sl
)) {
1513 int t_cur
= conversion_time(sl
);
1515 t_conv
= max(t_cur
, t_conv
);
1516 strong_pullup
= strong_pullup
||
1517 (w1_strong_pullup
== 2 ||
1518 (!SLAVE_POWERMODE(sl
) &&
1524 * t_conv is the max conversion time required on the bus
1525 * If its 0, no device support the bulk read feature
1530 if (!bus_mutex_lock(&dev_master
->bus_mutex
)) {
1531 ret
= -EAGAIN
; /* Didn't acquire the mutex */
1535 while ((max_trying
--) && (ret
< 0)) { /* ret should be either 0 */
1537 if (!w1_reset_bus(dev_master
)) { /* Just reset the bus */
1538 unsigned long sleep_rem
;
1540 w1_write_8(dev_master
, W1_SKIP_ROM
);
1542 if (strong_pullup
) /* Apply pullup if required */
1543 w1_next_pullup(dev_master
, t_conv
);
1545 w1_write_8(dev_master
, W1_CONVERT_TEMP
);
1547 /* set a flag to instruct that converT pending */
1548 list_for_each_entry(sl
,
1549 &dev_master
->slist
, w1_slave_entry
) {
1550 if (bulk_read_support(sl
))
1551 SLAVE_CONVERT_TRIGGERED(sl
) = -1;
1554 if (strong_pullup
) { /* some device need pullup */
1555 sleep_rem
= msleep_interruptible(t_conv
);
1556 if (sleep_rem
!= 0) {
1560 mutex_unlock(&dev_master
->bus_mutex
);
1562 mutex_unlock(&dev_master
->bus_mutex
);
1563 sleep_rem
= msleep_interruptible(t_conv
);
1564 if (sleep_rem
!= 0) {
1575 mutex_unlock(&dev_master
->bus_mutex
);
1577 /* set a flag to register convsersion is done */
1578 list_for_each_entry(sl
, &dev_master
->slist
, w1_slave_entry
) {
1579 if (bulk_read_support(sl
))
1580 SLAVE_CONVERT_TRIGGERED(sl
) = 1;
1586 /* Sysfs Interface definition */
1588 static ssize_t
w1_slave_show(struct device
*device
,
1589 struct device_attribute
*attr
, char *buf
)
1591 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1592 struct therm_info info
;
1593 u8
*family_data
= sl
->family_data
;
1595 ssize_t c
= PAGE_SIZE
;
1597 if (bulk_read_support(sl
)) {
1598 if (SLAVE_CONVERT_TRIGGERED(sl
) < 0) {
1600 "%s: Conversion in progress, retry later\n",
1603 } else if (SLAVE_CONVERT_TRIGGERED(sl
) > 0) {
1604 /* A bulk read has been issued, read the device RAM */
1605 ret
= read_scratchpad(sl
, &info
);
1606 SLAVE_CONVERT_TRIGGERED(sl
) = 0;
1608 ret
= convert_t(sl
, &info
);
1610 ret
= convert_t(sl
, &info
);
1614 "%s: Temperature data may be corrupted. err=%d\n",
1619 for (i
= 0; i
< 9; ++i
)
1620 c
-= snprintf(buf
+ PAGE_SIZE
- c
, c
, "%02x ", info
.rom
[i
]);
1621 c
-= snprintf(buf
+ PAGE_SIZE
- c
, c
, ": crc=%02x %s\n",
1622 info
.crc
, (info
.verdict
) ? "YES" : "NO");
1625 memcpy(family_data
, info
.rom
, sizeof(info
.rom
));
1627 dev_warn(device
, "%s:Read failed CRC check\n", __func__
);
1629 for (i
= 0; i
< 9; ++i
)
1630 c
-= snprintf(buf
+ PAGE_SIZE
- c
, c
, "%02x ",
1631 ((u8
*)family_data
)[i
]);
1633 c
-= snprintf(buf
+ PAGE_SIZE
- c
, c
, "t=%d\n",
1634 temperature_from_RAM(sl
, info
.rom
));
1636 ret
= PAGE_SIZE
- c
;
1640 static ssize_t
w1_slave_store(struct device
*device
,
1641 struct device_attribute
*attr
, const char *buf
,
1645 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1647 ret
= kstrtoint(buf
, 10, &val
); /* converting user entry to int */
1649 if (ret
) { /* conversion error */
1651 "%s: conversion error. err= %d\n", __func__
, ret
);
1652 return size
; /* return size to avoid call back again */
1655 if ((!sl
->family_data
) || (!SLAVE_SPECIFIC_FUNC(sl
))) {
1657 "%s: Device not supported by the driver\n", __func__
);
1658 return size
; /* No device family */
1661 if (val
== 0) /* val=0 : trigger a EEPROM save */
1662 ret
= copy_scratchpad(sl
);
1664 if (SLAVE_SPECIFIC_FUNC(sl
)->set_resolution
)
1665 ret
= SLAVE_SPECIFIC_FUNC(sl
)->set_resolution(sl
, val
);
1669 dev_warn(device
, "%s: Set resolution - error %d\n", __func__
, ret
);
1670 /* Propagate error to userspace */
1673 SLAVE_RESOLUTION(sl
) = val
;
1674 /* Reset the conversion time to default - it depends on resolution */
1675 SLAVE_CONV_TIME_OVERRIDE(sl
) = CONV_TIME_DEFAULT
;
1677 return size
; /* always return size to avoid infinite calling */
1680 static ssize_t
temperature_show(struct device
*device
,
1681 struct device_attribute
*attr
, char *buf
)
1683 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1684 struct therm_info info
;
1687 if ((!sl
->family_data
) || (!SLAVE_SPECIFIC_FUNC(sl
))) {
1689 "%s: Device not supported by the driver\n", __func__
);
1690 return 0; /* No device family */
1693 if (bulk_read_support(sl
)) {
1694 if (SLAVE_CONVERT_TRIGGERED(sl
) < 0) {
1696 "%s: Conversion in progress, retry later\n",
1699 } else if (SLAVE_CONVERT_TRIGGERED(sl
) > 0) {
1700 /* A bulk read has been issued, read the device RAM */
1701 ret
= read_scratchpad(sl
, &info
);
1702 SLAVE_CONVERT_TRIGGERED(sl
) = 0;
1704 ret
= convert_t(sl
, &info
);
1706 ret
= convert_t(sl
, &info
);
1710 "%s: Temperature data may be corrupted. err=%d\n",
1715 return sprintf(buf
, "%d\n", temperature_from_RAM(sl
, info
.rom
));
1718 static ssize_t
ext_power_show(struct device
*device
,
1719 struct device_attribute
*attr
, char *buf
)
1721 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1723 if (!sl
->family_data
) {
1725 "%s: Device not supported by the driver\n", __func__
);
1726 return 0; /* No device family */
1729 /* Getting the power mode of the device {external, parasite} */
1730 SLAVE_POWERMODE(sl
) = read_powermode(sl
);
1732 if (SLAVE_POWERMODE(sl
) < 0) {
1734 "%s: Power_mode may be corrupted. err=%d\n",
1735 __func__
, SLAVE_POWERMODE(sl
));
1737 return sprintf(buf
, "%d\n", SLAVE_POWERMODE(sl
));
1740 static ssize_t
resolution_show(struct device
*device
,
1741 struct device_attribute
*attr
, char *buf
)
1743 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1745 if ((!sl
->family_data
) || (!SLAVE_SPECIFIC_FUNC(sl
))) {
1747 "%s: Device not supported by the driver\n", __func__
);
1748 return 0; /* No device family */
1751 /* get the correct function depending on the device */
1752 SLAVE_RESOLUTION(sl
) = SLAVE_SPECIFIC_FUNC(sl
)->get_resolution(sl
);
1753 if (SLAVE_RESOLUTION(sl
) < 0) {
1755 "%s: Resolution may be corrupted. err=%d\n",
1756 __func__
, SLAVE_RESOLUTION(sl
));
1759 return sprintf(buf
, "%d\n", SLAVE_RESOLUTION(sl
));
1762 static ssize_t
resolution_store(struct device
*device
,
1763 struct device_attribute
*attr
, const char *buf
, size_t size
)
1765 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1769 ret
= kstrtoint(buf
, 10, &val
); /* converting user entry to int */
1771 if (ret
) { /* conversion error */
1773 "%s: conversion error. err= %d\n", __func__
, ret
);
1774 return size
; /* return size to avoid call back again */
1777 if ((!sl
->family_data
) || (!SLAVE_SPECIFIC_FUNC(sl
))) {
1779 "%s: Device not supported by the driver\n", __func__
);
1780 return size
; /* No device family */
1784 * Don't deal with the val enterd by user,
1785 * only device knows what is correct or not
1788 /* get the correct function depending on the device */
1789 ret
= SLAVE_SPECIFIC_FUNC(sl
)->set_resolution(sl
, val
);
1794 SLAVE_RESOLUTION(sl
) = val
;
1795 /* Reset the conversion time to default because it depends on resolution */
1796 SLAVE_CONV_TIME_OVERRIDE(sl
) = CONV_TIME_DEFAULT
;
1801 static ssize_t
eeprom_cmd_store(struct device
*device
,
1802 struct device_attribute
*attr
, const char *buf
, size_t size
)
1804 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1805 int ret
= -EINVAL
; /* Invalid argument */
1807 if (size
== sizeof(EEPROM_CMD_WRITE
)) {
1808 if (!strncmp(buf
, EEPROM_CMD_WRITE
, sizeof(EEPROM_CMD_WRITE
)-1))
1809 ret
= copy_scratchpad(sl
);
1810 } else if (size
== sizeof(EEPROM_CMD_READ
)) {
1811 if (!strncmp(buf
, EEPROM_CMD_READ
, sizeof(EEPROM_CMD_READ
)-1))
1812 ret
= recall_eeprom(sl
);
1816 dev_info(device
, "%s: error in process %d\n", __func__
, ret
);
1821 static ssize_t
alarms_show(struct device
*device
,
1822 struct device_attribute
*attr
, char *buf
)
1824 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1827 struct therm_info scratchpad
;
1829 ret
= read_scratchpad(sl
, &scratchpad
);
1832 th
= scratchpad
.rom
[2]; /* TH is byte 2 */
1833 tl
= scratchpad
.rom
[3]; /* TL is byte 3 */
1836 "%s: error reading alarms register %d\n",
1840 return sprintf(buf
, "%hd %hd\n", tl
, th
);
1843 static ssize_t
alarms_store(struct device
*device
,
1844 struct device_attribute
*attr
, const char *buf
, size_t size
)
1846 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1847 struct therm_info info
;
1848 u8 new_config_register
[3]; /* array of data to be written */
1851 s8 tl
, th
; /* 1 byte per value + temp ring order */
1852 char *p_args
, *orig
;
1854 p_args
= orig
= kmalloc(size
, GFP_KERNEL
);
1855 /* Safe string copys as buf is const */
1858 "%s: error unable to allocate memory %d\n",
1862 strcpy(p_args
, buf
);
1864 /* Split string using space char */
1865 token
= strsep(&p_args
, " ");
1869 "%s: error parsing args %d\n", __func__
, -EINVAL
);
1873 /* Convert 1st entry to int */
1874 ret
= kstrtoint (token
, 10, &temp
);
1877 "%s: error parsing args %d\n", __func__
, ret
);
1881 tl
= int_to_short(temp
);
1883 /* Split string using space char */
1884 token
= strsep(&p_args
, " ");
1887 "%s: error parsing args %d\n", __func__
, -EINVAL
);
1890 /* Convert 2nd entry to int */
1891 ret
= kstrtoint (token
, 10, &temp
);
1894 "%s: error parsing args %d\n", __func__
, ret
);
1898 /* Prepare to cast to short by eliminating out of range values */
1899 th
= int_to_short(temp
);
1901 /* Reorder if required th and tl */
1906 * Read the scratchpad to change only the required bits
1907 * (th : byte 2 - tl: byte 3)
1909 ret
= read_scratchpad(sl
, &info
);
1911 new_config_register
[0] = th
; /* Byte 2 */
1912 new_config_register
[1] = tl
; /* Byte 3 */
1913 new_config_register
[2] = info
.rom
[4];/* Byte 4 */
1916 "%s: error reading from the slave device %d\n",
1921 /* Write data in the device RAM */
1922 if (!SLAVE_SPECIFIC_FUNC(sl
)) {
1924 "%s: Device not supported by the driver %d\n",
1929 ret
= SLAVE_SPECIFIC_FUNC(sl
)->write_data(sl
, new_config_register
);
1932 "%s: error writing to the slave device %d\n",
1936 /* free allocated memory */
1942 static ssize_t
therm_bulk_read_store(struct device
*device
,
1943 struct device_attribute
*attr
, const char *buf
, size_t size
)
1945 struct w1_master
*dev_master
= dev_to_w1_master(device
);
1946 int ret
= -EINVAL
; /* Invalid argument */
1948 if (size
== sizeof(BULK_TRIGGER_CMD
))
1949 if (!strncmp(buf
, BULK_TRIGGER_CMD
,
1950 sizeof(BULK_TRIGGER_CMD
)-1))
1951 ret
= trigger_bulk_read(dev_master
);
1955 "%s: unable to trigger a bulk read on the bus. err=%d\n",
1961 static ssize_t
therm_bulk_read_show(struct device
*device
,
1962 struct device_attribute
*attr
, char *buf
)
1964 struct w1_master
*dev_master
= dev_to_w1_master(device
);
1965 struct w1_slave
*sl
= NULL
;
1968 list_for_each_entry(sl
, &dev_master
->slist
, w1_slave_entry
) {
1969 if (sl
->family_data
) {
1970 if (bulk_read_support(sl
)) {
1971 if (SLAVE_CONVERT_TRIGGERED(sl
) == -1) {
1975 if (SLAVE_CONVERT_TRIGGERED(sl
) == 1)
1976 /* continue to check other slaves */
1982 return sprintf(buf
, "%d\n", ret
);
1985 static ssize_t
conv_time_show(struct device
*device
,
1986 struct device_attribute
*attr
, char *buf
)
1988 struct w1_slave
*sl
= dev_to_w1_slave(device
);
1990 if ((!sl
->family_data
) || (!SLAVE_SPECIFIC_FUNC(sl
))) {
1992 "%s: Device is not supported by the driver\n", __func__
);
1993 return 0; /* No device family */
1995 return sprintf(buf
, "%d\n", conversion_time(sl
));
1998 static ssize_t
conv_time_store(struct device
*device
,
1999 struct device_attribute
*attr
, const char *buf
, size_t size
)
2002 struct w1_slave
*sl
= dev_to_w1_slave(device
);
2004 if (kstrtoint(buf
, 10, &val
)) /* converting user entry to int */
2007 if (check_family_data(sl
))
2010 if (val
!= CONV_TIME_MEASURE
) {
2011 if (val
>= CONV_TIME_DEFAULT
)
2012 SLAVE_CONV_TIME_OVERRIDE(sl
) = val
;
2019 ret
= conv_time_measure(sl
, &conv_time
);
2022 SLAVE_CONV_TIME_OVERRIDE(sl
) = conv_time
;
2027 static ssize_t
features_show(struct device
*device
,
2028 struct device_attribute
*attr
, char *buf
)
2030 struct w1_slave
*sl
= dev_to_w1_slave(device
);
2032 if ((!sl
->family_data
) || (!SLAVE_SPECIFIC_FUNC(sl
))) {
2034 "%s: Device not supported by the driver\n", __func__
);
2035 return 0; /* No device family */
2037 return sprintf(buf
, "%u\n", SLAVE_FEATURES(sl
));
2040 static ssize_t
features_store(struct device
*device
,
2041 struct device_attribute
*attr
, const char *buf
, size_t size
)
2045 struct w1_slave
*sl
= dev_to_w1_slave(device
);
2047 ret
= kstrtouint(buf
, 10, &val
); /* converting user entry to int */
2049 return -EINVAL
; /* invalid number */
2051 if ((!sl
->family_data
) || (!SLAVE_SPECIFIC_FUNC(sl
))) {
2052 dev_info(device
, "%s: Device not supported by the driver\n", __func__
);
2056 if ((val
& W1_THERM_FEATURES_MASK
) != val
)
2059 SLAVE_FEATURES(sl
) = val
;
2061 strong_pullup
= (w1_strong_pullup
== 2 ||
2062 (!SLAVE_POWERMODE(sl
) &&
2065 if (strong_pullup
&& SLAVE_FEATURES(sl
) & W1_THERM_POLL_COMPLETION
) {
2067 "%s: W1_THERM_POLL_COMPLETION disabled in parasite power mode.\n",
2069 SLAVE_FEATURES(sl
) &= ~W1_THERM_POLL_COMPLETION
;
2075 #if IS_REACHABLE(CONFIG_HWMON)
2076 static int w1_read_temp(struct device
*device
, u32 attr
, int channel
,
2079 struct w1_slave
*sl
= dev_get_drvdata(device
);
2080 struct therm_info info
;
2084 case hwmon_temp_input
:
2085 ret
= convert_t(sl
, &info
);
2089 if (!info
.verdict
) {
2094 *val
= temperature_from_RAM(sl
, info
.rom
);
2106 #define W1_42_CHAIN 0x99
2107 #define W1_42_CHAIN_OFF 0x3C
2108 #define W1_42_CHAIN_OFF_INV 0xC3
2109 #define W1_42_CHAIN_ON 0x5A
2110 #define W1_42_CHAIN_ON_INV 0xA5
2111 #define W1_42_CHAIN_DONE 0x96
2112 #define W1_42_CHAIN_DONE_INV 0x69
2113 #define W1_42_COND_READ 0x0F
2114 #define W1_42_SUCCESS_CONFIRM_BYTE 0xAA
2115 #define W1_42_FINISHED_BYTE 0xFF
2116 static ssize_t
w1_seq_show(struct device
*device
,
2117 struct device_attribute
*attr
, char *buf
)
2119 struct w1_slave
*sl
= dev_to_w1_slave(device
);
2120 ssize_t c
= PAGE_SIZE
;
2124 struct w1_reg_num
*reg_num
;
2127 mutex_lock(&sl
->master
->bus_mutex
);
2128 /* Place all devices in CHAIN state */
2129 if (w1_reset_bus(sl
->master
))
2131 w1_write_8(sl
->master
, W1_SKIP_ROM
);
2132 w1_write_8(sl
->master
, W1_42_CHAIN
);
2133 w1_write_8(sl
->master
, W1_42_CHAIN_ON
);
2134 w1_write_8(sl
->master
, W1_42_CHAIN_ON_INV
);
2135 msleep(sl
->master
->pullup_duration
);
2137 /* check for acknowledgment */
2138 ack
= w1_read_8(sl
->master
);
2139 if (ack
!= W1_42_SUCCESS_CONFIRM_BYTE
)
2142 /* In case the bus fails to send 0xFF, limit */
2143 for (i
= 0; i
<= 64; i
++) {
2144 if (w1_reset_bus(sl
->master
))
2147 w1_write_8(sl
->master
, W1_42_COND_READ
);
2148 w1_read_block(sl
->master
, (u8
*)&rn
, 8);
2149 reg_num
= (struct w1_reg_num
*) &rn
;
2150 if (reg_num
->family
== W1_42_FINISHED_BYTE
)
2152 if (sl
->reg_num
.id
== reg_num
->id
)
2155 if (w1_reset_bus(sl
->master
))
2158 /* Put the device into chain DONE state */
2159 w1_write_8(sl
->master
, W1_MATCH_ROM
);
2160 w1_write_block(sl
->master
, (u8
*)&rn
, 8);
2161 w1_write_8(sl
->master
, W1_42_CHAIN
);
2162 w1_write_8(sl
->master
, W1_42_CHAIN_DONE
);
2163 w1_write_8(sl
->master
, W1_42_CHAIN_DONE_INV
);
2165 /* check for acknowledgment */
2166 ack
= w1_read_8(sl
->master
);
2167 if (ack
!= W1_42_SUCCESS_CONFIRM_BYTE
)
2171 /* Exit from CHAIN state */
2172 if (w1_reset_bus(sl
->master
))
2174 w1_write_8(sl
->master
, W1_SKIP_ROM
);
2175 w1_write_8(sl
->master
, W1_42_CHAIN
);
2176 w1_write_8(sl
->master
, W1_42_CHAIN_OFF
);
2177 w1_write_8(sl
->master
, W1_42_CHAIN_OFF_INV
);
2179 /* check for acknowledgment */
2180 ack
= w1_read_8(sl
->master
);
2181 if (ack
!= W1_42_SUCCESS_CONFIRM_BYTE
)
2183 mutex_unlock(&sl
->master
->bus_mutex
);
2185 c
-= snprintf(buf
+ PAGE_SIZE
- c
, c
, "%d\n", seq
);
2186 return PAGE_SIZE
- c
;
2188 mutex_unlock(&sl
->master
->bus_mutex
);
2192 static int __init
w1_therm_init(void)
2196 for (i
= 0; i
< ARRAY_SIZE(w1_therm_families
); ++i
) {
2197 err
= w1_register_family(w1_therm_families
[i
].f
);
2199 w1_therm_families
[i
].broken
= 1;
2205 static void __exit
w1_therm_fini(void)
2209 for (i
= 0; i
< ARRAY_SIZE(w1_therm_families
); ++i
)
2210 if (!w1_therm_families
[i
].broken
)
2211 w1_unregister_family(w1_therm_families
[i
].f
);
2214 module_init(w1_therm_init
);
2215 module_exit(w1_therm_fini
);
2217 MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");
2218 MODULE_DESCRIPTION("Driver for 1-wire Dallas network protocol, temperature family.");
2219 MODULE_LICENSE("GPL");
2220 MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS18S20
));
2221 MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS1822
));
2222 MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS18B20
));
2223 MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS1825
));
2224 MODULE_ALIAS("w1-family-" __stringify(W1_THERM_DS28EA00
));