static ssize_t attr_flash_sync_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=%lu\n", __func__, enable); return -EINVAL; } result = lm3561_set_flash_sync(data, enable ? LM3561_SYNC_ON : LM3561_SYNC_OFF); if (result) return result; return size; }
static int lm3561_init_cfg1_register(struct lm3561_drv_data *data, struct lm3561_platform_data *pdata) { int result; result = lm3561_set_reg_data(data, LM3561_REG_CFG_1, LM3561_CFG_1_MASK, LM3561_CFG1_STROBE_INPUT_ENABLE); if (result) return result; result = lm3561_set_flash_sync(data, pdata->flash_sync); return result; }
static ssize_t attr_flash_sync_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; } if (enable && data->on_duty == DUTY_ON_SYNC) { dev_dbg(&data->client->dev, "%s: already enabled\n", __func__); return size; } result = pm_enable_lock(data); if (result) goto err; result = lm3561_set_flash_sync(data, enable ? LM3561_SYNC_ON : LM3561_SYNC_OFF); data->on_duty = !result && enable ? DUTY_ON_SYNC : DUTY_ON_NOTHING; if (!data->on_duty) { pm_runtime_mark_last_busy(&data->client->dev); pm_runtime_put_autosuspend(&data->client->dev); } err: mutex_unlock(&data->lock); return result ? result : size; }