static int qpnp_rgb_set(struct qpnp_led_data *led) { int duty_us; int rc; if (led->cdev.brightness) { if (led->rgb_cfg->mode == RGB_MODE_PWM) { duty_us = (led->rgb_cfg->pwm_period_us * led->cdev.brightness) / LED_FULL; rc = pwm_config(led->rgb_cfg->pwm_dev, duty_us, led->rgb_cfg->pwm_period_us); if (rc < 0) { dev_err(&led->spmi_dev->dev, "Failed to " \ "configure pwm for new values\n"); return rc; } } rc = qpnp_led_masked_write(led, RGB_LED_EN_CTL(led->base), led->rgb_cfg->enable, led->rgb_cfg->enable); if (rc) { dev_err(&led->spmi_dev->dev, "Failed to write led enable reg\n"); return rc; } rc = pwm_enable(led->rgb_cfg->pwm_dev); } else { pwm_disable(led->rgb_cfg->pwm_dev); rc = qpnp_led_masked_write(led, RGB_LED_EN_CTL(led->base), led->rgb_cfg->enable, RGB_LED_DISABLE); if (rc) { dev_err(&led->spmi_dev->dev, "Failed to write led enable reg\n"); return rc; } } qpnp_dump_regs(led, rgb_pwm_debug_regs, ARRAY_SIZE(rgb_pwm_debug_regs)); return 0; }
static int qpnp_led_setup(struct qpnp_led_data *led) { uint8_t reg = 0; reg = pm8x41_wled_reg_read(RGB_LED_EN_CTL(led->base)); switch (led->color_sel) { case QPNP_LED_RED: reg |= RGB_LED_ENABLE_RED; break; case QPNP_LED_GREEN: reg |= RGB_LED_ENABLE_GREEN; break; case QPNP_LED_BLUE: reg |= RGB_LED_ENABLE_BLUE; break; default: return -1; }; pm8x41_wled_reg_write(RGB_LED_EN_CTL(led->base), reg); return 0; }