static void bd2802_set_blink(struct bd2802_led *led, enum led_ids id,
                             enum led_colors color)
{
    u8 reg;

    if (bd2802_is_all_off(led) && !led->adf_on)
        bd2802_reset_cancel(led);

    reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT1SETUP);
    bd2802_write_byte(led->client, reg, BD2802_CURRENT_000);
    reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT2SETUP);
    bd2802_write_byte(led->client, reg, led->rgb_current);
    reg = bd2802_get_reg_addr(id, color, BD2802_REG_WAVEPATTERN);
    bd2802_write_byte(led->client, reg, led->wave_pattern);

    bd2802_enable(led, id);
    bd2802_update_state(led, id, color, BD2802_BLINK);
}
static void bd2802_set_on(struct bd2802_led *led, enum led_ids id,
							enum led_colors color)
{
	u8 reg;

	if (bd2802_is_all_off(led) && !led->adf_on)
		bd2802_reset_cancel(led);

	reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT1SETUP);
	bd2802_write_byte(led->client, reg, BD2802_CURRENT_032);
	reg = bd2802_get_reg_addr(id, color, BD2802_REG_CURRENT2SETUP);
	bd2802_write_byte(led->client, reg, BD2802_CURRENT_000);
	reg = bd2802_get_reg_addr(id, color, BD2802_REG_WAVEPATTERN);
	bd2802_write_byte(led->client, reg, BD2802_PATTERN_FULL);

	bd2802_enable(led, id);
	bd2802_update_state(led, id, color, BD2802_ON);
}
Exemple #3
0
// LGE_B_DOM_E 20110106 [email protected], Justin LED onoff
static ssize_t bd2802_store_led_onoff(struct device *dev,
	struct device_attribute *attr, const char *buf, size_t count)
{
	struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));
	int value;
	
	if (!count)
		return -EINVAL;

	value = simple_strtoul(buf, NULL, 10);

	DBG("value=%d\n",value);

	if (value==1 || value == 255)
	{
		led->led_state = BD2802_DIMMING; // Huexxx: enable dimmed...
		led->white_current = min_current; // Huexxx: enable dimmed...
	    	led->blue_current = BD2802_CURRENT_000;
		led->blink_enable=0;
		bd2802_reset_cancel(led);
		bd2802_on(led);
		bd2802_enable(led);
		led_enabled = 1;
	}
	else if (value==0)
	{
		bd2802_off(led);
		gpio_set_value(RGB_LED_CNTL, 0);
		led->led_state=BD2802_OFF;
		led_enabled = 0;
	}
	else
	{
	    if (value > 1)
	    {
			return -EINVAL;
			DBG("Value is not valid\n");
		}
	}

	return count;
}
Exemple #4
0
static int bd2802_bl_resume(struct i2c_client *client)
{
	struct bd2802_led *led = i2c_get_clientdata(client);
	DBG("\n");
	
	led->led_state = BD2802_ON;
	led->white_current = BD2802_CURRENT_WHITE_MAX;
	led->blue_current = BD2802_CURRENT_000;
/*	if (system_rev >=4) //OVER REV.D
	{
		bd2802_write_byte(led->client, BD2812_DCDCDRIVER, 0x00);
		bd2802_write_byte(led->client, BD2812_PIN_FUNC_SETUP, 0x0F);
	}*/
	bd2802_on(led);
	bd2802_enable(led);

	//hrtimer_start(&led->touchkey_timer, ktime_set(0, 500000000), HRTIMER_MODE_REL); /*5 sec */
	hrtimer_start(&led->ledmin_timer, ktime_set(5, 0), HRTIMER_MODE_REL);
	return 0;
}
Exemple #5
0
static ssize_t bd2802_store_led_testmode(struct device *dev,
	struct device_attribute *attr, const char *buf, size_t count)
{
	struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));
	int value;
	
	if (!count)
		return -EINVAL;

	value = simple_strtoul(buf, NULL, 10);

	DBG("value=%d led->led_state=%d\n",value,led->led_state);

	if ((value==1)&&(led->led_state!=BD2802_TEST_ON))
	{
		led->led_state=BD2802_TEST_ON;
		led->white_current = BD2802_CURRENT_WHITE_MAX;
		led->blue_current = BD2802_CURRENT_000;
		bd2802_reset_cancel(led);
		bd2802_on(led);
		bd2802_enable(led);
	    DBG("TEST LED ON\n");
	}
	else if ((value==0)&&(led->led_state!=BD2802_TEST_OFF))
	{
		bd2802_off(led);
		gpio_set_value(RGB_LED_CNTL, 0);
	    led->led_state=BD2802_TEST_OFF;
	    DBG("TEST LED OFF\n");
	}
	else
	{
	    if (value > 1)
	    {
		return -EINVAL;
		DBG("Value is not valid\n");
	}
	}

	return count;
}
Exemple #6
0
void touchkey_pressed(enum key_leds id)
{
	struct bd2802_led *led = i2c_get_clientdata(bd2802_i2c_client);
	DBG("led->led_state=%d\n",led->led_state);
	if (led->led_state==BD2802_SEQ ||
			led->led_state==BD2802_SYNC)
		return;

	hrtimer_cancel(&led->touchkey_timer);
	hrtimer_cancel(&led->ledmin_timer);

	if (led->led_state == BD2802_DIMMING) {
		led->white_current = BD2802_CURRENT_WHITE_MAX;
		led->blue_current = BD2802_CURRENT_000;	
		bd2802_on(led);
		led->led_state = BD2802_ON;
	}
	/* LGE_UPDATE_S 2011-10-26 [[email protected]] : Turn off LED backlight for power consumption */
	else if (led->led_state == BD2802_OFF) {
		led->white_current = BD2802_CURRENT_WHITE_MAX;
		led->blue_current = BD2802_CURRENT_000;	
		led->led_state = BD2802_ON;
		bd2802_on(led);
		bd2802_enable(led);
	}
	/* LGE_UPDATE_E 2011-10-26 [[email protected]] : Turn off LED backlight for power consumption */

	if (led->key_led != id)
		bd2802_turn_white(led,led->key_led);

	led->key_led=id;
	DBG("led->key_led =%d\n",led->key_led);

	led->blue_current = BD2802_CURRENT_BLUE_MAX;
	bd2802_turn_blue(led, led->key_led);
	bd2802_turn_blue(led, HIDDEN1);
	bd2802_turn_blue(led, HIDDEN2);

	hrtimer_start(&led->touchkey_timer, ktime_set(0, 500000000), HRTIMER_MODE_REL); /*5 sec */
}
Exemple #7
0
static ssize_t bd2802_store_blink_enable(struct device *dev,
	struct device_attribute *attr, const char *buf, size_t count)
{
	struct bd2802_led *led = i2c_get_clientdata(to_i2c_client(dev));
	int value;
	
	if (!count)
		return -EINVAL;

	value = simple_strtoul(buf, NULL, 10);

//LGE_UPDATE
//	return count;
//LGE_UPDATE

    if (led->blink_enable==value)
    {
		return count;
    }
	
	if (led->led_state==BD2802_SEQ)
		return count;
	
	led->blink_enable=value;

	down_write(&led->rwsem);

	bd2802_blink_enable(led);
	bd2802_enable(led);
	
	up_write(&led->rwsem);

	DBG("blink_enable = %d\n", led->blink_enable);

	return count;
}
Exemple #8
0
static int __devinit bd2802_probe(struct i2c_client *client,
			const struct i2c_device_id *id)
{
	struct bd2802_led *led;
	int ret, i;

	pr_warning("%s() -- start\n", __func__);

	led = kzalloc(sizeof(struct bd2802_led), GFP_KERNEL);
	if (!led) {
		dev_err(&client->dev, "failed to allocate driver data\n");
		return -ENOMEM;
	}

	led->client = client;
	i2c_set_clientdata(client, led);

	INIT_WORK(&led->work, bd2802_work_func);
	INIT_WORK(&led->touchkey_work, bd2802_touchkey_work_func);
	INIT_WORK(&led->ledmin_work, bd2802_ledmin_work_func);
	
	led->bd2802_wq = create_singlethread_workqueue("bd2802_wq");
	if (!led->bd2802_wq)
		return -ENOMEM;

	led->touchkey_wq = create_singlethread_workqueue("touchkey_wq");
	if (!led->touchkey_wq)
		return -ENOMEM;

	led->ledmin_wq = create_singlethread_workqueue("ledmin_wq");
	if (!led->ledmin_wq)
		return -ENOMEM;

	bd2802_i2c_client = led->client;
	/* Default attributes */
	led->wave_pattern = BD2802_PATTERN_FULL;
	led->blink_enable =0;
	led->led_state = BD2802_SEQ;
	led->key_led = ALL;
	led->key_direction= FORWARD;
	led->led_counter=0;
#if defined(BLINK_ON_BOOTING)
	led->white_current = BD2802_CURRENT_WHITE_MAX;
	led->blue_current = BD2802_CURRENT_000;
#else
	led->white_current = BD2802_CURRENT_WHITE_MAX;
	led->blue_current = BD2802_CURRENT_BLUE_MAX;
#endif

	init_rwsem(&led->rwsem);

	for (i = 0; i < ARRAY_SIZE(bd2802_attributes); i++) {
		ret = device_create_file(&led->client->dev,
						bd2802_attributes[i]);
		if (ret) {
			dev_err(&led->client->dev, "failed: sysfs file %s\n",
					bd2802_attributes[i]->attr.name);
			goto failed_unregister_dev_file;
		}
	}

	hrtimer_init(&led->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
	led->timer.function = bd2802_timer_func;
#if defined(BLINK_ON_BOOTING)
#else
	hrtimer_start(&led->timer, ktime_set(4, 0), HRTIMER_MODE_REL);
#endif
	
	hrtimer_init(&led->touchkey_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
	led->touchkey_timer.function = bd2802_touchkey_timer_func;
	
	hrtimer_init(&led->ledmin_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
	led->ledmin_timer.function = bd2802_ledmin_timer_func;
	

#ifdef CONFIG_HAS_EARLYSUSPEND
	led->early_suspend.level = EARLY_SUSPEND_LEVEL_BLANK_SCREEN;
	led->early_suspend.suspend = bd2802_early_suspend;
	led->early_suspend.resume = bd2802_late_resume;
	register_early_suspend(&led->early_suspend);
#endif

	bd2802_configure(led);
#if defined(BLINK_ON_BOOTING)
	led->blink_enable =1;
#endif
	bd2802_on(led);
	bd2802_enable(led);

//LGE_UPDATE
	led->led_state=BD2802_ON;
//LGE_UPDATE
	return 0;

failed_unregister_dev_file:
	for (i--; i >= 0; i--)
		device_remove_file(&led->client->dev, bd2802_attributes[i]);

	return ret;
}