static ssize_t als_lux0_input_data_show(struct device *dev, struct device_attribute *attr, char *buf) { struct i2c_client *client = to_i2c_client(dev); struct als_data *data = i2c_get_clientdata(client); int ret_val; int temp; /* Protect against parallel reads */ pm_runtime_get_sync(dev); mutex_lock(&data->mutex); /* clear EOC interrupt status */ i2c_smbus_write_byte(client, 0x40); /* start measurement */ temp = i2c_smbus_read_byte_data(client, 0x81); i2c_smbus_write_byte_data(client, 0x81, temp | 0x08); ret_val = als_wait_for_data_ready(dev); if (ret_val < 0) goto failed; temp = i2c_smbus_read_byte_data(client, 0x8C); /* LSB data */ if (temp < 0) { ret_val = temp; goto failed; } ret_val = i2c_smbus_read_byte_data(client, 0x8D); /* MSB data */ if (ret_val < 0) goto failed; mutex_unlock(&data->mutex); pm_runtime_put_sync(dev); temp = (ret_val << 8) | temp; return sprintf(buf, "%d\n", temp); failed: mutex_unlock(&data->mutex); pm_runtime_put_sync(dev); return ret_val; }
static int als_set_default_config(struct i2c_client *client) { int ret_val; /* Write the command and then switch on */ ret_val = i2c_smbus_write_byte_data(client, 0x80, 0x01); if (ret_val < 0) { dev_err(&client->dev, "failed default switch on write\n"); return ret_val; } /* detection range: 1~64K Lux, maunal measurement */ ret_val = i2c_smbus_write_byte_data(client, 0x81, 0x08); if (ret_val < 0) dev_err(&client->dev, "failed default LUX on write\n"); /* We always get 0 for the 1st measurement after system power on, * so make sure it is finished before user asks for data. */ als_wait_for_data_ready(&client->dev); return ret_val; }
static int als_set_default_config(struct i2c_client *client) { int ret_val; /* */ ret_val = i2c_smbus_write_byte_data(client, 0x80, 0x01); if (ret_val < 0) { dev_err(&client->dev, "failed default switch on write\n"); return ret_val; } /* */ ret_val = i2c_smbus_write_byte_data(client, 0x81, 0x08); if (ret_val < 0) dev_err(&client->dev, "failed default LUX on write\n"); /* */ als_wait_for_data_ready(&client->dev); return ret_val; }