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 10struct udevice; 11 12enum 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 */ 29struct 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 */ 39struct led_uc_priv { 40 int period_ms; 41}; 42 43struct 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 */ 85int 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 */ 94int 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 */ 102enum 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 */ 111int led_set_period(struct udevice *dev, int period_ms); 112 113/** 114 * led_bind_generic() - bind children of parent to given driver 115 * 116 * @parent: Top-level LED device 117 * @driver_name: Driver for handling individual child nodes 118 */ 119int led_bind_generic(struct udevice *parent, const char *driver_name); 120 121#endif 122