struct pm860x_backlight_data { struct pm860x_chip *chip; struct i2c_client *i2c; int current_brightness; int port; int pwm; int iset; int reg_duty_cycle; int reg_always_on; int reg_current;
};
staticint backlight_power_set(struct pm860x_chip *chip, int port, int on)
{ int ret = -EINVAL;
switch (port) { case 0:
ret = on ? pm8606_osc_enable(chip, WLED1_DUTY) :
pm8606_osc_disable(chip, WLED1_DUTY); break; case 1:
ret = on ? pm8606_osc_enable(chip, WLED2_DUTY) :
pm8606_osc_disable(chip, WLED2_DUTY); break; case 2:
ret = on ? pm8606_osc_enable(chip, WLED3_DUTY) :
pm8606_osc_disable(chip, WLED3_DUTY); break;
} return ret;
}
if (brightness > MAX_BRIGHTNESS)
value = MAX_BRIGHTNESS; else
value = brightness;
if (brightness)
backlight_power_set(chip, data->port, 1);
ret = pm860x_reg_write(data->i2c, data->reg_duty_cycle, value); if (ret < 0) goto out;
if ((data->current_brightness == 0) && brightness) { if (data->iset) {
ret = pm860x_set_bits(data->i2c, data->reg_current,
CURRENT_BITMASK, data->iset); if (ret < 0) goto out;
} if (data->pwm) {
ret = pm860x_set_bits(data->i2c, PM8606_PWM,
PM8606_PWM_FREQ_MASK, data->pwm); if (ret < 0) goto out;
} if (brightness == MAX_BRIGHTNESS) { /* set WLED_ON bit as 100% */
ret = pm860x_set_bits(data->i2c, data->reg_always_on,
PM8606_WLED_ON, PM8606_WLED_ON);
}
} else { if (brightness == MAX_BRIGHTNESS) { /* set WLED_ON bit as 100% */
ret = pm860x_set_bits(data->i2c, data->reg_always_on,
PM8606_WLED_ON, PM8606_WLED_ON);
} else { /* clear WLED_ON bit since it's not 100% */
ret = pm860x_set_bits(data->i2c, data->reg_always_on,
PM8606_WLED_ON, 0);
}
} if (ret < 0) goto out;
if (brightness == 0)
backlight_power_set(chip, data->port, 0);
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.