cm36651 143 drivers/iio/light/cm36651.c static int cm36651_setup_reg(struct cm36651_data *cm36651) cm36651 145 drivers/iio/light/cm36651.c struct i2c_client *client = cm36651->client; cm36651 146 drivers/iio/light/cm36651.c struct i2c_client *ps_client = cm36651->ps_client; cm36651 150 drivers/iio/light/cm36651.c cm36651->cs_ctrl_regs[CM36651_CS_CONF1] = CM36651_ALS_ENABLE | cm36651 152 drivers/iio/light/cm36651.c cm36651->cs_ctrl_regs[CM36651_CS_CONF2] = CM36651_CS_CONF2_DEFAULT_BIT; cm36651 156 drivers/iio/light/cm36651.c cm36651->cs_ctrl_regs[i]); cm36651 162 drivers/iio/light/cm36651.c cm36651->ps_ctrl_regs[CM36651_PS_CONF1] = CM36651_PS_ENABLE | cm36651 164 drivers/iio/light/cm36651.c cm36651->ps_ctrl_regs[CM36651_PS_THD] = CM36651_PS_INITIAL_THD; cm36651 165 drivers/iio/light/cm36651.c cm36651->ps_ctrl_regs[CM36651_PS_CANC] = CM36651_PS_CANC_DEFAULT; cm36651 166 drivers/iio/light/cm36651.c cm36651->ps_ctrl_regs[CM36651_PS_CONF2] = CM36651_PS_HYS2 | cm36651 171 drivers/iio/light/cm36651.c cm36651->ps_ctrl_regs[i]); cm36651 182 drivers/iio/light/cm36651.c ret = i2c_smbus_write_byte_data(cm36651->ps_client, cm36651 190 drivers/iio/light/cm36651.c static int cm36651_read_output(struct cm36651_data *cm36651, cm36651 193 drivers/iio/light/cm36651.c struct i2c_client *client = cm36651->client; cm36651 210 drivers/iio/light/cm36651.c *val = i2c_smbus_read_byte(cm36651->ps_client); cm36651 214 drivers/iio/light/cm36651.c if (!test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags)) { cm36651 215 drivers/iio/light/cm36651.c ret = i2c_smbus_write_byte_data(cm36651->ps_client, cm36651 233 drivers/iio/light/cm36651.c struct cm36651_data *cm36651 = iio_priv(indio_dev); cm36651 234 drivers/iio/light/cm36651.c struct i2c_client *client = cm36651->client; cm36651 245 drivers/iio/light/cm36651.c ret = i2c_smbus_read_byte(cm36651->ara_client); cm36651 273 drivers/iio/light/cm36651.c static int cm36651_set_operation_mode(struct cm36651_data *cm36651, int cmd) cm36651 275 drivers/iio/light/cm36651.c struct i2c_client *client = cm36651->client; cm36651 276 drivers/iio/light/cm36651.c struct i2c_client *ps_client = cm36651->ps_client; cm36651 282 drivers/iio/light/cm36651.c cm36651->cs_ctrl_regs[CM36651_CS_CONF1]); cm36651 285 drivers/iio/light/cm36651.c if (test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags)) cm36651 289 drivers/iio/light/cm36651.c cm36651->ps_ctrl_regs[CM36651_PS_CONF1]); cm36651 292 drivers/iio/light/cm36651.c if (test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags)) { cm36651 297 drivers/iio/light/cm36651.c set_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags); cm36651 309 drivers/iio/light/cm36651.c if (!test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags)) { cm36651 314 drivers/iio/light/cm36651.c clear_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags); cm36651 326 drivers/iio/light/cm36651.c static int cm36651_read_channel(struct cm36651_data *cm36651, cm36651 329 drivers/iio/light/cm36651.c struct i2c_client *client = cm36651->client; cm36651 339 drivers/iio/light/cm36651.c ret = cm36651_set_operation_mode(cm36651, cmd); cm36651 346 drivers/iio/light/cm36651.c ret = cm36651_read_output(cm36651, chan, val); cm36651 355 drivers/iio/light/cm36651.c static int cm36651_read_int_time(struct cm36651_data *cm36651, cm36651 360 drivers/iio/light/cm36651.c if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT1) cm36651 362 drivers/iio/light/cm36651.c else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT2) cm36651 364 drivers/iio/light/cm36651.c else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT3) cm36651 366 drivers/iio/light/cm36651.c else if (cm36651->cs_int_time[chan->address] == CM36651_CS_IT4) cm36651 372 drivers/iio/light/cm36651.c if (cm36651->ps_int_time == CM36651_PS_IT1) cm36651 374 drivers/iio/light/cm36651.c else if (cm36651->ps_int_time == CM36651_PS_IT2) cm36651 376 drivers/iio/light/cm36651.c else if (cm36651->ps_int_time == CM36651_PS_IT3) cm36651 378 drivers/iio/light/cm36651.c else if (cm36651->ps_int_time == CM36651_PS_IT4) cm36651 390 drivers/iio/light/cm36651.c static int cm36651_write_int_time(struct cm36651_data *cm36651, cm36651 393 drivers/iio/light/cm36651.c struct i2c_client *client = cm36651->client; cm36651 394 drivers/iio/light/cm36651.c struct i2c_client *ps_client = cm36651->ps_client; cm36651 416 drivers/iio/light/cm36651.c cm36651->cs_int_time[chan->address] = int_time; cm36651 436 drivers/iio/light/cm36651.c cm36651->ps_int_time = int_time; cm36651 449 drivers/iio/light/cm36651.c struct cm36651_data *cm36651 = iio_priv(indio_dev); cm36651 452 drivers/iio/light/cm36651.c mutex_lock(&cm36651->lock); cm36651 456 drivers/iio/light/cm36651.c ret = cm36651_read_channel(cm36651, chan, val); cm36651 460 drivers/iio/light/cm36651.c ret = cm36651_read_int_time(cm36651, chan, val2); cm36651 466 drivers/iio/light/cm36651.c mutex_unlock(&cm36651->lock); cm36651 475 drivers/iio/light/cm36651.c struct cm36651_data *cm36651 = iio_priv(indio_dev); cm36651 476 drivers/iio/light/cm36651.c struct i2c_client *client = cm36651->client; cm36651 480 drivers/iio/light/cm36651.c ret = cm36651_write_int_time(cm36651, chan, val2); cm36651 495 drivers/iio/light/cm36651.c struct cm36651_data *cm36651 = iio_priv(indio_dev); cm36651 497 drivers/iio/light/cm36651.c *val = cm36651->ps_ctrl_regs[CM36651_PS_THD]; cm36651 509 drivers/iio/light/cm36651.c struct cm36651_data *cm36651 = iio_priv(indio_dev); cm36651 510 drivers/iio/light/cm36651.c struct i2c_client *client = cm36651->client; cm36651 516 drivers/iio/light/cm36651.c cm36651->ps_ctrl_regs[CM36651_PS_THD] = val; cm36651 517 drivers/iio/light/cm36651.c ret = i2c_smbus_write_byte_data(cm36651->ps_client, CM36651_PS_THD, cm36651 518 drivers/iio/light/cm36651.c cm36651->ps_ctrl_regs[CM36651_PS_THD]); cm36651 534 drivers/iio/light/cm36651.c struct cm36651_data *cm36651 = iio_priv(indio_dev); cm36651 537 drivers/iio/light/cm36651.c mutex_lock(&cm36651->lock); cm36651 540 drivers/iio/light/cm36651.c ret = cm36651_set_operation_mode(cm36651, cmd); cm36651 542 drivers/iio/light/cm36651.c mutex_unlock(&cm36651->lock); cm36651 552 drivers/iio/light/cm36651.c struct cm36651_data *cm36651 = iio_priv(indio_dev); cm36651 555 drivers/iio/light/cm36651.c mutex_lock(&cm36651->lock); cm36651 557 drivers/iio/light/cm36651.c event_en = test_bit(CM36651_PROXIMITY_EV_EN, &cm36651->flags); cm36651 559 drivers/iio/light/cm36651.c mutex_unlock(&cm36651->lock); cm36651 624 drivers/iio/light/cm36651.c struct cm36651_data *cm36651; cm36651 628 drivers/iio/light/cm36651.c indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*cm36651)); cm36651 632 drivers/iio/light/cm36651.c cm36651 = iio_priv(indio_dev); cm36651 634 drivers/iio/light/cm36651.c cm36651->vled_reg = devm_regulator_get(&client->dev, "vled"); cm36651 635 drivers/iio/light/cm36651.c if (IS_ERR(cm36651->vled_reg)) { cm36651 637 drivers/iio/light/cm36651.c return PTR_ERR(cm36651->vled_reg); cm36651 640 drivers/iio/light/cm36651.c ret = regulator_enable(cm36651->vled_reg); cm36651 648 drivers/iio/light/cm36651.c cm36651->client = client; cm36651 649 drivers/iio/light/cm36651.c cm36651->ps_client = i2c_new_dummy_device(client->adapter, cm36651 651 drivers/iio/light/cm36651.c if (IS_ERR(cm36651->ps_client)) { cm36651 653 drivers/iio/light/cm36651.c ret = PTR_ERR(cm36651->ps_client); cm36651 657 drivers/iio/light/cm36651.c cm36651->ara_client = i2c_new_dummy_device(client->adapter, CM36651_ARA); cm36651 658 drivers/iio/light/cm36651.c if (IS_ERR(cm36651->ara_client)) { cm36651 660 drivers/iio/light/cm36651.c ret = PTR_ERR(cm36651->ara_client); cm36651 664 drivers/iio/light/cm36651.c mutex_init(&cm36651->lock); cm36651 672 drivers/iio/light/cm36651.c ret = cm36651_setup_reg(cm36651); cm36651 697 drivers/iio/light/cm36651.c i2c_unregister_device(cm36651->ara_client); cm36651 699 drivers/iio/light/cm36651.c i2c_unregister_device(cm36651->ps_client); cm36651 701 drivers/iio/light/cm36651.c regulator_disable(cm36651->vled_reg); cm36651 708 drivers/iio/light/cm36651.c struct cm36651_data *cm36651 = iio_priv(indio_dev); cm36651 711 drivers/iio/light/cm36651.c regulator_disable(cm36651->vled_reg); cm36651 713 drivers/iio/light/cm36651.c i2c_unregister_device(cm36651->ps_client); cm36651 714 drivers/iio/light/cm36651.c i2c_unregister_device(cm36651->ara_client);