From 78f5c78eac0a5ca1c65c5d051866a8bf15924e11 Mon Sep 17 00:00:00 2001 From: "makarand.karvekar" <makarand.karvekar@motorola.com> Date: Fri, 17 Sep 2010 10:05:11 -0500 Subject: [PATCH] leds: leds-ld-cpcap: blink and timer trigger updates Set default trigger as timer. Seperate blink function from brightness. Change-Id: I1dd789ae8b5df88ea26c40ed544807ec0f3bb52a Signed-off-by: makarand.karvekar <makarand.karvekar@motorola.com> --- drivers/leds/leds-ld-cpcap.c | 36 +++++++++++++++++++++-------------- include/linux/leds-ld-cpcap.h | 28 ++++++--------------------- 2 files changed, 28 insertions(+), 36 deletions(-) diff --git a/drivers/leds/leds-ld-cpcap.c b/drivers/leds/leds-ld-cpcap.c index ca5ce145d435..0c114f18c608 100755 --- a/drivers/leds/leds-ld-cpcap.c +++ b/drivers/leds/leds-ld-cpcap.c @@ -34,7 +34,7 @@ struct cpcap_led_data { 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, @@ -52,7 +52,7 @@ 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) { @@ -60,8 +60,17 @@ static int cpcap_msg_ind_blink(struct led_classdev *led_cdev, 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; } @@ -76,8 +85,10 @@ static void cpcap_brightness_work(struct work_struct *work) 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)) { @@ -88,14 +99,12 @@ static void cpcap_brightness_work(struct work_struct *work) 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)) { @@ -108,22 +117,20 @@ static void cpcap_brightness_work(struct work_struct *work) 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); } } @@ -162,10 +169,11 @@ static int cpcap_probe(struct platform_device *pdev) 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) { diff --git a/include/linux/leds-ld-cpcap.h b/include/linux/leds-ld-cpcap.h index a8c52f62ae8c..27a8a89e7083 100644 --- a/include/linux/leds-ld-cpcap.h +++ b/include/linux/leds-ld-cpcap.h @@ -23,32 +23,16 @@ #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; }; -- 2.34.1