Lines Matching refs:sl
85 static int w1_f19_i2c_busy_wait(struct w1_slave *sl, size_t count)
88 struct w1_f19_data *data = sl->family_data;
92 if (w1_touch_bit(sl->master, 1) == 0)
108 if (w1_touch_bit(sl->master, 1) == 0)
116 dev_warn(&sl->dev, "busy timeout\n");
122 static size_t w1_f19_error(struct w1_slave *sl, u8 w1_buf[])
126 dev_warn(&sl->dev, "crc16 mismatch\n");
128 dev_warn(&sl->dev, "i2c device not responding\n");
131 dev_warn(&sl->dev, "i2c short write, %d bytes not acknowledged\n",
149 static int __w1_f19_i2c_write(struct w1_slave *sl,
159 w1_write_block(sl->master, command, command_count);
163 w1_write_8(sl->master, w1_buf[0]);
166 w1_write_block(sl->master, buffer, count);
170 w1_write_block(sl->master, w1_buf, 2);
173 if (w1_f19_i2c_busy_wait(sl, count + 1) < 0)
177 w1_read_block(sl->master, w1_buf, 2);
180 error = w1_f19_error(sl, w1_buf);
190 static int w1_f19_i2c_write(struct w1_slave *sl, u16 i2c_address,
213 result = __w1_f19_i2c_write(sl, command, 2, buffer, count);
221 result = __w1_f19_i2c_write(sl, command, 2, p,
227 if (w1_reset_resume_command(sl->master))
237 result = __w1_f19_i2c_write(sl, command, 1, p,
243 if (w1_reset_resume_command(sl->master))
254 result = __w1_f19_i2c_write(sl, command, 1, p, remaining);
262 static int w1_f19_i2c_read(struct w1_slave *sl, u16 i2c_address,
280 w1_write_block(sl->master, w1_buf, 5);
283 if (w1_f19_i2c_busy_wait(sl, count + 1) < 0)
287 w1_buf[0] = w1_read_8(sl->master);
291 error = w1_f19_error(sl, w1_buf);
296 return w1_read_block(sl->master, buffer, count);
301 static int w1_f19_i2c_write_read(struct w1_slave *sl, u16 i2c_address,
317 w1_write_block(sl->master, w1_buf, 3);
320 w1_write_block(sl->master, wbuffer, wcount);
326 w1_write_block(sl->master, w1_buf, 3);
329 if (w1_f19_i2c_busy_wait(sl, wcount + rcount + 2) < 0)
333 w1_read_block(sl->master, w1_buf, 2);
336 error = w1_f19_error(sl, w1_buf);
341 return w1_read_block(sl->master, rbuffer, rcount);
349 struct w1_slave *sl = (struct w1_slave *) adapter->algo_data;
354 mutex_lock(&sl->master->bus_mutex);
357 if (w1_reset_select_slave(sl)) {
377 result = w1_f19_i2c_write_read(sl, msgs[i].addr,
392 result = w1_f19_i2c_read(sl, msgs[i+1].addr,
404 result = w1_f19_i2c_read(sl, msgs[i].addr,
418 result = w1_f19_i2c_read(sl,
433 result = w1_f19_i2c_write(sl,
450 if (w1_reset_resume_command(sl->master)) {
459 mutex_unlock(&sl->master->bus_mutex);
500 static int w1_f19_get_i2c_speed(struct w1_slave *sl)
502 struct w1_f19_data *data = sl->family_data;
506 mutex_lock(&sl->master->bus_mutex);
509 if (w1_reset_select_slave(sl))
513 w1_write_8(sl->master, W1_F19_READ_CONFIGURATION);
514 result = w1_read_8(sl->master);
525 mutex_unlock(&sl->master->bus_mutex);
532 static int __w1_f19_set_i2c_speed(struct w1_slave *sl, u8 speed)
534 struct w1_f19_data *data = sl->family_data;
539 if (w1_reset_select_slave(sl))
544 w1_write_block(sl->master, w1_buf, 2);
549 dev_info(&sl->dev, "i2c speed set to %d kBaud\n", i2c_speeds[speed]);
554 static int w1_f19_set_i2c_speed(struct w1_slave *sl, u8 speed)
559 mutex_lock(&sl->master->bus_mutex);
562 result = __w1_f19_set_i2c_speed(sl, speed);
565 mutex_unlock(&sl->master->bus_mutex);
577 struct w1_slave *sl = dev_to_w1_slave(dev);
581 result = w1_f19_get_i2c_speed(sl);
592 struct w1_slave *sl = dev_to_w1_slave(dev);
606 error = w1_f19_set_i2c_speed(sl, 0);
609 error = w1_f19_set_i2c_speed(sl, 1);
612 error = w1_f19_set_i2c_speed(sl, 2);
632 struct w1_slave *sl = dev_to_w1_slave(dev);
633 struct w1_f19_data *data = sl->family_data;
642 struct w1_slave *sl = dev_to_w1_slave(dev);
643 struct w1_f19_data *data = sl->family_data;
681 static int w1_f19_add_slave(struct w1_slave *sl)
686 data = devm_kzalloc(&sl->dev, sizeof(*data), GFP_KERNEL);
689 sl->family_data = data;
694 __w1_f19_set_i2c_speed(sl, 0);
697 __w1_f19_set_i2c_speed(sl, 1);
700 __w1_f19_set_i2c_speed(sl, 2);
721 data->adapter.algo_data = sl;
723 strcat(data->adapter.name, sl->name);
724 data->adapter.dev.parent = &sl->dev;
730 static void w1_f19_remove_slave(struct w1_slave *sl)
732 struct w1_f19_data *family_data = sl->family_data;
738 devm_kfree(&sl->dev, family_data);
739 sl->family_data = NULL;