leds: leds-ld-cpcap: blink and timer trigger updates
authormakarand.karvekar <makarand.karvekar@motorola.com>
Fri, 17 Sep 2010 15:05:11 +0000 (10:05 -0500)
committerColin Cross <ccross@android.com>
Wed, 6 Oct 2010 23:51:49 +0000 (16:51 -0700)
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
include/linux/leds-ld-cpcap.h

index ca5ce145d4358031d9d92e9bae8eb63999c102f3..0c114f18c60831f98f4a06bfa994f6668be7c267 100755 (executable)
@@ -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) {
index a8c52f62ae8cfbcb201db6003df356baf9c53a1f..27a8a89e708335f6439787f63bfe482e1de32b21 100644 (file)
 
 #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;
 };