static ssize_t isl_enable_show(struct device *dev, struct device_attribute *attr, char *buf) { struct isl29023_data *isl29023 = dev_get_drvdata(dev); int val; int temp_val = 1; if(!is_device) { printk("[LIGHT] NO DEVICE is_device = %d \n",is_device); return; } mutex_lock(&mutex); val = isl_get_mod(isl29023->client); mutex_unlock(&mutex); if (val < 0) return val; switch (val) { case ISL_MOD_POWERDOWN: return sprintf(buf, "%d\n", ISL_MOD_POWERDOWN); case ISL_MOD_ALS_CONT: return sprintf(buf, "%d\n", temp_val); default: return -EINVAL; } }
static int isl29023_measure(struct isl29023_data * isl29023) { struct i2c_client *client = isl29023->client; int ret_val, val, mod; unsigned long int max_count; int output = 0; int temp; mutex_lock(&mutex); // pm_runtime_get_sync(&client->dev); temp = i2c_smbus_read_byte_data(client, REG_DATA_MSB); if (temp < 0) goto err_exit; ret_val = i2c_smbus_read_byte_data(client, REG_DATA_LSB); if (ret_val < 0) goto err_exit; ret_val |= temp << 8; #if DEBUG dev_dbg(dev, "%s: Data: %04x\n", __func__, ret_val); #endif // printk("%s: Data: %04x\n", __func__, ret_val); mod = isl_get_mod(client); switch (mod) { case ISL_MOD_ALS_CONT: case ISL_MOD_ALS_ONCE: case ISL_MOD_IR_ONCE: case ISL_MOD_IR_CONT: output = ret_val; break; case ISL_MOD_PS_CONT: case ISL_MOD_PS_ONCE: val = i2c_smbus_read_byte_data(client, REG_CMD_2); if (val < 0) goto err_exit; max_count = isl_get_res(client); output = (((1 << (2 * (val & SENSOR_RANGE_MASK))) * 1000) * ret_val) / max_count; break; default: goto err_exit; } // pm_runtime_put_sync(&client->dev); mutex_unlock(&mutex); // return sprintf(buf, "%ld\n", output); #if DEBUG printk("=== isl29023_measure ==== output = %d \n ",output); #endif return output; err_exit: printk("=== isl29023_measure error === \n "); // pm_runtime_put_sync(&client->dev); mutex_unlock(&mutex); return -EINVAL; }
static ssize_t isl_lmod_show(struct device *dev, struct device_attribute *attr, char *buf) { struct i2c_client *client = isl29030_i2c_client; int val; mutex_lock(&mutex); //pm_runtime_get_sync(dev); val = isl_get_mod(client, ISL_FUNC_ALS); //pm_runtime_put_sync(dev); mutex_unlock(&mutex); dev_dbg(dev, "%s: mod: 0x%.2x\n", __func__, val); if (val < 0) return val; return sprintf(buf, "%d\n", val); }