18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * LED Triggers for USB Activity
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright 2014 Michal Sojka <sojka@merica.cz>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#include <linux/module.h>
98c2ecf20Sopenharmony_ci#include <linux/kernel.h>
108c2ecf20Sopenharmony_ci#include <linux/init.h>
118c2ecf20Sopenharmony_ci#include <linux/leds.h>
128c2ecf20Sopenharmony_ci#include <linux/usb.h>
138c2ecf20Sopenharmony_ci#include "common.h"
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define BLINK_DELAY 30
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cistatic unsigned long usb_blink_delay = BLINK_DELAY;
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ciDEFINE_LED_TRIGGER(ledtrig_usb_gadget);
208c2ecf20Sopenharmony_ciDEFINE_LED_TRIGGER(ledtrig_usb_host);
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_civoid usb_led_activity(enum usb_led_event ev)
238c2ecf20Sopenharmony_ci{
248c2ecf20Sopenharmony_ci	struct led_trigger *trig = NULL;
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci	switch (ev) {
278c2ecf20Sopenharmony_ci	case USB_LED_EVENT_GADGET:
288c2ecf20Sopenharmony_ci		trig = ledtrig_usb_gadget;
298c2ecf20Sopenharmony_ci		break;
308c2ecf20Sopenharmony_ci	case USB_LED_EVENT_HOST:
318c2ecf20Sopenharmony_ci		trig = ledtrig_usb_host;
328c2ecf20Sopenharmony_ci		break;
338c2ecf20Sopenharmony_ci	}
348c2ecf20Sopenharmony_ci	/* led_trigger_blink_oneshot() handles trig == NULL gracefully */
358c2ecf20Sopenharmony_ci	led_trigger_blink_oneshot(trig, &usb_blink_delay, &usb_blink_delay, 0);
368c2ecf20Sopenharmony_ci}
378c2ecf20Sopenharmony_ciEXPORT_SYMBOL_GPL(usb_led_activity);
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_civoid __init ledtrig_usb_init(void)
418c2ecf20Sopenharmony_ci{
428c2ecf20Sopenharmony_ci	led_trigger_register_simple("usb-gadget", &ledtrig_usb_gadget);
438c2ecf20Sopenharmony_ci	led_trigger_register_simple("usb-host", &ledtrig_usb_host);
448c2ecf20Sopenharmony_ci}
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_civoid __exit ledtrig_usb_exit(void)
478c2ecf20Sopenharmony_ci{
488c2ecf20Sopenharmony_ci	led_trigger_unregister_simple(ledtrig_usb_gadget);
498c2ecf20Sopenharmony_ci	led_trigger_unregister_simple(ledtrig_usb_host);
508c2ecf20Sopenharmony_ci}
51