Lines Matching refs:cm36651

143 static int cm36651_setup_reg(struct cm36651_data *cm36651)  in cm36651_setup_reg()  argument
145 struct i2c_client *client = cm36651->client; in cm36651_setup_reg()
146 struct i2c_client *ps_client = cm36651->ps_client; in cm36651_setup_reg()
150 cm36651->cs_ctrl_regs[CM36651_CS_CONF1] = CM36651_ALS_ENABLE | in cm36651_setup_reg()
152 cm36651->cs_ctrl_regs[CM36651_CS_CONF2] = CM36651_CS_CONF2_DEFAULT_BIT; in cm36651_setup_reg()
156 cm36651->cs_ctrl_regs[i]); in cm36651_setup_reg()
162 cm36651->ps_ctrl_regs[CM36651_PS_CONF1] = CM36651_PS_ENABLE | in cm36651_setup_reg()
164 cm36651->ps_ctrl_regs[CM36651_PS_THD] = CM36651_PS_INITIAL_THD; in cm36651_setup_reg()
165 cm36651->ps_ctrl_regs[CM36651_PS_CANC] = CM36651_PS_CANC_DEFAULT; in cm36651_setup_reg()
166 cm36651->ps_ctrl_regs[CM36651_PS_CONF2] = CM36651_PS_HYS2 | in cm36651_setup_reg()
171 cm36651->ps_ctrl_regs[i]); in cm36651_setup_reg()
182 ret = i2c_smbus_write_byte_data(cm36651->ps_client, in cm36651_setup_reg()
190 static int cm36651_read_output(struct cm36651_data *cm36651, in cm36651_read_output() argument
193 struct i2c_client *client = cm36651->client; in cm36651_read_output()
210 *val = i2c_smbus_read_byte(cm36651->ps_client); in cm36651_read_output()
214 if (!test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags)) { in cm36651_read_output()
215 ret = i2c_smbus_write_byte_data(cm36651->ps_client, in cm36651_read_output()
233 struct cm36651_data *cm36651 = iio_priv(indio_dev); in cm36651_irq_handler() local
234 struct i2c_client *client = cm36651->client; in cm36651_irq_handler()
245 ret = i2c_smbus_read_byte(cm36651->ara_client); in cm36651_irq_handler()
273 static int cm36651_set_operation_mode(struct cm36651_data *cm36651, int cmd) in cm36651_set_operation_mode() argument
275 struct i2c_client *client = cm36651->client; in cm36651_set_operation_mode()
276 struct i2c_client *ps_client = cm36651->ps_client; in cm36651_set_operation_mode()
282 cm36651->cs_ctrl_regs[CM36651_CS_CONF1]); in cm36651_set_operation_mode()
285 if (test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags)) in cm36651_set_operation_mode()
289 cm36651->ps_ctrl_regs[CM36651_PS_CONF1]); in cm36651_set_operation_mode()
292 if (test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags)) { in cm36651_set_operation_mode()
297 set_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags); in cm36651_set_operation_mode()
309 if (!test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags)) { in cm36651_set_operation_mode()
314 clear_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags); in cm36651_set_operation_mode()
326 static int cm36651_read_channel(struct cm36651_data *cm36651, in cm36651_read_channel() argument
329 struct i2c_client *client = cm36651->client; in cm36651_read_channel()
339 ret = cm36651_set_operation_mode(cm36651, cmd); in cm36651_read_channel()
346 ret = cm36651_read_output(cm36651, chan, val); in cm36651_read_channel()
355 static int cm36651_read_int_time(struct cm36651_data *cm36651, in cm36651_read_int_time() argument
360 if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT1) in cm36651_read_int_time()
362 else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT2) in cm36651_read_int_time()
364 else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT3) in cm36651_read_int_time()
366 else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT4) in cm36651_read_int_time()
372 if (cm36651->ps_int_time == CM36651_PS_IT1) in cm36651_read_int_time()
374 else if (cm36651->ps_int_time == CM36651_PS_IT2) in cm36651_read_int_time()
376 else if (cm36651->ps_int_time == CM36651_PS_IT3) in cm36651_read_int_time()
378 else if (cm36651->ps_int_time == CM36651_PS_IT4) in cm36651_read_int_time()
390 static int cm36651_write_int_time(struct cm36651_data *cm36651, in cm36651_write_int_time() argument
393 struct i2c_client *client = cm36651->client; in cm36651_write_int_time()
394 struct i2c_client *ps_client = cm36651->ps_client; in cm36651_write_int_time()
416 cm36651->cs_int_time[chan->address] = int_time; in cm36651_write_int_time()
436 cm36651->ps_int_time = int_time; in cm36651_write_int_time()
449 struct cm36651_data *cm36651 = iio_priv(indio_dev); in cm36651_read_raw() local
452 mutex_lock(&cm36651->lock); in cm36651_read_raw()
456 ret = cm36651_read_channel(cm36651, chan, val); in cm36651_read_raw()
460 ret = cm36651_read_int_time(cm36651, chan, val2); in cm36651_read_raw()
466 mutex_unlock(&cm36651->lock); in cm36651_read_raw()
475 struct cm36651_data *cm36651 = iio_priv(indio_dev); in cm36651_write_raw() local
476 struct i2c_client *client = cm36651->client; in cm36651_write_raw()
480 ret = cm36651_write_int_time(cm36651, chan, val2); in cm36651_write_raw()
495 struct cm36651_data *cm36651 = iio_priv(indio_dev); in cm36651_read_prox_thresh() local
497 *val = cm36651->ps_ctrl_regs[CM36651_PS_THD]; in cm36651_read_prox_thresh()
509 struct cm36651_data *cm36651 = iio_priv(indio_dev); in cm36651_write_prox_thresh() local
510 struct i2c_client *client = cm36651->client; in cm36651_write_prox_thresh()
516 cm36651->ps_ctrl_regs[CM36651_PS_THD] = val; in cm36651_write_prox_thresh()
517 ret = i2c_smbus_write_byte_data(cm36651->ps_client, CM36651_PS_THD, in cm36651_write_prox_thresh()
518 cm36651->ps_ctrl_regs[CM36651_PS_THD]); in cm36651_write_prox_thresh()
534 struct cm36651_data *cm36651 = iio_priv(indio_dev); in cm36651_write_prox_event_config() local
537 mutex_lock(&cm36651->lock); in cm36651_write_prox_event_config()
540 ret = cm36651_set_operation_mode(cm36651, cmd); in cm36651_write_prox_event_config()
542 mutex_unlock(&cm36651->lock); in cm36651_write_prox_event_config()
552 struct cm36651_data *cm36651 = iio_priv(indio_dev); in cm36651_read_prox_event_config() local
555 mutex_lock(&cm36651->lock); in cm36651_read_prox_event_config()
557 event_en = test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags); in cm36651_read_prox_event_config()
559 mutex_unlock(&cm36651->lock); in cm36651_read_prox_event_config()
624 struct cm36651_data *cm36651; in cm36651_probe() local
628 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*cm36651)); in cm36651_probe()
632 cm36651 = iio_priv(indio_dev); in cm36651_probe()
634 cm36651->vled_reg = devm_regulator_get(&client->dev, "vled"); in cm36651_probe()
635 if (IS_ERR(cm36651->vled_reg)) in cm36651_probe()
636 return dev_err_probe(&client->dev, PTR_ERR(cm36651->vled_reg), in cm36651_probe()
639 ret = regulator_enable(cm36651->vled_reg); in cm36651_probe()
647 cm36651->client = client; in cm36651_probe()
648 cm36651->ps_client = i2c_new_dummy_device(client->adapter, in cm36651_probe()
650 if (IS_ERR(cm36651->ps_client)) { in cm36651_probe()
652 ret = PTR_ERR(cm36651->ps_client); in cm36651_probe()
656 cm36651->ara_client = i2c_new_dummy_device(client->adapter, CM36651_ARA); in cm36651_probe()
657 if (IS_ERR(cm36651->ara_client)) { in cm36651_probe()
659 ret = PTR_ERR(cm36651->ara_client); in cm36651_probe()
663 mutex_init(&cm36651->lock); in cm36651_probe()
670 ret = cm36651_setup_reg(cm36651); in cm36651_probe()
695 i2c_unregister_device(cm36651->ara_client); in cm36651_probe()
697 i2c_unregister_device(cm36651->ps_client); in cm36651_probe()
699 regulator_disable(cm36651->vled_reg); in cm36651_probe()
706 struct cm36651_data *cm36651 = iio_priv(indio_dev); in cm36651_remove() local
709 regulator_disable(cm36651->vled_reg); in cm36651_remove()
711 i2c_unregister_device(cm36651->ps_client); in cm36651_remove()
712 i2c_unregister_device(cm36651->ara_client); in cm36651_remove()