Message ID | 1490625523-11594-1-git-send-email-techping.chan@gmail.com |
---|---|
State | Superseded |
Delegated to: | Simon Glass |
Headers | show |
2017-04-01 12:23 GMT+08:00 Simon Glass <sjg@chromium.org>: > Hi, > > On 27 March 2017 at 08:38, <techping.chan@gmail.com> wrote: > > From: Ziping Chen <techping.chan@gmail.com> > > > > Sometimes we need to read back the status of a LED. > > > > Add a led_get_status function for DM LED support, and add a get_status > > function for the driver to implement this function. > > > > Signed-off-by: Ziping Chen <techping.chan@gmail.com> > > --- > > drivers/led/led-uclass.c | 10 ++++++++++ > > include/led.h | 15 +++++++++++++++ > > 2 files changed, 25 insertions(+) > > I'm very sorry to say I just duplicated some of your work in my > attempt at cleaning up board_f :-( > > Anyway could you please look at my patches which I think go a little > further than yours in some areas? > > > > > diff --git a/drivers/led/led-uclass.c b/drivers/led/led-uclass.c > > index 784ac87..304b92a 100644 > > --- a/drivers/led/led-uclass.c > > +++ b/drivers/led/led-uclass.c > > @@ -42,6 +42,16 @@ int led_set_on(struct udevice *dev, int on) > > return ops->set_on(dev, on); > > } > > > > +int led_get_status(struct udevice *dev) > > +{ > > + struct led_ops *ops = led_get_ops(dev); > > + > > + if (!ops->get_status) > > + return -ENOSYS; > > + > > + return ops->get_status(dev); > > +} > > + > > UCLASS_DRIVER(led) = { > > .id = UCLASS_LED, > > .name = "led", > > diff --git a/include/led.h b/include/led.h > > index b929d0c..cd6fe98 100644 > > --- a/include/led.h > > +++ b/include/led.h > > @@ -26,6 +26,13 @@ struct led_ops { > > * @return 0 if OK, -ve on error > > */ > > int (*set_on)(struct udevice *dev, int on); > > + /** > > + * led_get_status() - get the state of an LED > > + * > > + * @dev: LED device to query > > + * @return 0 if LED off, 1 if LED on, -ve on error > > + */ > > + int (*get_status)(struct udevice *dev); > > }; > > > > #define led_get_ops(dev) ((struct led_ops *)(dev)->driver->ops) > > @@ -48,4 +55,12 @@ int led_get_by_label(const char *label, struct > udevice **devp); > > */ > > int led_set_on(struct udevice *dev, int on); > > > > +/** > > + * led_get_status() - get the state of an LED > > + * > > + * @dev: LED device to query > > + * @return 0 if LED off, 1 if LED on, -ve on error > > + */ > > +int led_get_status(struct udevice *dev); > > + > > #endif > > -- > > 2.7.4 > > > > Regards, > Simon > Hi, Simon I have seen your code, which have more features.
diff --git a/drivers/led/led-uclass.c b/drivers/led/led-uclass.c index 784ac87..304b92a 100644 --- a/drivers/led/led-uclass.c +++ b/drivers/led/led-uclass.c @@ -42,6 +42,16 @@ int led_set_on(struct udevice *dev, int on) return ops->set_on(dev, on); } +int led_get_status(struct udevice *dev) +{ + struct led_ops *ops = led_get_ops(dev); + + if (!ops->get_status) + return -ENOSYS; + + return ops->get_status(dev); +} + UCLASS_DRIVER(led) = { .id = UCLASS_LED, .name = "led", diff --git a/include/led.h b/include/led.h index b929d0c..cd6fe98 100644 --- a/include/led.h +++ b/include/led.h @@ -26,6 +26,13 @@ struct led_ops { * @return 0 if OK, -ve on error */ int (*set_on)(struct udevice *dev, int on); + /** + * led_get_status() - get the state of an LED + * + * @dev: LED device to query + * @return 0 if LED off, 1 if LED on, -ve on error + */ + int (*get_status)(struct udevice *dev); }; #define led_get_ops(dev) ((struct led_ops *)(dev)->driver->ops) @@ -48,4 +55,12 @@ int led_get_by_label(const char *label, struct udevice **devp); */ int led_set_on(struct udevice *dev, int on); +/** + * led_get_status() - get the state of an LED + * + * @dev: LED device to query + * @return 0 if LED off, 1 if LED on, -ve on error + */ +int led_get_status(struct udevice *dev); + #endif