Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * linux/drivers/leds/leds-locomo.c
0004  *
0005  * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu>
0006  */
0007 
0008 #include <linux/kernel.h>
0009 #include <linux/init.h>
0010 #include <linux/module.h>
0011 #include <linux/device.h>
0012 #include <linux/leds.h>
0013 
0014 #include <asm/hardware/locomo.h>
0015 
0016 static void locomoled_brightness_set(struct led_classdev *led_cdev,
0017                 enum led_brightness value, int offset)
0018 {
0019     struct locomo_dev *locomo_dev = LOCOMO_DEV(led_cdev->dev->parent);
0020     unsigned long flags;
0021 
0022     local_irq_save(flags);
0023     if (value)
0024         locomo_writel(LOCOMO_LPT_TOFH, locomo_dev->mapbase + offset);
0025     else
0026         locomo_writel(LOCOMO_LPT_TOFL, locomo_dev->mapbase + offset);
0027     local_irq_restore(flags);
0028 }
0029 
0030 static void locomoled_brightness_set0(struct led_classdev *led_cdev,
0031                 enum led_brightness value)
0032 {
0033     locomoled_brightness_set(led_cdev, value, LOCOMO_LPT0);
0034 }
0035 
0036 static void locomoled_brightness_set1(struct led_classdev *led_cdev,
0037                 enum led_brightness value)
0038 {
0039     locomoled_brightness_set(led_cdev, value, LOCOMO_LPT1);
0040 }
0041 
0042 static struct led_classdev locomo_led0 = {
0043     .name           = "locomo:amber:charge",
0044     .default_trigger    = "main-battery-charging",
0045     .brightness_set     = locomoled_brightness_set0,
0046 };
0047 
0048 static struct led_classdev locomo_led1 = {
0049     .name           = "locomo:green:mail",
0050     .default_trigger    = "nand-disk",
0051     .brightness_set     = locomoled_brightness_set1,
0052 };
0053 
0054 static int locomoled_probe(struct locomo_dev *ldev)
0055 {
0056     int ret;
0057 
0058     ret = devm_led_classdev_register(&ldev->dev, &locomo_led0);
0059     if (ret < 0)
0060         return ret;
0061 
0062     return  devm_led_classdev_register(&ldev->dev, &locomo_led1);
0063 }
0064 
0065 
0066 static struct locomo_driver locomoled_driver = {
0067     .drv = {
0068         .name = "locomoled"
0069     },
0070     .devid  = LOCOMO_DEVID_LED,
0071     .probe  = locomoled_probe,
0072 };
0073 
0074 static int __init locomoled_init(void)
0075 {
0076     return locomo_driver_register(&locomoled_driver);
0077 }
0078 module_init(locomoled_init);
0079 
0080 MODULE_AUTHOR("John Lenz <lenz@cs.wisc.edu>");
0081 MODULE_DESCRIPTION("Locomo LED driver");
0082 MODULE_LICENSE("GPL");