static int hp6xxled_probe(struct platform_device *pdev) { int ret; ret = devm_led_classdev_register(&pdev->dev, &hp6xx_red_led); if (ret < 0) return ret; return devm_led_classdev_register(&pdev->dev, &hp6xx_green_led); }
static int mt76_led_init(struct mt76_dev *dev) { struct device_node *np = dev->dev->of_node; struct ieee80211_hw *hw = dev->hw; int led_pin; if (!dev->led_cdev.brightness_set && !dev->led_cdev.blink_set) return 0; snprintf(dev->led_name, sizeof(dev->led_name), "mt76-%s", wiphy_name(hw->wiphy)); dev->led_cdev.name = dev->led_name; dev->led_cdev.default_trigger = ieee80211_create_tpt_led_trigger(hw, IEEE80211_TPT_LEDTRIG_FL_RADIO, mt76_tpt_blink, ARRAY_SIZE(mt76_tpt_blink)); np = of_get_child_by_name(np, "led"); if (np) { if (!of_property_read_u32(np, "led-sources", &led_pin)) dev->led_pin = led_pin; dev->led_al = of_property_read_bool(np, "led-active-low"); } return devm_led_classdev_register(dev->dev, &dev->led_cdev); }
static int max8997_led_probe(struct platform_device *pdev) { struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent); struct max8997_platform_data *pdata = dev_get_platdata(iodev->dev); struct max8997_led *led; char name[20]; int ret = 0; if (pdata == NULL) { dev_err(&pdev->dev, "no platform data\n"); return -ENODEV; } led = devm_kzalloc(&pdev->dev, sizeof(*led), GFP_KERNEL); if (led == NULL) return -ENOMEM; led->id = pdev->id; snprintf(name, sizeof(name), "max8997-led%d", pdev->id); led->cdev.name = name; led->cdev.brightness_set = max8997_led_brightness_set; led->cdev.flags |= LED_CORE_SUSPENDRESUME; led->cdev.brightness = 0; led->cdev.groups = max8997_groups; led->iodev = iodev; /* initialize mode and brightness according to platform_data */ if (pdata->led_pdata) { u8 mode = 0, brightness = 0; mode = pdata->led_pdata->mode[led->id]; brightness = pdata->led_pdata->brightness[led->id]; max8997_led_set_mode(led, mode); if (brightness > led->cdev.max_brightness) brightness = led->cdev.max_brightness; max8997_led_set_current(led, brightness); led->cdev.brightness = brightness; } else { max8997_led_set_mode(led, MAX8997_NONE); max8997_led_set_current(led, 0); } mutex_init(&led->mutex); ret = devm_led_classdev_register(&pdev->dev, &led->cdev); if (ret < 0) return ret; return 0; }
static int u2fzero_init_led(struct u2fzero_device *dev, unsigned int minor) { dev->led_name = devm_kasprintf(&dev->hdev->dev, GFP_KERNEL, "%s%u", DRIVER_SHORT, minor); if (dev->led_name == NULL) return -ENOMEM; dev->ldev.name = dev->led_name; dev->ldev.max_brightness = LED_ON; dev->ldev.flags = LED_HW_PLUGGABLE; dev->ldev.brightness_set_blocking = u2fzero_brightness_set; return devm_led_classdev_register(&dev->hdev->dev, &dev->ldev); }
static int cobalt_qube_led_probe(struct platform_device *pdev) { struct resource *res; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!res) return -EBUSY; led_port = devm_ioremap(&pdev->dev, res->start, resource_size(res)); if (!led_port) return -ENOMEM; led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT; writeb(led_value, led_port); return devm_led_classdev_register(&pdev->dev, &qube_front_led); }
static int net48xx_led_probe(struct platform_device *pdev) { return devm_led_classdev_register(&pdev->dev, &net48xx_error_led); }
static int micro_leds_brightness_set(struct led_classdev *led_cdev, enum led_brightness value) { struct ipaq_micro *micro = dev_get_drvdata(led_cdev->dev->parent->parent); /* * In this message: * Byte 0 = LED color: 0 = yellow, 1 = green * yellow LED is always ~30 blinks per minute * Byte 1 = duration (flags?) appears to be ignored * Byte 2 = green ontime in 1/10 sec (deciseconds) * 1 = 1/10 second * 0 = 256/10 second * Byte 3 = green offtime in 1/10 sec (deciseconds) * 1 = 1/10 second * 0 = 256/10 seconds */ struct ipaq_micro_msg msg = { .id = MSG_NOTIFY_LED, .tx_len = 4, }; msg.tx_data[0] = LED_GREEN; msg.tx_data[1] = 0; if (value) { msg.tx_data[2] = 0; /* Duty cycle 256 */ msg.tx_data[3] = 1; } else { msg.tx_data[2] = 1; msg.tx_data[3] = 0; /* Duty cycle 256 */ } return ipaq_micro_tx_msg_sync(micro, &msg); } /* Maximum duty cycle in ms 256/10 sec = 25600 ms */ #define IPAQ_LED_MAX_DUTY 25600 static int micro_leds_blink_set(struct led_classdev *led_cdev, unsigned long *delay_on, unsigned long *delay_off) { struct ipaq_micro *micro = dev_get_drvdata(led_cdev->dev->parent->parent); /* * In this message: * Byte 0 = LED color: 0 = yellow, 1 = green * yellow LED is always ~30 blinks per minute * Byte 1 = duration (flags?) appears to be ignored * Byte 2 = green ontime in 1/10 sec (deciseconds) * 1 = 1/10 second * 0 = 256/10 second * Byte 3 = green offtime in 1/10 sec (deciseconds) * 1 = 1/10 second * 0 = 256/10 seconds */ struct ipaq_micro_msg msg = { .id = MSG_NOTIFY_LED, .tx_len = 4, }; msg.tx_data[0] = LED_GREEN; if (*delay_on > IPAQ_LED_MAX_DUTY || *delay_off > IPAQ_LED_MAX_DUTY) return -EINVAL; if (*delay_on == 0 && *delay_off == 0) { *delay_on = 100; *delay_off = 100; } msg.tx_data[1] = 0; if (*delay_on >= IPAQ_LED_MAX_DUTY) msg.tx_data[2] = 0; else msg.tx_data[2] = (u8) DIV_ROUND_CLOSEST(*delay_on, 100); if (*delay_off >= IPAQ_LED_MAX_DUTY) msg.tx_data[3] = 0; else msg.tx_data[3] = (u8) DIV_ROUND_CLOSEST(*delay_off, 100); return ipaq_micro_tx_msg_sync(micro, &msg); } static struct led_classdev micro_led = { .name = "led-ipaq-micro", .brightness_set_blocking = micro_leds_brightness_set, .blink_set = micro_leds_blink_set, .flags = LED_CORE_SUSPENDRESUME, }; static int micro_leds_probe(struct platform_device *pdev) { int ret; ret = devm_led_classdev_register(&pdev->dev, µ_led); if (ret) { dev_err(&pdev->dev, "registering led failed: %d\n", ret); return ret; } dev_info(&pdev->dev, "iPAQ micro notification LED driver\n"); return 0; } static struct platform_driver micro_leds_device_driver = { .driver = { .name = "ipaq-micro-leds", }, .probe = micro_leds_probe, }; module_platform_driver(micro_leds_device_driver); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("driver for iPAQ Atmel micro leds"); MODULE_ALIAS("platform:ipaq-micro-leds");