static ssize_t bd2802_store_led_brightness(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(led->led_state != BD2802_SYNC) return -EBUSY; if(value > 50) return -EINVAL; led->white_current = value; bd2802_turn_white(led, MENU); bd2802_turn_white(led, HOME); bd2802_turn_white(led, BACK); bd2802_turn_white(led, SEARCH); return count; }
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; } 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 */ }
static void bd2802_touchkey_work_func(struct work_struct *work) { struct bd2802_led *led = container_of(work, struct bd2802_led, touchkey_work); led->white_current = BD2802_CURRENT_WHITE_MAX; led->blue_current = BD2802_CURRENT_000; bd2802_turn_white(led,led->key_led); bd2802_turn_blue(led,HIDDEN1); bd2802_turn_blue(led,HIDDEN2); hrtimer_start(&led->ledmin_timer, ktime_set(5, 0), HRTIMER_MODE_REL); }
static void bd2802_ledmin_work_func(struct work_struct *work) { struct bd2802_led *led = container_of(work, struct bd2802_led, ledmin_work); led->white_current = min_current; led->blue_current = BD2802_CURRENT_000; #if 1 // led->led_state=BD2802_ON; //--[[ LGE_UBIQUIX_MODIFIED_START : [email protected] [2011.09.09] - Merge from Black_Froyo MR Ver. // bd2802_off(led); bd2802_turn_white(led, MENU); bd2802_turn_white(led, HOME); bd2802_turn_white(led, BACK); bd2802_turn_white(led, SEARCH); //--]] LGE_UBIQUIX_MODIFIED_END : [email protected] [2011.09.09]- Merge from Black_Froyo MR Ver. #else bd2802_on(led); #endif led->led_state = BD2802_DIMMING; }
static ssize_t bd2802_store_led_sync(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); if(led->led_state == BD2802_TEST_ON) return -EBUSY; if(led->led_state == BD2802_SEQ) return -EBUSY; if(value == 1) { if(led->led_state != BD2802_SYNC) { hrtimer_cancel(&led->ledmin_timer); flush_workqueue(led->ledmin_wq); led->blue_current = BD2802_CURRENT_000; bd2802_turn_white(led, HIDDEN1); bd2802_turn_white(led, HIDDEN2); led->led_state = BD2802_SYNC; } } else if(value == 0) { if(led->led_state == BD2802_SYNC) { led->white_current = BD2802_CURRENT_WHITE_MAX; led->blue_current = BD2802_CURRENT_000; bd2802_on(led); led->led_state = BD2802_ON; hrtimer_start(&led->ledmin_timer, ktime_set(5, 0), HRTIMER_MODE_REL); } } else { return -EINVAL; } return count; }
static void bd2802_on(struct bd2802_led *led) { bd2802_turn_white(led, MENU); bd2802_turn_white(led, HOME); bd2802_turn_white(led, BACK); bd2802_turn_white(led, SEARCH); bd2802_turn_white(led, HIDDEN1); bd2802_turn_white(led, HIDDEN2); //HARDLINE bd2802_enable(led); }
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 */ }
static void bd2802_work_func(struct work_struct *work) { struct bd2802_led *led = container_of(work, struct bd2802_led, work); DBG("led->led_state=%d\n",led->led_state); if (led->led_state == BD2802_SEQ_END) { bd2802_turn_white(led,MENU); bd2802_turn_white(led,HOME); bd2802_turn_white(led,BACK); bd2802_turn_white(led,SEARCH); led->key_led = ALL; led->key_direction = FORWARD; led->led_state = BD2802_ON; return; } if (led->led_state!=BD2802_SEQ) return; switch(led->key_led) { case ALL: bd2802_turn_blue(led,MENU); led->key_led=MENU; break; case MENU: bd2802_turn_white(led, MENU); bd2802_turn_blue(led,HOME); led->key_led=HOME; led->key_direction=FORWARD; break; case HOME: bd2802_turn_white(led, HOME); if (led->key_direction==FORWARD) { bd2802_turn_blue(led,BACK); led->key_led=BACK; } else { bd2802_turn_blue(led,MENU); led->key_led=MENU; } break; case BACK: bd2802_turn_white(led, BACK); if (led->key_direction==FORWARD) { bd2802_turn_blue(led,SEARCH); led->key_led=SEARCH; } else { bd2802_turn_blue(led,HOME); led->key_led=HOME; } break; case SEARCH: bd2802_turn_white(led, SEARCH); bd2802_turn_blue(led,BACK); led->key_led=BACK; led->key_direction=BACKWARD; break; case HIDDEN1: case HIDDEN2: break; } led->led_counter++; }