Lines Matching refs:hx711_data
79 struct hx711_data { struct
101 static int hx711_cycle(struct hx711_data *hx711_data) in hx711_cycle() argument
111 gpiod_set_value(hx711_data->gpiod_pd_sck, 1); in hx711_cycle()
118 ndelay(hx711_data->data_ready_delay_ns); in hx711_cycle()
126 gpiod_set_value(hx711_data->gpiod_pd_sck, 0); in hx711_cycle()
133 ndelay(hx711_data->data_ready_delay_ns); in hx711_cycle()
136 return gpiod_get_value(hx711_data->gpiod_dout); in hx711_cycle()
139 static int hx711_read(struct hx711_data *hx711_data) in hx711_read() argument
143 int val = gpiod_get_value(hx711_data->gpiod_dout); in hx711_read()
151 ret = hx711_cycle(hx711_data); in hx711_read()
158 for (i = 0; i < hx711_get_gain_to_pulse(hx711_data->gain_set); i++) in hx711_read()
159 hx711_cycle(hx711_data); in hx711_read()
164 static int hx711_wait_for_ready(struct hx711_data *hx711_data) in hx711_wait_for_ready() argument
174 val = gpiod_get_value(hx711_data->gpiod_dout); in hx711_wait_for_ready()
186 static int hx711_reset(struct hx711_data *hx711_data) in hx711_reset() argument
188 int val = hx711_wait_for_ready(hx711_data); in hx711_reset()
200 gpiod_set_value(hx711_data->gpiod_pd_sck, 1); in hx711_reset()
202 gpiod_set_value(hx711_data->gpiod_pd_sck, 0); in hx711_reset()
204 val = hx711_wait_for_ready(hx711_data); in hx711_reset()
207 hx711_data->gain_set = HX711_RESET_GAIN; in hx711_reset()
213 static int hx711_set_gain_for_channel(struct hx711_data *hx711_data, int chan) in hx711_set_gain_for_channel() argument
218 if (hx711_data->gain_set == 32) { in hx711_set_gain_for_channel()
219 hx711_data->gain_set = hx711_data->gain_chan_a; in hx711_set_gain_for_channel()
221 ret = hx711_read(hx711_data); in hx711_set_gain_for_channel()
225 ret = hx711_wait_for_ready(hx711_data); in hx711_set_gain_for_channel()
230 if (hx711_data->gain_set != 32) { in hx711_set_gain_for_channel()
231 hx711_data->gain_set = 32; in hx711_set_gain_for_channel()
233 ret = hx711_read(hx711_data); in hx711_set_gain_for_channel()
237 ret = hx711_wait_for_ready(hx711_data); in hx711_set_gain_for_channel()
246 static int hx711_reset_read(struct hx711_data *hx711_data, int chan) in hx711_reset_read() argument
255 if (hx711_reset(hx711_data)) { in hx711_reset_read()
256 dev_err(hx711_data->dev, "reset failed!"); in hx711_reset_read()
260 ret = hx711_set_gain_for_channel(hx711_data, chan); in hx711_reset_read()
264 val = hx711_read(hx711_data); in hx711_reset_read()
273 struct hx711_data *hx711_data = iio_priv(indio_dev); in hx711_read_raw() local
277 mutex_lock(&hx711_data->lock); in hx711_read_raw()
279 *val = hx711_reset_read(hx711_data, chan->channel); in hx711_read_raw()
281 mutex_unlock(&hx711_data->lock); in hx711_read_raw()
288 mutex_lock(&hx711_data->lock); in hx711_read_raw()
290 *val2 = hx711_get_gain_to_scale(hx711_data->gain_set); in hx711_read_raw()
292 mutex_unlock(&hx711_data->lock); in hx711_read_raw()
306 struct hx711_data *hx711_data = iio_priv(indio_dev); in hx711_write_raw() local
319 mutex_lock(&hx711_data->lock); in hx711_write_raw()
323 mutex_unlock(&hx711_data->lock); in hx711_write_raw()
327 if (gain != hx711_data->gain_set) { in hx711_write_raw()
328 hx711_data->gain_set = gain; in hx711_write_raw()
330 hx711_data->gain_chan_a = gain; in hx711_write_raw()
332 ret = hx711_read(hx711_data); in hx711_write_raw()
334 mutex_unlock(&hx711_data->lock); in hx711_write_raw()
339 mutex_unlock(&hx711_data->lock); in hx711_write_raw()
359 struct hx711_data *hx711_data = iio_priv(indio_dev); in hx711_trigger() local
362 mutex_lock(&hx711_data->lock); in hx711_trigger()
364 memset(hx711_data->buffer, 0, sizeof(hx711_data->buffer)); in hx711_trigger()
367 hx711_data->buffer[j] = hx711_reset_read(hx711_data, in hx711_trigger()
372 iio_push_to_buffers_with_timestamp(indio_dev, hx711_data->buffer, in hx711_trigger()
375 mutex_unlock(&hx711_data->lock); in hx711_trigger()
458 struct hx711_data *hx711_data; in hx711_probe() local
463 indio_dev = devm_iio_device_alloc(dev, sizeof(struct hx711_data)); in hx711_probe()
467 hx711_data = iio_priv(indio_dev); in hx711_probe()
468 hx711_data->dev = dev; in hx711_probe()
470 mutex_init(&hx711_data->lock); in hx711_probe()
476 hx711_data->gpiod_pd_sck = devm_gpiod_get(dev, "sck", GPIOD_OUT_LOW); in hx711_probe()
477 if (IS_ERR(hx711_data->gpiod_pd_sck)) in hx711_probe()
478 return dev_err_probe(dev, PTR_ERR(hx711_data->gpiod_pd_sck), in hx711_probe()
485 hx711_data->gpiod_dout = devm_gpiod_get(dev, "dout", GPIOD_IN); in hx711_probe()
486 if (IS_ERR(hx711_data->gpiod_dout)) in hx711_probe()
487 return dev_err_probe(dev, PTR_ERR(hx711_data->gpiod_dout), in hx711_probe()
514 hx711_data->gain_set = 128; in hx711_probe()
515 hx711_data->gain_chan_a = 128; in hx711_probe()
517 hx711_data->clock_frequency = 400000; in hx711_probe()
519 &hx711_data->clock_frequency); in hx711_probe()
525 if (hx711_data->clock_frequency < 20000) { in hx711_probe()
527 hx711_data->clock_frequency = 400000; in hx711_probe()
530 hx711_data->data_ready_delay_ns = in hx711_probe()
531 1000000000 / hx711_data->clock_frequency; in hx711_probe()