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()
1104 if (SLAVE_FEATURES(sl) & W1_THERM_POLL_COMPLETION) { in convert_t()
1107 dev_dbg(&sl->dev, "%s: Timeout\n", __func__); in convert_t()
1121 ret = read_scratchpad(sl, info); in convert_t()
1124 if ((SLAVE_FEATURES(sl) & W1_THERM_CHECK_RESULT) && in convert_t()
1144 atomic_dec(THERM_REFCNT(sl->family_data)); in convert_t()
1149 static int conv_time_measure(struct w1_slave *sl, int *conv_time) in conv_time_measure() argument
1153 struct w1_master *dev_master = sl->master; in conv_time_measure()
1158 if (!sl->family_data) in conv_time_measure()
1162 (!SLAVE_POWERMODE(sl) && in conv_time_measure()
1173 atomic_inc(THERM_REFCNT(sl->family_data)); in conv_time_measure()
1184 if (!reset_select_slave(sl)) { in conv_time_measure()
1193 dev_dbg(&sl->dev, "%s: Timeout\n", __func__); in conv_time_measure()
1206 ret = read_scratchpad(sl, info); in conv_time_measure()
1214 atomic_dec(THERM_REFCNT(sl->family_data)); in conv_time_measure()
1219 static int read_scratchpad(struct w1_slave *sl, struct therm_info *info) in read_scratchpad() argument
1221 struct w1_master *dev_master = sl->master; in read_scratchpad()
1227 if (!sl->family_data) in read_scratchpad()
1233 atomic_inc(THERM_REFCNT(sl->family_data)); in read_scratchpad()
1242 if (!reset_select_slave(sl)) { in read_scratchpad()
1249 dev_warn(&sl->dev, in read_scratchpad()
1268 atomic_dec(THERM_REFCNT(sl->family_data)); in read_scratchpad()
1273 static int write_scratchpad(struct w1_slave *sl, const u8 *data, u8 nb_bytes) in write_scratchpad() argument
1275 struct w1_master *dev_master = sl->master; in write_scratchpad()
1279 if (!sl->family_data) in write_scratchpad()
1283 atomic_inc(THERM_REFCNT(sl->family_data)); in write_scratchpad()
1292 if (!reset_select_slave(sl)) { in write_scratchpad()
1301 atomic_dec(THERM_REFCNT(sl->family_data)); in write_scratchpad()
1306 static int copy_scratchpad(struct w1_slave *sl) in copy_scratchpad() argument
1308 struct w1_master *dev_master = sl->master; in copy_scratchpad()
1313 if (!sl->family_data) in copy_scratchpad()
1318 (!SLAVE_POWERMODE(sl) && in copy_scratchpad()
1322 atomic_inc(THERM_REFCNT(sl->family_data)); in copy_scratchpad()
1331 if (!reset_select_slave(sl)) { in copy_scratchpad()
1355 atomic_dec(THERM_REFCNT(sl->family_data)); in copy_scratchpad()
1360 static int recall_eeprom(struct w1_slave *sl) in recall_eeprom() argument
1362 struct w1_master *dev_master = sl->master; in recall_eeprom()
1366 if (!sl->family_data) in recall_eeprom()
1370 atomic_inc(THERM_REFCNT(sl->family_data)); in recall_eeprom()
1379 if (!reset_select_slave(sl)) { in recall_eeprom()
1390 atomic_dec(THERM_REFCNT(sl->family_data)); in recall_eeprom()
1395 static int read_powermode(struct w1_slave *sl) in read_powermode() argument
1397 struct w1_master *dev_master = sl->master; in read_powermode()
1401 if (!sl->family_data) in read_powermode()
1405 atomic_inc(THERM_REFCNT(sl->family_data)); in read_powermode()
1414 if (!reset_select_slave(sl)) { in read_powermode()
1428 atomic_dec(THERM_REFCNT(sl->family_data)); in read_powermode()
1435 struct w1_slave *sl = NULL; /* used to iterate through slaves */ in trigger_bulk_read() local
1446 list_for_each_entry(sl, &dev_master->slist, w1_slave_entry) { in trigger_bulk_read()
1447 if (!sl->family_data) in trigger_bulk_read()
1449 if (bulk_read_support(sl)) { in trigger_bulk_read()
1450 int t_cur = conversion_time(sl); in trigger_bulk_read()
1455 (!SLAVE_POWERMODE(sl) && in trigger_bulk_read()
1485 list_for_each_entry(sl, in trigger_bulk_read()
1487 if (bulk_read_support(sl)) in trigger_bulk_read()
1488 SLAVE_CONVERT_TRIGGERED(sl) = -1; in trigger_bulk_read()
1515 list_for_each_entry(sl, &dev_master->slist, w1_slave_entry) { in trigger_bulk_read()
1516 if (bulk_read_support(sl)) in trigger_bulk_read()
1517 SLAVE_CONVERT_TRIGGERED(sl) = 1; in trigger_bulk_read()
1528 struct w1_slave *sl = dev_to_w1_slave(device); in w1_slave_show() local
1530 u8 *family_data = sl->family_data; in w1_slave_show()
1534 if (bulk_read_support(sl)) { in w1_slave_show()
1535 if (SLAVE_CONVERT_TRIGGERED(sl) < 0) { in w1_slave_show()
1540 } else if (SLAVE_CONVERT_TRIGGERED(sl) > 0) { in w1_slave_show()
1542 ret = read_scratchpad(sl, &info); in w1_slave_show()
1543 SLAVE_CONVERT_TRIGGERED(sl) = 0; in w1_slave_show()
1545 ret = convert_t(sl, &info); in w1_slave_show()
1547 ret = convert_t(sl, &info); in w1_slave_show()
1571 temperature_from_RAM(sl, info.rom)); in w1_slave_show()
1582 struct w1_slave *sl = dev_to_w1_slave(device); in w1_slave_store() local
1592 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in w1_slave_store()
1599 ret = copy_scratchpad(sl); in w1_slave_store()
1601 if (SLAVE_SPECIFIC_FUNC(sl)->set_resolution) in w1_slave_store()
1602 ret = SLAVE_SPECIFIC_FUNC(sl)->set_resolution(sl, val); in w1_slave_store()
1610 SLAVE_RESOLUTION(sl) = val; in w1_slave_store()
1612 SLAVE_CONV_TIME_OVERRIDE(sl) = CONV_TIME_DEFAULT; in w1_slave_store()
1620 struct w1_slave *sl = dev_to_w1_slave(device); in temperature_show() local
1624 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in temperature_show()
1630 if (bulk_read_support(sl)) { in temperature_show()
1631 if (SLAVE_CONVERT_TRIGGERED(sl) < 0) { in temperature_show()
1636 } else if (SLAVE_CONVERT_TRIGGERED(sl) > 0) { in temperature_show()
1638 ret = read_scratchpad(sl, &info); in temperature_show()
1639 SLAVE_CONVERT_TRIGGERED(sl) = 0; in temperature_show()
1641 ret = convert_t(sl, &info); in temperature_show()
1643 ret = convert_t(sl, &info); in temperature_show()
1652 return sprintf(buf, "%d\n", temperature_from_RAM(sl, info.rom)); in temperature_show()
1658 struct w1_slave *sl = dev_to_w1_slave(device); in ext_power_show() local
1660 if (!sl->family_data) { in ext_power_show()
1667 SLAVE_POWERMODE(sl) = read_powermode(sl); in ext_power_show()
1669 if (SLAVE_POWERMODE(sl) < 0) { in ext_power_show()
1672 __func__, SLAVE_POWERMODE(sl)); in ext_power_show()
1674 return sprintf(buf, "%d\n", SLAVE_POWERMODE(sl)); in ext_power_show()
1680 struct w1_slave *sl = dev_to_w1_slave(device); in resolution_show() local
1682 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in resolution_show()
1689 SLAVE_RESOLUTION(sl) = SLAVE_SPECIFIC_FUNC(sl)->get_resolution(sl); in resolution_show()
1690 if (SLAVE_RESOLUTION(sl) < 0) { in resolution_show()
1693 __func__, SLAVE_RESOLUTION(sl)); in resolution_show()
1696 return sprintf(buf, "%d\n", SLAVE_RESOLUTION(sl)); in resolution_show()
1702 struct w1_slave *sl = dev_to_w1_slave(device); in resolution_store() local
1714 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in resolution_store()
1726 ret = SLAVE_SPECIFIC_FUNC(sl)->set_resolution(sl, val); in resolution_store()
1731 SLAVE_RESOLUTION(sl) = val; in resolution_store()
1733 SLAVE_CONV_TIME_OVERRIDE(sl) = CONV_TIME_DEFAULT; in resolution_store()
1741 struct w1_slave *sl = dev_to_w1_slave(device); in eeprom_cmd_store() local
1746 ret = copy_scratchpad(sl); in eeprom_cmd_store()
1749 ret = recall_eeprom(sl); in eeprom_cmd_store()
1761 struct w1_slave *sl = dev_to_w1_slave(device); in alarms_show() local
1766 ret = read_scratchpad(sl, &scratchpad); in alarms_show()
1783 struct w1_slave *sl = dev_to_w1_slave(device); in alarms_store() local
1847 ret = read_scratchpad(sl, &info); in alarms_store()
1860 if (!SLAVE_SPECIFIC_FUNC(sl)) { in alarms_store()
1867 ret = SLAVE_SPECIFIC_FUNC(sl)->write_data(sl, new_config_register); in alarms_store()
1903 struct w1_slave *sl = NULL; in therm_bulk_read_show() local
1906 list_for_each_entry(sl, &dev_master->slist, w1_slave_entry) { in therm_bulk_read_show()
1907 if (sl->family_data) { in therm_bulk_read_show()
1908 if (bulk_read_support(sl)) { in therm_bulk_read_show()
1909 if (SLAVE_CONVERT_TRIGGERED(sl) == -1) { in therm_bulk_read_show()
1913 if (SLAVE_CONVERT_TRIGGERED(sl) == 1) in therm_bulk_read_show()
1926 struct w1_slave *sl = dev_to_w1_slave(device); in conv_time_show() local
1928 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in conv_time_show()
1933 return sprintf(buf, "%d\n", conversion_time(sl)); in conv_time_show()
1940 struct w1_slave *sl = dev_to_w1_slave(device); in conv_time_store() local
1945 if (check_family_data(sl)) in conv_time_store()
1950 SLAVE_CONV_TIME_OVERRIDE(sl) = val; in conv_time_store()
1957 ret = conv_time_measure(sl, &conv_time); in conv_time_store()
1960 SLAVE_CONV_TIME_OVERRIDE(sl) = conv_time; in conv_time_store()
1968 struct w1_slave *sl = dev_to_w1_slave(device); in features_show() local
1970 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in features_show()
1975 return sprintf(buf, "%u\n", SLAVE_FEATURES(sl)); in features_show()
1983 struct w1_slave *sl = dev_to_w1_slave(device); in features_store() local
1989 if ((!sl->family_data) || (!SLAVE_SPECIFIC_FUNC(sl))) { in features_store()
1997 SLAVE_FEATURES(sl) = val; in features_store()
2000 (!SLAVE_POWERMODE(sl) && in features_store()
2003 if (strong_pullup && SLAVE_FEATURES(sl) & W1_THERM_POLL_COMPLETION) { in features_store()
2004 dev_warn(&sl->dev, in features_store()
2007 SLAVE_FEATURES(sl) &= ~W1_THERM_POLL_COMPLETION; in features_store()
2017 struct w1_slave *sl = dev_get_drvdata(device); in w1_read_temp() local
2023 ret = convert_t(sl, &info); in w1_read_temp()
2032 *val = temperature_from_RAM(sl, info.rom); in w1_read_temp()
2057 struct w1_slave *sl = dev_to_w1_slave(device); in w1_seq_show() local
2065 mutex_lock(&sl->master->bus_mutex); in w1_seq_show()
2067 if (w1_reset_bus(sl->master)) in w1_seq_show()
2069 w1_write_8(sl->master, W1_SKIP_ROM); in w1_seq_show()
2070 w1_write_8(sl->master, W1_42_CHAIN); in w1_seq_show()
2071 w1_write_8(sl->master, W1_42_CHAIN_ON); in w1_seq_show()
2072 w1_write_8(sl->master, W1_42_CHAIN_ON_INV); in w1_seq_show()
2073 msleep(sl->master->pullup_duration); in w1_seq_show()
2076 ack = w1_read_8(sl->master); in w1_seq_show()
2082 if (w1_reset_bus(sl->master)) in w1_seq_show()
2085 w1_write_8(sl->master, W1_42_COND_READ); in w1_seq_show()
2086 w1_read_block(sl->master, (u8 *)&rn, 8); in w1_seq_show()
2090 if (sl->reg_num.id == reg_num->id) in w1_seq_show()
2093 w1_write_8(sl->master, W1_42_CHAIN); in w1_seq_show()
2094 w1_write_8(sl->master, W1_42_CHAIN_DONE); in w1_seq_show()
2095 w1_write_8(sl->master, W1_42_CHAIN_DONE_INV); in w1_seq_show()
2096 w1_read_block(sl->master, &ack, sizeof(ack)); in w1_seq_show()
2099 ack = w1_read_8(sl->master); in w1_seq_show()
2106 if (w1_reset_bus(sl->master)) in w1_seq_show()
2108 w1_write_8(sl->master, W1_SKIP_ROM); in w1_seq_show()
2109 w1_write_8(sl->master, W1_42_CHAIN); in w1_seq_show()
2110 w1_write_8(sl->master, W1_42_CHAIN_OFF); in w1_seq_show()
2111 w1_write_8(sl->master, W1_42_CHAIN_OFF_INV); in w1_seq_show()
2114 ack = w1_read_8(sl->master); in w1_seq_show()
2117 mutex_unlock(&sl->master->bus_mutex); in w1_seq_show()
2122 mutex_unlock(&sl->master->bus_mutex); in w1_seq_show()