• Home
  • Raw
  • Download

Lines Matching +full:led +full:- +full:sources

2  * Driver for BCM6328 memory-mapped LEDs, based on leds-syscon.c
58 * struct bcm6328_led - state container for bcm6328 based LEDs
59 * @cdev: LED class device for this LED
62 * @pin: LED pin number
65 * @active_low: LED is active low
97 * bits [31:0] -> LEDs 8-23
98 * bits [47:32] -> LEDs 0-7
99 * bits [63:48] -> unused
104 return pin + 16; /* LEDs 0-7 (bits 47:32) */ in bcm6328_pin2shift()
106 return pin - 8; /* LEDs 8-23 (bits 31:0) */ in bcm6328_pin2shift()
109 static void bcm6328_led_mode(struct bcm6328_led *led, unsigned long value) in bcm6328_led_mode() argument
114 shift = bcm6328_pin2shift(led->pin); in bcm6328_led_mode()
116 mode = led->mem + BCM6328_REG_MODE_HI; in bcm6328_led_mode()
118 mode = led->mem + BCM6328_REG_MODE_LO; in bcm6328_led_mode()
129 struct bcm6328_led *led = in bcm6328_led_set() local
133 spin_lock_irqsave(led->lock, flags); in bcm6328_led_set()
134 *(led->blink_leds) &= ~BIT(led->pin); in bcm6328_led_set()
135 if ((led->active_low && value == LED_OFF) || in bcm6328_led_set()
136 (!led->active_low && value != LED_OFF)) in bcm6328_led_set()
137 bcm6328_led_mode(led, BCM6328_LED_MODE_ON); in bcm6328_led_set()
139 bcm6328_led_mode(led, BCM6328_LED_MODE_OFF); in bcm6328_led_set()
140 spin_unlock_irqrestore(led->lock, flags); in bcm6328_led_set()
158 struct bcm6328_led *led = in bcm6328_blink_set() local
170 dev_dbg(led_cdev->dev, in bcm6328_blink_set()
172 return -EINVAL; in bcm6328_blink_set()
176 dev_dbg(led_cdev->dev, in bcm6328_blink_set()
179 return -EINVAL; in bcm6328_blink_set()
182 spin_lock_irqsave(led->lock, flags); in bcm6328_blink_set()
183 if (*(led->blink_leds) == 0 || in bcm6328_blink_set()
184 *(led->blink_leds) == BIT(led->pin) || in bcm6328_blink_set()
185 *(led->blink_delay) == delay) { in bcm6328_blink_set()
188 *(led->blink_leds) |= BIT(led->pin); in bcm6328_blink_set()
189 *(led->blink_delay) = delay; in bcm6328_blink_set()
191 val = bcm6328_led_read(led->mem + BCM6328_REG_INIT); in bcm6328_blink_set()
194 bcm6328_led_write(led->mem + BCM6328_REG_INIT, val); in bcm6328_blink_set()
196 bcm6328_led_mode(led, BCM6328_LED_MODE_BLINK); in bcm6328_blink_set()
199 dev_dbg(led_cdev->dev, in bcm6328_blink_set()
201 rc = -EINVAL; in bcm6328_blink_set()
203 spin_unlock_irqrestore(led->lock, flags); in bcm6328_blink_set()
220 /* Only LEDs 0-7 can be activity/link controlled */ in bcm6328_hwled()
224 cnt = of_property_count_elems_of_size(nc, "brcm,link-signal-sources", in bcm6328_hwled()
235 of_property_read_u32_index(nc, "brcm,link-signal-sources", i, in bcm6328_hwled()
251 "brcm,activity-signal-sources", in bcm6328_hwled()
262 of_property_read_u32_index(nc, "brcm,activity-signal-sources", in bcm6328_hwled()
284 struct bcm6328_led *led; in bcm6328_led() local
288 led = devm_kzalloc(dev, sizeof(*led), GFP_KERNEL); in bcm6328_led()
289 if (!led) in bcm6328_led()
290 return -ENOMEM; in bcm6328_led()
292 led->pin = reg; in bcm6328_led()
293 led->mem = mem; in bcm6328_led()
294 led->lock = lock; in bcm6328_led()
295 led->blink_leds = blink_leds; in bcm6328_led()
296 led->blink_delay = blink_delay; in bcm6328_led()
298 if (of_property_read_bool(nc, "active-low")) in bcm6328_led()
299 led->active_low = true; in bcm6328_led()
301 led->cdev.name = of_get_property(nc, "label", NULL) ? : nc->name; in bcm6328_led()
302 led->cdev.default_trigger = of_get_property(nc, in bcm6328_led()
303 "linux,default-trigger", in bcm6328_led()
306 if (!of_property_read_string(nc, "default-state", &state)) { in bcm6328_led()
308 led->cdev.brightness = LED_FULL; in bcm6328_led()
313 shift = bcm6328_pin2shift(led->pin); in bcm6328_led()
322 if ((led->active_low && val == BCM6328_LED_MODE_OFF) || in bcm6328_led()
323 (!led->active_low && val == BCM6328_LED_MODE_ON)) in bcm6328_led()
324 led->cdev.brightness = LED_FULL; in bcm6328_led()
326 led->cdev.brightness = LED_OFF; in bcm6328_led()
328 led->cdev.brightness = LED_OFF; in bcm6328_led()
331 led->cdev.brightness = LED_OFF; in bcm6328_led()
334 bcm6328_led_set(&led->cdev, led->cdev.brightness); in bcm6328_led()
336 led->cdev.brightness_set = bcm6328_led_set; in bcm6328_led()
337 led->cdev.blink_set = bcm6328_blink_set; in bcm6328_led()
339 rc = devm_led_classdev_register(dev, &led->cdev); in bcm6328_led()
343 dev_dbg(dev, "registered LED %s\n", led->cdev.name); in bcm6328_led()
350 struct device *dev = &pdev->dev; in bcm6328_leds_probe()
351 struct device_node *np = pdev->dev.of_node; in bcm6328_leds_probe()
360 return -EINVAL; in bcm6328_leds_probe()
368 return -ENOMEM; in bcm6328_leds_probe()
372 return -ENOMEM; in bcm6328_leds_probe()
376 return -ENOMEM; in bcm6328_leds_probe()
386 if (of_property_read_bool(np, "brcm,serial-leds")) in bcm6328_leds_probe()
388 if (of_property_read_bool(np, "brcm,serial-mux")) in bcm6328_leds_probe()
390 if (of_property_read_bool(np, "brcm,serial-clk-low")) in bcm6328_leds_probe()
392 if (!of_property_read_bool(np, "brcm,serial-dat-low")) in bcm6328_leds_probe()
394 if (!of_property_read_bool(np, "brcm,serial-shift-inv")) in bcm6328_leds_probe()
406 dev_err(dev, "invalid LED (%u >= %d)\n", reg, in bcm6328_leds_probe()
411 if (of_property_read_bool(child, "brcm,hardware-controlled")) in bcm6328_leds_probe()
427 { .compatible = "brcm,bcm6328-leds", },
435 .name = "leds-bcm6328",
444 MODULE_DESCRIPTION("LED driver for BCM6328 controllers");
446 MODULE_ALIAS("platform:leds-bcm6328");