static ssize_t led_blink_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct led_classdev *led_cdev = dev_get_drvdata(dev); ssize_t ret = -EINVAL; char *after; unsigned long state = simple_strtoul(buf, &after, 10); size_t count = after - buf; unsigned long delay_on,delay_off; #ifdef ZTE_CONFIG_LED_LIGHT_INSUSPEND//added by zhang.yu_1 if(!strcmp(led_cdev->name, "red")){ led_dev_bakeup[0].led_blink_state = state; led_dev_bakeup[0].dev = dev; } if(!strcmp(led_cdev->name, "green")){ led_dev_bakeup[1].led_blink_state = state; led_dev_bakeup[1].dev = dev; } #endif if (isspace(*after)) count++; if (count == size) { ret = count; if (state == LED_OFF) { delay_on=0; delay_off=1000; led_blink_set(led_cdev, &delay_on,&delay_off); } else { #ifdef CONFIG_LED_BLINK_500_14500//added by zhang.yu_1 delay_on=500; delay_off=14500; #elif defined(CONFIG_LED_BLINK_1000_1000) //XJB delay_on=1000; delay_off=1000; #elif defined(CONFIG_LED_BLINK_500_7000) //XJB delay_on=500; delay_off=7000; #else delay_on=500; delay_off=500; #endif led_blink_set(led_cdev, &delay_on,&delay_off); } } return ret; }
static void tpt_trig_timer(unsigned long data) { struct ieee80211_local *local = (void *)data; struct tpt_led_trigger *tpt_trig = local->tpt_led_trigger; struct led_classdev *led_cdev; unsigned long on, off, tpt; int i; if (!tpt_trig->running) return; mod_timer(&tpt_trig->timer, round_jiffies(jiffies + HZ)); tpt = tpt_trig_traffic(local, tpt_trig); /* default to just solid on */ on = 1; off = 0; for (i = tpt_trig->blink_table_len - 1; i >= 0; i--) { if (tpt_trig->blink_table[i].throughput < 0 || tpt > tpt_trig->blink_table[i].throughput) { off = tpt_trig->blink_table[i].blink_time / 2; on = tpt_trig->blink_table[i].blink_time - off; break; } } read_lock(&tpt_trig->trig.leddev_list_lock); list_for_each_entry(led_cdev, &tpt_trig->trig.led_cdevs, trig_list) led_blink_set(led_cdev, &on, &off); read_unlock(&tpt_trig->trig.leddev_list_lock); }
static ssize_t led_delay_off_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct led_classdev *led_cdev = dev_get_drvdata(dev); int ret = -EINVAL; char *after; unsigned long state = simple_strtoul(buf, &after, 10); size_t count = after - buf; if (isspace(*after)) count++; if (count == size) { /* FUJITSU:2011-12-01 add LED start */ if (g_chrg_flag == 1 && state > 150){ state -= 100; g_chrg_count = 1; } else { g_chrg_count = 0; } /* FUJITSU:2011-12-01 add LED end */ led_blink_set(led_cdev, &led_cdev->blink_delay_on, &state); led_cdev->blink_delay_off = state; ret = count; } return ret; }
static void timer_trig_activate(struct led_classdev *led_cdev) { int rc; // printk("[LED][timer_trig_activate]\n"); led_cdev->trigger_data = NULL; rc = device_create_file(led_cdev->dev, &dev_attr_delay_on); if (rc) return; rc = device_create_file(led_cdev->dev, &dev_attr_delay_off); if (rc) goto err_out_delayon; led_blink_set(led_cdev, &led_cdev->blink_delay_on, &led_cdev->blink_delay_off); led_cdev->trigger_data = (void *)1; kobject_uevent(&led_cdev->dev->kobj,KOBJ_ADD); return; err_out_delayon: device_remove_file(led_cdev->dev, &dev_attr_delay_on); }
static ssize_t led_blink_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct led_classdev *led_cdev = dev_get_drvdata(dev); ssize_t ret = -EINVAL; char *after; unsigned long state = simple_strtoul(buf, &after, 10); size_t count = after - buf; unsigned long on=0, off=500; if (isspace(*after)) count++; if (count == size) { ret = count; if (state) led_blink_set(led_cdev, &led_cdev->blink_delay_on_u, &led_cdev->blink_delay_off_u); else led_blink_set(led_cdev, &on, &off); } return ret; }
static ssize_t led_delay_off_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct led_classdev *led_cdev = dev_get_drvdata(dev); unsigned long state; ssize_t ret = -EINVAL; ret = kstrtoul(buf, 10, &state); if (ret) return ret; led_blink_set(led_cdev, &led_cdev->blink_delay_on, &state); led_cdev->blink_delay_off = state; return size; }
static ssize_t led_blink_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { struct led_classdev *led_cdev = dev_get_drvdata(dev); struct ktd2026_led *led = cdev_to_led(led_cdev); unsigned long blink_set; if (kstrtoul(buf, 0, &blink_set)) return -EINVAL; if (!blink_set) { led->delay_on_time_ms = LED_OFF; ktd2026_set_brightness(led_cdev, LED_OFF); } led_blink_set(led_cdev, &led->delay_on_time_ms, &led->delay_off_time_ms); return len; }
static ssize_t led_enable_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size) { struct led_classdev *led_cdev = dev_get_drvdata(dev); unsigned long blink_on = led_cdev->blink_delay_on; unsigned long blink_off = led_cdev->blink_delay_off; int on = simple_strtol(buf, NULL, 10); if (!on) { led_stop_software_blink(led_cdev); led_set_brightness(led_cdev, 0); } else { if (blink_on && blink_off) { led_blink_set(led_cdev, &blink_on, &blink_off); } } return size; }
static void timer_trig_activate(struct led_classdev *led_cdev) { int rc; led_cdev->trigger_data = NULL; rc = device_create_file(led_cdev->dev, &dev_attr_delay_on); if (rc) return; rc = device_create_file(led_cdev->dev, &dev_attr_delay_off); if (rc) goto err_out_delayon; led_blink_set(led_cdev, &led_cdev->blink_delay_on, &led_cdev->blink_delay_off); led_cdev->activated = true; return; err_out_delayon: device_remove_file(led_cdev->dev, &dev_attr_delay_on); }