static ssize_t attr_flash_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct lm3561_drv_data *data = dev_get_drvdata(dev); unsigned long enable; int result; result = strict_strtoul(buf, 10, &enable); if (result) { dev_err(&data->client->dev, "%s(): strtoul failed, result=%d\n", __func__, result); return -EINVAL; } if (1 < enable) { dev_err(&data->client->dev, "%s(): 1 < enable, enable=%d\n", __func__, enable); return -EINVAL; } result = lm3561_flash_mode(data, (unsigned)enable); if (result) return result; return size; }
static ssize_t attr_flash_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct lm3561_drv_data *data = dev_get_drvdata(dev); unsigned long enable; int result; result = strict_strtoul(buf, 10, &enable); if (result) { dev_err(&data->client->dev, "%s(): strtoul failed, result=%d\n", __func__, result); return -EINVAL; } if (1 < enable) { dev_err(&data->client->dev, "%s(): 1 < enable, enable=%ld\n", __func__, enable); return -EINVAL; } mutex_lock(&data->lock); if (data->on_duty == DUTY_ON_NOTHING) result = pm_runtime_get_sync(&data->client->dev); else data->on_duty = DUTY_ON_NOTHING; mutex_unlock(&data->lock); if (result < 0) goto err; result = lm3561_flash_mode(data, (unsigned)enable); pm_runtime_mark_last_busy(&data->client->dev); pm_runtime_put_autosuspend(&data->client->dev); err: return result ? result : size; }