Lines Matching +full:cs0 +full:- +full:ground
1 // SPDX-License-Identifier: GPL-2.0
8 * linux-driver-SX9310_NoSmartHSensing>.
132 /* 4 hardware channels, as defined in STAT0: COMB, CS2, CS1 and CS0. */
168 SX9310_CHANNEL(0), /* CS0 */
264 ret = regmap_write(data->regmap, SX9310_REG_SENSOR_SEL, chan->channel); in sx9310_read_prox_data()
268 return regmap_bulk_read(data->regmap, chan->address, val, sizeof(*val)); in sx9310_read_prox_data()
280 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, &val); in sx9310_wait_for_sample()
297 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL3, ®val); in sx9310_read_gain()
301 switch (chan->channel) { in sx9310_read_gain()
311 return -EINVAL; in sx9310_read_gain()
324 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, ®val); in sx9310_read_samp_freq()
342 if (chan->type != IIO_PROXIMITY) in sx9310_read_raw()
343 return -EINVAL; in sx9310_read_raw()
348 return -EBUSY; in sx9310_read_raw()
355 return -EBUSY; in sx9310_read_raw()
363 return -EINVAL; in sx9310_read_raw()
374 if (chan->type != IIO_PROXIMITY) in sx9310_read_avail()
375 return -EINVAL; in sx9310_read_avail()
389 return -EINVAL; in sx9310_read_avail()
408 return -EINVAL; in sx9310_get_thresh_reg()
419 reg = ret = sx9310_get_thresh_reg(chan->channel); in sx9310_read_thresh()
423 ret = regmap_read(data->regmap, reg, ®val); in sx9310_read_thresh()
429 return -EINVAL; in sx9310_read_thresh()
445 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL10, ®val); in sx9310_read_hysteresis()
454 *val = pthresh >> (5 - regval); in sx9310_read_hysteresis()
464 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL10, ®val); in sx9310_read_far_debounce()
482 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL10, ®val); in sx9310_read_close_debounce()
503 if (chan->type != IIO_PROXIMITY) in sx9310_read_event_val()
504 return -EINVAL; in sx9310_read_event_val()
516 return -EINVAL; in sx9310_read_event_val()
521 return -EINVAL; in sx9310_read_event_val()
532 reg = ret = sx9310_get_thresh_reg(chan->channel); in sx9310_write_thresh()
544 return -EINVAL; in sx9310_write_thresh()
548 guard(mutex)(&data->mutex); in sx9310_write_thresh()
549 return regmap_update_bits(data->regmap, reg, in sx9310_write_thresh()
572 return -EINVAL; in sx9310_write_hysteresis()
576 guard(mutex)(&data->mutex); in sx9310_write_hysteresis()
577 return regmap_update_bits(data->regmap, SX9310_REG_PROX_CTRL10, in sx9310_write_hysteresis()
588 return -EINVAL; in sx9310_write_far_debounce()
592 guard(mutex)(&data->mutex); in sx9310_write_far_debounce()
593 return regmap_update_bits(data->regmap, SX9310_REG_PROX_CTRL10, in sx9310_write_far_debounce()
605 return -EINVAL; in sx9310_write_close_debounce()
609 guard(mutex)(&data->mutex); in sx9310_write_close_debounce()
610 return regmap_update_bits(data->regmap, SX9310_REG_PROX_CTRL10, in sx9310_write_close_debounce()
623 if (chan->type != IIO_PROXIMITY) in sx9310_write_event_val()
624 return -EINVAL; in sx9310_write_event_val()
636 return -EINVAL; in sx9310_write_event_val()
641 return -EINVAL; in sx9310_write_event_val()
655 return -EINVAL; in sx9310_set_samp_freq()
657 guard(mutex)(&data->mutex); in sx9310_set_samp_freq()
659 data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_set_samp_freq()
671 switch (chan->channel) { in sx9310_write_gain()
683 return -EINVAL; in sx9310_write_gain()
686 guard(mutex)(&data->mutex); in sx9310_write_gain()
687 return regmap_update_bits(data->regmap, SX9310_REG_PROX_CTRL3, mask, in sx9310_write_gain()
697 if (chan->type != IIO_PROXIMITY) in sx9310_write_raw()
698 return -EINVAL; in sx9310_write_raw()
706 return -EINVAL; in sx9310_write_raw()
760 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, &ctrl0); in sx9310_init_compensation()
765 ret = regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_init_compensation()
770 ret = regmap_read_poll_timeout(data->regmap, SX9310_REG_STAT1, val, in sx9310_init_compensation()
776 regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, ctrl0); in sx9310_init_compensation()
791 switch (reg_def->reg) { in sx9310_get_default_reg()
793 if (device_property_read_bool(dev, "semtech,cs0-ground")) { in sx9310_get_default_reg()
794 reg_def->def &= ~SX9310_REG_PROX_CTRL2_SHIELDEN_MASK; in sx9310_get_default_reg()
795 reg_def->def |= SX9310_REG_PROX_CTRL2_SHIELDEN_GROUND; in sx9310_get_default_reg()
798 count = device_property_count_u32(dev, "semtech,combined-sensors"); in sx9310_get_default_reg()
801 ret = device_property_read_u32_array(dev, "semtech,combined-sensors", in sx9310_get_default_reg()
809 reg_def->def &= ~SX9310_REG_PROX_CTRL2_COMBMODE_MASK; in sx9310_get_default_reg()
811 reg_def->def |= SX9310_REG_PROX_CTRL2_COMBMODE_CS0_CS1_CS2_CS3; in sx9310_get_default_reg()
813 reg_def->def |= SX9310_REG_PROX_CTRL2_COMBMODE_CS1_CS2; in sx9310_get_default_reg()
815 reg_def->def |= SX9310_REG_PROX_CTRL2_COMBMODE_CS0_CS1; in sx9310_get_default_reg()
817 reg_def->def |= SX9310_REG_PROX_CTRL2_COMBMODE_CS3; in sx9310_get_default_reg()
825 reg_def->def &= ~SX9310_REG_PROX_CTRL4_RESOLUTION_MASK; in sx9310_get_default_reg()
827 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_COARSEST; in sx9310_get_default_reg()
828 else if (!strcmp(res, "very-coarse")) in sx9310_get_default_reg()
829 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_VERY_COARSE; in sx9310_get_default_reg()
831 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_COARSE; in sx9310_get_default_reg()
832 else if (!strcmp(res, "medium-coarse")) in sx9310_get_default_reg()
833 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_MEDIUM_COARSE; in sx9310_get_default_reg()
835 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_MEDIUM; in sx9310_get_default_reg()
837 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_FINE; in sx9310_get_default_reg()
838 else if (!strcmp(res, "very-fine")) in sx9310_get_default_reg()
839 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_VERY_FINE; in sx9310_get_default_reg()
841 reg_def->def |= SX9310_REG_PROX_CTRL4_RESOLUTION_FINEST; in sx9310_get_default_reg()
845 ret = device_property_read_u32(dev, "semtech,startup-sensor", &start); in sx9310_get_default_reg()
848 reg_def->def); in sx9310_get_default_reg()
851 reg_def->def &= ~SX9310_REG_PROX_CTRL5_STARTUPSENS_MASK; in sx9310_get_default_reg()
852 reg_def->def |= FIELD_PREP(SX9310_REG_PROX_CTRL5_STARTUPSENS_MASK, in sx9310_get_default_reg()
855 ret = device_property_read_u32(dev, "semtech,proxraw-strength", &raw); in sx9310_get_default_reg()
858 reg_def->def); in sx9310_get_default_reg()
863 reg_def->def &= ~SX9310_REG_PROX_CTRL5_RAWFILT_MASK; in sx9310_get_default_reg()
864 reg_def->def |= FIELD_PREP(SX9310_REG_PROX_CTRL5_RAWFILT_MASK, in sx9310_get_default_reg()
868 ret = device_property_read_u32(dev, "semtech,avg-pos-strength", &pos); in sx9310_get_default_reg()
873 pos = clamp(ilog2(pos), 3, 11) - (pos >= 32 ? 4 : 3); in sx9310_get_default_reg()
874 reg_def->def &= ~SX9310_REG_PROX_CTRL7_AVGPOSFILT_MASK; in sx9310_get_default_reg()
875 reg_def->def |= FIELD_PREP(SX9310_REG_PROX_CTRL7_AVGPOSFILT_MASK, in sx9310_get_default_reg()
891 ret = regmap_read(data->regmap, SX9310_REG_WHOAMI, &whoami); in sx9310_check_whoami()
896 if (ddata->whoami != whoami) in sx9310_check_whoami()
897 return -ENODEV; in sx9310_check_whoami()
899 indio_dev->name = ddata->name; in sx9310_check_whoami()
947 disable_irq_nosync(data->client->irq); in sx9310_suspend()
949 guard(mutex)(&data->mutex); in sx9310_suspend()
950 ret = regmap_read(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_suspend()
951 &data->suspend_ctrl); in sx9310_suspend()
955 ctrl0 = data->suspend_ctrl & ~SX9310_REG_PROX_CTRL0_SENSOREN_MASK; in sx9310_suspend()
956 ret = regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, ctrl0); in sx9310_suspend()
960 return regmap_write(data->regmap, SX9310_REG_PAUSE, 0); in sx9310_suspend()
968 scoped_guard(mutex, &data->mutex) { in sx9310_resume()
969 ret = regmap_write(data->regmap, SX9310_REG_PAUSE, 1); in sx9310_resume()
973 ret = regmap_write(data->regmap, SX9310_REG_PROX_CTRL0, in sx9310_resume()
974 data->suspend_ctrl); in sx9310_resume()
979 enable_irq(data->client->irq); in sx9310_resume()