Lines Matching refs:sl
101 #define SLAVE_SPECIFIC_FUNC(sl) \ argument
102 (((struct w1_therm_family_data *)(sl->family_data))->specific_functions)
108 #define SLAVE_POWERMODE(sl) \ argument
109 (((struct w1_therm_family_data *)(sl->family_data))->external_powered)
115 #define SLAVE_RESOLUTION(sl) \ argument
116 (((struct w1_therm_family_data *)(sl->family_data))->resolution)
122 #define SLAVE_CONV_TIME_OVERRIDE(sl) \ argument
123 (((struct w1_therm_family_data *)(sl->family_data))->conv_time_override)
129 #define SLAVE_FEATURES(sl) \ argument
130 (((struct w1_therm_family_data *)(sl->family_data))->features)
138 #define SLAVE_CONVERT_TRIGGERED(sl) \ argument
139 (((struct w1_therm_family_data *)(sl->family_data))->convert_triggered)
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);
223 static int reset_select_slave(struct w1_slave *sl);
232 static int convert_t(struct w1_slave *sl, struct therm_info *info);
241 static int read_scratchpad(struct w1_slave *sl, struct therm_info *info);
251 static int write_scratchpad(struct w1_slave *sl, const u8 *data, u8 nb_bytes);
259 static int copy_scratchpad(struct w1_slave *sl);
267 static int recall_eeprom(struct w1_slave *sl);
281 static int read_powermode(struct w1_slave *sl);
371 static int w1_therm_add_slave(struct w1_slave *sl);
380 static void w1_therm_remove_slave(struct w1_slave *sl);
528 static inline int w1_DS18B20_convert_time(struct w1_slave *sl) in w1_DS18B20_convert_time() argument
532 if (!sl->family_data) in w1_DS18B20_convert_time()
535 if (SLAVE_CONV_TIME_OVERRIDE(sl) != CONV_TIME_DEFAULT) in w1_DS18B20_convert_time()
536 return SLAVE_CONV_TIME_OVERRIDE(sl); in w1_DS18B20_convert_time()
541 switch (SLAVE_RESOLUTION(sl)) { in w1_DS18B20_convert_time()
566 static inline int w1_DS18S20_convert_time(struct w1_slave *sl) in w1_DS18S20_convert_time() argument
568 if (!sl->family_data) in w1_DS18S20_convert_time()
571 if (SLAVE_CONV_TIME_OVERRIDE(sl) == CONV_TIME_DEFAULT) in w1_DS18S20_convert_time()
574 return SLAVE_CONV_TIME_OVERRIDE(sl); in w1_DS18S20_convert_time()
577 static inline int w1_DS18B20_write_data(struct w1_slave *sl, in w1_DS18B20_write_data() argument
580 return write_scratchpad(sl, data, 3); in w1_DS18B20_write_data()
583 static inline int w1_DS18S20_write_data(struct w1_slave *sl, in w1_DS18S20_write_data() argument
587 return write_scratchpad(sl, data, 2); in w1_DS18S20_write_data()
590 static inline int w1_DS18B20_set_resolution(struct w1_slave *sl, int val) in w1_DS18B20_set_resolution() argument
607 ret = read_scratchpad(sl, &info); in w1_DS18B20_set_resolution()
617 ret = w1_DS18B20_write_data(sl, info.rom + 2); in w1_DS18B20_set_resolution()
625 ret = read_scratchpad(sl, &info2); in w1_DS18B20_set_resolution()
637 static inline int w1_DS18B20_get_resolution(struct w1_slave *sl) in w1_DS18B20_get_resolution() argument
643 ret = read_scratchpad(sl, &info); in w1_DS18B20_get_resolution()
778 static struct w1_therm_family_converter *device_family(struct w1_slave *sl) in device_family() argument
784 if (w1_therm_families[i].f->fid == sl->family->fid) { in device_family()
826 static int check_family_data(struct w1_slave *sl) in check_family_data() argument
828 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in check_family_data()
829 dev_info(&sl->dev, in check_family_data()
842 static inline bool bulk_read_support(struct w1_slave *sl) in bulk_read_support() argument
844 if (SLAVE_SPECIFIC_FUNC(sl)) in bulk_read_support()
845 return SLAVE_SPECIFIC_FUNC(sl)->bulk_read; in bulk_read_support()
847 dev_info(&sl->dev, in bulk_read_support()
863 static inline int conversion_time(struct w1_slave *sl) in conversion_time() argument
865 if (SLAVE_SPECIFIC_FUNC(sl)) in conversion_time()
866 return SLAVE_SPECIFIC_FUNC(sl)->get_conversion_time(sl); in conversion_time()
868 dev_info(&sl->dev, in conversion_time()
883 static inline int temperature_from_RAM(struct w1_slave *sl, u8 rom[9]) in temperature_from_RAM() argument
885 if (SLAVE_SPECIFIC_FUNC(sl)) in temperature_from_RAM()
886 return SLAVE_SPECIFIC_FUNC(sl)->convert(rom); in temperature_from_RAM()
888 dev_info(&sl->dev, in temperature_from_RAM()
915 static int w1_therm_add_slave(struct w1_slave *sl) in w1_therm_add_slave() argument
920 sl->family_data = kzalloc(sizeof(struct w1_therm_family_data), in w1_therm_add_slave()
922 if (!sl->family_data) in w1_therm_add_slave()
925 atomic_set(THERM_REFCNT(sl->family_data), 1); in w1_therm_add_slave()
928 sl_family_conv = device_family(sl); in w1_therm_add_slave()
930 kfree(sl->family_data); in w1_therm_add_slave()
934 SLAVE_SPECIFIC_FUNC(sl) = sl_family_conv; in w1_therm_add_slave()
936 if (bulk_read_support(sl)) { in w1_therm_add_slave()
942 int err = device_create_file(&sl->master->dev, in w1_therm_add_slave()
946 dev_warn(&sl->dev, in w1_therm_add_slave()
955 SLAVE_POWERMODE(sl) = read_powermode(sl); in w1_therm_add_slave()
957 if (SLAVE_POWERMODE(sl) < 0) { in w1_therm_add_slave()
959 dev_warn(&sl->dev, in w1_therm_add_slave()
961 __func__, SLAVE_POWERMODE(sl)); in w1_therm_add_slave()
965 if (SLAVE_SPECIFIC_FUNC(sl)->get_resolution) { in w1_therm_add_slave()
966 SLAVE_RESOLUTION(sl) = in w1_therm_add_slave()
967 SLAVE_SPECIFIC_FUNC(sl)->get_resolution(sl); in w1_therm_add_slave()
968 if (SLAVE_RESOLUTION(sl) < 0) { in w1_therm_add_slave()
970 dev_warn(&sl->dev, in w1_therm_add_slave()
972 __func__, SLAVE_RESOLUTION(sl)); in w1_therm_add_slave()
977 SLAVE_CONVERT_TRIGGERED(sl) = 0; in w1_therm_add_slave()
982 static void w1_therm_remove_slave(struct w1_slave *sl) in w1_therm_remove_slave() argument
984 int refcnt = atomic_sub_return(1, THERM_REFCNT(sl->family_data)); in w1_therm_remove_slave()
986 if (bulk_read_support(sl)) { in w1_therm_remove_slave()
990 device_remove_file(&sl->master->dev, in w1_therm_remove_slave()
996 refcnt = atomic_read(THERM_REFCNT(sl->family_data)); in w1_therm_remove_slave()
998 kfree(sl->family_data); in w1_therm_remove_slave()
999 sl->family_data = NULL; in w1_therm_remove_slave()
1005 static int reset_select_slave(struct w1_slave *sl) in reset_select_slave() argument
1008 u64 rn = le64_to_cpu(*((u64 *)&sl->reg_num)); in reset_select_slave()
1010 if (w1_reset_bus(sl->master)) in reset_select_slave()
1014 w1_write_block(sl->master, match, 9); in reset_select_slave()
1047 static int convert_t(struct w1_slave *sl, struct therm_info *info) in convert_t() argument
1049 struct w1_master *dev_master = sl->master; in convert_t()
1055 if (!sl->family_data) in convert_t()
1059 (!SLAVE_POWERMODE(sl) && in convert_t()
1062 if (strong_pullup && SLAVE_FEATURES(sl) & W1_THERM_POLL_COMPLETION) { in convert_t()
1063 dev_warn(&sl->dev, in convert_t()
1066 SLAVE_FEATURES(sl) &= ~W1_THERM_POLL_COMPLETION; in convert_t()
1070 t_conv = conversion_time(sl); in convert_t()
1075 atomic_inc(THERM_REFCNT(sl->family_data)); in convert_t()
1087 if (!reset_select_slave(sl)) { in convert_t()
1096 if (SLAVE_FEATURES(sl) & W1_THERM_POLL_COMPLETION) { in convert_t()
1099 dev_dbg(&sl->dev, "%s: Timeout\n", __func__); in convert_t()
1118 ret = read_scratchpad(sl, info); in convert_t()
1121 if ((SLAVE_FEATURES(sl) & W1_THERM_CHECK_RESULT) && in convert_t()
1141 atomic_dec(THERM_REFCNT(sl->family_data)); in convert_t()
1146 static int conv_time_measure(struct w1_slave *sl, int *conv_time) in conv_time_measure() argument
1150 struct w1_master *dev_master = sl->master; in conv_time_measure()
1155 if (!sl->family_data) in conv_time_measure()
1159 (!SLAVE_POWERMODE(sl) && in conv_time_measure()
1170 atomic_inc(THERM_REFCNT(sl->family_data)); in conv_time_measure()
1181 if (!reset_select_slave(sl)) { in conv_time_measure()
1190 dev_dbg(&sl->dev, "%s: Timeout\n", __func__); in conv_time_measure()
1203 ret = read_scratchpad(sl, info); in conv_time_measure()
1211 atomic_dec(THERM_REFCNT(sl->family_data)); in conv_time_measure()
1216 static int read_scratchpad(struct w1_slave *sl, struct therm_info *info) in read_scratchpad() argument
1218 struct w1_master *dev_master = sl->master; in read_scratchpad()
1224 if (!sl->family_data) in read_scratchpad()
1230 atomic_inc(THERM_REFCNT(sl->family_data)); in read_scratchpad()
1239 if (!reset_select_slave(sl)) { in read_scratchpad()
1246 dev_warn(&sl->dev, in read_scratchpad()
1265 atomic_dec(THERM_REFCNT(sl->family_data)); in read_scratchpad()
1270 static int write_scratchpad(struct w1_slave *sl, const u8 *data, u8 nb_bytes) in write_scratchpad() argument
1272 struct w1_master *dev_master = sl->master; in write_scratchpad()
1276 if (!sl->family_data) in write_scratchpad()
1280 atomic_inc(THERM_REFCNT(sl->family_data)); in write_scratchpad()
1289 if (!reset_select_slave(sl)) { in write_scratchpad()
1298 atomic_dec(THERM_REFCNT(sl->family_data)); in write_scratchpad()
1303 static int copy_scratchpad(struct w1_slave *sl) in copy_scratchpad() argument
1305 struct w1_master *dev_master = sl->master; in copy_scratchpad()
1310 if (!sl->family_data) in copy_scratchpad()
1315 (!SLAVE_POWERMODE(sl) && in copy_scratchpad()
1319 atomic_inc(THERM_REFCNT(sl->family_data)); in copy_scratchpad()
1328 if (!reset_select_slave(sl)) { in copy_scratchpad()
1352 atomic_dec(THERM_REFCNT(sl->family_data)); in copy_scratchpad()
1357 static int recall_eeprom(struct w1_slave *sl) in recall_eeprom() argument
1359 struct w1_master *dev_master = sl->master; in recall_eeprom()
1363 if (!sl->family_data) in recall_eeprom()
1367 atomic_inc(THERM_REFCNT(sl->family_data)); in recall_eeprom()
1376 if (!reset_select_slave(sl)) { in recall_eeprom()
1387 atomic_dec(THERM_REFCNT(sl->family_data)); in recall_eeprom()
1392 static int read_powermode(struct w1_slave *sl) in read_powermode() argument
1394 struct w1_master *dev_master = sl->master; in read_powermode()
1398 if (!sl->family_data) in read_powermode()
1402 atomic_inc(THERM_REFCNT(sl->family_data)); in read_powermode()
1411 if (!reset_select_slave(sl)) { in read_powermode()
1425 atomic_dec(THERM_REFCNT(sl->family_data)); in read_powermode()
1432 struct w1_slave *sl = NULL; /* used to iterate through slaves */ in trigger_bulk_read() local
1443 list_for_each_entry(sl, &dev_master->slist, w1_slave_entry) { in trigger_bulk_read()
1444 if (!sl->family_data) in trigger_bulk_read()
1446 if (bulk_read_support(sl)) { in trigger_bulk_read()
1447 int t_cur = conversion_time(sl); in trigger_bulk_read()
1452 (!SLAVE_POWERMODE(sl) && in trigger_bulk_read()
1482 list_for_each_entry(sl, in trigger_bulk_read()
1484 if (bulk_read_support(sl)) in trigger_bulk_read()
1485 SLAVE_CONVERT_TRIGGERED(sl) = -1; in trigger_bulk_read()
1512 list_for_each_entry(sl, &dev_master->slist, w1_slave_entry) { in trigger_bulk_read()
1513 if (bulk_read_support(sl)) in trigger_bulk_read()
1514 SLAVE_CONVERT_TRIGGERED(sl) = 1; in trigger_bulk_read()
1525 struct w1_slave *sl = dev_to_w1_slave(device); in w1_slave_show() local
1527 u8 *family_data = sl->family_data; in w1_slave_show()
1531 if (bulk_read_support(sl)) { in w1_slave_show()
1532 if (SLAVE_CONVERT_TRIGGERED(sl) < 0) { in w1_slave_show()
1537 } else if (SLAVE_CONVERT_TRIGGERED(sl) > 0) { in w1_slave_show()
1539 ret = read_scratchpad(sl, &info); in w1_slave_show()
1540 SLAVE_CONVERT_TRIGGERED(sl) = 0; in w1_slave_show()
1542 ret = convert_t(sl, &info); in w1_slave_show()
1544 ret = convert_t(sl, &info); in w1_slave_show()
1568 temperature_from_RAM(sl, info.rom)); in w1_slave_show()
1579 struct w1_slave *sl = dev_to_w1_slave(device); in w1_slave_store() local
1589 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in w1_slave_store()
1596 ret = copy_scratchpad(sl); in w1_slave_store()
1598 if (SLAVE_SPECIFIC_FUNC(sl)->set_resolution) in w1_slave_store()
1599 ret = SLAVE_SPECIFIC_FUNC(sl)->set_resolution(sl, val); in w1_slave_store()
1607 SLAVE_RESOLUTION(sl) = val; in w1_slave_store()
1609 SLAVE_CONV_TIME_OVERRIDE(sl) = CONV_TIME_DEFAULT; in w1_slave_store()
1617 struct w1_slave *sl = dev_to_w1_slave(device); in temperature_show() local
1621 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in temperature_show()
1627 if (bulk_read_support(sl)) { in temperature_show()
1628 if (SLAVE_CONVERT_TRIGGERED(sl) < 0) { in temperature_show()
1633 } else if (SLAVE_CONVERT_TRIGGERED(sl) > 0) { in temperature_show()
1635 ret = read_scratchpad(sl, &info); in temperature_show()
1636 SLAVE_CONVERT_TRIGGERED(sl) = 0; in temperature_show()
1638 ret = convert_t(sl, &info); in temperature_show()
1640 ret = convert_t(sl, &info); in temperature_show()
1649 return sprintf(buf, "%d\n", temperature_from_RAM(sl, info.rom)); in temperature_show()
1655 struct w1_slave *sl = dev_to_w1_slave(device); in ext_power_show() local
1657 if (!sl->family_data) { in ext_power_show()
1664 SLAVE_POWERMODE(sl) = read_powermode(sl); in ext_power_show()
1666 if (SLAVE_POWERMODE(sl) < 0) { in ext_power_show()
1669 __func__, SLAVE_POWERMODE(sl)); in ext_power_show()
1671 return sprintf(buf, "%d\n", SLAVE_POWERMODE(sl)); in ext_power_show()
1677 struct w1_slave *sl = dev_to_w1_slave(device); in resolution_show() local
1679 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in resolution_show()
1686 SLAVE_RESOLUTION(sl) = SLAVE_SPECIFIC_FUNC(sl)->get_resolution(sl); in resolution_show()
1687 if (SLAVE_RESOLUTION(sl) < 0) { in resolution_show()
1690 __func__, SLAVE_RESOLUTION(sl)); in resolution_show()
1693 return sprintf(buf, "%d\n", SLAVE_RESOLUTION(sl)); in resolution_show()
1699 struct w1_slave *sl = dev_to_w1_slave(device); in resolution_store() local
1711 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in resolution_store()
1723 ret = SLAVE_SPECIFIC_FUNC(sl)->set_resolution(sl, val); in resolution_store()
1728 SLAVE_RESOLUTION(sl) = val; in resolution_store()
1730 SLAVE_CONV_TIME_OVERRIDE(sl) = CONV_TIME_DEFAULT; in resolution_store()
1738 struct w1_slave *sl = dev_to_w1_slave(device); in eeprom_cmd_store() local
1743 ret = copy_scratchpad(sl); in eeprom_cmd_store()
1746 ret = recall_eeprom(sl); in eeprom_cmd_store()
1758 struct w1_slave *sl = dev_to_w1_slave(device); in alarms_show() local
1763 ret = read_scratchpad(sl, &scratchpad); in alarms_show()
1780 struct w1_slave *sl = dev_to_w1_slave(device); in alarms_store() local
1844 ret = read_scratchpad(sl, &info); in alarms_store()
1857 if (!SLAVE_SPECIFIC_FUNC(sl)) { in alarms_store()
1864 ret = SLAVE_SPECIFIC_FUNC(sl)->write_data(sl, new_config_register); in alarms_store()
1900 struct w1_slave *sl = NULL; in therm_bulk_read_show() local
1903 list_for_each_entry(sl, &dev_master->slist, w1_slave_entry) { in therm_bulk_read_show()
1904 if (sl->family_data) { in therm_bulk_read_show()
1905 if (bulk_read_support(sl)) { in therm_bulk_read_show()
1906 if (SLAVE_CONVERT_TRIGGERED(sl) == -1) { in therm_bulk_read_show()
1910 if (SLAVE_CONVERT_TRIGGERED(sl) == 1) in therm_bulk_read_show()
1923 struct w1_slave *sl = dev_to_w1_slave(device); in conv_time_show() local
1925 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in conv_time_show()
1930 return sprintf(buf, "%d\n", conversion_time(sl)); in conv_time_show()
1937 struct w1_slave *sl = dev_to_w1_slave(device); in conv_time_store() local
1942 if (check_family_data(sl)) in conv_time_store()
1947 SLAVE_CONV_TIME_OVERRIDE(sl) = val; in conv_time_store()
1954 ret = conv_time_measure(sl, &conv_time); in conv_time_store()
1957 SLAVE_CONV_TIME_OVERRIDE(sl) = conv_time; in conv_time_store()
1965 struct w1_slave *sl = dev_to_w1_slave(device); in features_show() local
1967 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in features_show()
1972 return sprintf(buf, "%u\n", SLAVE_FEATURES(sl)); in features_show()
1980 struct w1_slave *sl = dev_to_w1_slave(device); in features_store() local
1986 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in features_store()
1994 SLAVE_FEATURES(sl) = val; in features_store()
1997 (!SLAVE_POWERMODE(sl) && in features_store()
2000 if (strong_pullup && SLAVE_FEATURES(sl) & W1_THERM_POLL_COMPLETION) { in features_store()
2001 dev_warn(&sl->dev, in features_store()
2004 SLAVE_FEATURES(sl) &= ~W1_THERM_POLL_COMPLETION; in features_store()
2014 struct w1_slave *sl = dev_get_drvdata(device); in w1_read_temp() local
2020 ret = convert_t(sl, &info); in w1_read_temp()
2029 *val = temperature_from_RAM(sl, info.rom); in w1_read_temp()
2054 struct w1_slave *sl = dev_to_w1_slave(device); in w1_seq_show() local
2062 mutex_lock(&sl->master->bus_mutex); in w1_seq_show()
2064 if (w1_reset_bus(sl->master)) in w1_seq_show()
2066 w1_write_8(sl->master, W1_SKIP_ROM); in w1_seq_show()
2067 w1_write_8(sl->master, W1_42_CHAIN); in w1_seq_show()
2068 w1_write_8(sl->master, W1_42_CHAIN_ON); in w1_seq_show()
2069 w1_write_8(sl->master, W1_42_CHAIN_ON_INV); in w1_seq_show()
2070 msleep(sl->master->pullup_duration); in w1_seq_show()
2073 ack = w1_read_8(sl->master); in w1_seq_show()
2079 if (w1_reset_bus(sl->master)) in w1_seq_show()
2082 w1_write_8(sl->master, W1_42_COND_READ); in w1_seq_show()
2083 w1_read_block(sl->master, (u8 *)&rn, 8); in w1_seq_show()
2087 if (sl->reg_num.id == reg_num->id) in w1_seq_show()
2090 if (w1_reset_bus(sl->master)) in w1_seq_show()
2094 w1_write_8(sl->master, W1_MATCH_ROM); in w1_seq_show()
2095 w1_write_block(sl->master, (u8 *)&rn, 8); in w1_seq_show()
2096 w1_write_8(sl->master, W1_42_CHAIN); in w1_seq_show()
2097 w1_write_8(sl->master, W1_42_CHAIN_DONE); in w1_seq_show()
2098 w1_write_8(sl->master, W1_42_CHAIN_DONE_INV); in w1_seq_show()
2101 ack = w1_read_8(sl->master); in w1_seq_show()
2107 if (w1_reset_bus(sl->master)) in w1_seq_show()
2109 w1_write_8(sl->master, W1_SKIP_ROM); in w1_seq_show()
2110 w1_write_8(sl->master, W1_42_CHAIN); in w1_seq_show()
2111 w1_write_8(sl->master, W1_42_CHAIN_OFF); in w1_seq_show()
2112 w1_write_8(sl->master, W1_42_CHAIN_OFF_INV); in w1_seq_show()
2115 ack = w1_read_8(sl->master); in w1_seq_show()
2118 mutex_unlock(&sl->master->bus_mutex); in w1_seq_show()
2123 mutex_unlock(&sl->master->bus_mutex); in w1_seq_show()