~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux-2.6.17/drivers/leds/leds-locomo.c

Version: ~ [ 2.6.16 ] ~ [ 2.6.17 ] ~
Architecture: ~ [ ia64 ] ~ [ i386 ] ~ [ arm ] ~ [ ppc ] ~ [ sparc64 ] ~

  1 /*
  2  * linux/drivers/leds/locomo.c
  3  *
  4  * Copyright (C) 2005 John Lenz <lenz@cs.wisc.edu>
  5  *
  6  * This program is free software; you can redistribute it and/or modify
  7  * it under the terms of the GNU General Public License version 2 as
  8  * published by the Free Software Foundation.
  9  */
 10 
 11 #include <linux/config.h>
 12 #include <linux/kernel.h>
 13 #include <linux/init.h>
 14 #include <linux/device.h>
 15 #include <linux/leds.h>
 16 
 17 #include <asm/hardware.h>
 18 #include <asm/hardware/locomo.h>
 19 
 20 static void locomoled_brightness_set(struct led_classdev *led_cdev,
 21                                 enum led_brightness value, int offset)
 22 {
 23         struct locomo_dev *locomo_dev = LOCOMO_DEV(led_cdev->class_dev->dev);
 24         unsigned long flags;
 25 
 26         local_irq_save(flags);
 27         if (value)
 28                 locomo_writel(LOCOMO_LPT_TOFH, locomo_dev->mapbase + offset);
 29         else
 30                 locomo_writel(LOCOMO_LPT_TOFL, locomo_dev->mapbase + offset);
 31         local_irq_restore(flags);
 32 }
 33 
 34 static void locomoled_brightness_set0(struct led_classdev *led_cdev,
 35                                 enum led_brightness value)
 36 {
 37         locomoled_brightness_set(led_cdev, value, LOCOMO_LPT0);
 38 }
 39 
 40 static void locomoled_brightness_set1(struct led_classdev *led_cdev,
 41                                 enum led_brightness value)
 42 {
 43         locomoled_brightness_set(led_cdev, value, LOCOMO_LPT1);
 44 }
 45 
 46 static struct led_classdev locomo_led0 = {
 47         .name                   = "locomo:amber",
 48         .brightness_set         = locomoled_brightness_set0,
 49 };
 50 
 51 static struct led_classdev locomo_led1 = {
 52         .name                   = "locomo:green",
 53         .brightness_set         = locomoled_brightness_set1,
 54 };
 55 
 56 static int locomoled_probe(struct locomo_dev *ldev)
 57 {
 58         int ret;
 59 
 60         ret = led_classdev_register(&ldev->dev, &locomo_led0);
 61         if (ret < 0)
 62                 return ret;
 63 
 64         ret = led_classdev_register(&ldev->dev, &locomo_led1);
 65         if (ret < 0)
 66                 led_classdev_unregister(&locomo_led0);
 67 
 68         return ret;
 69 }
 70 
 71 static int locomoled_remove(struct locomo_dev *dev)
 72 {
 73         led_classdev_unregister(&locomo_led0);
 74         led_classdev_unregister(&locomo_led1);
 75         return 0;
 76 }
 77 
 78 static struct locomo_driver locomoled_driver = {
 79         .drv = {
 80                 .name = "locomoled"
 81         },
 82         .devid  = LOCOMO_DEVID_LED,
 83         .probe  = locomoled_probe,
 84         .remove = locomoled_remove,
 85 };
 86 
 87 static int __init locomoled_init(void)
 88 {
 89         return locomo_driver_register(&locomoled_driver);
 90 }
 91 module_init(locomoled_init);
 92 
 93 MODULE_AUTHOR("John Lenz <lenz@cs.wisc.edu>");
 94 MODULE_DESCRIPTION("Locomo LED driver");
 95 MODULE_LICENSE("GPL");
 96 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.