コード例 #1
0
static void an30259a_set_led_blink(enum an30259a_led_enum led,
					unsigned int delay_on_time,
					unsigned int delay_off_time,
					u8 brightness)
{
	struct i2c_client *client;
	client = b_client;

	if (brightness == LED_OFF) {
		leds_on(led, false, false, brightness);
		return;
	}

	if (brightness > LED_MAX_CURRENT)
		brightness = LED_MAX_CURRENT;

	if (led == LED_R)
		LED_DYNAMIC_CURRENT = LED_R_CURRENT;
	else if (led == LED_G)
		LED_DYNAMIC_CURRENT = LED_G_CURRENT;
	else if (led == LED_B)
		LED_DYNAMIC_CURRENT = LED_B_CURRENT;

	/* Yank555.lu : Control LED intensity (CM, Samsung, override) */
	if (led_intensity == 40) /* Samsung stock behaviour */
		brightness = (brightness * LED_DYNAMIC_CURRENT) / LED_MAX_CURRENT;
	else if (led_intensity != 0) /* CM stock behaviour */
		brightness = (brightness * led_intensity) / LED_MAX_CURRENT; /* override, darker or brighter */

	if (delay_on_time > SLPTT_MAX_VALUE)
		delay_on_time = SLPTT_MAX_VALUE;

	if (delay_off_time > SLPTT_MAX_VALUE)
		delay_off_time = SLPTT_MAX_VALUE;

	if (delay_off_time == LED_OFF) {
		leds_on(led, true, false, brightness);
		if (brightness == LED_OFF)
			leds_on(led, false, false, brightness);
		return;
	} else
		leds_on(led, true, true, brightness);

	/* Yank555.lu : Handle fading / blinking */
	if (led_enable_fade == 1) {
		leds_set_slope_mode(client, led, 0, (15 / led_speed), (7 / led_speed), 0,
					((delay_on_time / led_speed) + AN30259A_TIME_UNIT - 1) /
					AN30259A_TIME_UNIT,
					((delay_off_time / led_speed) + AN30259A_TIME_UNIT - 1) /
					AN30259A_TIME_UNIT,
					led_slope_up_1, led_slope_up_2, led_slope_down_1, led_slope_down_2);
	} else {
		leds_set_slope_mode(client, led, 0, (15 / led_speed), (15 / led_speed), 0,
					((delay_on_time / led_speed) + AN30259A_TIME_UNIT - 1) /
					AN30259A_TIME_UNIT,
					((delay_off_time / led_speed) + AN30259A_TIME_UNIT - 1) /
					AN30259A_TIME_UNIT,
					0, 0, 0, 0);
	}
}
コード例 #2
0
static void an30259a_set_led_blink(enum an30259a_led_enum led,
					unsigned int delay_on_time,
					unsigned int delay_off_time,
					u8 brightness)
{
	struct i2c_client *client;
	client = b_client;

	if (delay_on_time > SLPTT_MAX_VALUE)
		delay_on_time = SLPTT_MAX_VALUE;
	if (delay_off_time > SLPTT_MAX_VALUE)
		delay_off_time = SLPTT_MAX_VALUE;

	if (delay_off_time == LED_OFF) {
		leds_on(led, true, false, brightness);
		if (brightness == LED_OFF)
			leds_on(led, false, false, brightness);
		return;
	} else if (brightness == LED_OFF) {
		leds_on(led, false, false, brightness);
		return;
	} else
		leds_on(led, true, true, brightness);

	leds_set_slope_mode(client, led, 0, 15, 15, 0,
				(delay_on_time + AN30259A_TIME_UNIT - 1) /
				AN30259A_TIME_UNIT,
				(delay_off_time + AN30259A_TIME_UNIT - 1) /
				AN30259A_TIME_UNIT,
				0, 0, 0, 0);
}
コード例 #3
0
static void an30259a_set_led_blink(enum an30259a_led_enum led,
					unsigned int delay_on_time,
					unsigned int delay_off_time,
					u8 brightness)
{
	struct i2c_client *client;
	client = b_client;

	if (brightness == LED_OFF) {
		leds_on(led, false, false, brightness);
		return;
	}

	if (brightness > LED_MAX_CURRENT)
		brightness = LED_MAX_CURRENT;

	if (led == LED_R)
		LED_DYNAMIC_CURRENT = LED_R_CURRENT;
	else if (led == LED_G)
		LED_DYNAMIC_CURRENT = LED_G_CURRENT;
	else if (led == LED_B)
		LED_DYNAMIC_CURRENT = LED_B_CURRENT;

	/* In user case, LED current is restricted */
	if (led_intensity == 0 || led_intensity == 40) {	// if stock intesity is used (see LED_x_CURRENT = 0x28)
		brightness = (brightness * LED_DYNAMIC_CURRENT) / LED_MAX_CURRENT;
	}
	else if (led_intensity != 0) {	// adapt current to led_intensity
		brightness = (brightness * led_intensity) / LED_MAX_CURRENT;
	}

	if (led_enable_fade_charging == 1)
	{
		if (led_time_on)
			delay_on_time = led_time_on;
		if (led_time_off)
			delay_off_time = led_time_off;
	}
	
	if (delay_on_time > SLPTT_MAX_VALUE)
		delay_on_time = SLPTT_MAX_VALUE;

	if (delay_off_time > SLPTT_MAX_VALUE)
		delay_off_time = SLPTT_MAX_VALUE;

	if (delay_off_time == LED_OFF) {
		leds_on(led, true, false, brightness);
		if (brightness == LED_OFF)
			leds_on(led, false, false, brightness);
		return;
	} else
		leds_on(led, true, true, brightness);

	if (led_time_on)
	{
		pr_alert("LED OVER-RIDE - DELAY_ON_Orig=%d, DELAY_OFF_Orig=%d, DELAY_ON_New=%d, DELAY_OFF_New=%d", delay_on_time, delay_off_time, led_time_on, led_time_off);
		delay_on_time = led_time_on;
	}
	if (led_time_off)
	{
		pr_alert("LED OVER-RIDE - DELAY_ON_Orig=%d, DELAY_OFF_Orig=%d, DELAY_ON_New=%d, DELAY_OFF_New=%d", delay_on_time, delay_off_time, led_time_on, led_time_off);
		delay_off_time = led_time_off;
	}

	if (led_enable_fade == 1) {
		leds_set_slope_mode(client, led, 0, 30, 15, 0,
			(delay_on_time + AN30259A_TIME_UNIT - 1) /
			AN30259A_TIME_UNIT,
			(delay_off_time + AN30259A_TIME_UNIT - 1) /
			AN30259A_TIME_UNIT,
			led_step_speed1, led_step_speed2, led_step_speed3, led_step_speed4);
	}
	else {
		leds_set_slope_mode(client, led, 0, 15, 15, 0,
			(delay_on_time + AN30259A_TIME_UNIT - 1) /
			AN30259A_TIME_UNIT,
			(delay_off_time + AN30259A_TIME_UNIT - 1) /
			AN30259A_TIME_UNIT,
			0, 0, 0, 0);
	}
}
コード例 #4
0
static void an30259a_start_led_pattern(int mode)
{
	int retval;
	u8 led_r_brightness;
	u8 led_g_brightness;
	u8 led_b_brightness;
	struct i2c_client *client;
	struct work_struct *reset = 0;
	unsigned int delay_on_time = 500;
	unsigned int delay_off_time = 2000;
	client = b_client;
	
	if (mode > POWERING)
		return;
	/* Set all LEDs Off */
	an30259a_reset_register_work(reset);
	if (mode == LED_OFF)
		return;

	/* Set to low power consumption mode */
	if (LED_LOWPOWER_MODE == 1)
		LED_DYNAMIC_CURRENT = 0x9;
	else if (led_enable_fade)
		LED_DYNAMIC_CURRENT = 0x1;
	else
		LED_DYNAMIC_CURRENT = 0x48;

	if (led_intensity == 0) {	// then use stock values
		led_r_brightness = LED_R_CURRENT;
		led_g_brightness = LED_G_CURRENT;
		led_b_brightness = LED_B_CURRENT;
	}
	else {	// otherwise brightness adapts to led_intensity
		led_r_brightness = led_intensity / LED_DYNAMIC_CURRENT;
		led_g_brightness = led_intensity / LED_DYNAMIC_CURRENT;
		led_b_brightness = led_intensity / LED_DYNAMIC_CURRENT;
	}

	switch (mode) {
	/* leds_set_slope_mode(client, LED_SEL, DELAY,  MAX, MID, MIN,
		SLPTT1, SLPTT2, DT1, DT2, DT3, DT4) */
	case CHARGING:
		pr_info("LED Battery Charging Pattern on\n");
		if (led_enable_fade_charging == 1) {
			if (led_time_on)
				delay_on_time = led_time_on;
			if (led_time_off)
				delay_off_time = led_time_off;
			leds_on(LED_R, true, true,
						led_r_brightness);
			leds_set_slope_mode(client, LED_R, 0, 30, 15, 0,
				(delay_on_time + AN30259A_TIME_UNIT - 1) /
				AN30259A_TIME_UNIT,
				(delay_off_time + AN30259A_TIME_UNIT - 1) /
				AN30259A_TIME_UNIT,
				led_step_speed1, led_step_speed2, led_step_speed3, led_step_speed4);
		}
		else
			leds_on(LED_R, true, false, led_r_brightness);
		break;

	case CHARGING_ERR:
		pr_info("LED Battery Charging error Pattern on\n");
		leds_on(LED_R, true, true,
					led_r_brightness);
		leds_set_slope_mode(client, LED_R,
				1, 15, 15, 0, 1, 1, 0, 0, 0, 0);
		break;

	case MISSED_NOTI:
		pr_info("LED Missed Notifications Pattern on\n");
		leds_on(LED_B, true, true,
					led_b_brightness);
		leds_set_slope_mode(client, LED_B,
					10, 15, 15, 0, 1, 10, 0, 0, 0, 0);
		break;

	case LOW_BATTERY:
		pr_info("LED Low Battery Pattern on\n");
		leds_on(LED_R, true, true,
					led_r_brightness);
		leds_set_slope_mode(client, LED_R,
					10, 15, 15, 0, 1, 10, 0, 0, 0, 0);
		break;

	case FULLY_CHARGED:
		pr_info("LED full Charged battery Pattern on\n");
		leds_on(LED_G, true, false,
					led_g_brightness);
		break;

	case POWERING:
		pr_info("LED Powering Pattern on\n");
		leds_on(LED_G, true, true, LED_G_CURRENT);
		leds_on(LED_B, true, true, LED_B_CURRENT);
		leds_set_slope_mode(client, LED_G,
				0, 8, 4, 1, 2, 2, 3, 3, 3, 3);
		leds_set_slope_mode(client, LED_B,
				0, 15, 14, 12, 2, 2, 7, 7, 7, 7);
		break;

	default:
		return;
		break;
	}
	retval = leds_i2c_write_all(client);
	if (retval)
		printk(KERN_WARNING "leds_i2c_write_all failed\n");
}
コード例 #5
0
static void an30259a_start_led_pattern(int mode)
{
	int retval;
	u8 r_brightness;          /* Yank555.lu : Control LED intensity (normal, bright) */
	u8 g_brightness;
	u8 b_brightness;
	struct i2c_client *client;
	struct work_struct *reset = 0;
	client = b_client;

	if (mode > POWERING)
		return;
	/* Set all LEDs Off */
	an30259a_reset_register_work(reset);
	if (mode == LED_OFF)
		return;

	/* Set to low power consumption mode */
	if (LED_LOWPOWER_MODE == 1)
		LED_DYNAMIC_CURRENT = 0x8;
	else
		LED_DYNAMIC_CURRENT = 0x1;

	/* Yank555.lu : Control LED intensity (normal, bright) */
	if (led_intensity == 0) {
		r_brightness = LED_R_CURRENT; /* CM stock behaviour */
		g_brightness = LED_G_CURRENT;
		b_brightness = LED_B_CURRENT;
	} else {
		r_brightness = led_intensity / LED_DYNAMIC_CURRENT;
		g_brightness = led_intensity / LED_DYNAMIC_CURRENT;
		b_brightness = led_intensity / LED_DYNAMIC_CURRENT;
	}

	switch (mode) {
	/* leds_set_slope_mode(client, LED_SEL, DELAY,  MAX, MID, MIN,
		SLPTT1, SLPTT2, DT1, DT2, DT3, DT4) */
	case CHARGING:
		leds_on(LED_R, true, false, r_brightness);
		break;

	case CHARGING_ERR:
		leds_on(LED_R, true, true, r_brightness);
		/* Yank555.lu : Handle fading / blinking */
		if (led_enable_fade == 1) {
			leds_set_slope_mode(client, LED_R,
					1, (15 / led_speed),  (7 / led_speed), 0, 1, 1, led_slope_up_1, led_slope_up_2, led_slope_down_1, led_slope_down_2);
		} else {
			leds_set_slope_mode(client, LED_R,
					1, (15 / led_speed), (15 / led_speed), 0, 1, 1, 0, 0, 0, 0);
		}
		break;

	case MISSED_NOTI:
		leds_on(LED_B, true, true, b_brightness);
		/* Yank555.lu : Handle fading / blinking */
		if (led_enable_fade == 1) {
			leds_set_slope_mode(client, LED_B,
						10, (15 / led_speed),  (7 / led_speed), 0, 1, (10 / led_speed), led_slope_up_1, led_slope_up_2, led_slope_down_1, led_slope_down_2);
		} else {
			leds_set_slope_mode(client, LED_B,
						10, (15 / led_speed), (15 / led_speed), 0, 1, (10 / led_speed), 0, 0, 0, 0);
		}
		break;

	case LOW_BATTERY:
		leds_on(LED_R, true, true, r_brightness);
		/* Yank555.lu : Handle fading / blinking */
		if (led_enable_fade == 1) {
			leds_set_slope_mode(client, LED_R,
						10, (15 / led_speed),  (7 / led_speed), 0, 1, (10 / led_speed), led_slope_up_1, led_slope_up_2, led_slope_down_1, led_slope_down_2);
		} else {
			leds_set_slope_mode(client, LED_R,
						10, (15 / led_speed), (15 / led_speed), 0, 1, (10 / led_speed), 0, 0, 0, 0);
		}
		break;

	case FULLY_CHARGED:
		leds_on(LED_G, true, false, g_brightness);
		break;

	case POWERING:
		leds_on(LED_G, true, true, LED_G_CURRENT);
		leds_on(LED_B, true, true, LED_B_CURRENT);
		leds_set_slope_mode(client, LED_G,
				0, 8, 4, 1, 2, 2, 3, 3, 3, 3);
		leds_set_slope_mode(client, LED_B,
				0, 15, 14, 12, 2, 2, 7, 7, 7, 7);
		break;

	default:
		return;
		break;
	}
	retval = leds_i2c_write_all(client);
	if (retval)
		printk(KERN_WARNING "leds_i2c_write_all failed\n");
}
コード例 #6
0
static void an30259a_start_led_pattern(int mode)
{
	int retval;

	struct i2c_client *client;
	struct work_struct *reset = 0;
	client = b_client;

	if (mode > POWERING)
		return;
	/* Set all LEDs Off */
	an30259a_reset_register_work(reset);
	if (mode == LED_OFF)
		return;

	switch (mode) {
	/* leds_set_slope_mode(client, LED_SEL, DELAY,  MAX, MID, MIN,
		SLPTT1, SLPTT2, DT1, DT2, DT3, DT4) */
	case CHARGING:
		leds_on(LED_R, true, false, LED_R_CURRENT);
		leds_on(LED_G, false, false, LED_OFF);
		leds_on(LED_B, false, false, LED_OFF);
		break;

	case CHARGING_ERR:
		leds_on(LED_R, true, true, LED_R_CURRENT);
		leds_on(LED_G, false, false, LED_OFF);
		leds_on(LED_B, false, false, LED_OFF);
		leds_set_slope_mode(client, LED_R,
				1, 15, 15, 0, 1, 1, 0, 0, 0, 0);
		break;

	case MISSED_NOTI:
		leds_on(LED_R, false, false, LED_OFF);
		leds_on(LED_G, false, false, LED_OFF);
		leds_on(LED_B, true, true, LED_B_CURRENT);
		leds_set_slope_mode(client, LED_B,
					10, 15, 15, 0, 1, 10, 0, 0, 0, 0);
		break;

	case LOW_BATTERY:
		leds_on(LED_R, true, true, LED_R_CURRENT);
		leds_on(LED_G, false, false, LED_OFF);
		leds_on(LED_B, false, false, LED_OFF);
		leds_set_slope_mode(client, LED_R,
					10, 15, 15, 0, 1, 10, 0, 0, 0, 0);
		break;

	case FULLY_CHARGED:
		leds_on(LED_R, false, false, LED_OFF);
		leds_on(LED_G, true, false, LED_G_CURRENT);
		leds_on(LED_B, false, false, LED_OFF);
		break;

	case POWERING:
		leds_on(LED_R, false, false, 0);
		leds_on(LED_G, true, true, LED_G_CURRENT);
		leds_on(LED_B, true, true, LED_B_CURRENT);
		leds_set_slope_mode(client, LED_G,
				0, 8, 4, 1, 2, 2, 3, 3, 3, 3);
		leds_set_slope_mode(client, LED_B,
				0, 15, 14, 12, 2, 2, 7, 7, 7, 7);
		break;

	default:
		return;
		break;
	}
	retval = leds_i2c_write_all(client);
	if (retval)
		printk(KERN_WARNING "leds_i2c_write_all failed\n");
}