Path: blob/master/drivers/net/wireless/realtek/rtw88/led.c
52032 views
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause1/* Copyright(c) 2025 Realtek Corporation2*/34#include "main.h"5#include "debug.h"6#include "led.h"78static int rtw_led_set(struct led_classdev *led,9enum led_brightness brightness)10{11struct rtw_dev *rtwdev = container_of(led, struct rtw_dev, led_cdev);1213mutex_lock(&rtwdev->mutex);1415rtwdev->chip->ops->led_set(led, brightness);1617mutex_unlock(&rtwdev->mutex);1819return 0;20}2122void rtw_led_init(struct rtw_dev *rtwdev)23{24static const struct ieee80211_tpt_blink rtw_tpt_blink[] = {25{ .throughput = 0 * 1024, .blink_time = 334 },26{ .throughput = 1 * 1024, .blink_time = 260 },27{ .throughput = 5 * 1024, .blink_time = 220 },28{ .throughput = 10 * 1024, .blink_time = 190 },29{ .throughput = 20 * 1024, .blink_time = 170 },30{ .throughput = 50 * 1024, .blink_time = 150 },31{ .throughput = 70 * 1024, .blink_time = 130 },32{ .throughput = 100 * 1024, .blink_time = 110 },33{ .throughput = 200 * 1024, .blink_time = 80 },34{ .throughput = 300 * 1024, .blink_time = 50 },35};36struct led_classdev *led = &rtwdev->led_cdev;37int err;3839if (!rtwdev->chip->ops->led_set)40return;4142led->brightness_set_blocking = rtw_led_set;4344snprintf(rtwdev->led_name, sizeof(rtwdev->led_name),45"rtw88-%s", dev_name(rtwdev->dev));4647led->name = rtwdev->led_name;48led->max_brightness = LED_ON;49led->default_trigger =50ieee80211_create_tpt_led_trigger(rtwdev->hw,51IEEE80211_TPT_LEDTRIG_FL_RADIO,52rtw_tpt_blink,53ARRAY_SIZE(rtw_tpt_blink));5455err = led_classdev_register(rtwdev->dev, led);56if (err) {57rtw_warn(rtwdev, "Failed to register the LED, error %d\n", err);58return;59}6061rtwdev->led_registered = true;62}6364void rtw_led_deinit(struct rtw_dev *rtwdev)65{66struct led_classdev *led = &rtwdev->led_cdev;6768if (!rtwdev->led_registered)69return;7071rtwdev->chip->ops->led_set(led, LED_OFF);72led_classdev_unregister(led);73}747576