Пример #1
0
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;
}
Пример #2
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;
}