struct work_struct brightness_work;
enum led_brightness brightness;
int regulator_state;
- u8 blink;
+ short blink_val;
};
static void cpcap_set(struct led_classdev *led_cdev,
}
EXPORT_SYMBOL(cpcap_set);
-static int cpcap_msg_ind_blink(struct led_classdev *led_cdev,
+static int cpcap_led_blink(struct led_classdev *led_cdev,
unsigned long *delay_on,
unsigned long *delay_off)
{
container_of(led_cdev, struct cpcap_led_data,
cpcap_class_dev);
- info->blink = 1;
- schedule_work(&info->brightness_work);
+ info->blink_val = *delay_on;
+
+ if (info->pdata->blink_able) {
+ if(info->blink_val) {
+ cpcap_uc_start(info->cpcap, CPCAP_MACRO_6);
+ } else {
+ cpcap_uc_stop(info->cpcap, CPCAP_MACRO_6);
+ schedule_work(&info->brightness_work);
+ }
+ }
+
return 0;
}
brightness = cpcap_led_data->brightness;
if (brightness > 0) {
- brightness = (cpcap_led_data->pdata->cpcap_duty_cycle |
- cpcap_led_data->pdata->cpcap_current | 0x01);
+ brightness = (cpcap_led_data->pdata->cpcap_reg_period |
+ cpcap_led_data->pdata->cpcap_reg_duty_cycle |
+ cpcap_led_data->pdata->cpcap_reg_current |
+ 0x01);
if ((cpcap_led_data->regulator) &&
(cpcap_led_data->regulator_state == 0)) {
cpcap_status = cpcap_regacc_write(cpcap_led_data->cpcap,
cpcap_led_data->pdata->cpcap_register,
brightness,
- cpcap_led_data->pdata->cpcap_mask);
+ cpcap_led_data->pdata->cpcap_reg_mask);
if (cpcap_status < 0)
pr_err("%s: Writing to the register failed for %i\n",
__func__, cpcap_status);
- if (cpcap_led_data->blink)
- cpcap_uc_start(cpcap_led_data->cpcap, CPCAP_MACRO_6);
} else {
if ((cpcap_led_data->regulator) &&
(cpcap_led_data->regulator_state == 1)) {
cpcap_status = cpcap_regacc_write(cpcap_led_data->cpcap,
cpcap_led_data->pdata->cpcap_register,
brightness,
- cpcap_led_data->pdata->cpcap_mask);
+ cpcap_led_data->pdata->cpcap_reg_mask);
brightness = 0x00;
cpcap_status = cpcap_regacc_write(cpcap_led_data->cpcap,
cpcap_led_data->pdata->cpcap_register,
brightness,
- cpcap_led_data->pdata->cpcap_mask);
+ cpcap_led_data->pdata->cpcap_reg_mask);
if (cpcap_status < 0)
pr_err("%s: Writing to the register failed for %i\n",
__func__, cpcap_status);
- if (cpcap_led_data->blink)
- cpcap_uc_stop(cpcap_led_data->cpcap, CPCAP_MACRO_6);
}
}
info->cpcap_class_dev.name = info->pdata->class_name;
info->cpcap_class_dev.brightness_set = cpcap_set;
+ info->cpcap_class_dev.blink_set = cpcap_led_blink;
info->cpcap_class_dev.brightness = LED_OFF;
info->cpcap_class_dev.max_brightness = 255;
if (info->pdata->blink_able)
- info->cpcap_class_dev.blink_set = cpcap_msg_ind_blink;
+ info->cpcap_class_dev.default_trigger = "timer";
ret = led_classdev_register(&pdev->dev, &info->cpcap_class_dev);
if (ret < 0) {
#define LD_CPCAP_LED_DRV "cpcap_led_driver"
-#define LD_DISP_BUTTON_DEV "button-backlight"
#define LD_PRIVACY_LED_DEV "privacy-led"
-#define LD_NOTIF_LED_DEV "notification-backlight"
-
-struct cpcap_display_led {
- unsigned int display_reg;
- unsigned int display_mask;
- unsigned int display_on;
- unsigned int display_off;
- unsigned int display_init;
- unsigned int poll_intvl;
- unsigned int zone0;
- unsigned int zone1;
- unsigned int zone2;
- unsigned int zone3;
- unsigned int zone4;
-};
+#define LD_NOTIF_LED_DEV "notification-led"
struct cpcap_led {
u8 blink_able;
- unsigned int cpcap_register;
- unsigned int cpcap_mask;
- unsigned int on_val;
- unsigned int off_val;
- unsigned int cpcap_duty_cycle;
- unsigned int cpcap_current;
+ unsigned short cpcap_register;
+ unsigned short cpcap_reg_mask;
+ unsigned short cpcap_reg_period;
+ unsigned short cpcap_reg_duty_cycle;
+ unsigned short cpcap_reg_current;
char *class_name;
char *led_regulator;
};