1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright (c) 2015 Google, Inc 4 * Written by Simon Glass <sjg@chromium.org> 5 */ 6 7 #ifndef __LED_H 8 #define __LED_H 9 10 struct udevice; 11 12 enum led_state_t { 13 LEDST_OFF = 0, 14 LEDST_ON = 1, 15 LEDST_TOGGLE, 16 #ifdef CONFIG_LED_BLINK 17 LEDST_BLINK, 18 #endif 19 20 LEDST_COUNT, 21 }; 22 23 /** 24 * struct led_uc_plat - Platform data the uclass stores about each device 25 * 26 * @label: LED label 27 * @default_state: LED default state 28 */ 29 struct led_uc_plat { 30 const char *label; 31 enum led_state_t default_state; 32 }; 33 34 /** 35 * struct led_uc_priv - Private data the uclass stores about each device 36 * 37 * @period_ms: Flash period in milliseconds 38 */ 39 struct led_uc_priv { 40 int period_ms; 41 }; 42 43 struct led_ops { 44 /** 45 * set_state() - set the state of an LED 46 * 47 * @dev: LED device to change 48 * @state: LED state to set 49 * @return 0 if OK, -ve on error 50 */ 51 int (*set_state)(struct udevice *dev, enum led_state_t state); 52 53 /** 54 * led_get_state() - get the state of an LED 55 * 56 * @dev: LED device to change 57 * @return LED state led_state_t, or -ve on error 58 */ 59 enum led_state_t (*get_state)(struct udevice *dev); 60 61 #ifdef CONFIG_LED_BLINK 62 /** 63 * led_set_period() - set the blink period of an LED 64 * 65 * Thie records the period if supported, or returns -ENOSYS if not. 66 * To start the LED blinking, use set_state(). 67 * 68 * @dev: LED device to change 69 * @period_ms: LED blink period in milliseconds 70 * @return 0 if OK, -ve on error 71 */ 72 int (*set_period)(struct udevice *dev, int period_ms); 73 #endif 74 }; 75 76 #define led_get_ops(dev) ((struct led_ops *)(dev)->driver->ops) 77 78 /** 79 * led_get_by_label() - Find an LED device by label 80 * 81 * @label: LED label to look up 82 * @devp: Returns the associated device, if found 83 * Return: 0 if found, -ENODEV if not found, other -ve on error 84 */ 85 int led_get_by_label(const char *label, struct udevice **devp); 86 87 /** 88 * led_set_state() - set the state of an LED 89 * 90 * @dev: LED device to change 91 * @state: LED state to set 92 * Return: 0 if OK, -ve on error 93 */ 94 int led_set_state(struct udevice *dev, enum led_state_t state); 95 96 /** 97 * led_get_state() - get the state of an LED 98 * 99 * @dev: LED device to change 100 * Return: LED state led_state_t, or -ve on error 101 */ 102 enum led_state_t led_get_state(struct udevice *dev); 103 104 /** 105 * led_set_period() - set the blink period of an LED 106 * 107 * @dev: LED device to change 108 * @period_ms: LED blink period in milliseconds 109 * Return: 0 if OK, -ve on error 110 */ 111 int led_set_period(struct udevice *dev, int period_ms); 112 113 #endif 114