staticint wm8350_led_enable(struct wm8350_led *led)
{ int ret = 0;
if (led->enabled) return ret;
ret = regulator_enable(led->isink); if (ret != 0) {
dev_err(led->cdev.dev, "Failed to enable ISINK: %d\n", ret); return ret;
}
ret = regulator_enable(led->dcdc); if (ret != 0) {
dev_err(led->cdev.dev, "Failed to enable DCDC: %d\n", ret);
regulator_disable(led->isink); return ret;
}
led->enabled = 1;
return ret;
}
staticint wm8350_led_disable(struct wm8350_led *led)
{ int ret = 0;
if (!led->enabled) return ret;
ret = regulator_disable(led->dcdc); if (ret != 0) {
dev_err(led->cdev.dev, "Failed to disable DCDC: %d\n", ret); return ret;
}
ret = regulator_disable(led->isink); if (ret != 0) {
dev_err(led->cdev.dev, "Failed to disable ISINK: %d\n", ret);
ret = regulator_enable(led->dcdc); if (ret != 0)
dev_err(led->cdev.dev, "Failed to reenable DCDC: %d\n",
ret); return ret;
}
led->enabled = 0;
return ret;
}
staticint wm8350_led_set(struct led_classdev *led_cdev, enum led_brightness value)
{ struct wm8350_led *led = to_wm8350_led(led_cdev); unsignedlong flags; int ret; int uA;
led->value = value;
spin_lock_irqsave(&led->value_lock, flags);
if (led->value == LED_OFF) {
spin_unlock_irqrestore(&led->value_lock, flags); return wm8350_led_disable(led);
}
/* This scales linearly into the index of valid current * settings which results in a linear scaling of perceived * brightness due to the non-linear current settings provided * by the hardware.
*/
uA = (led->max_uA_index * led->value) / LED_FULL;
spin_unlock_irqrestore(&led->value_lock, flags);
BUG_ON(uA >= ARRAY_SIZE(isink_cur));
ret = regulator_set_current_limit(led->isink, isink_cur[uA],
isink_cur[uA]); if (ret != 0) {
dev_err(led->cdev.dev, "Failed to set %duA: %d\n",
isink_cur[uA], ret); return ret;
}
for (i = 0; i < ARRAY_SIZE(isink_cur) - 1; i++) if (isink_cur[i] >= pdata->max_uA) break;
led->max_uA_index = i; if (pdata->max_uA != isink_cur[i])
dev_warn(&pdev->dev, "Maximum current %duA is not directly supported," " check platform data\n",
pdata->max_uA);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.