Lines Matching full:data

198 static int us5182d_oneshot_en(struct us5182d_data *data)  in us5182d_oneshot_en()  argument
202 ret = i2c_smbus_read_byte_data(data->client, US5182D_REG_CFG0); in us5182d_oneshot_en()
212 return i2c_smbus_write_byte_data(data->client, US5182D_REG_CFG0, ret); in us5182d_oneshot_en()
215 static int us5182d_set_opmode(struct us5182d_data *data, u8 mode) in us5182d_set_opmode() argument
219 if (mode == data->opmode) in us5182d_set_opmode()
222 ret = i2c_smbus_read_byte_data(data->client, US5182D_REG_CFG0); in us5182d_set_opmode()
235 ret = i2c_smbus_write_byte_data(data->client, US5182D_REG_CFG0, ret); in us5182d_set_opmode()
239 ret = i2c_smbus_write_byte_data(data->client, US5182D_REG_MODE_STORE, in us5182d_set_opmode()
244 data->opmode = mode; in us5182d_set_opmode()
250 static int us5182d_als_enable(struct us5182d_data *data) in us5182d_als_enable() argument
255 if (data->power_mode == US5182D_ONESHOT) { in us5182d_als_enable()
256 ret = us5182d_set_opmode(data, US5182D_ALS_ONLY); in us5182d_als_enable()
259 data->px_enabled = false; in us5182d_als_enable()
262 if (data->als_enabled) in us5182d_als_enable()
265 mode = data->px_enabled ? US5182D_ALS_PX : US5182D_ALS_ONLY; in us5182d_als_enable()
267 ret = us5182d_set_opmode(data, mode); in us5182d_als_enable()
271 data->als_enabled = true; in us5182d_als_enable()
276 static int us5182d_px_enable(struct us5182d_data *data) in us5182d_px_enable() argument
281 if (data->power_mode == US5182D_ONESHOT) { in us5182d_px_enable()
282 ret = us5182d_set_opmode(data, US5182D_PX_ONLY); in us5182d_px_enable()
285 data->als_enabled = false; in us5182d_px_enable()
288 if (data->px_enabled) in us5182d_px_enable()
291 mode = data->als_enabled ? US5182D_ALS_PX : US5182D_PX_ONLY; in us5182d_px_enable()
293 ret = us5182d_set_opmode(data, mode); in us5182d_px_enable()
297 data->px_enabled = true; in us5182d_px_enable()
302 static int us5182d_get_als(struct us5182d_data *data) in us5182d_get_als() argument
307 ret = us5182d_als_enable(data); in us5182d_get_als()
311 ret = i2c_smbus_read_word_data(data->client, in us5182d_get_als()
316 result = ret * data->ga / US5182D_GA_RESOLUTION; in us5182d_get_als()
323 static int us5182d_get_px(struct us5182d_data *data) in us5182d_get_px() argument
327 ret = us5182d_px_enable(data); in us5182d_get_px()
331 return i2c_smbus_read_word_data(data->client, in us5182d_get_px()
335 static int us5182d_shutdown_en(struct us5182d_data *data, u8 state) in us5182d_shutdown_en() argument
339 if (data->power_mode == US5182D_ONESHOT) in us5182d_shutdown_en()
342 ret = i2c_smbus_read_byte_data(data->client, US5182D_REG_CFG0); in us5182d_shutdown_en()
349 ret = i2c_smbus_write_byte_data(data->client, US5182D_REG_CFG0, ret); in us5182d_shutdown_en()
354 data->als_enabled = false; in us5182d_shutdown_en()
355 data->px_enabled = false; in us5182d_shutdown_en()
362 static int us5182d_set_power_state(struct us5182d_data *data, bool on) in us5182d_set_power_state() argument
366 if (data->power_mode == US5182D_ONESHOT) in us5182d_set_power_state()
370 ret = pm_runtime_get_sync(&data->client->dev); in us5182d_set_power_state()
372 pm_runtime_put_noidle(&data->client->dev); in us5182d_set_power_state()
374 pm_runtime_mark_last_busy(&data->client->dev); in us5182d_set_power_state()
375 ret = pm_runtime_put_autosuspend(&data->client->dev); in us5182d_set_power_state()
381 static int us5182d_read_value(struct us5182d_data *data, in us5182d_read_value() argument
386 mutex_lock(&data->lock); in us5182d_read_value()
388 if (data->power_mode == US5182D_ONESHOT) { in us5182d_read_value()
389 ret = us5182d_oneshot_en(data); in us5182d_read_value()
394 ret = us5182d_set_power_state(data, true); in us5182d_read_value()
399 ret = us5182d_get_als(data); in us5182d_read_value()
401 ret = us5182d_get_px(data); in us5182d_read_value()
407 ret = us5182d_set_power_state(data, false); in us5182d_read_value()
411 mutex_unlock(&data->lock); in us5182d_read_value()
415 us5182d_set_power_state(data, false); in us5182d_read_value()
417 mutex_unlock(&data->lock); in us5182d_read_value()
425 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_read_raw() local
430 ret = us5182d_read_value(data, chan); in us5182d_read_raw()
436 ret = i2c_smbus_read_byte_data(data->client, US5182D_REG_CFG1); in us5182d_read_raw()
449 * @data: us5182d_data structure
456 static int us5182d_update_dark_th(struct us5182d_data *data, int index) in us5182d_update_dark_th() argument
458 __be16 dark_th = cpu_to_be16(data->us5182d_dark_ths[index]); in us5182d_update_dark_th()
461 ret = i2c_smbus_write_byte_data(data->client, US5182D_REG_UDARK_TH, in us5182d_update_dark_th()
466 return i2c_smbus_write_byte_data(data->client, US5182D_REG_UDARK_TH + 1, in us5182d_update_dark_th()
472 * @data: us5182d_data structure
478 static int us5182d_apply_scale(struct us5182d_data *data, int index) in us5182d_apply_scale() argument
482 ret = i2c_smbus_read_byte_data(data->client, US5182D_REG_CFG1); in us5182d_apply_scale()
489 ret = i2c_smbus_write_byte_data(data->client, US5182D_REG_CFG1, ret); in us5182d_apply_scale()
493 return us5182d_update_dark_th(data, index); in us5182d_apply_scale()
500 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_write_raw() local
509 mutex_lock(&data->lock); in us5182d_write_raw()
510 ret = us5182d_apply_scale(data, i); in us5182d_write_raw()
511 mutex_unlock(&data->lock); in us5182d_write_raw()
525 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_setup_prox() local
528 return i2c_smbus_write_word_data(data->client, in us5182d_setup_prox()
531 return i2c_smbus_write_word_data(data->client, in us5182d_setup_prox()
542 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_read_thresh() local
546 mutex_lock(&data->lock); in us5182d_read_thresh()
547 *val = data->px_high_th; in us5182d_read_thresh()
548 mutex_unlock(&data->lock); in us5182d_read_thresh()
551 mutex_lock(&data->lock); in us5182d_read_thresh()
552 *val = data->px_low_th; in us5182d_read_thresh()
553 mutex_unlock(&data->lock); in us5182d_read_thresh()
567 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_write_thresh() local
575 mutex_lock(&data->lock); in us5182d_write_thresh()
576 if (data->rising_en) { in us5182d_write_thresh()
581 data->px_high_th = val; in us5182d_write_thresh()
582 mutex_unlock(&data->lock); in us5182d_write_thresh()
585 mutex_lock(&data->lock); in us5182d_write_thresh()
586 if (data->falling_en) { in us5182d_write_thresh()
591 data->px_low_th = val; in us5182d_write_thresh()
592 mutex_unlock(&data->lock); in us5182d_write_thresh()
600 mutex_unlock(&data->lock); in us5182d_write_thresh()
608 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_read_event_config() local
613 mutex_lock(&data->lock); in us5182d_read_event_config()
614 ret = data->rising_en; in us5182d_read_event_config()
615 mutex_unlock(&data->lock); in us5182d_read_event_config()
618 mutex_lock(&data->lock); in us5182d_read_event_config()
619 ret = data->falling_en; in us5182d_read_event_config()
620 mutex_unlock(&data->lock); in us5182d_read_event_config()
634 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_write_event_config() local
638 mutex_lock(&data->lock); in us5182d_write_event_config()
642 if (data->rising_en == state) { in us5182d_write_event_config()
643 mutex_unlock(&data->lock); in us5182d_write_event_config()
648 data->power_mode = US5182D_CONTINUOUS; in us5182d_write_event_config()
649 ret = us5182d_set_power_state(data, true); in us5182d_write_event_config()
652 ret = us5182d_px_enable(data); in us5182d_write_event_config()
655 new_th = data->px_high_th; in us5182d_write_event_config()
660 data->rising_en = state; in us5182d_write_event_config()
663 if (data->falling_en == state) { in us5182d_write_event_config()
664 mutex_unlock(&data->lock); in us5182d_write_event_config()
669 data->power_mode = US5182D_CONTINUOUS; in us5182d_write_event_config()
670 ret = us5182d_set_power_state(data, true); in us5182d_write_event_config()
673 ret = us5182d_px_enable(data); in us5182d_write_event_config()
676 new_th = data->px_low_th; in us5182d_write_event_config()
681 data->falling_en = state; in us5182d_write_event_config()
689 ret = us5182d_set_power_state(data, false); in us5182d_write_event_config()
694 if (!data->falling_en && !data->rising_en && !data->default_continuous) in us5182d_write_event_config()
695 data->power_mode = US5182D_ONESHOT; in us5182d_write_event_config()
697 mutex_unlock(&data->lock); in us5182d_write_event_config()
702 us5182d_set_power_state(data, false); in us5182d_write_event_config()
704 mutex_unlock(&data->lock); in us5182d_write_event_config()
720 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_reset() local
722 return i2c_smbus_write_byte_data(data->client, US5182D_REG_CFG3, in us5182d_reset()
728 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_init() local
735 data->opmode = 0; in us5182d_init()
736 data->power_mode = US5182D_CONTINUOUS; in us5182d_init()
737 data->px_low_th = US5182D_REG_PXL_TH_DEFAULT; in us5182d_init()
738 data->px_high_th = US5182D_REG_PXH_TH_DEFAULT; in us5182d_init()
741 ret = i2c_smbus_write_byte_data(data->client, in us5182d_init()
748 data->als_enabled = true; in us5182d_init()
749 data->px_enabled = true; in us5182d_init()
751 if (!data->default_continuous) { in us5182d_init()
752 ret = us5182d_shutdown_en(data, US5182D_CFG0_SHUTDOWN_EN); in us5182d_init()
755 data->power_mode = US5182D_ONESHOT; in us5182d_init()
763 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_get_platform_data() local
765 if (device_property_read_u32(&data->client->dev, "upisemi,glass-coef", in us5182d_get_platform_data()
766 &data->ga)) in us5182d_get_platform_data()
767 data->ga = US5182D_GA_RESOLUTION; in us5182d_get_platform_data()
768 if (device_property_read_u16_array(&data->client->dev, in us5182d_get_platform_data()
770 data->us5182d_dark_ths, in us5182d_get_platform_data()
772 data->us5182d_dark_ths = us5182d_dark_ths_vals; in us5182d_get_platform_data()
773 if (device_property_read_u8(&data->client->dev, in us5182d_get_platform_data()
775 &data->upper_dark_gain)) in us5182d_get_platform_data()
776 data->upper_dark_gain = US5182D_REG_AUTO_HDARK_GAIN_DEFAULT; in us5182d_get_platform_data()
777 if (device_property_read_u8(&data->client->dev, in us5182d_get_platform_data()
779 &data->lower_dark_gain)) in us5182d_get_platform_data()
780 data->lower_dark_gain = US5182D_REG_AUTO_LDARK_GAIN_DEFAULT; in us5182d_get_platform_data()
781 data->default_continuous = device_property_read_bool(&data->client->dev, in us5182d_get_platform_data()
787 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_dark_gain_config() local
790 ret = us5182d_update_dark_th(data, US5182D_CFG1_AGAIN_DEFAULT); in us5182d_dark_gain_config()
794 ret = i2c_smbus_write_byte_data(data->client, in us5182d_dark_gain_config()
796 data->lower_dark_gain); in us5182d_dark_gain_config()
800 ret = i2c_smbus_write_byte_data(data->client, in us5182d_dark_gain_config()
802 data->upper_dark_gain); in us5182d_dark_gain_config()
806 return i2c_smbus_write_byte_data(data->client, US5182D_REG_DARK_AUTO_EN, in us5182d_dark_gain_config()
813 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_irq_thread_handler() local
818 ret = i2c_smbus_read_byte_data(data->client, US5182D_REG_CFG0); in us5182d_irq_thread_handler()
820 dev_err(&data->client->dev, "i2c transfer error in irq\n"); in us5182d_irq_thread_handler()
829 ret = i2c_smbus_write_byte_data(data->client, US5182D_REG_CFG0, in us5182d_irq_thread_handler()
832 dev_err(&data->client->dev, "i2c transfer error in irq\n"); in us5182d_irq_thread_handler()
840 struct us5182d_data *data; in us5182d_probe() local
844 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in us5182d_probe()
848 data = iio_priv(indio_dev); in us5182d_probe()
850 data->client = client; in us5182d_probe()
852 mutex_init(&data->lock); in us5182d_probe()
860 ret = i2c_smbus_read_byte_data(data->client, US5182D_REG_CHIPID); in us5182d_probe()
862 dev_err(&data->client->dev, in us5182d_probe()
886 if (data->default_continuous) { in us5182d_probe()
904 us5182d_shutdown_en(data, US5182D_CFG0_SHUTDOWN_EN); in us5182d_probe()
911 struct us5182d_data *data = iio_priv(i2c_get_clientdata(client)); in us5182d_remove() local
918 return us5182d_shutdown_en(data, US5182D_CFG0_SHUTDOWN_EN); in us5182d_remove()
925 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_suspend() local
927 if (data->power_mode == US5182D_CONTINUOUS) in us5182d_suspend()
928 return us5182d_shutdown_en(data, US5182D_CFG0_SHUTDOWN_EN); in us5182d_suspend()
936 struct us5182d_data *data = iio_priv(indio_dev); in us5182d_resume() local
938 if (data->power_mode == US5182D_CONTINUOUS) in us5182d_resume()
939 return us5182d_shutdown_en(data, in us5182d_resume()