struct wm831x_backlight_data { struct wm831x *wm831x; int isink_reg; int current_brightness;
};
staticint wm831x_backlight_set(struct backlight_device *bl, int brightness)
{ struct wm831x_backlight_data *data = bl_get_data(bl); struct wm831x *wm831x = data->wm831x; int power_up = !data->current_brightness && brightness; int power_down = data->current_brightness && !brightness; int ret;
if (power_up) { /* Enable the ISINK */
ret = wm831x_set_bits(wm831x, data->isink_reg,
WM831X_CS1_ENA, WM831X_CS1_ENA); if (ret < 0) goto err;
/* Enable the DC-DC */
ret = wm831x_set_bits(wm831x, WM831X_DCDC_ENABLE,
WM831X_DC4_ENA, WM831X_DC4_ENA); if (ret < 0) goto err;
}
if (power_down) { /* DCDC first */
ret = wm831x_set_bits(wm831x, WM831X_DCDC_ENABLE,
WM831X_DC4_ENA, 0); if (ret < 0) goto err;
/* ISINK */
ret = wm831x_set_bits(wm831x, data->isink_reg,
WM831X_CS1_DRIVE | WM831X_CS1_ENA, 0); if (ret < 0) goto err;
}
/* Set the new brightness */
ret = wm831x_set_bits(wm831x, data->isink_reg,
WM831X_CS1_ISEL_MASK, brightness); if (ret < 0) goto err;
if (power_up) { /* Drive current through the ISINK */
ret = wm831x_set_bits(wm831x, data->isink_reg,
WM831X_CS1_DRIVE, WM831X_CS1_DRIVE); if (ret < 0) return ret;
}
data->current_brightness = brightness;
return 0;
err: /* If we were in the middle of a power transition always shut down * for safety.
*/ if (power_up || power_down) {
wm831x_set_bits(wm831x, WM831X_DCDC_ENABLE, WM831X_DC4_ENA, 0);
wm831x_set_bits(wm831x, data->isink_reg, WM831X_CS1_ENA, 0);
}
/* We need platform data */ if (wm831x_pdata)
pdata = wm831x_pdata->backlight; else
pdata = NULL;
if (!pdata) {
dev_err(&pdev->dev, "No platform data supplied\n"); return -EINVAL;
}
/* Figure out the maximum current we can use */ for (i = 0; i < WM831X_ISINK_MAX_ISEL; i++) { if (wm831x_isinkv_values[i] > pdata->max_uA) break;
}
if (i == 0) {
dev_err(&pdev->dev, "Invalid max_uA: %duA\n", pdata->max_uA); return -EINVAL;
}
max_isel = i - 1;
if (pdata->max_uA != wm831x_isinkv_values[max_isel])
dev_warn(&pdev->dev, "Maximum current is %duA not %duA as requested\n",
wm831x_isinkv_values[max_isel], pdata->max_uA);
MODULE_DESCRIPTION("Backlight Driver for WM831x PMICs");
MODULE_AUTHOR("Mark Brown );
MODULE_LICENSE("GPL");
MODULE_ALIAS("platform:wm831x-backlight");
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.