Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * Copyright 2006 - Florian Fainelli <florian@openwrt.org>
0004  *
0005  * Control the Cobalt Qube/RaQ front LED
0006  */
0007 #include <linux/io.h>
0008 #include <linux/ioport.h>
0009 #include <linux/leds.h>
0010 #include <linux/module.h>
0011 #include <linux/platform_device.h>
0012 #include <linux/types.h>
0013 
0014 #define LED_FRONT_LEFT  0x01
0015 #define LED_FRONT_RIGHT 0x02
0016 
0017 static void __iomem *led_port;
0018 static u8 led_value;
0019 
0020 static void qube_front_led_set(struct led_classdev *led_cdev,
0021                    enum led_brightness brightness)
0022 {
0023     if (brightness)
0024         led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT;
0025     else
0026         led_value = ~(LED_FRONT_LEFT | LED_FRONT_RIGHT);
0027     writeb(led_value, led_port);
0028 }
0029 
0030 static struct led_classdev qube_front_led = {
0031     .name           = "qube::front",
0032     .brightness     = LED_FULL,
0033     .brightness_set     = qube_front_led_set,
0034     .default_trigger    = "default-on",
0035 };
0036 
0037 static int cobalt_qube_led_probe(struct platform_device *pdev)
0038 {
0039     struct resource *res;
0040 
0041     res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
0042     if (!res)
0043         return -EBUSY;
0044 
0045     led_port = devm_ioremap(&pdev->dev, res->start, resource_size(res));
0046     if (!led_port)
0047         return -ENOMEM;
0048 
0049     led_value = LED_FRONT_LEFT | LED_FRONT_RIGHT;
0050     writeb(led_value, led_port);
0051 
0052     return devm_led_classdev_register(&pdev->dev, &qube_front_led);
0053 }
0054 
0055 static struct platform_driver cobalt_qube_led_driver = {
0056     .probe  = cobalt_qube_led_probe,
0057     .driver = {
0058         .name   = "cobalt-qube-leds",
0059     },
0060 };
0061 
0062 module_platform_driver(cobalt_qube_led_driver);
0063 
0064 MODULE_LICENSE("GPL");
0065 MODULE_DESCRIPTION("Front LED support for Cobalt Server");
0066 MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>");
0067 MODULE_ALIAS("platform:cobalt-qube-leds");