162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * LEDs driver for the "User LED" on Routerboard532 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2009 Phil Sutter <n0-1@freewrt.org> 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Based on leds-cobalt-qube.c by Florian Fainelly and 862306a36Sopenharmony_ci * rb-diag.c (my own standalone driver for both LED and 962306a36Sopenharmony_ci * button of Routerboard532). 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/leds.h> 1362306a36Sopenharmony_ci#include <linux/module.h> 1462306a36Sopenharmony_ci#include <linux/platform_device.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <asm/mach-rc32434/gpio.h> 1762306a36Sopenharmony_ci#include <asm/mach-rc32434/rb.h> 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistatic void rb532_led_set(struct led_classdev *cdev, 2062306a36Sopenharmony_ci enum led_brightness brightness) 2162306a36Sopenharmony_ci{ 2262306a36Sopenharmony_ci if (brightness) 2362306a36Sopenharmony_ci set_latch_u5(LO_ULED, 0); 2462306a36Sopenharmony_ci else 2562306a36Sopenharmony_ci set_latch_u5(0, LO_ULED); 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistatic enum led_brightness rb532_led_get(struct led_classdev *cdev) 2962306a36Sopenharmony_ci{ 3062306a36Sopenharmony_ci return (get_latch_u5() & LO_ULED) ? LED_FULL : LED_OFF; 3162306a36Sopenharmony_ci} 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistatic struct led_classdev rb532_uled = { 3462306a36Sopenharmony_ci .name = "uled", 3562306a36Sopenharmony_ci .brightness_set = rb532_led_set, 3662306a36Sopenharmony_ci .brightness_get = rb532_led_get, 3762306a36Sopenharmony_ci .default_trigger = "nand-disk", 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_cistatic int rb532_led_probe(struct platform_device *pdev) 4162306a36Sopenharmony_ci{ 4262306a36Sopenharmony_ci return led_classdev_register(&pdev->dev, &rb532_uled); 4362306a36Sopenharmony_ci} 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_cistatic int rb532_led_remove(struct platform_device *pdev) 4662306a36Sopenharmony_ci{ 4762306a36Sopenharmony_ci led_classdev_unregister(&rb532_uled); 4862306a36Sopenharmony_ci return 0; 4962306a36Sopenharmony_ci} 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cistatic struct platform_driver rb532_led_driver = { 5262306a36Sopenharmony_ci .probe = rb532_led_probe, 5362306a36Sopenharmony_ci .remove = rb532_led_remove, 5462306a36Sopenharmony_ci .driver = { 5562306a36Sopenharmony_ci .name = "rb532-led", 5662306a36Sopenharmony_ci }, 5762306a36Sopenharmony_ci}; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_cimodule_platform_driver(rb532_led_driver); 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 6262306a36Sopenharmony_ciMODULE_DESCRIPTION("User LED support for Routerboard532"); 6362306a36Sopenharmony_ciMODULE_AUTHOR("Phil Sutter <n0-1@freewrt.org>"); 6462306a36Sopenharmony_ciMODULE_ALIAS("platform:rb532-led"); 65